当前位置: 首页 > news >正文

OD 算法题 B卷【模拟消息队列】

文章目录

  • 模拟消息队列

模拟消息队列

  • 模拟消息队列,有一个发布者、若干消费者,发布者在给定时刻向消息队列发布一条消息,这个消息会发送给订阅的消费者中优先级最高的一个;
  • 若没有订阅的消费者,则该消息被丢弃;
  • 发送消息与订阅同时发生时,优先处理订阅;
  • 发送消息与取消订阅同时发生时,优先处理取消订阅操作;

输入描述:
第一行为2N个正整数,代表发布者发送的消息的时刻与内容;发送时刻不会重复,消息没有按照发送时刻排列;
第二行为2M个正整数,代表M个消费者订阅、取消订阅的时刻。消费者按照优先级升序排列;
N<=100, M<=10,每行的长度不超过1000字符;

输出描述:
输出为M行,依次为M个消费者收到的消息内容,消息内容按照收到的顺序排列,且空格分隔,若某个消费者未收到消息,则输出-1;

示例1
输入:
2 22 1 11 4 44 5 55 3 33
1 7 2 3
输出:
11 33 44 55
22

示例2
输入:
5 64 11 64 9 97
9 11 4 9
输出:
97
64

python实现:

  • 以元组列表存储所有的消息,并按照发送时刻升序排列;
  • 以列表存储消费者的订阅、取消订阅的时刻,越靠后的优先级越高;
  • 以消费者索引为key,值为列表,用于存储每个消费者接收到的消息;
  • 遍历每个消息元组,发送给优先级最高且满足要求的消费者;

# 消息发布
pub_msg_list = [int(i) for i in input().strip().split()]
msg_num = len(pub_msg_list) // 2
# 按照发送时刻升序排序
pair_msg_list = []
for i in range(msg_num):# 获取一个消息msg_time = pub_msg_list[2*i]msg_cnt = pub_msg_list[2*i+1]pair_msg_list.append((msg_time, msg_cnt))
# 升序排序
pair_msg_list.sort(key=lambda i:i[0])# 订阅者
suber_list = [int(i) for i in input().strip().split()]
suber_num = len(suber_list) // 2# 记录接收消息
receive_records = {}
for i in range(suber_num):receive_records[i] = []# 遍历每个消息,并与订阅时间点比较
for msg_time, msg_cnt in pair_msg_list:# 与订阅者比较for j in reversed(range(suber_num)):# 获取订阅时刻、取消订阅时刻sub_time, unsub_time = suber_list[2*j], suber_list[2*j+1]if msg_time >= sub_time and msg_time < unsub_time:receive_records[j].append(msg_cnt)break# 输出每个消费者接收到的消息
for i in range(suber_num):recv_msg = receive_records.get(i)if recv_msg:print(" ".join([str(j) for j in recv_msg]))else:print(-1)

相关文章:

  • Arm处理器调试采用jlink硬件调试器的命令使用大全
  • 人工智能在智能供应链中的创新应用与未来趋势
  • 2024年ESWA SCI1区TOP,自适应学习灰狼算法ALGWO+无线传感器网络覆盖优化,深度解析+性能实测
  • 开源版 PyMOL 如何绘制 Galidesivir 分子结构 ?
  • 项目:贪吃蛇实现
  • 流媒体协议分析:流媒体传输的基石
  • Jinja2 模板继承机制
  • Mybatis ORM SpringORM
  • 【代码坏味道】膨胀类 Bloaters
  • Go语言的context
  • 《高等数学》(同济大学·第7版) 第一节《映射与函数》超详细解析
  • 【算法】递归与分治策略
  • Cesium快速入门到精通系列教程一
  • 【Linux】进程地址空间揭秘(初步认识)
  • 【计算机网络】 ARP协议和DNS协议
  • 计算机网络物理层基础练习
  • 【CC协议】知识共享许可协议(Creative Commons Licenses)体系解析
  • Python 中Vector类的格式化实现,重点拆解其超球面坐标系的设计精髓
  • 15分钟讲解所有较知名编程语言
  • DAY 16 numpy数组与shap深入理解
  • 自己做的网站打开速度慢/工业设计公司
  • 国外企业网站模板/爱站网反链查询
  • 南宁做网站公司必荐云尚网络/google年度关键词
  • 做玻璃的网站/搜索优化指的是什么
  • 长宁苏州网站建设/小红书推广运营
  • 网站制作基本步骤/免费推广的平台都有哪些