#include <iostream>
#include <algorithm>
using namespace std;
const int M = 100100;
long n,c;
long a[M];
bool Check(long x)
{
int last=0; // 贪心 为了a[num]-a[last]>=x &&num<=n 成立 a[last]要尽量的小
for(int i=2;i<=c;i++)//贪心:第一头COW放在a[0]中
{
int num=last+1;
while(num<n&&a[num]-a[last]<x) // 贪心:找到第一个距离上一个stall距离大于等于d的Stall
{
num++;
}
if(num==n) return 0;
last=num;
}
return 1;
}
int main()
{
cin>>n>>c;
long inf=1<<20;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
long l=0,r=inf;//初始化解的范围
long res;
while(r>=l)
{
long mid=(l+r)/2;
if(Check(mid))
{
l=mid+1;
res=mid;
}
else
{
r=mid-1;
}
}
cout<<res<<endl;
return 0;
}
poj 2456 最大化最小值(二分+贪心)
最新推荐文章于 2021-02-10 11:42:51 发布