【2025刷题笔记】- ABR 车路协同场景

刷题笔记合集🔗

ABR 车路协同场景

问题描述

数轴上有两个点的序列 均为正整数, 已经从小到大排好序, 均肯定不为空。

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

条件:

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

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

原型:

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

输入格式

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

输入 已经排好序, 的大小不超过 ,正整数范围不会超过

输出格式

数对序列,排列顺序满足序列中前面的 后面的 ,前面的 后面的

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

样例输入

A={1,3,5},B={2,4,6},R=1

样例输出

(1,2)(3,4)(5,6)
样例 解释说明
样例1 A序列中的1与B序列中的2的距离为1,满足,因此输出(1,2);同理,(3,4)和(5,6)都满足条件,所以最终输出(1,2)(3,4)(5,6)。

数据范围

  • 的大小不超过
  • 的取值范围为正整数,且不超过
  • 为正整数

题解

这道题目乍一看有点复杂,但本质上是在处理两个已排序的序列之间的匹配问题。我们需要找出符合特定条件的A和B元素对。

问题可以这样理解:对于序列A中的每个元素A[i],我们需要在序列B中找出所有满足两个条件的B[j]:

  1. B[j] >= A[i](B元素不小于A元素)
  2. B[j] - A[i] <= R(两元素之间的距离不超过R)

如果A[i]找不到满足条件的B[j],我们就找出大于等于A[i]的最小的B[j]作为匹配。如果连这样的B[j]都没有,则丢弃A[i]。

这个问题可以通过双指针方法高效解决:

  1. 我们为A和B各设置一个指针,初始都指向首元素
  2. 对于当前A[i],我们从当前B指针位置开始查找符合条件的B[j]
  3. 如果B[j] < A[i],则B指针向前移动
  4. 如果B[j] >= A[i],则判断B[j] - A[i] <= R是否成立
  5. 如果成立,则记录这对(A[i],B[j]),并继续检查后面的B元素
  6. 如果不成立且已经找到至少一个符合条件的B[j],则停止当前A[i]的查找
  7. 如果未找到任何符合条件的B[j]但找到了大于等于A[i]的最小B[j],则记录这对(A[i],B[j])

由于A和B已经排序,且我们每次只向前移动指针,时间复杂度为O(n+m),其中n和m分别是序列A和B的长度。这是高效的线性时间算法,非常适合处理题目中指定的数据规模(不超过50)。

参考代码

  • Python
import sys
import re
input = lambda: sys.stdin.readline().strip()

# 读取输入
line = input()
# 使用正则表达式解析输入
pattern = r"A=\{(.+)\},B=\{(.+)\},R=(\d+)"
match = re.search(pattern, line)

if match:
    # 提取A序列、B序列和R值
    A = list(map(int, match.group(1).split(',')))
    B = list(map(int, match.group(2).split(',')))
    R = int(match.group(3))
    
    result = []
    
    # 处理每个A中的元素
    for a in A:
        matches = []
        # 找出所有满足条件的B元素
        for b in B:
            # 跳过小于a的B元素
            if b < a:
                continue
                
            # 如果没找到任何匹配或者距离在R范围内
            if len(matches) == 0 or b - a <= R:
                matches.append((a, b))
            else:
                # 已经找到匹配且当前B元素距离超过R
                break
        
        # 将找到的匹配添加到结果中
        result.extend(matches)
    
    # 格式化输出
    output = ''.join([f"({a},{b})" for a, b in result])
    print(output)
  • Cpp
#include <iostream>
#include <vector>
#include <regex>
#include <string>
using namespace std;

