醋醋百科网

Good Luck To You!

【模拟消息队列】Python 实现

def simulate_message_queue():
    import sys
    from collections import defaultdict

    # 读取两行输入
    line1 = sys.stdin.readline()
    line2 = sys.stdin.readline()

    # 解析消息
    message_data = list(map(int, line1.strip().split()))
    messages = []
    for i in range(0, len(message_data), 2):
        time = message_data[i]
        content = message_data[i + 1]
        messages.append((time, content))
    messages.sort()  # 按时间排序

    # 解析消费者
    consumer_data = list(map(int, line2.strip().split()))
    M = len(consumer_data) // 2
    consumers = []
    for i in range(0, len(consumer_data), 2):
        sub_time = consumer_data[i]
        unsub_time = consumer_data[i + 1]
        consumers.append((sub_time, unsub_time))

    # 初始化
    active_consumers = []  # 按优先级升序排列,最后一个优先级最高
    received_messages = [[] for _ in range(M)]

    # 生成所有事件并按时间处理
    events = defaultdict(list)
    for idx, (sub_time, unsub_time) in enumerate(consumers):
        events[sub_time].append(('sub', idx))
        events[unsub_time].append(('unsub', idx))
    for time, content in messages:
        events[time].append(('msg', content))

    # 按时间顺序处理事件
    for time in sorted(events.keys()):
        # 同一时间的事件顺序:sub > unsub > msg
        current_events = events[time]
        # 先处理订阅
        for event in current_events:
            if event[0] == 'sub':
                _, idx = event
                active_consumers.append(idx)
        # 再处理取消订阅
        for event in current_events:
            if event[0] == 'unsub':
                _, idx = event
                if idx in active_consumers:
                    active_consumers.remove(idx)
        # 最后处理消息
        for event in current_events:
            if event[0] == 'msg':
                _, content = event
                if active_consumers:
                    # 发送给优先级最高的消费者(最后一个)
                    highest_priority = active_consumers[-1]
                    received_messages[highest_priority].append(content)

    # 输出
    for msgs in received_messages:
        if msgs:
            print(' '.join(map(str, msgs)))
        else:
            print(-1)

simulate_message_queue()


控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言