Мини-урок · перед практикой

Выборы в США

Суммируем число голосов по фамилии, затем выводим фамилии по алфавиту.

Как к ней подойти

Потренируйтесь хранить пары «ключ - значение» и находить нужные записи в словаре.

Коротко о теме

Словарь связывает ключ со значением и позволяет быстро найти запись по ключу. Решите, что будет ключом, что значением и как обрабатывать отсутствующую запись. Для подсчётов удобно начинать с нуля.

Ключевая идея · Словарь итогов

Повторные записи кандидата увеличивают накопленную сумму.

Проверьте перед запуском

  • Здесь суммируются уже заданные голоса выборщиков.
  • Вывод идёт по имени, а не по количеству голосов.

Сравните свой подход

Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.

Ваше принятое решение

Рекомендуемое решение: Словарь итогов

Повторные записи кандидата увеличивают накопленную сумму.

n = int(input())
totals = {}
for _ in range(n):
    name, votes = input().split()
    totals[name] = totals.get(name, 0) + int(votes)
for name in sorted(totals):
    print(name, totals[name])

Время: O(n + k log k) в среднем, k кандидатов; без учёта длины строк. Память: O(k).

Другой способ: Сортировка и группировка

После сортировки все записи кандидата идут подряд и суммируются в одной группе.

from itertools import groupby
n = int(input())
records = []
for _ in range(n):
    name, votes = input().split()
    records.append((name, int(votes)))
records.sort()
for name, group in groupby(records, key=lambda r: r[0]):
    print(name, sum(votes for _, votes in group))

Время: O(n log n), без учёта длины строк. Память: O(n).