POJ2456 Aggressive cows

gate

用时:10min

题目大意:
\(n\)个坐标在\(x\)轴上的牛舍,\(m\)个牛,求两个牛之间最小距离的最大值。

二分答案。
将牛舍排序后,二分这个最大值\(mid\),如果两个牛舍间的距离\(\ge mid\)则放一个牛\((sum+1)\),判断\(sum \ge m\)即可。

code

#include
#include
#include
#include
#include
#include
#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;
}

你可能感兴趣的:(POJ2456 Aggressive cows)