Выборы в США
Суммируем число голосов по фамилии, затем выводим фамилии по алфавиту.
Как к ней подойти
Потренируйтесь хранить пары «ключ - значение» и находить нужные записи в словаре.
Словарь связывает ключ со значением и позволяет быстро найти запись по ключу. Решите, что будет ключом, что значением и как обрабатывать отсутствующую запись. Для подсчётов удобно начинать с нуля.
Повторные записи кандидата увеличивают накопленную сумму.
Проверьте перед запуском
- Здесь суммируются уже заданные голоса выборщиков.
- Вывод идёт по имени, а не по количеству голосов.
Сравните свой подход
Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.
Ваше принятое решение
Рекомендуемое решение: Словарь итогов
Повторные записи кандидата увеличивают накопленную сумму.
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).