用时:10min
题目大意:
有(n)个坐标在(x)轴上的牛舍,(m)个牛,求两个牛之间最小距离的最大值。
二分答案。
将牛舍排序后,二分这个最大值(mid),如果两个牛舍间的距离(ge mid)则放一个牛((sum+1)),判断(sum ge m)即可。
code
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<queue>
#include<algorithm>
#define MogeKo qwq
using namespace std;
const int maxn = 1e5+10;
int n,m,l,r,mid,ans,a[maxn];
bool check(int x){
int last = 1;
int sum = 1;
for(int i = 2;i <= n;i++){
if(a[i] - a[last] < x) continue;
last = i;
sum++;
}
return sum >= m;
}
int main(){
scanf("%d%d",&n,&m);
for(int i = 1;i <= n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
l = 0,r = a[n];
while(l <= r){
int mid = (l+r)/2;
if(check(mid)){
ans = mid;
l = mid+1;
}
else r = mid-1;
}
printf("%d",ans);
return 0;
}