某种聊天工具,每个好友的id都是唯一的,当用户接收到信息后,如果会话窗口之前没有与该好友的聊天信息,则在通信列表里,会将新接收的消息的好友id置顶,如果会话窗口中已有与该好友的聊天信息,则将该好友的id移动到通讯列表的顶端。请根据要求实现该功能。 输入:第一行为整数N,代表有N组测试数据,接下来的N组测试中,第一行为整数T,代表有T条通讯,第二行有T个整数,按时间先后顺序表示接收到讯息的好友id。 输出:按照通讯列表从上到下的顺序输出好友id,每个id以空格分隔。
时间: 2024-02-28 15:55:02 浏览: 156
每个浏览器标签上的唯一会话ID
以下是基于Python的解答,实现了所需的功能:
```python
# 定义一个空字典,用来存储每个好友的通讯记录
friend_communication = {}
# 定义一个空列表,用来存储当前通讯列表中的好友id
current_list = []
# 获取测试数据的组数
n = int(input())
# 循环处理每组测试数据
for i in range(n):
# 获取当前测试数据中的通讯条数
t = int(input())
# 获取当前测试数据中的所有好友id
friend_ids = list(map(int, input().split()))
# 循环处理每个好友id
for friend_id in friend_ids:
# 判断该好友是否已经有通讯记录
if friend_id in friend_communication:
# 如果该好友已经有通讯记录,则将其从当前通讯列表中删除
current_list.remove(friend_id)
else:
# 如果该好友没有通讯记录,则将其添加进通讯记录字典中
friend_communication[friend_id] = []
# 将当前消息添加到该好友的通讯记录中
friend_communication[friend_id].append(i)
# 将该好友的id添加到当前通讯列表的开头
current_list.insert(0, friend_id)
# 输出当前通讯列表中的所有好友id
print(" ".join(map(str, current_list)))
```
解释如下:
首先定义了一个空字典`friend_communication`,用来存储每个好友的通讯记录,键为好友id,值为一个列表,列表中存储了该好友的所有通讯记录。
然后定义了一个空列表`current_list`,用来存储当前通讯列表中的好友id。
接下来获取测试数据的组数,并进行循环处理每组测试数据。对于每组测试数据,先获取当前测试数据中的通讯条数`t`和所有好友id`friend_ids`,然后对于每个好友id,进行以下处理:
- 判断该好友是否已经有通讯记录。如果有,则将其从当前通讯列表中删除;如果没有,则将其添加进通讯记录字典中。
- 将当前消息添加到该好友的通讯记录中。
- 将该好友的id添加到当前通讯列表的开头。
最后输出当前通讯列表中的所有好友id即可。
注意,为了保证好友id的顺序是从上到下,我们将好友id插入到当前通讯列表的开头,而不是末尾。同时,由于Python的列表没有像其他语言那样有固定的大小,因此我们不需要在每个好友的通讯记录中记录消息的具体内容,只需要记录消息的序号即可。
阅读全文