1. 程式人生 > 實用技巧 >POJ2456 Aggressive cows

POJ2456 Aggressive cows

gate

用時: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;
}