import sysdef simulate_message_queue:# 读取输入messages = list(map(int, sys.stdin.readline.split))subscriptions = list(map(int, sys.stdin.readline.split))# 解析发布者的消息:[(时刻, 内容), ...]message_list = for i in range(0, len(messages), 2):time = messages[i]content = messages[i + 1]message_list.append((time, content))# 按时刻排序消息message_list.sort# 解析消费者的订阅和取消订阅:[(订阅时刻, 取消时刻, 消费者编号), ...]consumer_actions = consumer_count = len(subscriptions) // 2for i in range(consumer_count):sub_time = subscriptions[2 * i]unsub_time = subscriptions[2 * i + 1]consumer_actions.append((sub_time, unsub_time, i)) # 消费者编号按输入顺序,优先级升序# 按时间处理所有事件events = # 添加消息事件for time, content in message_list:events.append((time, 'message', content))# 添加订阅和取消订阅事件for sub_time, unsub_time, consumer_id in consumer_actions:events.append((sub_time, 'subscribe', consumer_id))events.append((unsub_time, 'unsubscribe', consumer_id))# 按时间排序事件,同一时刻先处理订阅,再处理取消订阅,最后处理消息events.sort(key=lambda x: (x[0], 0 if x[1] == 'subscribe' else 1 if x[1] == 'unsubscribe' else 2))active_consumers = setconsumer_priority = {} # 消费者编号到优先级的映射(输入顺序即为优先级升序)for i in range(consumer_count):consumer_priority[i] = i# 每个消费者接收的消息consumer_messages = [ for _ in range(consumer_count)]for event in events:time, action, value = eventif action == 'subscribe':active_consumers.add(value)elif action == 'unsubscribe':active_consumers.discard(value)elif action == 'message':if active_consumers:# 找出优先级最高的消费者(编号最大的,因为优先级是升序排列)highest_priority_consumer = max(active_consumers)consumer_messages[highest_priority_consumer].append(value)# 输出结果for messages in consumer_messages:if messages:print(' '.join(map(str, messages)))else:print(-1)simulate_message_queue输入处理:读取发布者发送的消息和消费者的订阅/取消订阅信息,并将它们解析成列表。消息排序:将消息按照发送时刻进行排序,确保按时间顺序处理。事件处理:将所有事件(消息发送、订阅、取消订阅)放入一个列表,并按时间排序。同一时刻的事件处理顺序为:先订阅,再取消订阅,最后处理消息。维护活跃消费者:使用集合active_consumers记录当前活跃的消费者。订阅操作将消费者添加到集合,取消订阅操作则移除消费者。消息分发:对于每条消息,检查当前活跃的消费者集合。如果有消费者,将消息发送给优先级最高的消费者(即编号最大的消费者,因为输入是按优先级升序排列的)。输出结果:统计每个消费者接收到的消息,并按格式输出。若某消费者未收到消息,则输出-1。摘要:import sysdef simulate_message_queue:# 读取输入messages = list(map(int, sys.stdin.readline.split))subscriptions = list(map(int, sys.st
来源:子默教育