题目大意,有一条长度为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;
}

最新文章

  1. xcode8打包ipa文件, application loader上传成功,但是iTunes Connect不显示构建版本
  2. Python中的几种数据类型
  3. 转关于垂直切分Vertical Sharding的粒度
  4. linux 查找替换
  5. 解决properties文件乱码问题(eclipse和MyEclipse)
  6. 安装 tomat
  7. mysqldump原理2
  8. shell脚本获取mysql插入数据自增长id的值
  9. JavaScripts学习日记——DOM SAX JAXP DEMO4J XPath
  10. 基于MFC与第三方类CWebPage的百度地图API开发范例
  11. python基础之语句结束
  12. NSIS API 函数常用备份
  13. NPOI创建EXCEL(NOPI系列1)
  14. kolla管理openstack容器
  15. springmvc webservlet 异步请求总结
  16. cmd远程连接oracle
  17. odoo开发笔记--自定义server action页面跳转注意
  18. 20155321 《网络攻防》 Exp3 免杀原理与实践
  19. 泛泰A870K去掉相机快门声音的方法
  20. zabbix图形插件:Graphtree

热门文章

  1. chrome浏览器设置自动切换代理上网的方法
  2. camelot工具进行pdf表格解析重建
  3. 精通CSS高级Web标准解决方案(5、对列表应用样式和创建导航条)
  4. c#委托使用
  5. [oldboy-django][2深入django]MVC&amp;MTV
  6. [错误解决]paramiko.ssh_exception.SSHException: Error reading SSH protocol banner 设置
  7. DWR搭建以及使用教程
  8. 史林枫:C#.NET利用ffmpeg操作视频实战(格式转换,加水印 一步到位)
  9. 第二篇:python基础_2
  10. puppet实战之master-agent