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;
}
原文地址:https://www.cnblogs.com/mogeko/p/13270391.html