题目链接:https://vjudge.net/problem/POJ-2456
题目大意:让两头牛之间的距离尽量的大
题目思路:最大化最小值或者最小化最大值问题。(当我取这个值时能不能满足这个条件,二分的复杂度极低,接近常数)
学到的东西:当你想到要从1-n取出一个数据满足一个关系的时候,要想到二分法!!!!!
代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const int maxn = 1e5+10;
const int inf = 1e9+7;
int x[maxn];
int n,c;
bool judge(int d)
{
int num=1;
int tmp=x[0];
for(int i=1;i<n;i++){
if(x[i]-tmp>=d){
num++;
tmp=x[i];
}
}
if(num>=c) return true;
return false;
}
int main()
{
while(~scanf("%d%d",&n,&c)){
for(int i=0;i<n;i++) scanf("%d",&x[i]);
sort(x,x+n);
int mid,l=0,r=inf;
int ans;
while(l<=r){
mid=(l+r)/2;
if(judge(mid)){
ans=mid;
l=mid+1;
}
else
r=mid-1;
}
printf("%d\n",ans);
}
}