传送门
题解:
把数组排一下序,然后枚举当前的距离与mid的关系,当大于等于mid时,牛的数量++,然后二分枚举答案即可
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int n,k;
int a[maxn];
bool check(int mid)
{
int ans=1,st=a[0];
for(int i=1;i<n;i++)
{
if(a[i]-st>=mid)
{
st=a[i];
ans++;
}
}
if(ans>=k)
return true;
return false;
}
int main()
{
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
int l=1,r=1e9,ans;
while(r>=l)
{
int mid=l+r>>1;
if(check(mid))
{
ans=mid;
l=mid+1;
}
else
{
r=mid-1;
}
}
printf("%d\n",ans);
}