进击的奶牛
题意
输出相邻两头牛最大的最近距离
思路
运用二分的方法来查找最大的距离,由题意可知,我们最后输出的结果是区间的右边,即r
实现步骤
- 先用check函数来对距离判断,如果两头牛之间的距离大于了我们给定的距离,那么我们把d存在数组里面
- 在主函数中输入所需值,定义左右两边的边界值,套用二分模板来进行计算(模板二:从右边开始找答案)
- 最后输出结果即可,但要注意我们输出的是最大距离,不要输出 l ,应该输出 r
代码
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=1e9+10;
int n,k,a[N],ans;
bool check(int x)
{
int d=a[1],sum=1;
for(int i=2;i<=n;i++)
{
if(a[i]-d>=x)
{
sum++;
d=a[i];
}
}
return sum>=k;
}
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
int l=1,r=N;
sort(a+1,a+n+1);
while(l<=r)
{
int m=l+r>>1;
if(check(m))
{
ans=m;
l=m+1;
}
else
{
r=m-1;
}
}
cout<<ans;
return 0;
}
总结
二分