码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 2456 Aggressive cows---二分搜索法

时间:2017-07-08 17:46:32      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:之间   ace   gre   ios   logs   for   nbsp   ...   --   

 

///3.最大化最小值
/**
    POJ 2456 Aggressive cows
    Q:一排牛舍有N (2 <= N <= 100,000) 个,位置为x1,...,xN (0 <= xi <= 1,000,000,000)
    为使牛之间不受到伤害,需最大化他们之间的距离,求最大化最近两头牛之间的距离
    共M只牛
    A:
    条件C(x):可以使得最近两头牛之间的距离不小于d->求满足条件的最大d->如何高效的判断C(x)

*/
#include"iostream"
#include "cstdio"
#include "algorithm"
using namespace std;
#define MAX 100010
#define INF 0x3f3f3f3f
int N,M,x[MAX];
bool C(int d)
{
    int last=0;///首位定放牛;看能否找到M-1个牛舍 能够满足之间距离>=d?
    for(int i=1;i<M;i++)
    {
        int crt=last+1;///cnt表示当前牛舍位置下标
        while(crt<N&&x[crt]-x[last]<d)///last表示上一被占牛位舍位置下标,
        {
            crt++;
        }
        if(crt==N)return false;///牛舍不能满足
        last=crt;
    }
    return true;
}
void solve()
{
    int lb=0,ub=INF;
    int mid;
    while(ub-lb>1)
    {
        mid=(lb+ub)/2;
        if(C(mid))///放得下,距离还可以再大点
            lb=mid;
        else    ///放不下了,mid已经不能满足
            ub=mid;
    }
    printf("%d\n",lb);
}

int main()
{
    while(~scanf("%d%d",&N,&M))
    {
        for(int i=0;i<N;i++)
        {
            scanf("%d",&x[i]);
        }
        sort(x,x+N);
        solve();
    }
}

 

POJ 2456 Aggressive cows---二分搜索法

标签:之间   ace   gre   ios   logs   for   nbsp   ...   --   

原文地址:http://www.cnblogs.com/kimsimple/p/7137305.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!