2731. 移动机器人

2023-10-11 10:15
文章标签 移动机器人 2731

本文主要是介绍2731. 移动机器人,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2731. 移动机器人有一些机器人分布在一条无限长的数轴上,他们初始坐标用一个下标从 0 开始的整数数组 nums 表示。当你给机器人下达命令时,它们以每秒钟一单位的速度开始移动。

给你一个字符串 s ,每个字符按顺序分别表示每个机器人移动的方向。'L' 表示机器人往左或者数轴的负方向移动,'R' 表示机器人往右或者数轴的正方向移动。

当两个机器人相撞时,它们开始沿着原本相反的方向移动。

请你返回指令重复执行 d 秒后,所有机器人之间两两距离之和。由于答案可能很大,请你将答案对 109 + 7 取余后返回。

注意:

  • 对于坐标在 i 和 j 的两个机器人,(i,j) 和 (j,i) 视为相同的坐标对。也就是说,机器人视为无差别的。
  • 当机器人相撞时,它们 立即改变 它们的前进方向,这个过程不消耗任何时间。
  • 当两个机器人在同一时刻占据相同的位置时,就会相撞。

    • 例如,如果一个机器人位于位置 0 并往右移动,另一个机器人位于位置 2 并往左移动,下一秒,它们都将占据位置 1,并改变方向。再下一秒钟后,第一个机器人位于位置 0 并往左移动,而另一个机器人位于位置 2 并往右移动。

    • 例如,如果一个机器人位于位置 0 并往右移动,另一个机器人位于位置 1 并往左移动,下一秒,第一个机器人位于位置 0 并往左行驶,而另一个机器人位于位置 1 并往右移动。

示例 1:

输入:nums = [-2,0,2], s = "RLL", d = 3
输出:8
解释:
1 秒后,机器人的位置为 [-1,-1,1] 。现在下标为 0 的机器人开始往左移动,下标为 1 的机器人开始往右移动。
2 秒后,机器人的位置为 [-2,0,0] 。现在下标为 1 的机器人开始往左移动,下标为 2 的机器人开始往右移动。
3 秒后,机器人的位置为 [-3,-1,1] 。
下标为 0 和 1 的机器人之间距离为 abs(-3 - (-1)) = 2 。
下标为 0 和 2 的机器人之间的距离为 abs(-3 - 1) = 4 。
下标为 1 和 2 的机器人之间的距离为 abs(-1 - 1) = 2 。
所有机器人对之间的总距离为 2 + 4 + 2 = 8 。

示例 2:

输入:nums = [1,0], s = "RL", d = 2
输出:5
解释:
1 秒后,机器人的位置为 [2,-1] 。
2 秒后,机器人的位置为 [3,-2] 。
两个机器人的距离为 abs(-2 - 3) = 5 。

提示:

  • 2 <= nums.length <= 105
  • -2 * 109 <= nums[i] <= 2 * 109
  • 0 <= d <= 109
  • nums.length == s.length 
  • s 只包含 'L' 和 'R' 。
  • nums[i] 互不相同。

题解:

当两个机器人相撞时,它们会沿着原本相反的方向移动。由于机器人之间并没有任何区别,相撞可以看做是穿透,原本左边的机器人相撞后交换为右边的机器人,原本右边的机器人相撞后交换为左边的机器人,这样一来,两个机器人仿佛没有相撞过。因此,我们可以无视相撞,独立计算每个机器人 ddd 秒后所处的位置。
总结三点:

  1. 碰撞是障眼法, 可以看做穿透
  2. 排序+前缀和计算距离和。
     
  3. 求模时求一次和多次没啥区别,可能减少遗漏

概率中的排列组合的思想,考虑一共有多少区间会包括pos[i] - pos[i - 1]这段距离,左边界有i种可能,右边界有(n-i)种可能,两个相乘就是区间的组合数量:i*(n-i)。区间组合数量乘上距离就是这段距离(pos[i] - pos[i - 1])产生的总距离,枚举所有i就是所有距离段的和。

code:

class Solution {static final int MOD = 1000000007;public int sumDistance(int[] nums, String s, int d) {int n = nums.length;long[] pos = new long[n];for (int i = 0; i < n; i++) {if (s.charAt(i) == 'L') {pos[i] = (long) nums[i] - d;} else {pos[i] = (long) nums[i] + d;}}Arrays.sort(pos);long res = 0;for (int i = 1; i < n; i++) {res += 1L * (pos[i] - pos[i - 1]) * i % MOD * (n - i) % MOD;res %= MOD;}return (int) res;}
}

