每日一題(01.13)
阿新 • • 發佈:2019-01-13
Description:
小明有N個牛棚和C頭牛。這些牛都很暴躁,一旦距離很近就會互相毆打。現在給你這N個牛棚的位置,請你找到一個安放牛的方式使得兩頭牛之間的最小距離最大。
Input:
第一行兩個數N和C(2<=N<=100000,2<=C<=N),第二行N個數,分別表示N個牛棚的座標。
Output:
兩頭牛之間最小距離的最大值。
Sample Input:
5 3
1 2 8 4 9
Sample Output:
3
Reference Code:
#include <cstdio>
#include <algorithm>
using namespace std;
int x[100000+10];
int n,c;
int check(int d){
int pre=0,count=1;
for (int i=0;i<n;i++){
if (x[i]-x[pre]>=d){
pre=i;
count++;
}
}
if (count<c) return 0;
else return 1;
}
int bsrch(int low,int high){
int mid;
while (low<high){
mid=(low+high)/2;
if (check(mid) ) low=mid+1;
else high=mid;
}
return high-1;
}
int main(){
scanf("%d%d",&n,&c);
for (int i=0;i<n;i++) scanf("%d",&x[i]);
sort(x,x+n);
int ans=bsrch(1,x[n-1]-x[0]);
printf("%d\n",ans);
}