Advertisement
Zuneve

ф

Mar 12th, 2023
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.73 KB | None | 0 0
  1. def solve():
  2.     _ = input()
  3.  
  4.     events: list[tuple[int, str, str, str]] = []
  5.     for _ in range(3):
  6.         for _2 in range(int(input())):
  7.             event = input()
  8.             data = event.split()
  9.             events.append((int(data[-1]),) + tuple(data[:-1]))
  10.     events.sort()
  11.  
  12.     messages: dict[int, dict[int, int]] = {}
  13.     total: dict[int, int] = {}
  14.     handle_map: dict[str, int] = {}
  15.     for event in events:
  16.         if event[1] == 'REG':
  17.             _, _, id_, _, handle, _ = event
  18.             id_ = int(id_)
  19.             if handle not in handle_map:
  20.                 handle_map[handle] = id_
  21.                 messages[id_] = {}
  22.                 total[id_] = 0
  23.         elif event[1] == 'CHANGE':
  24.             _, _, handle_1, _, handle_2, _ = event
  25.             if handle_2 not in handle_map:
  26.                 handle_map[handle_2] = handle_map[handle_1]
  27.                 handle_map.pop(handle_1)
  28.         else:
  29.             _, _, _, handle_1, _, handle_2, _ = event
  30.             id_1, id_2 = handle_map[handle_1], handle_map[handle_2]
  31.             id_1, id_2 = id_2, id_1  # variant 2 version
  32.             if id_2 not in messages[id_1]:
  33.                 messages[id_1][id_2] = 0
  34.             messages[id_1][id_2] += 1
  35.             total[id_1] += 1
  36.  
  37.     stat: list[tuple[int, int, int]] = []
  38.     default = (min(handle_map.values()), 0)
  39.     for id_ in handle_map.values():
  40.         log = messages.get(id_, {})
  41.         top = max(log.items(), key=lambda x: (x[1], -x[0]), default=default)
  42.         stat.append((id_,) + top)
  43.     stat.sort()
  44.  
  45.     print(len(handle_map))
  46.     for id_, id_top, count_top in stat:
  47.         print(f'{id_} RECEIVED {total[id_]} TOP {count_top} FROM {id_top}')
  48.  
  49.  
  50. t = int(input())
  51. for _ in range(t):
  52.     solve()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement