HDU4004
题目大意,有一条长度为L和河流,中间穿插n个石凳,青蛙跳m次经过石凳后到达对岸,求青蛙每次跳跃的最大距离的最小值
本题数据量大n<500000,显然简单的o(n*n)算法是通过不了的,在输入大量的数据使用scanf比使用cin快很多,而且cin会超时,scanf可以AC,大致思路是:青蛙跳跃能力的范围·在两个石凳间最大差值L0与两岸距离L之间,算法步骤如下:
1.求出两岸最大距离L0,二分左边界left=L0,右边界right=L
2判断mid=(left+right)>>1是否可以在跳跃m次以内(包括m)到达对岸,具体做法通过贪心来完成,尽量每一次跳跃跨过的石凳最远,这样可以使跳跃的总次数最小
3不断将区间二分,最终left==right时,left就是要求的值
#include<iostream>
#include<algorithm>
using namespace std;
bool Check(int a[], int n, int m, int x);
int a[500002];
int main(){
a[0] = 0; //初始位置
int l, n, m, left, right, i, mid;
while (cin >> l >> n >> m){
for (i = 1; i < n + 1; i++)
scanf("%d",&a[i]);
sort(a, a + n+1); //输入的距离排序
a[n+1] = l, //末位置
left = a[1]; //将left可以随便设置一个初始值
right = l; //右边界
n = n + 2; //加上初始位置和末位置,a中一共有n+2个位置
while (left <right){
mid = (left + right)/2;
if (!Check(a, n, m, mid)) //如果跳跃m次不能通过
left = mid + 1;
else
right = mid; //若果mid通过,那么mid-1不确定是否通过
}/*左右边界相等时跳出循环*/
cout << left << endl;
}
return 0;
}
bool Check(int a[], int n, int m, int x){
int i = 0, step = 0, j = 1;
bool flag;
while (j<n){
flag = 1;
while (j< n&&a[j] - a[i] <= x){
j++; //贪心,尽可能多的通过石凳
flag = 0;
}
i = j - 1;
if (flag) //说明x比某两个石凳间距离还要小
return 0;
step++;
if (step>m) //跳跃·的次数大于m还未到达对岸
return 0;
}
return 1;
}
HDU4004的更多相关文章
- hdu4004(二分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4004 大致题意 二分最大跳跃能力,判断是否可以在m次内到达对岸! 分析:由于求青蛙最小弹跳能力,所以二 ...
- HDU4004 二分答案
第一道二分答案...今天看了大牛的博客,突然发现有个叫“二分枚举答案”的方法好像很牛,于是便搜了些资料..发现并不是很难,可能是我了解的只是冰山一脚罢了...加油ACMer!!!! #include& ...
- HDU-4004 The Frog's Games (分治)
http://acm.hdu.edu.cn/showproblem.php?pid=4004 Problem Description The annual Games in frogs' kingdo ...
随机推荐
- 35、键盘布局的tableLayout备份
<TableLayout android:layout_width="wrap_content" android:layout_height="wrap_conte ...
- MFC深入浅出读书笔记第二部分2
第七章 MFC骨干程序 所谓骨干程序就是指有AppWizard生成的MFC程序.如下图的层次关系是程序中常用的几个类,一定要熟记于心. 1 Document/View应用程序 CDocument存放 ...
- Python中的Json模块dumps、loads、dump、load函数介绍
Json模块dumps.loads.dump.load函数介绍 1.json.dumps() json.dumps() 用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json ...
- 一个iOS程序员眼中的跨域问题
摘要: 跨域问题是web开发领域一个常见的问题,相信每个web开发者都遇到"跨域"的问题 最近公司的iOS开发任务比较少,所以自己最近开始了Web开发的任务,在用H5做了很多页面, ...
- 【Luogu】P2468粟粟的书架(主席树+前缀和)
题目链接 我仿佛中了个爆零debuff 本题分成两部分,五十分用前缀和,f[i][j][k]表示(1,1)到(i,j)的矩形大于等于k的有多少个数(再记录页数和),查询时二分,另外的用主席树,类似方法 ...
- bzoj4455【ZJOI2016】小星星
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=4455 给一张图和该图的一棵生成树,求可能的编号方案数 sol :dalao教导我们,看到计数 ...
- 【HDOJ5996】dingyeye loves stone(Nim游戏)
题意:dingyeye喜欢和你玩石子游戏.dingyeye有一棵n个节点的有根树,节点编号为0到n−1,根为0号节点. 游戏开始时,第i个节点上有a[i]个石子.两位玩家轮流操作,每次操作玩家可以选择 ...
- Entity Framework context per request
原文发布时间为:2011-09-24 -- 来源于本人的百度文章 [由搬家工具导入] http://www.blog.cyberkinetx.com/2011/05/15/entity-framewo ...
- Zookeeper如何从官网下载和安装
打开百度搜索,输入Zookeeper关键词,一般第一条搜索记录就是apache官网下载的地址 进入apache官网,由于是国外的网站,里面内容都是英文的,可以大概看下Zookeeper的描述和介绍,在 ...
- 关于Struts2中param的作用
1.页面传参与配置传参的区别: 如果页面Form表单的参数在Action类中有相应的setter方法,则会优先取页面Form表单传过来的值,如果页面没有该属性同名的参数,则会从配置文件中取同名的参数值 ...