zoukankan      html  css  js  c++  java
  • 跳石头

    【题目描述】

    比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有N块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。

    为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走M块岩石(不能移走起点和终点的岩石)。

    【输入描述

    输入文件第一行包含三个整数L,N,M,分别表示起点到终点的距离,起点和终点之间的岩石数,以及组委会至多移走的岩石数。

    接下来N行,每行一个整数,第i行的整数Di(0 < Di < L)表示第i块岩石与起点的距离。这些岩石按与起点距离从小到大的顺序给出,且不会有两个岩石出现在同一个位置。

    【输出描述】

    输出文件只包含一个整数,即最短跳跃距离的最大值。

    【样例输入】

    25 5 2

    2

    11

    14

    17

    21

    【样例输出】

    4

    【数据范围及提示】

    对于20%的数据,0≤M≤N≤10。 对于50%的数据,0≤M≤N≤100。

    对于50%的数据,0≤M≤N≤100。

    对于100%的数据,0≤M≤N≤50,000,1≤L≤1,000,000,000。

    源代码:
    
    #include<cstdio>
    int m,n,right,left=1,i[50001];
    int main() //二分答案。
    {
        scanf("%d%d%d",&right,&n,&m);
        for (int a=1;a<=n;a++)
          scanf("%d",&i[a]);
        i[0]=0; //起点。
        i[++n]=right; //终点。
        while (left<=right) //不断地查找,最终会找出最佳方案。
        {
            int t=(left+right)>>1,k(0),num(0);
            bool s(0);
            for (int a=1;a<=n;a++) //距离的终点。
              if (i[a]-i[k]<t) //变量t表示最短跳跃距离,若有两块石头之间的距离比t更小,则进行搬离,从而扩大距离。
              {
                num++;
                if (num>m) //若搬动的石头数量大于给定数量,此方案便不成立。
                {
                    s=true;
                    break;
                }
              }
              else
                k=a; //距离的起点。
            if (!s) //小于给定数量,则说明t取值取小了。此if()还包含等于的可能,即使等于,也可能有更佳方案,继续查找,即使此方案是最佳方案,在继续查找的过程中,一定还会不断地逼近此方案,故不必担心。
              left=t+1;
            else //大于给定数量,则说明t取值取大了。
              right=t-1;
        }
        printf("%d",left-1); //查找到最后,最佳方案为(left-1),即right。
        return 0;
    }
  • 相关阅读:
    1、编写一个简单的C++程序
    96. Unique Binary Search Trees
    python 操作redis
    json.loads的一个很有意思的现象
    No changes detected
    leetcode 127 wordladder
    django uwsgi websocket踩坑
    you need to build uWSGI with SSL support to use the websocket handshake api function !!!
    pyinstaller 出现str error
    数据库的读现象
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5506120.html
Copyright © 2011-2022 走看看