Aggressive cows
题目链接:
http://poj.org/problem?id=2456
解题思路:
- 对牛舍的位置x进行排序
- 把第一头牛放入x0的牛舍
- 如果把i头牛放入了xj的话,第i+1头牛就要放入满足xj+d<=xk的最小的xk中
AC代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#define INF 0xfffffff
using namespace std;
int n,m;
int a[100005];
bool check(int d){
int last = 0;
for(int i = 1; i < m; i++){
int cur = last + 1;
while(cur < n && a[cur] - a[last] < d)
cur++;
if(cur == n)
return false;
last = cur;
}
return true;
}
int main(){
while(~scanf("%d%d",&n,&m)){
for(int i = 0; i < n; i++)
scanf("%d",&a[i]);
sort(a,a+n);
int l = 0, r = INF;
while((r-l) > 1){
int mid = (l+r)>>1;
if(check(mid))
l = mid;
else
r = mid;
}
printf("%d\n",l);
}
return 0;
}