题目描述:

样例:

实现解释:

一道因为没排序做了一个小时没做出来的二分答案模板题(手动呲牙)

知识点:

二分答案,最大值最小化

坑点:

排序,judge(mid)函数内计数的实现

其实从最长一步的最小距离就能大致看出:二分答案

因此需要做的就是对0~L这个区间二分查找满足题意的跳跃距离,直到达到终止条件。

唯一需要注意的就是:何时满足条件,二分答案中最重要的judge函数,可以先缕一下:只能跳m步,需要从0跳到L。

有步数限制,因此跳跃仅在不得不跳时进行(减少步数消耗),所以需要一个pre记录上一次的位置,cnt记录跳跃的步数。然后遍历石子的位置即可(注意排序(题目没说有序)和L的添加(L作为第n+1块石子))

最后需要注意的既是,在判断到最后,cnt还不是真正的cnt,因为此时pre还是跳到L前的位置,因此遍历结束后还需要对cnt进行++操作,然后再比较才行。

更具体的实现可在完整代码中查看,去除注释其实很短。

完整代码:

#include<iostream>
#include<algorithm>
using namespace std;
int L,n,m;
long long a[];
bool judge(int x)
{
//站在岸边
int pre = a[];
//记录跳数
int cnt = ;
for(int i = ;i<=n;i++)
{
//为了尽量少跳几步,得到最大的最小值,因此仅在不得不跳的时候跳
if(a[i]-pre>x)
{
//跳到前一个位置
pre = a[i-];
cnt++;
//提前判断减少时间
if(cnt>m) return ;
//如果还是大,说明跳不过来
if(a[i]-pre>x) return ;
}
}
//跳到岸上
cnt++;
//需要的步数太多
if(cnt>m) return ;
return ;
}
int main()
{
ios::sync_with_stdio(false);
while(cin >> L >> n >> m)
{
a[] = ;
for(int i = ;i<=n;i++)
{
cin >> a[i];
}
a[n+] = L;n++;
sort(a,a+n);
int l = ,r = L,mid;
while(l<r)
{
mid = (l+r)/;
//二分答案中的judge,1就是能符合条件,0就是不能
//这里1就是能在当前范围成功,而为了得到最大的最小值
//应该减少步长,找到恰好跳到对岸的长度
if(judge(mid)) r = mid;
//如果不能则就扩大步长
else l = mid+;
}
cout << r << '\n';
}
return ;
}

最新文章

  1. Dijkstra 单源最短路径算法
  2. 关于post请求超出最大长度
  3. 模拟Executor策略的实现
  4. Android程序ToDoList
  5. UIControl的使用
  6. SQL语句方法语法总结(二)
  7. 安装eclipse for JavaEE 后的一些设置
  8. DNS子域委派配置案例[转载]
  9. 阅读の反思のGraphicsPath.AddArc
  10. Java Concurrency - 取消线程执行器中的线程
  11. C++编程注意事项
  12. 为SQL Server表中的列添加/修改/删除注释属性(sp_addextendedproperty、sp_updateextendedproperty、sp_dropextendedproperty)
  13. css实现三角的一些方法
  14. macos10.8.5原版系统dmg转iso
  15. php.ini 全站,和htaccess web目录 默认头部和尾部 auto_prepend_file
  16. C语言--关键字、标识(zhi)符、注释
  17. (cljs/run-at (JSVM. :all) &quot;一起实现柯里化&quot;)
  18. [转载] Dubbo实现RPC调用使用入门
  19. Continuity of arithmetic operations
  20. 算法与数据结构(十) 二叉排序树的查找、插入与删除(Swift版)

热门文章

  1. win系统DOS批处理命令:每日根据定时计划,弹出相应的提醒
  2. css布局中的垂直水平居中对齐
  3. (一)DB、DBMS、SQL之间的关系
  4. AJAX的GET请求、POST请求
  5. (八)利用 Profile 构建不同环境的部署包
  6. vc6.0创建文件时,出现很多烫烫烫解决方法
  7. java8 探讨与分析匿名内部类、lambda表达式、方法引用的底层实现
  8. 这一次搞懂SpringBoot核心原理(自动配置、事件驱动、Condition)
  9. 【MonogDB帮助类】
  10. SpringBoot--整合Lettuce redis