POJ2456 Aggressive cows
阿新 • • 發佈:2020-07-09
用時: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; }