进击的奶牛
题目链接
题意
输出相邻两头牛最大的最近距离
思路
运用二分的方法来查找最大的距离,由题意可知,我们最后输出的结果是区间的右边,即r
实现步骤
- 先用check函数来对距离判断,如果两头牛之间的距离大于了我们给定的距离,那么我们把d存在数组里面
- 在主函数中输入所需值,定义左右两边的边界值,套用二分模板来进行计算(模板二:从右边开始找答案)
- 最后输出结果即可,但要注意我们输出的是最大距离,不要输出 l ,应该输出 r
代码
#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;
}
总结
二分