「蓝桥杯」扫地机器人

news2024/11/15 18:25:56

扫地机器人

题目描述

小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所示。

1647553622012

走廊内部署了 K 台扫地机器人,其中第 i 台在第 A_i 个方格区域中。已知扫地机器人每分钟可以移动到左右相邻的方格中,并将该区域清扫干净。

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

  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。

接下来 KK 行,每行一个整数 A_i。

其中, 1 ≤ K < N ≤ 1 0 5 1 \leq K < N \leq 10^5 1K<N105 1 ≤ A i ≤ N 1 \leq A_i \leq N 1AiN

输出描述

输出一个整数表示答案。

样例

#1

10 3
5
2
10
6

提示

解析

题目要求多个机器人一起扫地,需要最少多少时间可以全部扫完,根据贪心思想,既然我们有 K 台机器人,路程为 N,那么我们自然是要把路程均分给每台机器人才可以得到最少时间,每台机器人负责 N/K 区域。

题目还说机器人起点出发最终会回到起点,即 a → b 、 b → c 、 c → d a\rightarrow b、b\rightarrow c、c \rightarrow d abbccd 最终还得 d → c 、 c → b 、 b → a d \rightarrow c、c \rightarrow b、b \rightarrow a dccbba 回来,也就是说扫了 4 个距离,花费了 6 时间,不管从 a 、 b 、 c 、 d a、b、c、d abcd 那个位置为起点,亦是如此,因此我们可以根据机器人扫的距离得到时间 ( 距离 − 1 ) × 2 (距离 - 1) \times 2 (距离1)×2

给定一个每台机器人能扫的距离 m,校验每台机器人扫了 m 距离后,能否扫完整个路程,若可以则继续缩小 m ,否则扩大 m,从这里就能看得出来只是二分思想。

分析一下机器人扫地情况:

1647555417796

  • A 2 A_2 A2 机器人可以扫到 L
  • A 1 A_1 A1 机器人左边已经被扫过了,不用扫了

AC Code

public class Main {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static StreamTokenizer st = new StreamTokenizer(br);
	static PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));

	public static void main(String[] args) throws Exception {
		int n = nextInt(), m = nextInt();
		int[] A = new int[n + 1];
		for(int i = 1; i <= m; i++) A[i] = nextInt();
		Arrays.sort(A, 1, m + 1);
		int left = 0, right = n;
		int ans = 0;
		while(left <= right) {
			int mid = (left + right) >>> 1;
			if(check(A, mid, m, n)) {
				right = mid - 1;
				ans = mid;
			} else {
				left = mid + 1;
			}
		}
		System.out.println((ans - 1) * 2);
	}
	
	public static boolean check(int[] A, int p, int m, int n) {
		int L = 0; // 从左边开始,机器人已经扫完了 L 距离
		for(int i = 1; i <= m; i++) {
			if(A[i] - p <= L) { // 机器人 A[i] 可以扫到 L 
				if(A[i] <= L && A[i] + p > L) // 机器人 A[i] 左边已经被扫完了,不用扫了
                    L = A[i] + p - 1; 
				else L = L + p;
			} else { // 无法扫到 L
				return false;
			}
		}
		return L >= n; // 是否扫完
	}
	
	public static int nextInt() throws Exception {
		st.nextToken();
		return (int) st.nval;
	}
}

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

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

相关文章

图的着色学习

图的边着色 排课表问题&#xff1a;设有m位教师&#xff0c;n个班级&#xff0c;教师xi要给班级yj上pij节课&#xff0c;求如何在最少节次排完所有课。 图论模型&#xff1a;令X{x1,x2,…,xm}&#xff0c;Y{y1,y2,…,yn}&#xff0c;xi与yj间连pij条边&#xff0c;得偶图G(X,…

【prism系列】子窗口中如何实现区域(Region)管理

前言 在之前系列文章《Region的用法》中&#xff0c;我提到无法在子窗口中实现区域管理&#xff0c;最近经过尝试发现其实是可以的&#xff0c;只是少了一个步骤而已&#xff01;Region具体细节还请参考这篇。 【Prism系列】Region的用法_prism region_code bean的博客-CSDN博…

一文全览各种 ES 查询在 Java 中的实现

ElasticSearch 进阶&#xff1a;一文全览各种 ES 查询在 Java 中的实现 以下为摘录自用&#xff0c;非本人撰写 本文基于elasticsearch 7.13.2版本&#xff0c;es从7.0以后&#xff0c;发生了很大的更新。7.3以后&#xff0c;已经不推荐使用TransportClient这个client&#xf…

浅谈自动驾驶技术

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

【Linux】5. 开发工具的使用(gcc/gdb/makefile)

Linux编译器-gcc/g使用 1. 复习编译链接过程 2. 理解选项当中的含义 这些选项难记住&#xff0c;怎么办&#xff1f; – ESc - iso(对应) gcc选项 -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面-S 编译到汇编语言不进行汇编和链接-c 编译到目标代码-o …

基于OpenHarmony开发的健康生活应用(ArkTS)

健康生活应用&#xff08;ArkTS&#xff09; 介绍 本篇Codelab介绍了如何实现一个简单的健康生活应用&#xff0c;主要功能包括&#xff1a; 用户可以创建最多6个健康生活任务&#xff08;早起&#xff0c;喝水&#xff0c;吃苹果&#xff0c;每日微笑&#xff0c;刷牙&#…

