题目:
农夫约翰搭了一间有 N 间牛舍的小屋。牛舍排在一条线上,第 i 号牛舍在 Xi 的位置。但是他的 M 头牛对小屋很不高兴,因此经常互相攻击。约翰为了防止牛之间互相伤害,因此决定把每头牛都放在离其他牛尽可能远的牛舍。也就是要最大化最近的两头牛之间的距离。
输入:
输入第一行: 两个正整数 N 和 M 。
接下来 N 行,每行一个整数 Xi 。
输出:
一个整数,即最近的两头牛之间的最大距离。
EG:
in:
5 3
1
2
8
4
9
out:
3
数据范围:
2≤ N ≤ 100000
2≤ M ≤ N
0≤ Xi ≤ 109
样例说明:
在位置 1,4,9 的牛舍中放入三头牛,得到最长距离 3 。
代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cctype>
#include<ctime>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;
int n,m,x[10005];
inline bool jiancha(int a)
{
int cow=1,rr=x[1]+a;
for(int i=2;i<=n;++i)
{
if(rr>x[i]) continue;
++cow;
rr=x[i]+a;
}
return cow>=m;
}
int main()
{
int l=0;
cin>>n>>m;
for(int i=1;i<=n;++i)
cin>>x[i];
sort(x+1,x+n+1);
int r=x[n]-x[1];
while(r>=l)
{
int mid=(l+r)/2;
if(jiancha(mid))
l=mid+1;
else
r=mid-1;
}
cout<<r;
return 0;
}