題目:
農夫約翰搭了一間有 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;
}