Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def solve():
- _ = input()
- events: list[tuple[int, str, str, str]] = []
- for _ in range(3):
- for _2 in range(int(input())):
- event = input()
- data = event.split()
- events.append((int(data[-1]),) + tuple(data[:-1]))
- events.sort()
- messages: dict[int, dict[int, int]] = {}
- total: dict[int, int] = {}
- handle_map: dict[str, int] = {}
- for event in events:
- if event[1] == 'REG':
- _, _, id_, _, handle, _ = event
- id_ = int(id_)
- if handle not in handle_map:
- handle_map[handle] = id_
- messages[id_] = {}
- total[id_] = 0
- elif event[1] == 'CHANGE':
- _, _, handle_1, _, handle_2, _ = event
- if handle_2 not in handle_map:
- handle_map[handle_2] = handle_map[handle_1]
- handle_map.pop(handle_1)
- else:
- _, _, _, handle_1, _, handle_2, _ = event
- id_1, id_2 = handle_map[handle_1], handle_map[handle_2]
- id_1, id_2 = id_2, id_1 # variant 2 version
- if id_2 not in messages[id_1]:
- messages[id_1][id_2] = 0
- messages[id_1][id_2] += 1
- total[id_1] += 1
- stat: list[tuple[int, int, int]] = []
- default = (min(handle_map.values()), 0)
- for id_ in handle_map.values():
- log = messages.get(id_, {})
- top = max(log.items(), key=lambda x: (x[1], -x[0]), default=default)
- stat.append((id_,) + top)
- stat.sort()
- print(len(handle_map))
- for id_, id_top, count_top in stat:
- print(f'{id_} RECEIVED {total[id_]} TOP {count_top} FROM {id_top}')
- t = int(input())
- for _ in range(t):
- solve()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement