HLG 1584 青蛙过河 (二分)
来源:互联网 发布:java 简单工作流 思路 编辑:程序博客网 时间:2024/06/03 17:31
链接: http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1584
Description
青蛙王国一年一度的游戏又开始了,这个游戏要求青蛙必须跳过河。河的宽度是 L 。河里有n块石头,这n块石头从河的一边笔直的连到另一边。青蛙只能踩着石头过河,如果它们掉到水里,将被淘汰出局。游戏规定青蛙最多跳m次。现在青蛙想要知道如果在这m步内跳到岸的那边,它一步最长需要跳多长。
Input
输入包括多组测试结果。
第一行输入三个数字L(1<= L <= 1000 000 000),n(0<= n <= 500000),m(1<= m <= n+1)。
接下来一行有n个用空格隔开的整数,表示每块石头到跳跃起点的距离,两块石头不可能同时出现在一个地方。
Output
对于每次测试,输出一个整数表示青蛙至少应该有的最大的能力,即为一步最多能跳多长,每步实际跳的长度一定小于等于这个最小的最大能力。
Sample Input
6 1 2
2
25 3 3
11 2 18
Sample Output
4
11
代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <algorithm>#define MAXN 500000+10#define RST(N)memset(N, 0, sizeof(N))using namespace std;int l, m, n, a[500005];int jump(int s){ int point = 0, i = 0; int sum = 0; for( ; i<=n; i++) { if(a[i] > point+s) { point=a[i-1]; sum++, i--; } if(sum == m) return 0; } return 1;}int main(){ while(~scanf("%d %d %d", &l, &n, &m)) { for(int i=0; i<n; i++) scanf("%d", &a[i]); a[n] = l; sort(a, a+n+1); int left = 1, right = l+1, mid; while(right > left) { mid = (right+left) >> 1; if(jump(mid)) right = mid; else left = mid + 1; } printf("%d\n", right); } return 0;}
0 1
- HLG 1584 青蛙过河 (二分)
- HLG 1186 青蛙过河
- hrbust 1584 青蛙过河(二分)
- 青蛙过河 (二分+枚举)
- hrbust 1584 青蛙过河【二分查找+贪心】
- HDU 4004 The Frog's Games(青蛙过河,二分)
- POJ-3258青蛙过河--二分答案
- 青蛙过河
- 青蛙过河
- 青蛙过河
- 青蛙过河
- 青蛙过河
- 青蛙过河
- 青蛙过河
- 青蛙过河
- 青蛙过河
- 青蛙过河
- 青蛙过河
- IE快捷键大全
- mysql的常用命令增删改查系列语句
- 电脑快捷操作的使用
- 【转载】PS将阴天相片变成蔚蓝天空
- 教你如何用ps美化皮肤 每一步都很容易理解!
- HLG 1584 青蛙过河 (二分)
- Android Matrix postTranslate
- PowerDesigner 数据类型对照表
- Mysql的安装和卸载以及密码破解办法
- 去除博客文字白色背景的解决办法
- 生活大爆炸第六季第15集经典的台词
- 你想连接哪一个SQL Server
- Linux 修改文本模式下的分辨率
- 免费8Uftp上传工具使用图解