标签:
Input
Output
Sample Input
5 3 1 2 8 4 9
Sample Output
3
Hint
/*
二分经典题
大意 n头牛让你放m头要求这些牛之间的最小距离在所有情况里面的最大值
判断的时候移动下标
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int inf = 0x3f3f3f3f;
const int MAX = 1e6 + 10;
int n, m;
int a[MAX];
bool check(int x)
{
int last = 1;
int cur;
for(int i = 1; i <= m - 1; i++){
cur = last + 1;
while(cur <= n && a[cur] - a[last] <= x)
cur++;
last = cur;
if(cur == n + 1) return false;
}
return true;
}
int main()
{
while(~scanf("%d%d", &n, &m)){
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
sort(a + 1, a + n + 1);
int l = 0, r = inf;
while(l <= r){
int mid = (l + r) >> 1;
if(check(mid)){
l = mid + 1;
}
else r = mid - 1;
}
printf("%d\n", l);
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/zero-begin/p/4694150.html