#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
long long data[999999],last,next,mid,l,r;
int c,n;
bool judge(int x)
{ last=0;
for(int i=0;i<c;i++)
{ next=last+1;
int cnt=0;
while(data[next]-data[last]<x&&next<n)
{
next++;
}
if(next==n) return false;
last=next;
}
return true;
}
int main()
{
scanf("%d%d",&n,&c);
c=c-1;
for(int i=0;i<n;i++)
scanf("%d",&data[i]);
sort(data,data+n);
l=data[0];
r=data[n-1];
while(r-l>1)
{
mid=(l+r)/2;
if(judge(mid)) l=mid;
else r=mid;
}
printf("%d\n",l);
return 0;
}
//主要思想:judge(d)为奶牛相距为d的情况,然后在用二分法求出距离最小的情况。相当于二分法求judge(d)的最小值。
二分法求最大距离的最小值
最新推荐文章于 2021-10-04 22:02:57 发布