• 【POJ 3258】 River Hopscotch (二分)


    【POJ 3258】 River Hopscotch

    一窝牛要过河 河宽l 河中有n个很多石块 每一个相应与牛所在的岸边有个距离 如今想要去掉m个石块后最小距离最大 问怎么去

    二分最小值最大化


    代码例如以下:

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    
    using namespace std;
    
    int p[50002];
    int n,m;
    
    bool can(int x)
    {
        int i,j,cnt = m;
    
        for(i = 0,j = 1; i <= n; i = j, ++j)//枚举石块
        {
            if(p[n+1]-p[i] < x) return false;//石块距离对岸<x 肯定不行
            while(p[j]-p[i] < x)//找出第一块保证最小值>=x的石块
            {
                if(!cnt) return false;//不能再去石块时 不可行
                ++j;
                cnt--;
            }
        }
        return true;
    }
    
    int main()
    {
        int mid,l,r,i,ans;
        while(~scanf("%d %d %d",&r,&n,&m))
        {
            p[0] = 0;
            for(i = 1; i <= n; ++i)
                scanf("%d",&p[i]);
    
            l = p[n+1] = r;//初始下界
            sort(p,p+n+2);
            for(i = 1; i <= n+1; ++i)
                l = min(l,p[i]-p[i-1]);//找最低下界
    
            while(l <= r)
            {
                mid = (l+r)>>1;
                if(can(mid))
                {
                    ans = mid;
                    l = mid+1;
                }
                else r = mid-1;
            }
    
            printf("%d
    ",ans);
        }
        return 0;
    }
    


  • 相关阅读:
    blocksit
    getdata
    ASP.net 探针
    301重定向
    webapi
    Unity NGUI UIPanel下对粒子的剪裁
    unity3d 之本地推送
    c#之时间戳与DateTime的相互转换
    c#之从服务器下载压缩包,并解压
    Unity3d 开发之 ulua 坑的总结
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6992912.html
Copyright © 2020-2023  润新知