POJ 2456 Aggressive cows(二分查找最大化最小值)

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

【中文题意】有n间牛舍,第i间牛舍的位置在xi处。有m头牛,他们对牛舍都不满意,经常互相攻击。为了防止牛之间互相攻击,因此把每头牛放在距离其他牛尽量远的位置。也就是要最大化最近的两头牛之间的距离。
【思路分析】
1.对牛舍的位置进行排序。
2.把第一头牛放入x0牛舍。
3.二分距离,找到距离的最大值。
【AC代码】

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define N 100005

int n,m,x[N];

bool C(int d)
{
    int last=0;
    for(int i=1; iint crt=last+1;
        while(crtif(crt==n)return false;
        last=crt;
    }
    return true;
}

void solve()
{
    sort(x,x+n);
    int lb=0,ub=1e9+100;
    while(ub-lb>1)
    {
        int mid=(ub+lb)/2;
        if(C(mid))lb=mid;
        else ub=mid;
    }
    printf("%d\n",lb);
}

int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        for(int i=0;iscanf("%d",&x[i]);
        }
        solve();
    }
    return 0;
}

你可能感兴趣的:(POJ,二分查找,经典题目,拓扑排序)