POJ 2456 (二分查找)

来源:互联网 发布:犀牛软件建模教程 编辑:程序博客网 时间:2024/06/03 17:03

题意:
将m头牛放到n个牛棚中,如何使它们的间距最大。每个牛棚有对应的位置。

思路:二分法总能够暴力查找出答案,注意点就是如何check,这个需要一定的仔细。

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int INF = 0x3f3f3f3f;typedef long long LL;LL a[100005];int n,c;int check(int d){    int last = 0;    for(int i = 1;i < c; i++) {        int cnt = last + 1;        while(cnt < n && a[cnt] - a[last] < d)            cnt++;        if(cnt == n)            return false;        last = cnt;    }    return true;}int main(){    //freopen("in.txt","r",stdin);    scanf("%d%d",&n,&c);    for(int i = 0;i < n; i++)        scanf("%lld",&a[i]);    sort(a,a+n);    int l = 0,r = INF;    while(r - l > 1) {        int mid = (l + r)/2;        if(check(mid))            l = mid;        else            r = mid;    }    printf("%d\n",l);    return 0;}
0 0