vector<int> parseNumbers(const string& str) {
    vector<int> nums;
    size_t start = 0;
    size_t end = str.find(',');
    
    while (

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法刷题笔记 文章被收录于专栏

本专栏收集并整理了一些刷题笔记

全部评论

相关推荐

10-30 20:36
已编辑
字节跳动_llm开发(实习员工)
bg:双非本&nbsp;985硕士&nbsp;五段实习(四段大厂,都是后端)&nbsp;+&nbsp;开源经历(300+star)+&nbsp;大模型经验&nbsp;+&nbsp;懂前端(前端转的后端),主要考虑杭州的base。不是标题党哈,本人是真有点劝退后端了。究其原因就是后端这边实在是太卷了,从我自己亲身体会可以看出来。1、暑期:本人投递暑期前已有三段实习(其中2段大厂实习)。其中字节和腾讯明确要求我3月份就要到岗(有截图作证),而且字节2月份的时候就打电话给我约面了,最终我字节也是于3月中旬入职暑期(字节base南京,能边上课边实习)。因为我本身还有课在身上,在腾讯面试的时候说了只能五月份到岗,明确感受到面试官对我的热情降下来了,后续泡了1-2周也挂了。暑期暑期,变成了不在暑期的实习,暑期实习总结可以看之前的帖子。2、秋招:本人秋招虽然投递稍微晚一点,基本上是7月底开始大范围投递,这时候提前批基本都在尾声了(提前批没有任何约面),9月份的时候基本上手里就没啥面试了(说好的金9银10呢)。然后在这个时候我是5段实习(四段大厂实习),以为秋招能乱杀,时至今日,也就3个意向在手(BAT一个没有)。挂:①&nbsp;字节:tt直播二面挂&nbsp;抖音电商hr面挂&nbsp;开发者服务二面挂(通过,但后续不推进)。字节我是从基本上8月份开始面试一直面到上周,都挂了,可能运气也差点。抖音电商尤其是面试的时候问了一些例如洗牌算法、尾递归等我不太了解,可能是导致横向被挂的主要原因。字节说白了每一轮都在横向,运气也很重要。抖音电商尤其如此,泡了一个月很是难绷(当初说两天出结果嘻嘻)。②&nbsp;百度、滴滴、pdd等:笔试挂百度提前批我当时不知道在哪投递,发现原来填了内推码就是提前批,没填就是普通批。普通批有笔试,提前批没笔试,但是我记得三道题我做了1.5还是1.8将近两道题,一直没约面,到目前还在共享中。滴滴笔试没太认真做,因为我投的很早但是一直泡着,后续发笔试的时候手里也有其他意向了,遂放弃。pdd感觉我那次比较难,而且pdd那个我用java过不了,但是用c++同样的思路能过。。③&nbsp;腾讯:七次一面挂腾讯由于暑期实习生太多,感觉人均一段腾讯实习一样,听说后续都坐不下了,搬到会议室当工位了(本人同学)。秋招也没啥正经后端部门约我,都是一些机器人部门、ieg游戏后端、wxg搜广推之类的。反正答对了也挂,答不对就更不用说了。问的问题也千奇白怪,有喜欢问思维题的例如倒水问题,有喜欢出一些奇怪的coding题的单例高性能配置刷新、hash算法等等。如果大家想去腾讯,感觉还是转正比较好,秋招机会太少(但是转正率也不高嘻嘻)。意向:①&nbsp;快手:快手电商杭州转正,早早转正,组里也保温,目前top1。当然强度很大,懂得抖动。②&nbsp;美团(9月初oc):早早1-2周内速通,也有人过来保温,c端业务感觉很香,目前没开奖。③&nbsp;京东(大概9月底-10月初阶段oc):oc了京东一个不知名的部门,一开始是京东零售一面问了一些点没答上来,然后泡两周挂了。重新一个部门1-2周速通,线下去的南京hr面,hr面的时候基于前人的经验表示自己投递比较晚,手里没有其他offer,遂oc(京东hr面的时候得表达自己对京东的忠心)。hr面:④&nbsp;xhs:8.29投递,10.14&nbsp;才四面完,目前没泡出来,商业技术。xhs流程是真的慢,感觉自己要泡死了。总结:我大约在9月份的时候手里就没啥面试了,所以后续也投递了一些例如b站、蚂蚁啥的,反正都没有啥约面的。基本只要有hr约我,我都会去面,手里也就oc了这3个意向,陆陆续续忙碌几个月,最终大概率还是去快手转正了。字节又重新开始一面了(难绷)。基于我个人的BG,我觉得首先学历越来越成为后端的一项门槛(重要考虑因素),我双非本985硕尚且如此,更何况很多双非本的同学呢。说起来,最近我有个学妹前端实习转正失败,后突然保研上岸一所211,我给她的建议是你到时候毕业不要做前端了,我说现在已经很卷了,2年后、3年后我不敢想是什么场景。身边985本硕的同学秋招也很失败,没有想象中那么好拿,暑期和秋招区别也确实很大,运气也是很重要的一环。然后也是建议后来人秋招早做准备(投递早很重要),自己卷那么多实习其实也是因为本科学历不好,想开大包,现在看来也不用这么卷,实习段数不重要,大概1-2段即可,投递的早机会大一点。然后最好是暑期转正就去自己想去的部门,这样秋招不至于太焦虑。然后现在没有oc的也没关系,很多人早早投递拿了意向所以暂时hc不多,待开奖后释放,还是有不少机会的,肯定是能上岸的,就是周期会长一点。跟🐖佬、timeErrors、壹宇各位大佬都经常聊天感觉大家都是很好的人,也感谢有这么一个牛客的平台供大家交流(薅了2000牛币),所有的私信我都会回。秋招也就告一段落,愿大家都上岸自己想去的公司,共勉。最后附上我的哈吉米~最近躺平,瓦(找妈妈游戏)也打到神话了,这下是真大结局了
后端转测开第一人:建议后端人均10段大厂实习+92
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务