二分+贪心 [NOIP2015] 跳石头

C++二分查找算法之跳石头 跳石头 题目描述 输入 输出 样例输入 25 5 2 2 11 14 17 21 样例输出 4 提示 代码如下: #include int l,r,L,M,N,a[500005],tot,mid,left; int main() { scanf("%d %d %d",&L,&N,&M); r=a[N+1]= 阅读详情

   

2107. [NOIP2015] 跳石头

★   输入文件:2015stone.in   输出文件:2015stone.out   简单对比
时间限制:1 s   内存限制:256 MB

【题目描述】



这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选

择好了两块岩石作为比赛起点和终点。在起点和终点之间,有 N 块岩石(不含起点和终 点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达 终点。

为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳 跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走 M 块岩石(不能 移走起点和终点的岩石)。


【输入格式】


输入文件第一行包含三个整数 L,N,M,分别表示起点到终点的距离,起点和终 点之间的岩石数,以及组委会至多移走的岩石数。


接下来 N 行,每行一个整数,第 i 行的整数 Di(0 < Di < L)表示第 i 块岩石与 起点的距离。这些岩石按与起点距离从小到大的顺序给出,且不会有两个岩石出现在同 一个位置。


【输出格式】

输出文件只包含一个整数,即最短跳跃距离的最大值。

【样例输入】

25 5 2 
2
11
14
17 
21

【样例输出】

4

【提示】


输入输出样例 1 说明:将与起点距离为 2 和 14 的两个岩石移走后,最短的跳跃距离为 4(从与起点距离 17 的岩石跳到距离 21 的岩石,或者从距离 21 的岩石跳到终点)。

另:对于 20%的数据,0 ≤ M ≤ N ≤ 10。 对于50%的数据,0 ≤ M ≤ N ≤ 100。

对于 100%的数据,0 ≤ M ≤ N ≤ 50,000,1 ≤ L ≤ 1,000,000,000。


    总体思路:贪心,二分枚举可能的最小长度,check函数:从起点位置开始加上二分的答案,如果小于下一个石块的坐标,说明这个距离较大,符合当前答案,可以把枚举的起点转移到下一个石块;那么如果大于这个坐标,说明不符合,就把那个石块干掉,继续从原来的点加上二分的答案,看下下个点是否符合,记录拆了多少个石头,>m则不符合。

     然而二分是个坑,为什么我返回的值总是差一什么的。。得再看看。。

    

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int n,m,k,a[50005];
int check(int x)
{
	int sum=0,s=0;
	for(int i=1;i<=n+1;i++)
	{
		if(s+x<=a[i])s=a[i];
		else sum++;
		if(sum>m)return 0;
	}
	return 1;
}
int yjn()
{
	//freopen("2015stone.in","r",stdin);
	//freopen("2015stone.out","w",stdout);
	scanf("%d%d%d",&k,&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	a[0]=0;a[n+1]=k;
	int l=0,r=k,mid;
	while(l<=r)
	{//cout<<1;
		mid=(l+r)/2;
		if(check(mid))l=mid+1;
		else r=mid-1;
	}
	cout<<l-1;
}
int qty=yjn();
int main(){;}

csp信奥赛C++高频考点专项训练之贪心算法 --【贪心与二分判定】:[NOIP 2015 提高组] 跳石头 阅读详情

相关推荐

Java判断地图坐标(经度,纬度)是否在多边形区域或圆形区域内

​欢迎光临我的博客查看最新文章:在地图上,可以使用经纬度确定一个位置,如上海体育场(121.449391,31.188228),如果知道了2个地点的经纬度,我们就能在地图上找到其位置及2点的距离,百度地图或高德地图提供了相应的服务;如果将多个坐标点连成多边形区域,如何判断某个坐标点是否在多边形区域内,如下工具类。

river106的博客 3943

NOIP2015跳石头【二分答案(最小值最大化) | 贪心】

如果长度 Len 可以满足,那么当长度小于 Len 时也可以满足,所以我们可以二分出最大的 Len。为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走 MM 块岩石(不能移走起点和终点的岩石)。首先验证答案具有单调性:拿走的石头越多,最短跳跃距离越大,这就叫答案的单调性。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。在起点和终点之间,有 NN 块岩石(不含起点和终点的岩石)。

IsayIwant的博客 428

DDR5内存调优实战:手把手教你搞定Write Leveling Training Mode(附时序图解析)

本文深入解析DDR5内存调优中的Write Leveling Training Mode技术,详细介绍了其核心原理、硬件准备、实战步骤及常见问题解决方案。通过JESD79-5标准定义的反馈机制,帮助硬件工程师精确对齐DQS与CK信号,提升系统稳定性和数据可靠性。附有时序图解析和代码示例,适合DDR5内存系统设计与调试参考。

weixin_29256771的博客 550

【NOIP2015】跳石头 (二分+贪心判定)

传送门 据说是一道USACO的原题,但我没做过…… 还好考场写出来了。思路十分简单,二分答案,过后直接判定就行了。 代码(考场上写的很丑……我甚至开了一个栈去保存有哪些节点……实际上只要保存最后一个就行了): #include<cstdio> const int MAXN = 50005; int n, a[MAXN], L, M, stk[MAXN],...

weixin_34121282的博客 406

Supervisor 安装与使用

一、Supervisor 介绍 Supervisor 是一个用 Python 编写的进程管理工具,它可以用于监控和控制类 UNIX 操作系统上的多个进程。它是一个客户端/服务器系统,其中 Supervisor 的服务器端称为 supervisord,负责启动管理的子进程、响应客户端命令、重启崩溃或退出的子进程、记录子进程的 stdout 和 stderr 输出,以及处理子进程生命周期中的事件。客...

疯子丶pony的博客 3864

Isaac Lab强化学习实战:用SO-ARM101机械臂实现抓取任务(附B站视频教程)

本文详细介绍了如何使用Isaac Lab强化学习框架,在SO-ARM101机械臂上实现抓取任务的完整实战流程。内容涵盖从环境搭建、奖励函数设计、训练调参到模型部署的各个环节,并分享了Sim-to-Real迁移的关键技巧,旨在帮助开发者高效完成机器人强化学习项目。

weixin_29070721的博客 1104

noip2015跳石头

noip 2015 跳石头 思考了许久 最终挑了如下一篇题解给自己解答 #include #include using namespace std;  const int maxn=50010; //n,m,L的意义和题目描述中的一样,a[]表示每个石头到起点的距离,方便起见,将终点补充为最后一块石头 int n,m,L; int a[maxn]; //二分了最短跳跃距离 mid

shcolinia的博客 625

DVWA靶场实战:手把手教你绕过文件上传限制,用蚁剑连接一句话木马

本文详细介绍了在DVWA靶场中如何绕过文件上传限制并利用蚁剑连接一句话木马的实战技巧。通过分析文件上传漏洞原理、创建一句话木马、使用Burp Suite拦截修改请求以及配置蚁剑连接WebShell的全过程,帮助安全研究人员深入理解Web安全防护与攻击技术。

weixin_30335575的博客 90

跳石头(最小最大问题)

思路:二分法查找最短距离的最长值 查找范围:1---l 分析: 1,取最短距离为mid,然后判断这个mid能否满足另一个条件 2,判断mid : 遍历a[],与学校灭路灯问题类似处理, 相邻两块石头距离小于mid的情况不能大于m即成立, 否则此mid不成立。(即我撤走m块石头能干掉所有距离比mid小的情况) 总结:最短最长,最长最短,最大最小,最小最大问题一般用二分搞定。 #in...

爱敲代码的小赤佬 2202

统信UOS系统盘扩容保姆级教程:用GParten-分区编辑器5分钟搞定

本文提供统信UOS系统盘扩容的详细图形化教程。针对系统盘空间不足问题,重点介绍如何使用系统自带的GParten-分区编辑器,在5-10分钟内安全、直观地完成扩容操作,无需记忆复杂命令,适合所有用户快速解决存储空间告急的困扰。

e3f4g5的博客 642

Unity引擎开发:复杂动作系统_动作捕捉数据的应用与整合

通过以上步骤,我们可以在Unity中有效地应用和整合动作捕捉数据,以实现更加真实和流畅的动画效果。从导入文件格式的选择,到预处理和优化,再到实时应用和调试验证,每一步都至关重要。希望本文能帮助你在Unity项目中更好地利用动作捕捉数据,提升动画质量和性能。

chenlz2007的博客 958

【题解】【洛谷P2678】【贪心,二分】——[NOIP 2015 提高组] 跳石头

为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。块岩石与起点的距离。这些岩石按与起点距离从小到大的顺序给出,且不会有两个岩石出现在同一个位置。,分别表示起点到终点的距离,起点和终点之间的岩石数,以及组委会至多移走的岩石数。并且思考一下,最短跳跃距离越大,那么需要移走的石头就越多,符合。块岩石(不能移走起点和终点的岩石)。的两个岩石移走后,最短的跳跃距离为。

Pantheraonca的博客 814

Python进阶005:修改Jupyter Notebook的工作路径

1、Jupyter Notebook简介 2、修改Jupyter Notebook的工作路径 如下三个步骤: 一、安装notebook 在CMD命令行中输入: pip install notebook 二、启动notebook jupyter notebook 启动后发现是在你的用户目录下,如下图所示,但是该目录下有很多的其他文件或文件夹,因此我想把这个环境切换到我单门创建的一个文件夹中。 三、创建notebook的配置文件 在CMD命令行中执行: jupyter notebook --genera

若北辰 1386

跳石头(NOIP 2015 提高组):二分答案 + 贪心判定详解

的经典模型:当题目要求“最大值最小”或“最小值最大”时,先思考答案是否具有单调性,再把最优化问题转化为判定问题。这个贪心是正确的:当间距不足时,移走当前岩石比移走前面已保留的岩石更优,因为保留更靠前的岩石能给后面留出更大的空间。可以验证,无法在只移走 2 块岩石的情况下让最短跳跃距离达到 5,因此答案是 4。选手从起点出发,每一步跳向相邻的岩石,直至到达终点。,分别表示起点到终点的距离、起点和终点之间的岩石数、至多移走的岩石数。把与起点距离为 2 和 14 的两块岩石移走后,剩下的岩石位置为。

shj_06_的博客 139

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

P2678 [NOIP2015 提高组] 跳石头(贪心、二分)

如果这个解是可行解,那么有可能会比这个更优的解,那么我们就去它的右边二分,这个区间是递增的,而我们且的最短跳跃距离的最大值,显然右边的值比左边大,那么我们就有可能找到比这更优的解,直到找不到,那么最后找到的解就是有理由认为是区间内最优解。judge函数是检验这个解是不是合法,我们去判断如果以这个距离为最短跳跃距离需要移走多少块石头,先不必考虑限制移走多少块,等全部拿完再把拿走的数量和限制进行比对,如果超出限制,那么这就是一个非法解,反之就是一个合法解。使用二分需要满足两种情况,一个是有界,一个是单调。

2301_81394465的博客 968

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

跳石头_NOIP2015 Day2 T1_二分+贪心

题目描述 Description一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有N块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。 为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。由于预算限制

olahiuj的博客 750

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【NOIP2015】洛谷2678 跳石头题解(二分+贪心)

题目:luogu2678. 题目大意:给定一个长度为nnn的序列aia_iai​和a0a_0a0​以及an+1a_{n+1}an+1​,要求选择一个长度不超过mmm的位置序列pi(1≤pi≤n)p_i(1\leq p_i\leq n)pi​(1≤pi​≤n)使得min⁡i=1n+1{ai−ai−1}\min_{i=1}^{n+1}\{a_{i}-a{i-1}\}mini=1n+1​{ai​−ai−...

hzk_cpp的博客 537

洛谷P2678 [NOIP2015 提高组] 跳石头

二分答案与贪心策略的完美结合,值得一做!

夜深人静写代码 993

关于移走石头,跳石头的问题

关于移走石头,跳石头的问题。 原题来源于洛谷:P2678 [NOIP2015 提高组] 跳石头 :移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。至多从起点和终点之间移走 M块岩石(不能移走起点和终点的岩石)。 题目链接 分析:二分法枚举最短距离的最大值。与大部分二分法不同,此处二分法是为了查找<=x的数中最大的一个(平常是查找>=x的数中最小的一个)。分割左右区间的判断条件,应该是计算出该距离对应的应移走石头数,是否在范围内。 #include <bits/stdc++.h&

CAOSHUCAOSHU的博客 392

P2678 [NOIP2015 提高组] 跳石头(二分答案+贪心)

我们只需要枚举最短跳跃距离,得到他右边的最大值(右侧区间) check是用来判断这个最短距离是不是合法值,我们能不能通过移走石头获得这个最短距离 首先0和25是不能动的,我们遇到一个最短距离,就把他右边那个点移走, 如果没有遇到最短距离,我们就要更新上一个没有被移走的点距离起点的距离是多少 #include <iostream> #include <algorithm> using namespace std; const int N = 50005; int L...

qq12323qweeqwe的博客 487

luogu2678 [NOIp2015]跳石头 (二分答案+贪心)

先二分出一个x,我们要算使最近的跳跃距离>=x的最少移除数量是否<=M就可以了 然后就别dp了...贪心就完事了...我肯定能不移就不移比较好... 1 #include<bits/stdc++.h> 2 #define pa pair<int,int> 3 #define lowb(x) ((x)&(-(x))) 4 #defin...

weixin_30708329的博客 181

《洛谷刷题笔记》day6

做题笔记

民大考研人的博客 907

跳石头 vijos1981 NOIP2015 D2T1 二分答案 模拟 贪心

描述 一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有 N 块岩石(不含起点和终 点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳 跃距离尽可能长。由于预算限制,组委会至多从...

weixin_33733810的博客 132
上一篇: 概率+逆元 书
下一篇: 二分的这个坑
QTY_
博客等级 码龄9年 13粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值