这篇关于2731. 移动机器人的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/187335

相关文章

多目标应用:基于自组织分群的多目标粒子群优化算法(SS-MOPSO)的移动机器人路径规划研究(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大量应用,人们对机器人的要求也越来越高,尤其表现在对机器人的智能化方面的要求,而机器人自主路径规划是实现机器人智能化的

多目标应用:基于双存档模型的多模态多目标进化算法(MMOHEA)的移动机器人路径规划研究(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大量应用,人们对机器人的要求也越来越高,尤其表现在对机器人的智能化方面的要求,而机器人自主路径规划是实现机器人智能化的

【路径规划】移动机器人在未知环境下目标的路径规划算法

摘要 本文介绍了一种新型路径规划算法,专用于在包含多个障碍物的环境中为机器人找到最优路径。该算法通过分析障碍物位置和目标点位置,生成一个引导机器人避开障碍物并到达目标的路径。项目展示了路径规划在机器人导航中的重要性,并通过实验验证了算法的有效性。 理论 路径规划是机器人导航的核心技术,旨在寻找从起点到目标点的最优路径,避开环境中的障碍物。本文提出的算法通过以下步骤实现路径规划: 1.

多目标应用:基于多目标雾凇算法(MORIME)的移动机器人路径规划研究(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大量应用,人们对机器人的要求也越来越高,尤其表现在对机器人的智能化方面的要求,而机器人自主路径规划是实现机器人智能化的重

多目标应用:基于NSGA3的移动机器人路径规划研究(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大量应用,人们对机器人的要求也越来越高,尤其表现在对机器人的智能化方面的要求,而机器人自主路径规划是实现机器人智能化的重

全国大学生数学建模大赛模拟测试选拔题——移动机器人路径规划

移动机器人路径规划是机器人学的一个重要研究领域。 它要求机器人依据某个或某些优化原则(如最小能量消耗、最 短行走路线、最短行走时间等),在其工作空间中找到一条从 起始状态到目标状态能避开障碍物的最优路径。 机器人路径规划问题可以建模为一个有约束的优化问 题,都要完成路径规划、定位和避障等任务。 如上图所示正方形地板边长为1*1,整体为20*20块 地板的地面上,深蓝色为障碍物无法通行,浅

嵌入式智能移动机器人导航系统:状态空间控制算法、路径规划算法、PID控制算法(代码示例)

一、项目概述 随着科技的发展,智能机器人在各个领域的应用越来越广泛。本文介绍一个智能移动机器人导航系统的设计与实现,旨在通过状态空间控制与约束满足算法,确保机器人在动态环境中安全、平稳地导航。该系统的主要目标是解决机器人在复杂环境中自主移动的问题,提高其导航的安全性和效率。通过本项目,用户可以了解到如何设计一个具有自主导航能力的智能机器人,并应用于服务机器人和无人机等场景。 #mermai

slam移动机器人预测n秒后的里程数据

slam移动机器人预测n秒后的里程数据 为了实现这个功能,需要完成以下几个步骤: 订阅/odom话题并获取当前和上一时刻的里程计数据。计算两次里程计数据之间的位置和角度的偏移量。计算时间间隔dt。使用运动模型计算当前的速度vx, vy, vth。预测3秒后的位置和角度。将预测的位置和角度转换为geometry_msgs::TransformStamped类型。 #inc

移动机器人程序节点崩溃的处理

对于一些特殊情况例如程序节点崩溃,可能需要一些特殊的处理方法。处理目的是为了保证程序出现特殊异常情况导致崩溃也能在每人干预的情况下正常运行并完成某些初始化状态。常见处理工程化方法如下。        针对节点崩溃问题,可以设置守护进程或脚本来监控程序运行状态,如果发生崩溃可以用脚本将程序拉起保证在线状态同时保存堆栈日志。        对于定义建图节点崩溃重启后需要找回崩溃前丢

自主移动机器人两级规划架构

两级规划架构 目前大多数的自主移动机器人的导航系统都由两级规划系统组成,即基于全局环境信息的全局路径规划和基于传感器信息的局部路径规划。全局路径规划的任务是根据已知的全局信息将全局目标分解成局部目标交给局部路径规划。局部路径规划根据传感器获得的局部环境信息给出一条安全、无碰的局部路径,并且与传感器、多传感器融合模块、控制模块等组成连续的闭环使机器人到达局部目标。这种两级规划系统的优点是既弥补了