酷代码 AI
菜单
服务商

题目描述 乐乐每天都会收到大量的电子邮件,这些邮件有许多都来自固定的几个人。他非常苦恼应该先给哪些邮件回复,因为如果某一个人发了更多的邮件未被回复,应该更先得到回复。 于是乐乐找到了你,希望你给他设计一个全自动电子邮箱:-),具体来说,它拥有两个功能: 接受一封新的电子邮件,包含邮件编号与发件人编号两个信息。 随时查看当前回复优先度最高的邮件:它的发件人在未被查看的邮件中出现最多次,并且它被最后放入邮箱。 输入 第一行,一个整数 。 接下来 行, 要么符合格式 + ,代表此时发件人 发来一封编号为 的邮件(邮件编号是唯一的)。 要么只有一个符号 -,代表此时乐乐需要查看优先度最高的邮件。 输出 对于每一次查看,输出一行一个整数 ,代表被查看的邮件的编号。如果此时邮箱是空的,输出 。 样例输入 复制 10 + 1 1 + 1 2 + 1 4 + 2 5 + 2 3 - - - - - 样例输出 复制 4 3 2 5 1 提示 , , 数据保证任何时刻每个发件人最多有 封邮件未被回复。

以下是实现该全自动电子邮箱功能的 Python 代码: ```python # 初始化一个字典来存储每个发件人的未读邮件列表 sender_emails = {} # 初始化一个列表来存储所有未读邮件 all_emails = [] # 读取输入的操作次数 n = int(input()) for _ in range(n): # 读取每一行输入 line = input().split() if line[0] == '+': # 如果是接收新邮件的操作 sender = int(line[1]) email_id = int(line[2]) # 如果发件人不在字典中,初始化一个空列表 if sender not in sender_emails: sender_emails[sender] = [] # 将邮件编号添加到发件人的未读邮件列表中 sender_emails[sender].append(email_id) # 将邮件编号添加到所有未读邮件列表中 all_emails.append(email_id) else: # 如果是查看优先度最高的邮件的操作 if not all_emails: # 如果邮箱为空,输出 -1 print(-1) else: # 找到发件人出现次数最多的发件人 max_count = 0 max_sender = None for sender, emails in sender_emails.items(): if len(emails) > max_count: max_count = len(emails) max_sender = sender # 找到该发件人最后放入邮箱的邮件 latest_email = sender_emails[max_sender][-1] # 从发件人的未读邮件列表中移除该邮件 sender_emails[max_sender].pop() # 从所有未读邮件列表中移除该邮件 all_emails.remove(latest_email) # 输出该邮件的编号 print(latest_email) ``` 代码解释: 1. 数据结构: - `sender_emails` 是一个字典,用于存储每个发件人的未读邮件列表。键是发件人编号,值是该发件人的未读邮件编号列表。 - `all_emails` 是一个列表,用于存储所有未读邮件的编号。 2. 接收新邮件: - 当输入为 `+ sender email_id` 时,将 `email_id` 添加到 `sender` 的未读邮件列表中,并添加到 `all_emails` 列表中。 3. 查看优先度最高的邮件: - 当输入为 `-` 时,首先检查 `all_emails` 是否为空。如果为空,输出 `-1`。 - 否则,遍历 `sender_emails` 字典,找到发件人出现次数最多的发件人。 - 从该发件人的未读邮件列表中取出最后一个邮件编号,将其从 `sender_emails` 和 `all_emails` 中移除,并输出该邮件编号。 复杂度分析: - 时间复杂度:接收新邮件的操作时间复杂度为 $O(1)$,查看优先度最高的邮件的操作时间复杂度为 $O(m)$,其中 $m$ 是发件人的数量。 - 空间复杂度:$O(k)$,其中 $k$ 是未读邮件的总数。 [2025-12-08 17:42:07 | AI问答 | 754点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多