题目:
题目描述
农夫 John 建造了一座很长的畜栏,它包括N(2≤N≤100,000)N个隔间,这些小隔间依次编号为x1,...,xN(0≤xi≤1,000,000,000). 但是,John的C(2≤C≤N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里或隔间距离较近,他们就容易发生争斗。为了不让牛互相伤害。John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢?
输入
第一行:空格分隔的两个整数N和C;
第二行: 第N+1行:i+1行指出了xi的位置,表示畜栏隔间位置。
输出
一个整数,最大的最小值。
样例输入 Copy
5 3
1 2 8 4 9
样例输出 Copy
3
提示
把牛放在1,4,8这样最小距离是3。
我的10分代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,ans,sum,ans2,a[100005],r,l=1e9;
bool yhg(int x){
int t=0,ztl=1;
for(int i=1;i<=n;i+=ztl){
if(a[i]+x<=a[i+ztl]){
t++;
ztl=1;
}
else ztl++;
}
if(t>=m-1) return 1;
else return 0;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) scanf("%d",a+i);
sort(a+1,a+n+1);
for(int i=1;i<n;i++){
r=max(r,a[i+1]-a[i]);
l=min(l,a[i+1]-a[i]);
}
while(l<=r){
int mid=(l+r)/2;
if(yhg(mid)){
ans=mid;
l=mid+1;
}
else r=mid-1;
}
cout<<ans;
return 0;
}
求大佬帮助,谢谢!