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;
}