牛客网-----跳石头

题目描述:

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


 输入描述:

输入文件第一行包含三个整数L,N,M,分别表示起点到终点的距离,起点和终点之间的岩石数,以及组委会至多移走的岩石数。
接下来 N行,每行一个整数,第i行的整数Di(0 < Di< L)表示第i块岩石与起点的距离。这些岩石按与起点距离从小到大的顺序给出,且不会有两个岩石出现在同一个位置。

输出描述:

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


示例1:

输入 :


25 5 2 

11

14

17

21

输出:   

4

说明:

将与起点距离为2和14的两个岩石移走后,最短的跳跃距离为4(从与起点距离17的岩石跳到距离21的岩石,或者从距离21的岩石跳到终点)。


二分查找算法板子(整数):

1、左面模板

//左面模板
int bsearch_1(int l, int r)
{while (l < r){int mid = l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}return l;
}

2、右面模板

//右面模板
int bsearch_2(int l, int r)
{while (l < r){int mid = l + r + 1 >> 1;if (check(mid)) l = mid;else r = mid - 1;}return l;
}

 根据样例,图解如下:

 根据如上图解,我们可以 看出根据  d  的增加,移动石头次数 m 也是逐渐增加的,所以d = 5不行,那么说明d > 5 的 情况都是不行的,所以答案是d = 4,移动次数m = 2


代码思路: 

1、写好对应的数组
2、确定好二分的板子
3、写好check函数

AC代码如下: 

#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;const int N  = 50010;
int L,n,m;
int a[N];bool check(int x)
{//cnt,表示移动石头的次数,last 表示指向没有移动过的石头int cnt = 0,last  = 0;for(int i=1;i<=n;i++){//判断一下两个石头之间的距离是否小于这个最短跳跃距离if(a[i] - a[last] < x){cnt ++; //移动石头次数增加}else{last = i; //last永远指在没被挪动的石头上面}if(cnt > m) return false;}return true;
}int main()
{scanf("%d %d %d",&L,&n,&m);//因为算是起点和终点的话是N+2个数for(int i=1;i<=n;i++) scanf("%d",&a[i]);a[n+1] = L; //终点int l = 1,r = L;/*这里为啥不用左模板 是因为 在一个有序的数组下,我们想要找到最长的那个一定是在最右边。*/while(l < r){int mid = l + r + 1 >> 1;if(check(mid)) l = mid;else r = mid - 1;}cout << l << endl;return 0;
}

如果last那块不懂的话大家可以拿题目给的样例去手动模拟一下,好好理解代码的过程,感谢观看~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十一章:大模型之Adaptation

参考链接&#xff1a;https://github.com/datawhalechina/so-large-lm/tree/main 1 引言 为什么需要Adaptation? 在⾃动化和⼈⼯智能的时代&#xff0c;语⾔模型已成为⼀个迅速发展的领域。从语⾔模型的训练⽅式来说&#xff0c;语⾔模型&#xff0c;例如GPT-3&#xff0c;…

JAVA算法—排序

目录 *冒泡排序&#xff1a; *选择排序&#xff1a; 插入排序&#xff1a; 快速排序&#xff1a; 总结&#xff1a; 以下全部以升序为例 *冒泡排序&#xff1a; 引用&#xff1a; 在完成升序排序时&#xff0c;最大的元素会经过一轮轮的遍历逐渐被交换到数列的末尾&#…

项目实战——Qt实现FFmpeg音视频转码器

文章目录 前言一、移植 FFmpeg 相关文件二、绘制 ui 界面三、实现简单的转码四、功能优化1、控件布局及美化2、缩放界面3、实现拖拽4、解析文件5、开启独立线程6、开启定时器7、最终运行效果 五、附录六、资源自取 前言 本文记录使用 Qt 实现 FFmepg 音视频转码器项目的开发过…

LeetCode 410. 分割数组的最大值

一、题目 1、题目描述 给定一个非负整数数组 nums 和一个整数 k &#xff0c;你需要将这个数组分成 k 个非空的连续子数组。 设计一个算法使得这 k 个子数组各自和的最大值最小。 2、接口描述 ​ class Solution { public:int splitArray(vector<int>& nums, int …

Kubernetes/k8s之HPA,命名空间资源限制

Horizontal Pod Autoscaling:po的水平自动伸缩 这是k8s自带的模块 pod占用cpu比例达到一定的阀值&#xff0c;会触发伸缩机制。 根据cpu的阀值触发伸缩机制 replication controller 副本控制器 控制pod的副本数 deployment controller 节点控制器 部署pod hpa控制副本的数…

7- Python 工匠:编写地道循环的两个建议

