题意:
将m头牛放到n个牛棚中,如何使它们的间距最大。每个牛棚有对应的位置。
思路:二分法总能够暴力查找出答案,注意点就是如何check,这个需要一定的仔细。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
typedef long long LL;
LL a[100005];
int n,c;
int check(int d)
{
int last = 0;
for(int i = 1;i < c; i++) {
int cnt = last + 1;
while(cnt < n && a[cnt] - a[last] < d)
cnt++;
if(cnt == n)
return false;
last = cnt;
}
return true;
}
int main()
{
//freopen("in.txt","r",stdin);
scanf("%d%d",&n,&c);
for(int i = 0;i < n; i++)
scanf("%lld",&a[i]);
sort(a,a+n);
int l = 0,r = INF;
while(r - l > 1) {
int mid = (l + r)/2;
if(check(mid))
l = mid;
else
r = mid;
}
printf("%d\n",l);
return 0;
}