二分答案跳石头游戏

news/2024/5/19 3:41:04/文章来源:https://blog.csdn.net/weixin_73865269/article/details/137382858

步骤:
 

  1. 输入: 用户输入了三个整数,分别表示石头的总长度l,石头的数量n,以及最多可以撤去的石头数量m。

  2. 初始化石头位置数组: 创建一个长度为n+2的数组arr,用于存储每块石头的位置。数组的第一项和最后一项分别表示起点和终点的位置,因此初始化为0和l。

  3. 计算最小相邻石头间距: 循环读入每块石头的位置,并计算出最小的相邻石头间距,存储在变量longmin中。

  4. 二分查找: 初始化二分查找的左右边界,左边界为最小相邻石头间距,右边界为总长度l。在二分查找的过程中,通过调用check函数来判断当前的最大跳跃长度是否满足条件。

  5. 判断函数check: check函数用于判断在给定的最大跳跃长度下是否可以跳过最多可以撤去的石头数量。在每次跳跃时,遍历石头数组,根据当前位置和上一次跳跃位置计算跳跃距离,如果距离大于等于最大跳跃长度,则更新当前位置;否则,说明无法跳过这块石头,撤去数量加一。最后比较撤去数量是否超过了允许的最大值m,如果超过则返回0,否则返回1。

  6. 输出结果: 输出最终的最大跳跃长度。

#include<iostream>
using namespace std;// 全局变量,分别表示石头的总长度l,石头的数量n,以及最多可以撤去的石头数量
int n, max_removed_stones, l;// 函数check用于判断是否可以在最大跳跃长度为x的情况下跳过最多可以撤去的石头数量
int check(int x, int arr[]) {int now = 0; // 当前所在位置int removed_stones = 0; // 记录已经撤去的石头数量for(int i = 1; i <= n + 1; i++) {if(arr[i] - arr[now] >= x) // 如果当前位置与上一次跳跃位置之间的距离大于等于xnow = i; // 更新当前位置为跳跃位置else removed_stones++; // 否则,说明无法跳过这块石头,撤去数量加一}if(removed_stones > max_removed_stones) // 如果撤去的石头数量超过了允许的最大值return 0; // 返回0,表示无法跳过这么多石头else return 1; // 否则返回1,表示可以跳过这么多石头
}int main() {// 输入石头的总长度l,石头的数量n,以及最多可以撤去的石头数量max_removed_stonescin >> l >> n >> max_removed_stones; // 创建一个长度为n+2的数组,用于存储每块石头的位置int arr[n + 2]; arr[0] = 0; // 第一块石头位置为0arr[n + 1] = l; // 最后一块石头位置为总长度l// 初始化最小跳跃长度为一个较大的值,这里使用1左移10位来表示2^10int longmin = 1 << 10; // 循环读入每块石头的位置,并计算出最小的相邻石头间距for(int i = 1; i <= n; i++) {cin >> arr[i];longmin = min(longmin, arr[i] - arr[i - 1]);}int left = longmin, right = l; // 初始化二分查找的左右边界int mid; // 定义中间位置int max_jump_distance; // 记录最终的最大跳跃长度// 二分查找,直到左右边界重合while(left <= right) {mid = (left + right) / 2; // 计算中间位置if(check(mid, arr) == 1) { // 如果当前中间位置的跳跃长度满足条件left = mid + 1; // 缩小左边界,并记录当前的最大跳跃长度max_jump_distance = mid;} else {right = mid - 1; // 否则,缩小右边界}}// 输出最终结果,即最大跳跃长度cout << max_jump_distance << endl; return 0;
}

有个二分答案的算法,大部分时间复杂度为O(nlogn)。

二分答案(Binary Search for Answer)是一种常见的搜索技巧,通常用于解决满足某种条件的最优解问题。该技巧通常适用于满足以下两个条件的问题:

  1. 单调性:问题的解具有单调性,即如果一个解是可行解,那么比它更大的值也必须是可行解,反之,比它更小的值则不是可行解。

  2. 可判定性:可以判断给定的解是否满足问题的条件。

