zoukankan      html  css  js  c++  java
  • POJ 2456 Aggressive cows---二分搜索法

    ///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
    ",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();
        }
    }
  • 相关阅读:
    poj3126--Prime Path(广搜)
    iOS中 imageNamed方法 非常多图片占用大量内存问题
    容器+AOP实现动态部署(四)
    SpringBoot整合redis哨兵主从服务
    LINUX安装REDIS集群
    软件安装
    如何优雅地用Redis实现分布式锁
    Redis面试总结
    OAuth2.0 知多少(好)
    一张图搞定OAuth2.0
  • 原文地址:https://www.cnblogs.com/kimsimple/p/7137305.html
Copyright © 2011-2022 走看看