消息扩散
题目描述
假设已知有m个群,其中一个人把一条消息发到他自己所在的所有群里,这些群里面的每个人又将消息再次转发到他自己所在的群里,问最后有几个人收到了该消息。
解题思路
在群这一层级上进行操作:将所有群组存储于一个list,通过剔除收到消息的群来实现对收到消息的人删减,最后将总人数与剩余人数相减完成人数统计。相较对人做操作,实现起来更简单。
python代码
first_name = input()
num = int(input())
#初始化:群组的列表;所有人名的集合;第一个人发出信息后收到信息的人的集合;最终未收到信息的人的集合
club_list, name_set, mes_set, res_set = list(), set(), set(), set()
for i in range(num):
#读入群组列表
name_list = input().split(",")
club_list.append(name_list)
name_set.update(name_list)
for club in club_list:
#将第一个人所在的群组从club_list移除并获取mes_set
if first_name in club:
mes_set.update(club) #获取mes_set
club_list.remove(club) #将第一个人所在的群从club_list移除
for name in mes_set:
#将mes_set中所有人名所在群组从club_list移除
for club in club_list:
if name in club:
club_list.remove(club)
for club in club_list:
#获取剩余群组中人名的集合
res_set.update(club)
print(len(name_set) - len(res_set)) #输出处理前后集合人数差