【python语法大练习】【题库】Python 基础练习题库大全

【题库】Python 基础练习题库大全 编程题1. 从键盘输入两个数&#xff0c;求它们的和并输出2. 从键盘输入三个数到a,b,c中&#xff0c;按公式值输出 (input().split())3. 输出“人生苦短&#xff0c;我学Python”4. 计算 111213...m (sum函数)5. 计算分段函数[1] (format)6. 阶…

Ubuntu连接Xshell

Ubuntu连接Xshell 1、安装ssh&#xff0c;开启服务 1、安装ssh sudo apt-get install openssl-server 2、启动ssh服务 /etc/init.d/ssh start 3、修改文件&#xff0c;允许远程登陆 sudo vi /etc/ssh/sshd_config PermitRootLogin prohibit-password #默认为禁止登录 PermitR…

ESP-IDF中的event loop library事件循环库

文章目录 简介事件循环库的使用示例&#xff1a; 简介 Event Loop Library是一种信号传递机制&#xff0c;事件循环库允许组件声明事件&#xff0c;其他组件可以向其注册处理程序——当这些事件发生时将执行的代码。这允许松散耦合的组件将所需的行为附加到其他组件的状态更改…

华为OD机试(20222023)真题目录 + 考点 + 通过率

目录 华为OD机试是什么&#xff1f;华为OD面试流程&#xff1f;华为OD机试通过率高吗&#xff1f;华为OD薪资待遇&#xff1f;华为OD晋升空间&#xff1f;华为OD刷题列表&#xff0c;一天三题&#xff0c;刷出算法新高度&#xff0c;刷出人生新际遇。 大家好&#xff0c;我是哪…

基于Hebb学习的深度学习方法总结

基于Hebb学习的深度学习方法总结 0 引言1 前置知识1.1 Hebb学习规则1.2 Delta学习规则 3 SoftHebb学习算法3.1 WTA(Winner Take All)3.2 SoftHebb3.3 多层Hebb网络3.4 Hebb学习的性能测评 参考文献 0 引言 总所周知&#xff0c;反向传播算法&#xff08;back-propagating, BP&…

你想要的【微前端】都在这里了! | 京东云技术团队

作者&#xff1a;京东零售 郑炳懿 开篇&#xff1a; 如果你不知道微前端是什么&#xff0c;或者不知道微前端能解决什么问题&#xff0c;那么你可能不需要微前端。 在我看来&#xff0c;对于每一个没有使用过的新技术&#xff0c;都应该有以下几个过程&#xff1a; 1、调研…

【Android签名文件META-INF】

android安装包apk中&#xff0c;有一个META-INF文件夹&#xff0c;该文件夹下面必须有以下几个扩展名的文件&#xff1a;.SF&#xff0c;.RSA&#xff0c;*.MF。一般为MANIFEST.MF&#xff0c;包名.SF&#xff0c;包名.RSA&#xff08;也有可能是EC或者DSA&#xff09;。 其中…

聊聊ClickHouse向量化执行引擎-过滤操作

俄罗斯Yandex开发的ClickHouse是一款性能黑马的OLAP数据库&#xff0c;其对SIMD的灵活运用给其带来了难以置信的性能。本文我们聊聊它如何对过滤操作进行SIMD优化。 基本思想 1、有一个数组data&#xff0c;即ColumnVector::data&#xff0c;存放数据 2、使用uint8类型&#xf…

Metasploit渗透测试:工作区使用帮助

目录 ​编辑 help 查看工作区 添加工作区 显示工作区详情

《智能手机心率和呼吸率测量算法的前瞻性验证》阅读笔记

目录 一、论文摘要 1.背景 2.方法 3.结果 4.结论 二、论文十问 Q1&#xff1a;论文试图解决什么问题&#xff1f; Q2&#xff1a;这是否是一个新的问题&#xff1f; Q3&#xff1a;这篇文章要验证一个什么科学假设&#xff1f; Q4&#xff1a;有哪些相关研究&#xff…

No.046<软考>《(高项)备考大全》【专项2】《案例分析 - 计算题(中)》

案例分析 - 计算题&#xff08;中&#xff09; 章节其他部分3 成本管理3.1 挣值分析3.1.1 概念3.1.2 公式3.1.3 参数关系3.1.4 题目 3.2 挣值管理3.3 预测3.3.1 ETC(完成尚需估算)3.3.2 EAC(完工估算)3.3.3 BAC(完工预算) 3.4 绩效审查 章节其他部分 案例分析 - 计算题&#x…

27从零开始学Java之详解复杂的二维数组与多维数组

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在前几篇文章中&#xff0c;壹哥给大家介绍了Java里的一维数组&#xff0c;涉及到了数组的创建初始化…

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程

分布式系统中的相关概念 &#xff08;一&#xff09;互联网项目架构目标-特点 &#xff08;二&#xff09;互联网项目架构目标-目标 &#xff08;三&#xff09;集群和分布式 &#xff08;四&#xff09;架构演进 Dubbo概述 &#xff08;一&#xff09;dubbo概述 1、dub…

Oracle 修改 sga_target 参数设置,虚拟内存值设置

记录一次Oracle数据库单实例维护里程。 数据库启动报错 sga_target参数设置太小&#xff0c;导致数据库无法启动&#xff0c;这种情况下需要修改数据库的spfile的sga_target参数 修复过程如下。 1、启动报错 2、根据spfile 创建pfile 文件。 create pfile‘/app/oracle/i…