标签:
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