Python 工匠&#xff1a;编写地道循环的两个建议 前言 这是 “Python 工匠”系列的第 7 篇文章。[查看系列所有文章] 循环是一种常用的程序控制结构。我们常说&#xff0c;机器相比人类的最大优点之一&#xff0c;就是机器可以不眠不休的重复做某件事情&#xff0c;但人却不行…

深度学习(3)--递归神经网络(RNN)和词向量模型Word2Vec

目录 一.递归神经网络基础概念 二.自然语言处理-词向量模型Word2Vec 2.1.词向量模型 2.2.常用模型对比 2.3.负采样方案 2.4.词向量训练过程 一.递归神经网络基础概念 递归神经网络(Recursive Neural Network, RNN)可以解决有时间序列的问题&#xff0c;处理诸如树、图这样…

Ubuntu查看操作系统版本

Ubuntu查看版本 法三好用 法一&#xff1a;cat /proc/version 只能查出大版本号 rootHKSZF-ZW-172-19-146-176:~# cat /proc/version Linux version 4.15.0-112-generic (builddlcy01-amd64-027) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #113-Ubuntu SMP Thu J…

蓝桥杯(C++ 最大开支 优先队列)

优先队列&#xff1a; 蓝桥杯&#xff08;C 整数删除 优先队列 &#xff09;-CSDN博客 思路&#xff1a; 1、每个人依此选择项目&#xff0c;每个人选项目时都&#xff08;选择当下花费增加最多的项目&#xff09;&#xff0c;若项目i的门票价格为kxb&#xff0c;那么增加一个…

Spring SpEL在Flink中的应用-SpEL详解

前言 Spring 表达式语言 Spring Expression Language&#xff08;简称 SpEL &#xff09;是一个支持运行时查询和操做对象图的表达式语言 。 语法相似于 EL 表达式 &#xff0c;但提供了显式方法调用和基本字符串模板函数等额外特性。SpEL 在许多组件中都得到了广泛应用&#x…

HTML+JavaScript-02

数组 JavaScript中的数组用于在单一变量存储多个值&#xff0c;其实跟java中的数组是一样的&#xff0c;都是通过索引来访问这些值的。 创建数组 方式一&#xff1a;&#xff08;推荐&#xff09; var cars ["北京现代", "丰田", "五菱宏光"…

EDA-数据探索-pandas自带可视化-iris

# 加载yellowbrick数据集 import os import pandas as pd FIXTURES os.path.join(os.getcwd(), "data") df pd.read_csv(os.path.join(FIXTURES,"iris.csv")) df.head()sepal_lengthsepal_widthpetal_lengthpetal_widthspecies05.13.51.40.2setosa14.93…

最新AI系统ChatGPT网站系统源码,支持AI绘画,GPT语音对话,ChatFile文档对话总结,DALL-E3文生图,MJ绘画局部编辑重绘

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…

springboot aop 自定义注解形式

引入pom <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>自定义注解 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; impo…

数仓建设学习路线(三)元数据管理

什么是元数据&#xff1f; 简单来说就是描述数据的数据&#xff0c;更直白来说就是描述表名、表制作者、表字段、表生命周期、表存粗等信息的数据 元数据该如何管理 工具化 开源&#xff1a; 可通过atlas获取表依赖及信息做二次开发&#xff0c;或者完成可视化界面 平台化&am…

【网络安全 -> 防御与保护】专栏文章索引

为了方便 快速定位 和 便于文章间的相互引用等 作为一个快速准确的导航工具 网络安全——防御与保护 &#xff08;一&#xff09;.信息安全概述 &#xff08;二&#xff09;.防火墙组网

从k8s当中学习go cli脚手架开发利器-cobra

1.前言 大部分的项目都会引入cobra来作为项目的命令行解析工具&#xff0c;k8s当中大量使用cobra&#xff0c;学习借鉴一下k8s当中是如何使用cobra&#xff0c;在此记录一下。 2.cobra简介 cobra是一个提供简单接口来创建强大的现代CLI界面的库类似git & git tools&…

计组与原理:系统总线

大家好啊&#xff0c;这里来到计组第二部分内容&#xff1a;系统总线 跳转上一篇&#xff1a;计组原理&#xff1a;系统概论与基本组成 系统总线 1.总线的基本概念单总线结构框图面向 CPU 的双总线结构框图以存储器为中心的双总线结构框图 2.总线的分类片内总线系统总线通信总线…

Linux之权限(内容详细,细节满满)

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 Linux 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力 目录 一.前言 二.权限修改的两种方法 …

Python学习02—Python开发环境的配置

1.Python语言的简单概述 Python的诞生离不开一个人&#xff0c;他就是Guido van Rossum&#xff0c;他在1989年的圣诞节期间&#xff0c;在荷兰的阿姆斯特丹度假&#xff0c;为了打发假期时间&#xff0c;就想着设计一种编程语言&#xff0c;后期便诞生了Python Python语言拥…