http://poj.org/problem?id=2456
题意:在n个位置放置c只牛,使得每只牛之间的间距最大,求满足条件的最小间距?
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int NM=100005;
int a[NM],n,c;
//判断在整个长槽内,间距>=x,是否可以放下c只牛
bool getsec(int x)
{
int sec,i,ans;
sec=a[0];ans=0;
for(i=1;i<n;i++)
{
if(a[i]-sec>=x){
ans++;
sec=a[i];
}
if(ans>=c-1) return true;
}
return false;
}
int main()
{
int lf,rg,mid,i;
while(~scanf("%d%d",&n,&c))
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
lf=0,rg=a[n-1]-a[0]; //lf=0
while(lf<=rg)
{
mid=(lf+rg)>>1;
if(getsec(mid)) lf=mid+1;
else rg=mid-1;
}
printf("%d\n",lf-1); //不可以输出:mid
}
return 0;
}
http://poj.org/problem?id=2456