题目链接
题解:
二分题,求最大值得最小可能,就二分两头牛之间的距离,另L=1,R=所给距离的最大差值。然后需要判断所给的隔间的位置,之间的距离差值满足>=mid的个数是否>=牛的个数。
代码:
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
const int MAX_N=1e5+7;
int a[MAX_N],n,c;
int f(int x)
{
int t=a[0],sum=1;
for(int i=1;i<n;i++){
if(a[i]-t>=x){ //两个隔间距离的差值大于等于x(mid)
t=a[i];
sum++;
}
}
return sum;
}
int bs()
{
int l=1,r=a[n-1]-a[0];
while(l<=r){
int mid=l+(r-l)/2;
if(c<=f(mid)) //当两头牛间隔为mid时,所有隔间中距离为mid的个数大于等于牛的个数
l=mid+1;
else
r=mid-1;
}
return r;
}
int main()
{
while(scanf("%d%d",&n,&c)!=EOF){
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
int L=0;
L=bs();
printf("%d\n",L);
}
return 0;
}