zoukankan      html  css  js  c++  java
  • poj3258

    题目翻译
    二分法(其实两个单词的意思分别是河,跳格子游戏,至于为啥翻译成二分法- -只能说英语博大精深啊)
    奶牛每年举办一场有特色的跳格子游戏(很明显题目翻译错误)涉及到在河里从一块岩石跳到另一块岩石上,这个令人兴奋的游戏发生在一条又长又直的河中,从河的开始到结尾有一些石头,开始有一个L表示河的长度(1 ≤ L ≤ 1,000,000,000), 然后河中间有N快石头0 ≤ N ≤ 50,000, 每一块石头都位于Di(距离起点)(0 < Di < L).。
    参加这个游戏,每个带牛都要从起点到终点,只能从一块岩石跳到另一块岩石,一些敏捷的奶牛可以蹦到最后,结束不是在河里。

    农民约翰最自己的牛很自豪并且每年都观看这个节目,但是随着时间的流逝,他厌倦观看其他农民的牛缓慢的从一块岩石到下一块岩石的跳跃,所以他打算删除几块石头以增大距离,他知道他不能删除开始和结束的岩石但是他认为他有足够的物资移走M快石头, (0 ≤ M ≤ N).

    看了数据后明白什么意思了,就是一直最小距离的石头,最后找到最小的石头间距。

    分析:查找最短的距离应该不难不过想要知道删除那块石头貌似就不太容易了,想到优先删除左右距离比较小的,不过数据貌似不弱啊,暴力肯定是错的死死的,好吧应该按照题目的方法来一次吧,试试二分^ ^


    有点不敢相信啊,竟然A掉了,我去,不太敢相信



    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    #define maxn 50005
    int Min, a[maxn], b[maxn];
    int EF(int a[], int n, int len, int M)
    {
        int i, k=0;
        for(i=1; i<n; i++)
        {
            int dis = a[i] - a[k];
            if(dis < len)
            {
                if(M)M--;
                else return 0;
            }
            else
            {
                if(Min > dis)
                    Min = dis;
                k = i;
            }
        }
        return 1;
    }
    int main()
    {
        int L, N, M;
        while(scanf("%d%d%d", &L, &N, &M) != EOF)
        {
            int i, j, A=0;
            for(i=0; i<N; i++)
                scanf("%d", &a[i]);
            a[N++] = 0, a[N++] = L;
            sort(a, a+N);
            int l=0, r=L, Mid;
            while(l<=r)
            {
                Mid = (l+r)/2;
                Min = L+1;
                int ans=EF(a, N, Mid, M);
                if(ans)
                {
                    l=Min+1;
                    if(A < Min)//保存最大的合法值
                        A = Min;
                }
                else
                    r=Mid-1;
            }
            printf("%d ", A);
        }
        return 0;
    }
    /*
    25 5 5
    2
    14
    11
    21
    17
    3 2 0
    1
    2
    a

    */ 

  • 相关阅读:
    【分享】使用 AXI performance monitors (APM)测试MPSoC DDR访问带宽
    测试MPSoC GEM 的1588功能
    使用ffmpeg把mp4转换为NV12文件
    强制开放MPSoC的PS-PL接口
    Java操作数据库指南(之一)
    大数据中台技术架构
    数据仓库到数据中台的演进
    Spark SQL入门到实战之(8)数据倾斜优化
    项目实战从0到1之hive(47)大数据项目之电商数仓(用户行为数据)(十五)
    项目实战从0到1之hive(46)大数据项目之电商数仓(用户行为数据)(十四)
  • 原文地址:https://www.cnblogs.com/liuxin13/p/4384037.html
Copyright © 2011-2022 走看看