您的位置:首页 > 其它

poj 2456 最大化最小值(二分+贪心)

2016-08-04 14:34 316 查看
点击打开链接

#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: