洛谷 p2678 跳石头 题解
一道裸的二分答案
如果不会分治的去找dalao吧,本蒟蒻只会二分
不知道二分答案的看这里
这位dalao解释的很详细其实只是随便找了一个
那里面貌似也有这个题的题解,但我还是要写(才不是应付老师)
关于二分答案我也稍稍解释一下,

假设你需要50块钱(逃课泡吧)
你:妈妈我要50块钱用来学习
第一种情况(正常情况)
妈妈:给你100块,好好学;
第二种情况
妈妈:给你30块,没那么多了
如果是第一种情况,那么你肯定接受,因为你可以有更长时间泡吧
但是如果是第二种情况呢?
30块并不能满足你的需求,这样的话你一定没等到时候你又得去学校
也就是说,你需要50元,妈妈只能给你50元以上才可以满足要求,但她不能给你太多防止你干坏事
那么这就是重点了,如果你不说你需要50元,妈妈并不知道,但妈妈可以问给你XX元可以吗
那么妈妈就可以找一个范围,她估摸你不会超过要300元泡吧
她就先猜150元,你说可以,那就说明你需要的真正钱数在0到150元之间,也就是说如果妈妈猜出一个钱数(150)可以满足要求;
那么比150多肯定也能满足要求,但149(或更低)不一定
这就是二分答案的适用范围,答案具有单调性(即上一行的解释)
如果知道这个那么再看这个题就简单多啦.
代码奉上
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<stack>
#include<queue>
#include<iostream>
using namespace std;
int n,m,l,aa;
int a[];
bool dd(int x) {
int kkk=l;//kkk表示还可以移动多少石头
int c,b=a[];//c代表当前石头,b表示上一个(未搬走)的石头
for(int i=; i<=m+; i++) {//起点终点都要算上
c=a[i];
aa=c-b;
if(aa>=x) {//符合条件更新上一个点的坐标
b=c;
} else {//否则搬走
if(kkk==)
return ;
kkk--;
}
}
return ;
}
void dg(int t,int w) {//二分
if(t == w||t==w-) {//二分边界
cout<<t;
return ;
}
int mid = (t+w)/;
bool bb=dd(mid);
if(bb == )//如果150块不行
dg(t,mid);//就从150到300找
else
dg(mid,w);//行的话就从0到150找
} int main() {
// freopen("stone9.in","r",stdin);
// freopen("stone.out","w",stdout);
scanf("%d%d%d",&n,&m,&l);
int zd=,zx=;
for(int i=; i<=m; i++) {
scanf("%d",&a[i]);
aa=a[i]-a[i-];
if(aa>zd)//找最大和最小
zd=aa;
if(aa<zx)
zx=aa;
}
a[m+] = n;//算上终点
aa=a[m+]-a[m];
if(aa>zd)
zd=aa;
if(aa<zx)
zx=aa;
int i;
dg(zx,zd);
return ;
}
洛谷 p2678 跳石头 题解的更多相关文章
- [NOIP2015提高&洛谷P2678]跳石头 题解(二分答案)
[NOIP2015提高&洛谷P2678]跳石头 Description 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之 ...
- 洛谷P2678跳石头题解
题目 这个题也是一个很经典的题了.其主要思想也是二分答案,原因就是题目中只要出现最大值最小或最小值最大,这种描述十有八九就是二分答案. 这个题原题也是让我们求最短的跳跃距离的最大值. 显而易见,最大值 ...
- 洛谷 P2678 跳石头
题目背景 一年一度的"跳石头"比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间 ...
- [NOIP2015] 提高组 洛谷P2678 跳石头
题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石(不 ...
- 【【洛谷P2678 跳石头】——%%%ShawnZhou大佬】
{dalao传送门} 这道题如果要使用暴力搜索直接求解会严重超时.实际上,我们可以发现,这个所谓的最短跳跃距离显然不能超过一个范围,而这个范围题目上已经给了出来.也就是说,答案是有一个确定的范围限制的 ...
- 洛谷P2678跳石头(提高)
题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点. 在起点和终点之间,有 N 块岩石( ...
- 洛谷——P2678 跳石头
https://www.luogu.org/problem/show?pid=2678#sub 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着 ...
- 二分答案 & 洛谷 P2678 跳石头
首先让我们先学一下二分答案这个东西... 二分答案,肯定与二分有关,还与可能是答案的东西有关... 二分答案的准确定义: 二分答案是指在答案具有单调性的前提下,利用二分的思想枚举答案,将求解问题转 ...
- 洛谷 P2678 跳石头【经典二分答案/贪心】
题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 NN 块岩石(不含起点和终点的岩石).在比赛过程中,选手们将从 ...
随机推荐
- Security+ 认证考过经验分享 802分飘过
PART 1/考前准备 1.针对与新人.学生建议看每一节直播课程,老师会结合自己的工作工作经验讲解课程,可以帮助学生理解知识. 2.备考期间建议官方指导手册至少看两遍以上,我在结合自己的做题库时发现有 ...
- 构建之法助教园地第一次作业--点评<西北师范大学|李晓婷>
一 博客点评 第一次作业--准备篇:https://www.cnblogs.com/Mookiepiece/p/10464606.html#4192515 点评内容: 首先,你对电脑很感兴趣,兴趣就是 ...
- js原生触发事件
在JQ时代我们使用如下方式,可以手动触发事件 $("button").click(function(){ $("input").trigger("se ...
- SW:HTML DOM
1:节点:nodeType,nodeValue,nodeName getAttributeNode() 方法从当前元素中通过名称获取属性节点. 元素节点nodeValue是null,属性节点nodeV ...
- eclipse快速查看工程代码行数
1.点击要统计的项目或许文件夹,在菜单栏点击Search,然后点击File... 2.选中正则表达式(Regular expression),并在搜索文本框输入\n ;3.在文件名中输入*或*.jav ...
- “短路求值(Short-Circuit Evaluation)
// 逻辑与和逻辑或操作符总是先计算其做操作数,只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解其右操作数. function aa() { if (null) { console ...
- SpringBoot文件的上传与下载
⒈文件实体类 package cn.coreqi.security.entities; public class FileInfo { private String path; public File ...
- RocketMq发送消息出现com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 2 DESC: [TIMEOUT_CLEAN_QUEUE]broker busy, start flow control for a while, period in queue: 201ms, size of queue: 1
最近对系统进行压测,发现发送消息到消息队列的时候出现如下错误: com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 2 DE ...
- L2-011 玩转二叉树 (25 分) (树)
链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805065406070784 题目: 给定一棵二叉树的中序遍历和前序 ...
- 通过hook实现禁止shift+delete快捷键
实现全局hook必须要将hook代码封装在dll里,所以此程序有两个文件:noShiftDeleteHook.dll和noShiftDelete.exe noShiftDeleteHook.dll / ...