POJ 2456

来源:互联网 发布:js点击空白处关闭弹窗 编辑:程序博客网 时间:2024/05/06 05:34

http://poj.org/problem?id=2456

二分枚举 答案

 

#include<string.h>#include<stdio.h>#include<algorithm>using namespace std;int a[100010];bool search(int n, int c, int d){int i, num, index;num = 1;index = 0;for(i=1; i<n; i++){if(a[i] - a[index] >= d){num ++;index = i;}if(n - 1 - i < c - num)return false;if(num == c)return true;}}int binarySearch(int maxdis, int n, int c){int l, r, mid;l = 0; r = maxdis; while(l <= r) { mid = l + (r - l) / 2; if( search(n, c, mid) == true ) l = mid + 1;else r = mid - 1; } return r;}int main(){int n, c, i;while(scanf("%d%d", &n, &c) != EOF){for(i=0; i<n; i++)scanf("%d", &a[i]);sort(a, a+n);int maxdis = a[n-1] - a[0];printf("%d\n", binarySearch(maxdis, n, c));}return 0;}


 

原创粉丝点击