The Frog's Games

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)
Total Submission(s): 10307    Accepted Submission(s): 4686

 

Problem Description
The annual Games in frogs' kingdom started again. The most famous game is
the Ironfrog Triathlon. One test in the Ironfrog Triathlon is jumping. This
project requires the frog athletes to jump over the river. The width of the
river is L (1<= L <= 1000000000). There are n (0<= n <= 500000) stones lined
up in a straight line from one side to the other side of the river. The
frogs can only jump through the river, but they can land on the stones. If
they fall into the river, they 
are out. The frogs was asked to jump at most m (1<= m <= n+1) times. Now the
frogs want to know if they want to jump across the river, at least what
ability should they have. (That is the frog's longest jump distance).
 

 

Input
The input contains several cases. The first line of each case contains three
positive integer L, n, and m. 
Then n lines follow. Each stands for the distance from the starting banks to
the nth stone, two stone appear in one place is impossible.
 

 

Output
For each case, output a integer standing for the frog's ability at least
they should have.
 

 

Sample Input
 
6 1 2 2 25 3 3 11 2 18
 
 

 

Sample Output
 
4 11
 
 

 

Source
 

 

Recommend
lcy

 


【题意】

有一条长度为L和河流,中间穿插n个石墩,青蛙跳m次经过石凳后到达对岸,求青蛙每次跳跃的最大距离的最小值


【分析】

1.二分左边界left=1,右边界right=L

2判断mid=(left+right)/2是否可以在跳跃m次以内(包括m)到达对岸,具体做法通过贪心来完成,尽量每一次跳跃跨过的石凳最远,这样可以使跳跃的总次数最小

3不断将区间二分,最终left==right时,left就是要求的值


【代码】

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=5e5+5;
int n,m,len,dis[N];
bool judge(int now){
if(dis[1]>now) return 0;
int sp=0,tot=0;
for(int i=1;i<=n;){
if(dis[i]-sp<=now){
if(dis[i]-sp==now||i==n){
tot++;
sp=dis[i];
}
i++;
}
else{
tot++;
sp=dis[i-1];
if(dis[i]-sp>now) return 0;
}
}
return tot<=m;
}
int main(){
while(scanf("%d%d%d",&len,&n,&m)==3){
for(int i=1;i<=n;i++) scanf("%d",dis+i);dis[++n]=len;
sort(dis+1,dis+n+1);
int l=1,r=len,mid,ans=0;
while(l<=r){
int mid=l+r>>1;
if(judge(mid)){
ans=mid;
r=mid-1;
}
else l=mid+1;
}
printf("%d\n",ans);
}
return 0;
}
 

HDU 4004 The Frog's Games(二分答案)的更多相关文章

  1. HDU 4004 The Frog's Games(二分+小思维+用到了lower_bound)

    The Frog's Games Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) ...

  2. HDU 4004 The Frog's Games(二分)

    题目链接 题意理解的有些问题. #include <iostream> #include<cstdio> #include<cstring> #include< ...

  3. HDU 4004 The Frog's Games(2011年大连网络赛 D 二分+贪心)

    其实这个题呢,大白书上面有经典解法  题意是青蛙要跳过长为L的河,河上有n块石头,青蛙最多只能跳m次且只能跳到石头或者对面.问你青蛙可以跳的最远距离的最小值是多大 典型的最大值最小化问题,解法就是贪心 ...

  4. hdu 4004 The Frog's Games

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4004 The annual Games in frogs' kingdom started again ...

  5. HDU 5649 DZY Loves Sorting(二分答案+线段树/线段树合并+线段树分割)

    题意 一个 \(1\) 到 \(n\) 的全排列,\(m\) 种操作,每次将一段区间 \([l,r]\) 按升序或降序排列,求 \(m\) 次操作后的第 \(k\) 位. \(1 \leq n \le ...

  6. HDU - 3586 Information Disturbing 树形dp二分答案

    HDU - 3586 Information Disturbing 题目大意:从敌人司令部(1号节点)到前线(叶子节点)的通信路径是一个树形结构,切断每条边的联系都需要花费w权值,现在需要你切断前线和 ...

  7. 杭电 4004 The Frog's Games 青蛙跳水 (二分法,贪心)

    Description The annual Games in frogs' kingdom started again. The most famous game is the Ironfrog T ...

  8. D - The Frog's Games (二分)

    The annual Games in frogs' kingdom started again. The most famous game is the Ironfrog Triathlon. On ...

  9. HDU 4190 Distributing Ballot Boxes【二分答案】

    题意:给出n个城市,n个城市分别的居民,m个盒子,为了让每个人都投上票,问每个盒子应该装多少张票 二分盒子装的票数, 如果mid<=m,说明偏大了,r应该向下逼近 ,r=mid 如果mid> ...

随机推荐

  1. Python中print格式化输出

    截取字符串输出,下面例子将只输出字符串的前3个字母 >>> str="abcdefg" >>> print "%.3s" % ...

  2. unity3d 读取usb摄像头

    using UnityEngine; using System.Collections; public class C : MonoBehaviour { private WebCamTexture ...

  3. Redhat 5.6(RHEL 5.6)下安装PostgreSQL9.3

    1,下载Respository的更新包 http://yum.postgresql.org/9.3/redhat/rhel-5-x86_64/pgdg-redhat93-9.3-1.noarch.rp ...

  4. EJB的魅惑来源

      有人发帖子问学习EJB有个屁用啊?看完下面一个简单的介绍,也许你对EJB很感兴趣,它的优点极具魅惑力. 一.EJB是基于组件的开发. 利用Enterprise JavaBean,你就能像搭积木一样 ...

  5. Objective-C语法之NSDictionary和NSMutableDictionary

    Java 有Map,可以把数据以键值对的形式储存起来,取值的时候通过key就可以直接拿到对应的值,方便快捷.在Objective-C语言中,词典就是做这样的事情的,和NSArray一样,一个词典对象也 ...

  6. ML基础 : 训练集,验证集,测试集关系及划分 Relation and Devision among training set, validation set and testing set

    首先三个概念存在于 有监督学习的范畴 Training set: A set of examples used for learning, which is to fit the parameters ...

  7. 6 Django系列之关于models的sql语句日常用法总结

    preface Django提供了强大的ORM,我们可以通过ORM快速的写出我们想要对数据做什么样操作的代码.下面就说说我在日常工作中的用法: 外键关联精确查询 应用场景:表A host字段关联到了表 ...

  8. android EditText设置弹出数字输入法键盘

    <EditText      android:id="@+id/edit_digit_input"      android:layout_width="wrap_ ...

  9. js九九乘法表的应用

    <html> <head> <meta charset=utf-8" /> <title>js九九乘法表</title> < ...

  10. python2和3的区别,怎么样做到轻松切换2和3

    以下是菜鸟教程列举的.这些零散的改变需要注意. 下面这些东西可能平时的程序根本没用到,或者稍加注意就可以了.但2和3最主要的区别是,掌握编码. 编码在所有程序中无处不在,处理不好,要么乱码,要么编码解 ...