本文共 1648 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要计算每个用户在给定的微博操作记录后最终看到的消息数量。我们可以通过离线处理所有操作,记录每条操作对好友数量的影响,然后在处理发微博操作时,根据好友数量的变化来确定发送消息的用户。
add和remove分别记录每个加减操作对好友数量的影响。具体步骤如下:
add和remove,记录每个加减操作对好友数量的影响。add和remove数组。def main(): import sys input = sys.stdin.read().split() ptr = 0 n = int(input[ptr]) ptr += 1 m = int(input[ptr]) ptr += 1 add = [0] * (n + 1) remove = [0] * (n + 1) operations = [] for _ in range(m): op = input[ptr] ptr += 1 x = int(input[ptr]) ptr += 1 y = int(input[ptr]) ptr += 1 operations.append((op, x, y)) # 初始化好友数量变化数组 current = [0] * (n + 1) message = [0] * (n + 1) # 逆序处理操作 for op in reversed(operations): if op[0] == '!': x = op[1] # 发微博时,当前好友数量是处理完操作前的状态 cnt = current[x] message[x] += cnt elif op[0] == '+': x = op[1] y = op[2] add[x] += 1 add[y] += 1 current[x] += 1 current[y] += 1 elif op[0] == '-': x = op[1] y = op[2] remove[x] += 1 remove[y] += 1 current[x] -= 1 current[y] -= 1 # 输出结果 print(' '.join(map(str, message[1:])))if __name__ == "__main__": main() add和remove数组记录每个加减操作对好友数量的影响,message数组记录每个用户收到的消息数量。通过这种方法,我们可以高效地处理大量操作,确保在合理的时间复杂度内解决问题。
转载地址:http://ibcq.baihongyu.com/