题解:2018级算法第六次上机 C6-不Nan的过河
题目描述:

样例:
实现解释:
一道因为没排序做了一个小时没做出来的二分答案模板题(手动呲牙)
知识点:
二分答案,最大值最小化
坑点:
排序,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 ;
}
题解:2018级算法第六次上机 C6-不Nan的过河的更多相关文章
- 题解:2018级算法第六次上机 C6-危机合约
题目描述 样例: 实现解释: 没想到你也是个刀客塔之二维DP 知识点: 动态规划,多条流水线调度?可以看做一种流水线调度 坑点: 输入内容的调整(*的特殊判定),开头结尾的调整策略 从题意可知,要做的 ...
- 题解:2018级算法第五次上机 C5-图2
题目描述: 样例: 实现解释: 所有结点对最短路径的板子题 知识点: 寻找所有结点对最短路径,动态规划 坑点: 无坑,注意建边即可 使用的算法为floyd算法 按照程序顺序解释如下: 首先建图,以邻接 ...
- 题解:2018级算法第四次上机 C4-最小乘法
题目描述: 样例: 实现解释: 和字符串处理结合的动态规划,个人认为比较难分析出状态转移方程,虽然懂了之后挺好理解的 知识点: 动态规划,字符串转数字 题目分析: 首先按照最基础:依据题意设计原始dp ...
- 题解:2018级算法第四次上机 C4-商人卖鱼
题目描述: 样例: 实现解释: 需要简单分析的贪心题 知识点: 贪心,自定义排序,提前存储 题目分析: 卖鱼,鱼卖出去需要时间,鱼没被卖出去之前需要吃饲料 则有,如果卖a鱼的话b鱼会吃饲料c份,而卖b ...
- 题解:2018级算法第三次上机 C3-Zexal的浩瀚星辰
题目描述: 样例: 实现解释: 一道结合了火箭发射的贪心题目 知识点: 贪心,优先队列 题目分析: 根据题目描述可知,延迟后时间是正常推进的,也就是假设共有n个火箭,推迟k小时.则在到达k+1小时时, ...
- 2016级算法第六次上机-G.ModricWang likes geometry
1116 ModricWang likes geometry 思路 难题,非常考察几何知识,放在这里作为计算几何场次的最难的题. 原题地址 原版题解 代码
- 2016级算法第六次上机-F.AlvinZH的学霸养成记VI
1082 AlvinZH的学霸养成记VI 思路 难题,凸包. 分析问题,平面上给出两类点,问能否用一条直线将二者分离. 首先应该联想到这是一个凸包问题,分别计算两类点的凸包,如果存在符合题意的直线,那 ...
- 2016级算法第六次上机-E.Bamboo之吃我一拳
Bamboo之吃我一拳 分析 当两个点的距离<=d时,才可以出拳,想要使得满足出拳条件的点对最少但不为0 寻找最近点对距离,得到的最近距离能够使得可以出拳的组数最少,因为除了最近点对外其他组合均 ...
- 2016级算法第六次上机-A.Bamboo之寻找小金刚
Bamboo之寻找小金刚 分析 可以抽象为许多连续线段,分别计数左拐和右拐的个数.考察叉积的基础应用. 假设ABC三点构成一个夹角∠ABC,B就是拐点,AC是辅助形成夹角.考虑线段AB和BC形成的向量 ...
随机推荐
- SpringMVC中的@RequestMapping注解
@RequestMapping:设置请求映射,把请求和控制层中的方法设置映射关系 属性: 当请求路径和@RequestMapping的value属性一致时,则该注解所标注的方法即为处理请求的方法 me ...
- Python实现DPABI当中“DICOM Sorted”功能
1. 前言 在对DICOM数据预处理之前很重要的一步是将扫描得到的文件按照不同的扫描序列区分开来.DPABI和PANDA工具包中已经提供了相应的功能模块.但由于是集成的模块,不容易及逆行扩展和调整.这 ...
- @codeforces - 506C@ Mr. Kitayuta vs. Bamboos
目录 @description@ @solution@ @accepted code@ @details@ @description@ n 个竹子,第 i 个竹子初始高度 hi,在每天结束时将长高 a ...
- eval5: TypeScript编写的JavaScript解释器
eval5是基于TypeScript编写的JavaScript解释器,100%支持ES5语法. 项目地址:https://github.com/bplok20010/eval5 使用场景 浏览器环境中 ...
- python基础--程序交互、格式化输出、流程控制、break、continue
在此申明一下,博客参照了https://www.cnblogs.com/jin-xin/,自己做了部分的改动 (1) 程序交互 #!/usr/bin/env python # -*- coding: ...
- Android学习笔记尺寸资源
尺寸资源语法 dp:设备独立资源像素 会根据设备匹配大小 一般用于设置边距和组件大小 sp : 可伸缩像素 根据用户手机字体大小首选项进行缩放 使用尺寸资源 定义尺寸资源 dimens <?xm ...
- Android学习笔记Intent二
上篇随笔大概写了了Intent学习的大纲,这篇通过代码理解下Intent的ComponentName属性的使用 ComponentName,中文意思是组件名称,通过Intent的setsetCompo ...
- [搬运]Intellij IDEA 汉化
Github地址: https://github.com/pingfangx/TranslatorX
- jmeter跨线程组传值和jmeter跨线程组调用
Jmeter的线程组之间是独立的,用Jmeter做接口测试或者是性能测试时,经常会涉及到多个线程组.那么如何将A线程组返回的变量信息提取后,传递给B,C线程组使用呢?这里以已登录接口返回的access ...
- SQLserver 的分页存储过程
-- 1.建立修改学生数据的存储过程 -- 2.建立根据班级Id和学生姓名模糊查询的分页存储过程,要求正确输出总记录数,总页数-- (输入班学生姓名 计算总记录数 计算总页数) -- @name ...
