首页 > 其他 > 详细

POJ 2456 Aggressive cows(二分)

时间:2015-02-08 09:03:02      阅读:209      评论:0      收藏:0      [点我收藏+]

题目链接:http://poj.org/problem?id=2456

题意:有一排n个牛舍,坐标分别为xi,有m头牛,希望尽可能把他们之间分开,求他们之间最近的两头牛之间的距离最大可以拉到多少。这是二分中最大化最小值的题目,英文的题目又最大又最小有的人不易理解。

思路:显然两头最近的牛的距离太大将没有一种方式安置在牛舍中,两头最近的牛距离越小就越能放置在牛舍中,所以用把答案二分出来,每个mid要模拟放置暴力下可不可以放得下。

//532K	188MS
#include<cstdio>
#include<iostream>
#include<algorithm>
#define inf 1000001000
using namespace std;
int n,m;
int a[100100];
bool ok(int x)
{
    int cnt=1;
    int tmp=a[1];
    while(cnt!=m){
        tmp+=x;
        int *p=lower_bound(a+1,a+1+n,tmp); //这里不需要用,只不过练习下这个函数。
        if(p==a+1+n) return false;
        tmp=*p;
        cnt++;
    }
    return true;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    sort(a+1,a+n+1);
    int lb=0,ub=inf;
    while(ub-lb>1){
        int mid=(lb+ub)/2;
        if(ok(mid)){
            lb=mid;
        }
        else ub=mid;
    }
    printf("%d\n",lb);
    return 0;
}


POJ 2456 Aggressive cows(二分)

原文:http://blog.csdn.net/kalilili/article/details/43634953

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!