扫地机器人(蓝桥杯)

文章目录

  • 扫地机器人
    • 题目描述
    • 解题思路
    • 二分+贪心

扫地机器人

题目描述

小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所 示。
在这里插入图片描述
走廊内部署了 K 台扫地机器人,其中第 i 台在第 Ai 个方格区域中。已知扫地机器人每分钟可以移动到左右相邻的方格中,并将该区域清扫干净

请你编写一个程序,计算每台机器人的清扫路线,使得

  1. 它们最终都返回出发方格,

  2. 每个方格区域都至少被清扫一遍,

  3. 从机器人开始行动到最后一台机器人归位花费的时间最少。

注意多台机器人可以同时清扫同一方块区域,它们不会互相影响

输出最少花费的时间。在上图所示的例子中,最少花费时间是 6。第一台路线:2-1-2-3-4-3-2,清 扫了 1、2、3、4 号区域。第二台路线 5-6-7-6-5,清扫了 5、6、7。第三台路线 10-9-8-9-10,清扫了 8、9 和 10。

输入描述

第一行包含两个整数 N 和 K。

接下来 K 行,每行一个整数 Ai。

输出描述

输出一个整数表示答案

样例输入

10 3
5
2
10

样例输出

6

解题思路

首先这题需要找到最少花费时间,那么我们先二分机器人的扫地范围,最小为0,最大为n,一旦所有机器人能扫完全程,说明该值是符合条件的,然后二分缩小范围,直到找出最小的值,刚好所有机器人能够扫完全程。

check函数的实现:

  • 首先我们需要明确,mid是机器人的扫地步数,如果mid为1,那么机器人就扫机器人当前的格子。
  • 然后开始贪心思路:我们尽可能让机器人先扫完自己右边的,然后有多余的步数,再扫自己左边的。
  • 情况一:如果a[i]-x>s,就说明机器人扫不完自己右边的格子,直接返回false
    在这里插入图片描述
  • 情况二:如果前一个机器人往右多扫了几格,S应该更新为s = a[i] + x - 1
    在这里插入图片描述
  • 如果上述两种情况都不属于,将s向前推进x个方格s += x
    在这里插入图片描述
  • 最后,如果S大于等于地图范围n,返回true,否则说明机器人没走完全程,返回false
    在这里插入图片描述

二分+贪心

这段代码是一个用于解决扫地机器人问题的C++程序。程序的目的是通过编写一个算法,使得多台扫地机器人能够高效地清扫一个由N个方格区域组成的走廊,并最终返回各自的出发点。下面是对代码的详细注释:

#include<bits/stdc++.h> // 引入C++标准库的头文件,bits/stdc++.h是一个非标准的宏定义,包含了常用的头文件
using namespace std; // 使用标准命名空间,简化标准库中的类和函数的引用// 定义全局变量
int n, k; // n表示走廊的方格数,k表示扫地机器人的数量
int a[100010]; // 数组a用于存储k台扫地机器人的初始位置// check函数用于判断在给定的清扫时间x下,是否所有方格都被清扫过
bool check(int x) {int s = 0; // s表示当前已清扫的方格区域的右边界for(int i = 0; i < k; i++) { // 遍历所有的扫地机器人if(a[i] - x > s) return false; // 如果机器人i需要清扫的区域超出了当前已清扫的范围,则返回falseif(s >= a[i]) s = a[i] + x - 1; // 如果当前已清扫的范围已经包含了机器人i的位置,则更新s为机器人i的清扫结束位置else s += x; // 否则,将s向前推进x个方格}return s >= n; // 如果s到达或超过了走廊的最后一个方格,则说明所有方格都被清扫过,返回true
}int main() {cin >> n >> k; // 从标准输入读取走廊的方格数和机器人的数量for(int i = 0; i < k; i++) // 遍历并读取每台机器人的初始位置cin >> a[i];sort(a, a + k); // 对机器人的初始位置进行排序,这有助于后续的二分查找// 二分查找,查找满足条件的最小时间xint l = 0, r = n; // 定义二分查找的左右边界,初始时左边界为0,右边界为走廊的方格数nwhile(l < r) { // 当左边界小于右边界时,继续查找int mid = l + r >> 1; // 计算中间值midif(check(mid)) r = mid; // 如果在时间x下可以完成清扫,则尝试查找更小的时间else l = mid + 1; // 否则,需要增加时间}cout << 2 * (r - 1) << endl; // 输出最终结果,即2倍的最小时间(因为题目要求的是最少花费的时间的两倍)return 0; // 程序结束
}

