HDUOJ----4004The Frog's Games(二分+简单贪心)
The Frog's Games
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Total Submission(s): 3263 Accepted Submission(s): 1596
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
The 36th ACM/ICPC Asia Regional Dalian Site —— Online Contest
参考别人的思路做的,挫....
利用二分来选择适合的数。。。然后再验证,是枚举的优化版。 好吧,这个思路是别人的 ,我还是太挫啦
代码:
1 #include<iostream>
2 #include<algorithm>
3 #include<cstdio>
4 #include<functional>
5 const int maxn= 500005;
6 using namespace std;
7 int stone[maxn],n,m;
8 bool judge(int dis)
9 {
10 int i=1,pre=0,count=0;
11 while(i<=n+1)
12 {
13 count++;
14 if(dis<stone[i]-stone[i-1]) return false ; //这个石头跳不过去,所以失败
15 while (i<=(n+1)&&dis>=stone[i]-stone[pre]) i++;
16 pre=i-1;
17 if(count>m) return false ;
18 }
19 return true ;
20 }
21 int main()
22 {
23 int length,i;
24 while(scanf("%d%d%d",&length,&n,&m)!=EOF)
25 {
26 memset(stone,0,sizeof(int)*(n+3));
27 for(i=1;i<=n;i++)
28 scanf("%d",&stone[i]);
29 stone[i]=length;
30 sort(stone,stone+(n+2),less<int>()); //升序安放stone
31 int ans,low=0,high=length;
32 while(low<=high)
33 {
34 ans=(low+high)/2; //跳这么远的时候能否满足要求
35 if(ans*m>=length&&judge(ans)) high=ans-1;
36 else low=ans+1;
37 }
38 printf("%dn",low);
39 }
40 return 0;
41 }
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Octave梯度下降法最优化代价函数的一个例子—ML Note 38
- Spring Boot入门系列(十八)mybatis 使用注解实现增删改查,无需xml文件!
- Mongodb多键索引之嵌套文档
- MySQL中的这几类日志,你一定要知道
- 微服务技术栈:API网关中心,落地实现方案
- 你的数据库服务器IO调度算法不对,难怪那么慢
- Android 11 强制用户使用系统相机?
- LeetCode题目38:外观数列
- GPUManager虚拟化方案
- [网络安全] 二.Web渗透信息收集之域名、端口、服务、指纹、旁站、CDN和敏感信息
- 程序员进阶系列:你真的懂 HelloWorld 吗?
- 零基础Python教程040期 序列分片技术
- JS实现图片弹窗效果
- [网络安全] 一.Web渗透入门基础与安全术语普及
- 多线程系列(二)之Thread类