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

    题目背景

    一年一度的“跳石头”比赛又要开始了!

    题目描述

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

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

    输入输出格式

    输入格式:

    输入文件名为 stone.in。

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

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

    输出格式:

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

    输入输出样例

    输入样例#1:
    25 5 2 
    2
    11
    14
    17 
    21
    输出样例#1:
    4

    说明

    输入输出样例 1 说明:将与起点距离为 2 和 14 的两个岩石移走后,最短的跳跃距离为 4(从与起点距离 17 的岩石跳到距离 21 的岩石,或者从距离 21 的岩石跳到终点)。

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

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

    本题是一个二分答案的裸题(反正我同桌是这么说的)。

    我们很难用较低的时间复杂度实现题目的的那个鬼,但是我们可以很轻松的实现在O(n)的时间复杂度内找到如果要保证最小距离大于某个值,二分枚举,直到精度足够。

    二分答案的复杂度是log的。

    总时间复杂度应该是O(nlogl)吧。

    代码实现:

     1 #include<cstdio>
     2 int l,n,m,r,a,b,k;
     3 int st[60000];
     4 int main(){
     5     scanf("%d%d%d",&l,&n,&m);
     6     for(int i=1;i<=n;i++) scanf("%d",&st[i]);
     7     st[n+1]=l;r=l+1;l=0;
     8     while(l+1<r){
     9         int mid=(l+r)/2;
    10         k=a=0;//初始化。 
    11         while(a<=n){//模拟跳石头的过程,以求出在目前最短长度下需要移除的石头数。 
    12             b=a+1;
    13             while(st[b]-st[a]<mid&&b<n+2) b++;
    14             k+=b-a-1;a=b;
    15         if(k>m) r=mid;//如果移除的石头过多,搜索前半部分。 
    16         else l=mid;//否则,搜索后半部分。 
    17     }
    18     }
    19     printf("%d",l);
    20     return 0;
    21 }

     。。。

    题目来源:洛谷

  • 相关阅读:
    HDU 4539郑厂长系列故事――排兵布阵(状压DP)
    HDU 2196Computer(树形DP)
    HDU 4284Travel(状压DP)
    HDU 1520Anniversary party(树型DP)
    HDU 3920Clear All of Them I(状压DP)
    HDU 3853LOOPS(简单概率DP)
    UVA 11983 Weird Advertisement(线段树求矩形并的面积)
    POJ 2886Who Gets the Most Candies?(线段树)
    POJ 2828Buy Tickets
    HDU 1394Minimum Inversion Number(线段树)
  • 原文地址:https://www.cnblogs.com/J-william/p/6361499.html
Copyright © 2011-2022 走看看