题目意思:农民约翰有用C只牛,然后他有N个隔间,每个隔间都有自己的坐标位置(一维的)pos,如何安排把牛安排进隔间才能使,所有牛之间距离的最小值最大,我们不需要求这个分配方案,我们只需要求这个最小距离的最大值,很裸的最小值最大化。
输入
N=5
M=3
x={1, 2, 8, 4, 9}
输出
3(在位置1,4,9的牛舍中放入3头牛)
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX_N = 100000+10,INF=0x3f3f3f3f;
int N,M,x[MAX_N];
bool C(int d){
int last=0;
for(int i=1;i<M;i++){
int crt=last+1;
while(crt<N&&x[crt]-x[last]<=d){
crt++;
}
if(crt==N) return false;
last=crt;
}
return true;
}
int main(){
//freopen("1.txt","r",stdin);
scanf("%d%d",&N,&M);
for(int i=0;i<N;i++){
scanf("%d",&x[i]);
}
sort(x,x+N);
int l=0,r=INF;
while(l<r){
int mid=(l+r)/2;
if(C(mid)==false) r=mid;
else l=mid+1;
}
printf("%d",l);
return 0;
}