题目链接:https://vjudge.net/contest/350953#problem/D
题目大意:有 个地方,有 头牛,一头牛只能分配一个地方,问如何分配使得所有牛之间的距离最小的那个值最 大,是多少?
思路:先对隔间进行排序,然后找r和l
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1e5+10;
int a[N];
int n,m;
int judge(int x)
{
int num = 1;
int pos=a[1];
for(int i = 2;i<=n;i++)
{
if(a[i]-pos>=x)
{
num++;
pos=a[i];
}
}
return num>=m;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i = 1;i<=n;i ++)
{
scanf("%d",&a[i]);
}
sort(a+1,a+1+n);
int l=0,r=1e9;
int ans;
while(l<=r)
{
int mid=(l+r)/2;
if(judge(mid))
{
l=mid+1;
ans=mid;
}
else
{
r=mid-1;
}
}
printf("%d\n",ans);
return 0;
}