news 2026/6/11 1:41:27

(100分)- ABR 车路协同场景(Java JS Python)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(100分)- ABR 车路协同场景(Java JS Python)

(100分)- ABR 车路协同场景(Java & JS & Python)

题目描述

数轴×有两个点的序列 A={A1, A2, …, Am}和 B={B1, B2, ..., Bn}, Ai 和 Bj 均为正整数, A、 B 已经从小到大排好序, A、 B 均肯定不为空,

给定一个距离 R(正整数),列出同时满足如下条件的所有(Ai, Bj)数对

条件:

  1. Ai <= Bj
  2. Ai,Bj 距离小于等于 R,但如果 Ai 找不到 R 范围内的 Bj,则列出距它最近的 1 个 Bj,当然此种情况仍然要满足 1,

但如果仍然找不到,就丢弃 Ai。

原型:

车路协同场景,一条路上发生了有很多事件( A),要通过很多路测设备( B)广播给路上的车,需要给每个事件找到一个合适的路测设备去发送广播消息。

输入描述

按照人易读的格式输入一行数据,参见输入样例,其中“ ABR={, }”中的每个字符都是关键分割符,输入中无空格,其他均为任意正整数,

输入 A 和 B 已经排好序, A 和 B 的大小不超过 50,正整数范围不会超过 65535。

输出描述z

( Ai,Bj)数对序列,排列顺序满足序列中前面的 Ax<=后面的 Ay,前面的 Bx<=后面的 By,

因为输入 A 和 B 已经排好序,所以实际上输出结果不用特意排序,排序不是考察点。

用例
输入A={1,3,5},B={2,4,6},R=1
输出(1,2)(3,4)(5,6)
说明
题目解析

首先,输入中有效数据的获取,我使用了正则

const regExp = /A\=\{(.+)\}\,B\=\{(.+)\}\,R\=(.+)/;

其中有三个捕获组,分别捕获出1,3,5和2,4,6以及1

然后我们就可以通过一些简单的字符串操作得到A,B,R数据了。

得到A、B、R后,我们只要双重for,外层遍历A,内层遍历B,然后找满足A[i] + R = B[j]的数据,当然在找的过程中,需要记录第一个比A[i]大的B[j1],因为要防止找不到满足A[i] + R = B[j]的数据时,可以输出一个和A[i]最近的B[j1]

Ai,Bj 距离小于等于 R,但如果 Ai 找不到 R 范围内的 Bj,则列出距它最近的 1 个 Bj,当然此种情况仍然要满足 1,


本题要返回的 (Ai,Bj) 数对需要满足下面条件

  1. Ai <= Bj
  2. Ai,Bj 距离小于等于 R,但如果 Ai 找不到 R 范围内的 Bj,则列出距它最近的 1 个 Bj,当然此种情况仍然要满足 1

关于其中第2个条件

  • 如果对于Ai,存在多个Bj,使其满足Ai <= Bj 且 Bj - Ai <= R,则应该全部输出。
  • 如果对于Ai,不存在Bj 满足Ai <= Bj 且 Bj - Ai <= R,则应该进一步检查是否存在Bj > Ai,如果存在,则输出这些Bj中最小的那个和Ai组成的数对。
JavaScript算法源码
/* JavaScript Node ACM模式 控制台输入获取 */ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on("line", (line) => { const regExp = /A\=\{(.+)\}\,B\=\{(.+)\}\,R\=(.+)/; let [_, A, B, R] = regExp.exec(line); A = A.split(",").map(Number); B = B.split(",").map(Number); R = parseInt(R); console.log(getResult(A, B, R)); }); function getResult(A, B, R) { const ans = []; for (let a of A) { let cnt = 0; for (let b of B) { if (b < a) continue; if (b - a <= R || cnt == 0) { ans.push(`(${a},${b})`); cnt++; } else { break; } } } return ans.join(""); }
Java算法源码
import java.util.Arrays; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); Matcher m = Pattern.compile("A=\\{(.+)},B=\\{(.+)},R=(.+)").matcher(s); if (m.matches()) { int[] A = Arrays.stream(m.group(1).split(",")).mapToInt(Integer::parseInt).toArray(); int[] B = Arrays.stream(m.group(2).split(",")).mapToInt(Integer::parseInt).toArray(); Integer R = Integer.parseInt(m.group(3)); System.out.println(getResult(A, B, R)); } } public static String getResult(int[] A, int[] B, Integer R) { StringBuilder sb = new StringBuilder(); for (int a : A) { int cnt = 0; for (int b : B) { if (b < a) continue; if (b - a <= R || cnt == 0) { sb.append("(").append(a).append(",").append(b).append(")"); cnt++; } else { break; } } } return sb.toString(); } }
Python算法源码
import re # 输入获取 s = input() tmp = re.compile(r"A=\{(.+)},B=\{(.+)},R=(.+)").search(s) A = list(map(int, tmp.group(1).split(","))) B = list(map(int, tmp.group(2).split(","))) R = int(tmp.group(3)) # 算法入口 def getResult(): ans = [] for a in A: cnt = 0 for b in B: if b < a: continue if b - a <= R or cnt == 0: ans.append(f"({a},{b})") cnt += 1 else: break return "".join(ans) # 算法调用 print(getResult())
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 0:27:45

(100分)- 表达式括号匹配(Java JS Python C)

(100分)- 表达式括号匹配&#xff08;Java & JS & Python & C&#xff09;题目描述(1(23)*(3(80))1-2)这是一个简单的数学表达式,今天不是计算它的值,而是比较它的括号匹配是否正确。前面这个式子可以简化为(()(()))这样的括号我们认为它是匹配正确的,而((())这样的…

作者头像 李华
网站建设 2026/6/10 3:13:59

8个AI论文工具,MBA轻松搞定研究论文!

8个AI论文工具&#xff0c;MBA轻松搞定研究论文&#xff01; AI 工具如何助力 MBA 学生高效完成论文 在当今快节奏的学术环境中&#xff0c;MBA 学生面临着日益繁重的研究任务。从选题到写作&#xff0c;再到修改和降重&#xff0c;每一个环节都需要大量的时间和精力。而 AI 工…

作者头像 李华
网站建设 2026/6/10 18:29:16

Thinkphp和Laravel手工艺品商城交流与买卖平台vue

目录具体实现截图项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;带文档1万字以上 同行可拿货,招校园代理 Thinkphp和Laravel手工艺品商城交流与买卖平台vue 项目开…

作者头像 李华
网站建设 2026/6/10 0:31:20

手机软件车载 DJ 免费无广告 全平台覆盖,新歌老歌随便听

宝子们&#xff01;老司机开车怎么能没有BGM撑场&#xff01;尤其是上头的车载DJ&#xff0c;一整个氛围感拉满&#xff0c;开高速、跑长途都不觉得累&#xff5e; 今天就给大家挖宝一款神仙DJ软件&#xff0c;简直是驾车党的快乐源泉&#xff01; 软件下载地址 重点夸夸它的…

作者头像 李华
网站建设 2026/6/10 2:16:46

大模型训练核心技术:优化器与分布式训练详解

文章详细介绍了大模型训练中的优化器演进(SGD→Adam→AdamW)及其特点&#xff0c;包括动量和自适应步长机制。同时阐述了训练策略三阶段&#xff1a;Warmup预热、Peak峰值和Decay衰减。重点讲解了分布式训练框架DeepSpeed的ZeRO技术&#xff0c;通过切分优化器、梯度和参数来解…

作者头像 李华