在这种情况下,可以使用二分答案来找到满足条件的最优解。该技巧的基本思路如下:

  1. 确定搜索范围:首先确定一个合适的搜索范围,通常是问题解的可能范围,比如最小可能解和最大可能解之间的范围。

  2. 二分查找:在搜索范围内进行二分查找,每次确定一个中间值,判断中间值是否满足问题的条件。

  3. 调整搜索范围:根据中间值是否满足条件,调整搜索范围。如果满足条件,则将搜索范围缩小为左半部分;否则,将搜索范围缩小为右半部分。

  4. 重复步骤2和3,直到确定出满足条件的最优解或者搜索范围缩小到一个可以接受的范围内。

二分答案技巧在很多问题中都能发挥作用,比如在最小化或最大化某个值的问题中,寻找满足某种约束条件的最优解等。

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

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

相关文章

mysql解锁表及查看表是否被锁

1、查进程&#xff0c;查找被锁表的那个进程的ID show processlist; 2、通过查询结果&#xff0c;找到要杀掉的进程&#xff0c;kill掉锁表的进程ID kill id; 3、查询是否锁表 show OPEN TABLES where In_use > 0; 1.delete------ 是逐行删除速度极慢&#xff0c;不适合…

网络安全---非对称数据加密签名验证

一、课题描述 三位同学一组完成数据的非对称加密和数字签名验证传输。 三位同学分别扮演图中 Alice、Bob 和 CA 三个角色&#xff0c;Bob 和 Alice 从 CA 中获得数字证书、Bob 向 Alice 发送秘密发送一段加密并签名后的信息&#xff0c;Alice 获取 Bob 发送的加密信息&#x…

<网络> 网络Socket编程基于TCP协议模拟简易网络通信

目录​​​​​​​ 前言&#xff1a; 一、字符串回响 &#xff08;一&#xff09;程序结构 &#xff08;二&#xff09;初始化服务器 &#xff08;三&#xff09;启动服务器 1. 处理连接请求 2. 业务处理 3. 回调函数 &#xff08;四&#xff09;填充server源文件 &…

微服务项目sc2024通用Base工程

1. cloud-provider-payment8001 2.pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"ht…

linux是乱码,linux乱码的解决方法 -,Linux运维入门零基础

保存退出,reboot系统即可… 2.X-window(图形界面)的乱码 vi /etc/sysconfig/i18n LANG“zh_CN.GB18030:zh_CN.GB2312:zh_CN.GBK:zh_CN:en_US.UTF-8:en_US:en:zh:zh_TW:zh_CN.BIG5” LANGUAGE“zh_CN.GB18030:zh_CN.GB2312:zh_CN.GBK:zh_CN:en_US.UTF-8:en_US:en:zh:zh_TW:z…

Peter算法小课堂—线性dp

今天&#xff0c;你读完这篇文章&#xff0c;普及组的动态规划已经可以秒了。 最长公共子序列 求两个数列的最长公共子序列&#xff08;Longest Common Subsequence&#xff0c;LCS&#xff09;的长度。 数列 X 和 Y 的最长公共子序列 Z&#xff0c;是指 Z 既是 X 的子序列&…

TypeScript—详解、小案例(配合源代码)

简介&#xff1a;TypeScript是微软开发的 JavaScript 的超集&#xff0c;TypeScript兼容JavaScript&#xff0c;可以载入JavaScript代码然后运行。TypeScript与JavaScript相比进步的地方 包括&#xff1a;加入注释&#xff0c;让编译器理解所支持的对象和函数&#xff0c;编译器…

二分查找与搜索树高频问题-算法通关村

二分查找与搜索树高频问题-算法通关村 1 基于二分查找的拓展问题 1.1 山脉数组的封顶索引 LeetCode852&#xff1a;这个题的要求有点啰嗦&#xff0c;核心意思就是在数组中的某位位置i开始&#xff0c;从0到 i 是递增的&#xff0c;从i1到数组最后是递减的&#xff0c;让你找到…

echarts地图自定义label属性以及引入china.js

效果图: 要点1:calc函数 重点&#xff1a;在于mapChart的height可以写成函数以便适配不同尺寸&#xff1b; <div class"content-map"><div class"wai-top-box" style"width: 100%; height: 100%"><div id"mapChart" s…

WebGPU vs. 像素流