这段代码使用了二分查找算法来找到满足条件的最小时间x。在每次迭代中,它都会检查一个中间值是否满足条件,然后根据结果调整查找范围。最终找到的最小时间x是满足所有方格至少被清扫一次且机器人能够返回出发点的最小时间。由于题目要求输出的是这个时间的两倍,所以在输出时乘以2。

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

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

相关文章

Transformer模型-用jupyter演示逐步计算attention

学习transformer模型-用jupyter演示如何计算attention&#xff0c;不含multi-head attention&#xff0c;但包括权重矩阵W。 input embedding&#xff1a;文本嵌入 每个字符用长度为5的向量表示&#xff1a; 注意力公式&#xff1a; 1&#xff0c;准备Q K V&#xff1a; 先 生…

漏洞扫描神器:Netsparker 保姆级教程(附链接)

一、介绍 Netsparker是一款专业的网络安全扫描工具&#xff0c;用于自动化地发现和修复网站和Web应用程序中的安全漏洞。它提供了全面的安全测试&#xff0c;包括SQL注入、跨站脚本攻击、远程文件包含、命令注入等常见的安全漏洞。 Netsparker具有以下特点&#xff1a; 自动化…

AI预测福彩3D第24弹【2024年4月2日预测--第6套算法开始计算第1次测试】

今天&#xff0c;咱们进行第6套算法测试&#xff0c;本套算法将结合012路直选共27种组合&#xff0c;同时考虑了对012路的和值进行统计分析。今天为第1次测试&#xff0c;好了&#xff0c;废话不多说了。直接上结果~ 仍旧是分为两个方案&#xff0c;1大1小。 经过人工神经网络计…

Neo4j数据库(一)

目录 新建节点 Neo4j CQL创建具有属性的节点 多个标签到节点 单个标签到关系 MATCH命令 RETURN命令&#xff1a; Neo4j CQL - MATCH & RETURN匹配和返回 总结&#xff1a;本文介绍了Neo4j的CREATE&#xff0c;MATCH&#xff0c;RETURN的基本操作 新建节点 Neo4j创建一…

护眼台灯怎么选看哪些指标?护眼灯十大品牌推荐

在追求高效工作与学习的同时&#xff0c;如何保护视力健康&#xff0c;避免长时间用眼带来的疲劳与伤害&#xff0c;已成为现代人关注的焦点。护眼台灯作为提升用眼环境的重要工具&#xff0c;其选择显得尤为关键。那么&#xff0c;面对市面上琳琅满目的护眼台灯产品&#xff0…

小白的第一次sql注入实战

前言 当时最初接触安全的时候拿下的第一个shell&#xff0c;还是比较兴奋的&#xff0c;忽略一下文章写的很水。 有id尝试sql注入 找这种sql注入的站用sql检索就行了&#xff0c;但是最好挂代理用谷歌搜索&#xff0c;百度的话搜sql注入的很多被别人打过了&#xff0c;导致链…

Rust 机器学习图形库 petgraph

一、介绍 Petgraph 是一个开源的图数据结构库&#xff0c;提供了非常丰富的图形类型和算法&#xff0c;并且支持将图形以 Graphviz 格式输出&#xff0c;还允许你为图的节点和边赋予任意类型的数据&#xff0c;从而能够灵活地处理和表示复杂的数据关系。 Petgraph 支持边的方…

备战蓝桥杯---贪心刷题2

话不多说&#xff0c;直接看题&#xff1a; 首先我们大致分析一下&#xff0c;先排序一下&#xff0c;Kn&#xff0c;那就全部选。 当k<n时&#xff0c;k是偶数&#xff0c;那么结果一定非负&#xff0c;因为假如负数的个数有偶数个&#xff0c;那么我们成对选它&#xff0…

Reasoning on Graphs: Faithful and Interpretable Large Language Model Reasonin

摘要 大型语言模型(llm)在复杂任务中表现出令人印象深刻的推理能力。然而&#xff0c;他们在推理过程中缺乏最新的知识和经验幻觉&#xff0c;这可能导致不正确的推理过程&#xff0c;降低他们的表现和可信度。知识图谱(Knowledge graphs, KGs)以结构化的形式捕获了大量的事实…

