【全网首发】洛谷P2678 [NOIP2015 提高组] 跳石头
Everyday English
You don’t become what you want; you become whatyou believe.
—Oprah Winfrey
你不是成为你想要的,你成为你所相信的。
洛谷P2678 [NOIP2015 提高组] 跳石头
题目描述
一年一度的“跳石头”比赛又要开始了!
这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有N 块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。
为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走M 块岩石(不能移走起点和终点的岩石)。
输入格式
第一行包含三个整数L,N,M,分别表示起点到终点的距离,起点和终点之间的岩石数,以及组委会至多移走的岩石数。保证 L≥1 且 N≥M≥0。
接下来N 行,每行一个整数,第i 行的整数 Di(0<Di<L),表示第 i 块岩石与起点的距离。这些岩石按与起点距离从小到大的顺序给出,且不会有两个岩石出现在同一个位置。
输出格式
一个整数,即最短跳跃距离的最大值。
输入输出样例
输入 #1
25 5 2
2
11
14
17
21
输出 #1
4
说明/提示
输入输出样例 1 说明
将与起点距离为 22 和 1414 的两个岩石移走后,最短的跳跃距离为 44(从与起点距离 1717 的岩石跳到距离 2121 的岩石,或者从距离 2121 的岩石跳到终点)。
数据规模与约定
对于 20%20%的数据,0≤M≤N≤10。
对于 50%50% 的数据,0≤M≤N≤100。
对于 100%100% 的数据,0≤M≤N≤50000,1≤L≤109。
解题思路
我们二分跳跃距离,然后把这个跳跃距离“认为”是最短的跳跃距离,然后去以这个距离为标准移石头。使用一个judge判断这个解是不是可行解。如果这个解是可行解,那么有可能会有比这更优的解,那么我们就去它的右边二分。为什么去右边?答案是,这个区间是递增的 ,而我们求的是最短跳跃距离的最大值,显然再右边的值肯定比左边大,那么我们就有可能找到比这更优的解。
首先假如枚举,那不用说,直接TLE。
然而很多人就卡在如何二分上面。这就非常奇怪了,因为一旦理解了暴力的判断是如何达到的,那二分也就一目了然了。
首先将石头位置排个序,以便处理方便。这一步也是必须要做的,因为若不排序,那判断将非常的困难。而下面这一步,也是此题之精髓——
我们对于一个长度x,想看看它是否可以符合删除石头数小于等于m,可以这样做:
从位置的小到大扫遍所有石头,用一个变量存储上一个跳到的点。第一个与这上一个点的距离大于等于x的石头即是下一个跳到的点。这里用了一点贪心的思想:因为如果不跳到第一个符合条件的点上,那么整个队列的稀疏度就会提高,最终需要删除的石头也会更多。因为我们要取最优状态,所以要保证跳过的石头数最少。当然,如果某个石头到终点的距离小于x,那它不能被统计到——所以得删去后面这些无法跳到的石头。(我自认为这应该也是一个坑点)
这样,便求出了这个x是否可行,如果可行,那就往右边二分,但要记得范围要包括x;若不行,则往左边二分,右限制不包括x。然后,二分到左右边界相等,输出即可。
AC
#include <iostream>
using namespace std;
int M,N;
long L;
long a[50005];
bool check(int mid)//主要难点就在check
{int t=0,n=0,f=0;a[N+1]=L;for(int i=1;i<=N+1;i++){if((a[i]-t)<mid)n++;else {if((a[i]-t)==mid);t=a[i];}}if(n<=M)return 1;else return 0;
}long erfen(long l,long r)
{while (l < r){int mid = ( l + r + 1 )/2;if (check(mid)) l = mid;else r = mid - 1;}return l;
}
int main()
{cin>>L>>N>>M;for(int j=1;j<=N;j++){cin>>a[j];}cout<<erfen(1,1e9);return 0;
}
结尾
如果你能支持一下我,我十分感谢!!!
如果你喜欢或想了解一下其他的算法,可以看看以下这些:
DFS深搜:
https://blog.csdn.net/2301_81328824/article/details/135301624
二分:
C++:第十讲二分查找-CSDN博客
前缀和与差分:
C++:第九讲前缀和与差分-CSDN博客
排序:
C++:第七讲冒泡排序-CSDN博客
函数:
C++第6讲max和min函数_c++ min函数-CSDN博客
C++第五讲函数初步-CSDN博客
for循环&数组:
C++第四讲for循环及数组-CSDN博客
f语句&else语句及运算:
C++第三讲:C++中的逻辑运算符及if else语句-CSDN博客
基础:
C++第二讲输入与输出-CSDN博客
C++第一讲认识C++编译器-CSDN博客
最后认识一下,我是爱编程的喷火龙廖,我们有缘再见!
相关文章:
【全网首发】洛谷P2678 [NOIP2015 提高组] 跳石头
Everyday English You don’t become what you want; you become whatyou believe. —Oprah Winfrey 你不是成为你想要的,你成为你所相信的。 洛谷P2678 [NOIP2015 提高组] 跳石头 题目描述 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔…...
Gpt指引ubuntu安装java8/11
在Ubuntu系统上安装Java环境通常包括以下几个步骤: 更新软件包索引: 在安装新软件之前,最好先更新Ubuntu的软件包索引。这可以确保你安装的是最新版本的软件包。可以使用以下命令来更新: sudo apt update安装Java: U…...
【MCAL】TC397+EB-tresos之MCU配置实战 - 芯片时钟
本篇文章介绍了在TC397平台使用EB-treso对MCU驱动模块进行配置的实战过程,主要介绍了后续基本每个外设模块都要涉及的芯片时钟部分,帮助读者了解TC397芯片的时钟树结构,在后续计算配置不同外设模块诸如通信速率,定时器周期等&…...
最新AI系统ChatGPT网站H5系统源码,支持AI绘画,GPT语音对话+ChatFile文档对话总结+DALL-E3文生图
一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…...
如何在MAC OS中的XCODE下添加 <bits/stdc++.h>
mac上使用的编译器是Clang,但是没有万能头文件bits/stdc.h\,本文介绍如何添加万能头文件 Xcode 版本:15.1 - 打开应用程序-Xcode-右键显示包内容 Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/includ…...
Maven项目提示Ignored pom.xml问题
1 环境 (1)IDEA开发工具:2022.2.1 (2)JDK:Java17(Spring6要求JDK最低版本是Java17) (3)Spring:6.1.2 (4)Maven 3.8.8 2 …...
SQL学习汇总
数据库将两张没有关联的表进行横向连接数据库将两张表进行横向连接(拼接成一张表的形式显示)_db2 两条记录如果相同就横向显示-CSDN博客 mysql统计某个字段的比例_mysql查询一行某个字段占整个字段sum的比例-CSDN博客 Spark 系列(十二&…...
单片机MCU堆栈概念与区别
C语言中的堆栈是用于存储函数调用、局部变量以及程序执行期间所需的临时数据的内存区域。堆栈由编译器自动管理,是一种后进先出(LIFO)的数据结构。堆栈空间大小指的是分配给堆栈的内存空间大小,它限制了函数调用和局部变量的深度和…...
C#中使用is关键字检查对象是否与给定类型兼容
目录 一、定义 二、示例 三、生成 在程序的开发过程中经常会使用类型转换,如果类型转换不成功则会出现异常,从抛出异常到捕获并处理异常,无形中增加了系统的开销,而且太过频繁地处理异常还会严重地影响系统的稳定性。is关键字可…...
AI时代下,如何看待“算法利维坦”?
ChatGPT的浪潮从2022年袭来后,至今热度不减,呈现出蓬勃发展的趋势。AI家居、医疗、教育、金融、公益、农业、艺术......AI真的已经走进了生活的方方面面,我们仿佛已经进入了AI时代,势不可挡。人工智能水平如此之高,不禁…...
Linux上管理不同版本的 JDK
当在 Linux 上管理不同版本的 JDK 时,使用 yum 和 dnf 可以方便地安装和切换不同的 JDK 版本。本文将介绍如何通过这两个包管理工具安装 JDK 1.8 和 JDK 11,并利用软连接动态关联这些版本。 安装 JDK 1.8 和 JDK 11 使用 yum 安装 JDK 1.8 打开终端并…...
直方图与均衡化
直方图 统计图像中相同像素点的数量。 使用cv2.calcHist(images, channels, mask, histSize, ranges)函数 images:原图像图像格式为uint8或float32,当传入函数时应用[]括起来,例如[img]。 channels:同样用中括号括起来ÿ…...
Java——猫猫图鉴微信小程序(前后端分离版)
目录 一、开源项目 二、项目来源 三、使用框架 四、小程序功能 1、用户功能 2、管理员功能 五、使用docker快速部署 六、更新信息 审核说明 一、开源项目 猫咪信息点-ruoyi-cat: 1、一直想做点项目进行学习与练手,所以做了一个对自己来说可以完成的…...
PiflowX组件-ReadFromKafka
ReadFromKafka组件 组件说明 从kafka中读取数据。 计算引擎 flink 有界性 Unbounded 组件分组 kafka 端口 Inport:默认端口 outport:默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子kafka_hostKAFKA_HOST“”无是逗号分隔的Ka…...
Ubuntu 安装MySQL以及基本使用
前言 MySQL是一个开源数据库管理系统,通常作为流行的LAMP(Linux,Apache,MySQL,PHP / Python / Perl)堆栈的一部分安装。它使用关系数据库和SQL(结构化查询语言)来管理其数据。 安装…...
基于Freeswitch实现的Volte网视频通知应用
现在运营商的Volte网络已经很好的支持视频通话了,因此在原来的电话语音通知的基础上,可以更进一步实现视频的通知,让用户有更好的体验,本文就从技术角度,基于Freeswitch来实现此类应用(本文假设读者已对Fre…...
怎么实现Servlet的自动加载
在实际开发时,有时候会希望某些Servlet程序可以在Tomcat启动时随即启动。但在默认情况下,第一次访问servlet的时候,才创建servlet对象。 如果servlet构造函数里面的代码或者init方法里面的代码比较多,就会导致用户第一次访问serv…...
15. Mysql 变量的使用
目录 变量的概述自定义变量系统变量查看系统变量系统变量赋值 局部变量总结参考资料 变量的概述 MySQL支持不同类型的变量,包括自定义变量、系统变量和局部变量。自定义变量是在会话中定义的变量,用于存储临时数据。系统变量是MySQL服务器提供的全局变量…...
为什么ChatGPT采用SSE协议而不是Websocket?
在探索ChatGPT的使用过程中,我们发现GPT采用了流式数据返回的方式。理论上,这种情况可以通过全双工通信协议实现持久化连接,或者依赖于基于EventStream的事件流。然而,ChatGPT选择了后者,也就是本文即将深入探讨的SSE&…...
Elasticsearch:使用 ELSER v2 文本扩展进行语义搜索
Elastic 提供了一个强大的 ELSER 供我们进行语义搜索。ELSER 是一种稀疏向量的搜索方法。我们无需对它做任何的微调及训练。它是一种 out-of-domain 的模型。目前它仅对英文进行支持。希望将来它能对其它的语言支持的更好。更多关于 ELSER 的知识,请参阅文章 “Elas…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
命令行关闭Windows防火墙
命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)方法二:CMD命令…...
麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...
从零手写Java版本的LSM Tree (一):LSM Tree 概述
🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…...
MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...
python打卡第47天
昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图,展示模…...
【技巧】dify前端源代码修改第一弹-增加tab页
回到目录 【技巧】dify前端源代码修改第一弹-增加tab页 尝试修改dify的前端源代码,在知识库增加一个tab页"HELLO WORLD",完成后的效果如下 [gif01] 1. 前端代码进入调试模式 参考 【部署】win10的wsl环境下启动dify的web前端服务 启动调试…...
深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”
深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀” 在JavaScript中,我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时,单纯依赖字符串或数组就显得力不从心了。这时ÿ…...