在构建 Bzar 之前&#xff0c;我们讨论过我们的技术栈是基于在云上渲染内容的像素流&#xff0c;还是基于使用设备自身计算能力的本地渲染技术。 由于这种选择会极大地影响项目的成本、可扩展性和用户体验&#xff0c;因此在开始编写一行代码之前&#xff0c;从一开始就采取正确…

消息队列MQ(面试题:为什么使用MQ)

一、什么是mq? MQ全称 Message Queue&#xff08;消息队列&#xff09;&#xff0c;是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信&#xff0c;解耦。 二、常见的mq产品 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq RabbitMQ: One broker …

LangChain学习笔记—RAG(检索增强生成)

LangChain LangChain是一个软件开发框架&#xff0c;可以更轻松地使用大型语言模型&#xff08;LLM&#xff09;创建应用程序。它是一个具有 Python 和 JavaScript 代码库的开源工具。LangChain 允许开发人员将 GPT-4 等 LLM 与外部数据相结合&#xff0c;为聊天机器人、代码理…

设计模式 -- 发布订阅模式

发布订阅模式&#xff1a; 订阅者把自己想订阅的事件注册到调度中心&#xff0c;当发布者发布该事件到调度中心&#xff0c;也就是该事件触发时&#xff0c;由调度者统一调度订阅者注册到调度中心的处理代码。 在javaScript 中我们一般使用事件模型来代替传统的发布订阅模式。 …

分布式锁-redission

5、分布式锁-redission 5.1 分布式锁-redission功能介绍 基于setnx实现的分布式锁存在下面的问题&#xff1a; 重入问题&#xff1a;重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff0c;可重入锁的意义在于防止死锁&#xff0c;比如HashTable这样的代码…

【Linux】虚拟机连不上外网 (1),2024百度网络安全岗面试真题收录解析

vi /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTOstatic ONBOOTyes IPADDR? NETMASK? GATEWAY? dns18.8.8.8 dns1144.144.144.144 这两个必填 自我介绍一下&#xff0c;小编13年上海交大毕业&#xff0c;曾经在小公司待过&#xff0c;也去过华为、OPPO等大厂…

【测试开发学习历程】python迭代、可迭代对象、迭代器、生成器

1 迭代Iteration 迭代Iteration&#xff1a;所谓迭代就是重复运行一段代码语句块的能力&#xff0c;就好比在一个容器中进行一层一层遍历数据&#xff0c;在应用过程中for循环最为突出。迭代就是从某个容器对象中逐个地读取元素&#xff0c;直到容器中没有元素为止。迭代迭代&…

信息泄露漏洞的JS整改方案

引言 &#x1f6e1;️ 日常工作中&#xff0c;我们经常会面临线上环境被第三方安全厂商扫描出JS信息泄露漏洞的情况&#xff0c;这给我们的系统安全带来了潜在威胁。但幸运的是&#xff0c;对于这类漏洞的整改并不复杂。本文将介绍几种可行的整改方法&#xff0c;以及其中一种…

IPEX-LLM(原名BigDL-LLM)环境配置

IPEX-LLM 是一个为Intel XPU (包括CPU和GPU) 打造的轻量级大语言模型加速库&#xff0c;在Intel平台上具有广泛的模型支持、最低的延迟和最小的内存占用。 您可以使用 IPEX-LLM 运行任何 PyTorch 模型&#xff08;例如 HuggingFace transformers 模型&#xff09;。在运行过程中…

Canal的使用场景!!!

1、保持redis和mysql连接的一致性&#xff1a;通常使用延迟双删功能&#xff08;具有弊端&#xff09; 解决方案&#xff1a;可以使用canal监听数据库的变化&#xff08;删改&#xff09;&#xff0c;一旦出现此类操作&#xff0c;立即删除redis中的对应数据&#xff0c;直至下…

SuperMap GIS基础产品FAQ集锦(202403)

一、SuperMap GIS基础产品桌面GIS-FAQ集锦 问题1&#xff1a;【iDesktop】安装了idesktop 11i&#xff0c;现想进行插件开发&#xff0c;根据安装指南安装SuperMap.Tools.RegisterTemplate.exe&#xff0c;运行多次均失败 【问题原因】该脚本是之前老版本针对VS2010写的&…