[HDU 4004] The Frog's Games 二分+贪心
2015-08-15 16:44
531 查看
http://acm.hdu.edu.cn/showproblem.php?pid=4004
题意:青蛙通过河中央的n块石头过河, 所有石头均在与河岸垂直的一条线上,给定每块石头到河岸的距离,给出河的宽L,给定青蛙跳的次数上限m,求出青蛙能够过河的最小步长。
思路:二分步长,贪心判断步长是否能过河
题意:青蛙通过河中央的n块石头过河, 所有石头均在与河岸垂直的一条线上,给定每块石头到河岸的距离,给出河的宽L,给定青蛙跳的次数上限m,求出青蛙能够过河的最小步长。
思路:二分步长,贪心判断步长是否能过河
[code]#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int len, n, m; int mapn[500005]; bool check(int dis) { if(m * dis < len) return false; int step = 0; int i = 1, k = 0; while(i <= n+1){ step++; if(dis < mapn[i] - mapn[k]) return false; while(dis > mapn[i] - mapn[k] && i <= n+1){ //贪心 i++; } k = i - 1; if(step > m) return false; } return true; } int main() { while(~scanf("%d%d%d", &len, &n, &m)){ mapn[0] = 0, mapn[n+1] = len; for(int i = 1; i <= n; i++){ scanf("%d", &mapn[i]); } sort(mapn, mapn+n+2); int mid; int l = 0, r = len; while(l <= r){ mid = (l + r) >> 1; if(check(mid)) r = mid - 1; else l = mid + 1; } printf("%d\n", l-1); } return 0; }
相关文章推荐
- DrawableLayout
- Stock Exchange(LIS最长上升子序列问题)
- 配置android studio环境
- Unity 3D学习笔记(二)—— 脚本01
- 百度技术沙龙之2013-2&3
- 获取通讯录
- Ubuntu安装Qt及QT Creator
- poj 2112 网络流+二分
- POJ 2485 Highways
- Mysql蠕虫复制
- angular-utils-pagination 使用案例
- Glib多线程编程
- 建立链表和打印链表简单代码
- iOS 委托和协议
- Codeforces 570D Tree Requests
- Hibernate持久化对象的三个状态
- 2016 C语言面试题——字符串函数的实现
- phpmailer 实现发送邮件
- .Net大文件上传(转--待验证)
- 页面的切换效果