element-ui-plus el-tree 树形结构如何自定义内容

element-ui-plus el-tree 树形结构如何自定义内容 本文提及的 elementUI 版本 为 elementUI Plus 版本 一、需求 项目中遇到一个需要设置权限的地方&#xff0c;但目录和权限是放在一起的&#xff0c;这样就很不好区分类别&#xff0c;为了区分类别&#xff0c;就需要自定义树…

【Win】修改打印机名字

直接修改注册表容易翻车&#xff0c;手动改变只需要两步 1 定位属性 2 修改名字

Python文件操作命令

文件操作 我知道你最近很累&#xff0c;是那种看不见的、身体上和精神上的疲惫感&#xff0c;但是请你一定要坚持下去。就算无人问津也好&#xff0c;技不如人也好&#xff0c;千万别让烦躁和焦虑毁了你的热情和定力。别贪心&#xff0c;我们不可能什么都有&#xff0c;也别灰心…

为什么都说”一入Java深似海“?

引言 在当今数字化时代&#xff0c;编程已经成为一项至关重要的技能。而在众多编程语言中&#xff0c;Java以其广泛的应用领域和强大的功能特性&#xff0c;吸引了无数开发者的目光。无论是Web开发、移动应用还是大数据处理&#xff0c;Java都发挥着举足轻重的作用。然而&…

C++的字节对齐

什么是字节对齐 参考什么是字节对齐&#xff0c;为什么要对齐? 现代计算机中&#xff0c;内存空间按照字节划分&#xff0c;理论上可以从任何起始地址访问任意类型的变量。但实际中在访问特定类型变量时经常在特定的内存地址访问&#xff0c;这就需要各种类型数据按照一定的规…

纳米软件电源测试系统:如何让电源模块检测更简单?

纳米软件NSAT-8000电源模块测试系统专门为AC-DC、DC-DC电源模块提供一站式测试解决方案。系统适用于电源研发、生产测试场景&#xff0c;并提供测试数据采集、智能分析、故障预测与诊断、维护决策与优化等大数据应用服务。 那么如何用电源测试系统检测电源模块的各项性能指标呢…

docker部署修改主机网络

教学版教程&#xff1a;docker 部署教学版本-CSDN博客文章浏览阅读1.1k次&#xff0c;点赞23次&#xff0c;收藏18次。1&#xff09;docker 部署mysql、redis、nginx ;2)docker compose一键单机部署&#xff1b;3&#xff09;docker网络&#xff1b;4&#xff09;dcocker swarn…

JUC:double-checked locking(DCL) 懒汉单例模式

文章目录 double-checked locking(DCL) 问题解决方法 volatile作用 double-checked locking(DCL) 问题 第一个if用于后续进入的线程&#xff0c;不用再获取锁来判断是否已经创建了对象。第二个if&#xff0c;为的是第一个进入的线程创建对象&#xff0c;以及防止卡在第一个if之…

GEE:获取不同地表类型的Landsat地表温度(Land Surface Temperature,LST)时间序列

作者&#xff1a;CSDN _养乐多_ 本文将分享论文《Google Earth Engine Open-Source Code for Land Surface Temperature Estimation from the Landsat Series》中的基于Landsat时间序列影像计算地表温度的API和获取指定点&#xff08;Land Surface Temperature&#xff0c;LS…

ZCMU操作系统课程实验 - 实验1-Linux的使用

登录 1. 打开这个东西 2. 在 文件 - > 打开 中打卡机房里VMOS文件里的这个东东 3. 然后依次操作下去好了&#xff0c;有红色的选项&#xff0c;我都是选的"Do nothing"。完成后就会出现这样一个黑框框。 4. 让你登录。输入&#xff1a;root。密码&…

Google Hacking从0到1

文章目录 前言1、什么是google搜索1.1基础查询1.2高级搜索1.3使用布尔运算符 2、高级运算符2.1运算符语法2.2常用运算符 3、Google Hacking 基础3.1目录列出3.1.1 查找特定目录3.1.2 查找特定文件3.1.3 服务器版本 3.2目录遍历/目录穿越 4、10个简单的安全搜索5、总结参考 前言…