题目背景

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

题目描述

这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有 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。

想想当年花一头午调这个程序到最后还是不知道二分边界怎么写的样子,

native23333。。。。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 const int MAXN=100001;
 6 inline int read()
 7 {
 8     char c=getchar();int x=0,f=1;
 9     while(c<'0'||c>'9')    {if(c=='-')f=-1;c=getchar();}
10     while(c>='0'&&c<='9')    x=x*10+c-48,c=getchar();return x*f;
11 }
12 int L,n,m;
13 int pos[MAXN];
14 bool check(int val)
15 {
16     int need=0,pre=0;
17     for(int i=1;i<=n;i++)
18     {
19         if(pos[i]-pre<val)    need++;
20         else pre=pos[i];
21     }
22     if(need>m)    return 0;
23     else return 1;
24 }
25 int main()
26 {
27     L=read(),n=read(),m=read();
28     for(int i=1;i<=n;i++)
29         pos[i]=read();
30     int l=0,r=L,ans=0;
31     while(l<=r)
32     {
33         int mid=l+r>>1;
34         if(check(mid))    ans=mid,l=mid+1;
35         else r=mid-1;
36     }
37     printf("%d",ans);
38     return 0;
39 }

转载于:https://www.cnblogs.com/zwfymqz/p/7718161.html

洛谷P2678 跳石头相关推荐

  1. 洛谷——P2678 跳石头

    https://www.luogu.org/problem/show?pid=2678#sub 题目背景 一年一度的"跳石头"比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道 ...

  2. 洛谷 2678 跳石头

    原题链接 题目描述 输入格式 输出格式 算法 (二分答案) O ( n l o g n ) O(nlogn) O(nlogn) 当我们看到最短距离最大时,大约就可以知道用二分答案,因为这同时满足了答案 ...

  3. 信息学奥赛一本通 1890:【15NOIP提高组】跳石头 | 洛谷 P2678 [NOIP2015 提高组] 跳石头

    [题目链接] ybt 1890:[15NOIP提高组]跳石头 洛谷 P2678 [NOIP2015 提高组] 跳石头 ybt 1247:河中跳房子 OpenJudge NOI 1.11 10:河中跳房 ...

  4. 二分答案——跳石头(洛谷 P2678)

    题目选自洛谷P2678 这道题题目并不复杂,思考一下也能知道用二分的方法来做. 难点在于如何判断是否满足条件,以及二分的边界问题. 下面给出详细解题思路: //tot表示需要搬走的石块数量,i表示找的 ...

  5. P1497[洛谷]P1852跳跳棋

    P1497[洛谷]P1852跳跳棋 标签(空格分隔): 信息 图论 二分 洛谷 考题,看到就觉得是不可能写出来的那种,于是打了个bfs直接走人. 考完之后听吕大佬讲过之后觉得此题可谓绝妙啊%%% 屁颠 ...

  6. 洛谷-P4995-跳跳

    跳跳! - 洛谷 解题思路: 1.由题意得,要求所耗费的体力最大值,体力值的计算 公式给出,可以判断,两个石头的高度差越大即越 好,所以这里的贪心思想是总要跳到和当前石头高度 差最大的那个石头 2. ...

  7. 洛谷P2678 [NOIP2015 提高组] 跳石头

    传送门:https://www.luogu.com.cn/problem/P2678 非常同意一个观点:二分答案由二分区间和judge函数构成 二分答案,顾名思义,就是找到答案的范围区间,然后在这个区 ...

  8. 洛谷P2678 Java解法

    题目出处点这里 思路: 形如求最小值的最大值以及求最大值的最小值都可以二分求解. 就像这道题,求最短的跳跃距离尽可能长(就是求最小值的最大值),注意到跳跃距离肯定在1至L之间,于是问题就变为在1~L之 ...

  9. 洛谷P3853 [TJOI2007]路标设置

    P3853 [TJOI2007]路标设置 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这道题与 洛谷P2678 [NOIP2015 提高组] 跳石头 和 洛谷P1182 数列分段 ...

  10. 2021寒假——洛谷刷题计划(35题)

    (希望大家不要Copy) AC:Accept,程序通过. CE:Compile Error,编译错误. PC:Partially Correct,部分正确. WA:Wrong Answer,答案错误. ...

最新文章

  1. MySQL修改字段的排列位置
  2. iptables 开放远程_JavaWeb项目的部署以及远程调试
  3. 改善深层神经网络:超参数调整、正则化以及优化——2.3指数加权平均
  4. 关于C#打包部署文件夹问题
  5. hadoop+hive+hbase+spark补充内容
  6. Django积木块八——三级联动
  7. netcore之判断系统
  8. es6 箭头函数后面的大括号
  9. HTTP请求时常见的请求方式与状态码
  10. 0-1背包问题(回溯算法)
  11. YbSoftwareFactory 代码生成插件【二十三】:集成强大的公文流转系统
  12. javaScript中什么时候用分号;
  13. 做个优秀的时间管理者
  14. Spring MVC各组件近距离接触--下下--05
  15. activiti学习资料--initiator的作用及其使用
  16. 直接执行SQL语句的快捷键是什么啊?嘎嘎
  17. PTA天梯训练赛一二
  18. authority解读
  19. UVa Problem 10254 The Priest Mathematician (牧师数学家)
  20. 2011年2月14日 业界新闻摘要

热门文章

  1. 第十一篇 面向对象进阶
  2. Android MediaPlayer的生命周期
  3. 使用jquery 给span 赋值
  4. TDD(测试驱动开发)学习一:初识TDD
  5. android 开源框架
  6. [Hyper-V]使用操作系统模板创建新的虚拟机
  7. 彻底弄明白之数据结构中的排序七大算法-java实现
  8. 死磕单点登录的实现原理....
  9. 17届互联网校招薪酬报告:白菜价22W,青菜价30W,神价150W
  10. 微服务架构如何实现网站服务垂直化拆分