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