经典二分
#include<bits/stdc++.h>
using namespace std;
int a[100005]={0};
int n,m;
bool check(int x)//判断距离为x时能否放下m头牛
{
int cow=1,temp=a[0];
for(int i=1;i<n;i++)
{
if(a[i]-temp>=x)
{
cow++;
temp=a[i];
}
}
if(cow>=m) return true;
else return false;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
sort(a,a+n);
int mid,l=0,ans,r=a[n-1]-a[0];//l最小,r最大
while(l<=r)
{
mid=(l+r)/2;
if(check(mid)==true)
{
ans=mid;//记录答案
l=mid+1;//增大下限
}
else
{
r=mid-1;//减小上限
}
}
printf("%d\n",ans);
return 0;
}