l13B
unknown
python
2 years ago
1.8 kB
3
Indexable
''' 7 Isenbaev Oparin1 Toropov1 Ayzenshteyn2 Oparin1 Samsonov2 Ayzenshteyn2 Chevdar3 Samsonov2 Fominykh1 Isenbaev Oparin1 Dublennykh2 Fominykh1 Ivankov2 Burmistrov3 Dublennykh2 Kurpilyanskiy3 Cormen Leiserson Rivest ''' INF = 10**5 def UpdateTeam(name_level, team): min_level = INF for member in team: min_level = min(min_level, name_level[member]) for member in team: if name_level[member] != min_level: name_level[member] = min_level + 1 n = int(input()) teams = [] for _ in range(n): a = list(input().split()) teams.append(a) name_level = {} name_pos = {} # O(3n) for i, team in enumerate(teams): for j, member in enumerate(team): if member == 'Isenbaev': name_level[member] = 0 else: name_level[member] = INF name_pos[member] = [] # O(3n) for i, team in enumerate(teams): for j, member in enumerate(team): name_pos[member].append((i, j)) UpdateTeam(name_level, team) #O(3*n^2) for team in teams: for member in team: min_level_member_teams = INF # try to find the minimum level of a member in all teams for tuple in name_pos[member]: min_level_member_teams = min(min_level_member_teams, name_level[member]) name_level[member] = min_level_member_teams for tuple in name_pos[member]: #after we have updated true value of level for a member in all teams, we teams that have that member UpdateTeam(name_level, teams[tuple[0]]) sorted_dict = dict(sorted(name_level.items(), key=lambda item: item[0])) # O(3nlog(3n)) for key in sorted_dict.keys(): value = sorted_dict[key] if value != INF: print(key, value) else: print(key, 'undefined')
Editor is loading...