Как уменьшить потребляемую программой память? ( на тестах ML )
Условие
Как известно, в США президент выбирается не прямым голосованием, а путем двухуровневого голосования. Сначала проводятся выборы в каждом штате и определяется победитель выборов в данном штате. Затем проводятся государственные выборы: на этих выборах каждый штат имеет определенное число голосов — число выборщиков от этого штата. На практике, все выборщики от штата голосуют в соответствии с результами голосования внутри штата, то есть на заключительной стадии выборов в голосовании участвуют штаты, имеющие различное число голосов.
На этот раз вам известно число выборщиков от каждого штата США и результаты голосования каждого гражданина США (а также в каком штате проживает данный гражданин).
Вам необходимо подвести результаты голосования: сначала определить результаты голосования в каждом штате и определить, за какого из кандидатов отданы голоса выборщиков данного штата. Далее необходимо подвести результаты голосования выборщиков по всем штатам.
Входные данные
Первая строка входных данных содержит количество штатов в США N. Далее идет N строк, описывающих штаты США, каждая строка состоит из названия штата и числа выборщиков от этого штата. Далее следует целое число C - количество голосующих. Далее идут C строк - записи результатов голосования по каждому из участников голосования. Одна строка соответствует одному избирателю. Записи имеют вид: название штата, имя кандидата, за которого проголосовал данный избиратель. Названия штатов и имена кандидатов не содержат пробелов.
Выходные данные
Выведите список кандидатов, упорядоченный по убыванию числа голосов выборщиков, полученных за данного кандидата, а при равенстве числа голосов выборщиков: в лексикографическом порядке. После имени кандидата выведите число набранных им голосов.
Если в каком-либо штате два или более число кандидатов набрали одинаковое число голосов, то все голоса выборщиков этого штата получает наименьший в лексикографическом порядке кандидат из числа победителей в этом штате.
Гарантируется, что в каждом штате проголосовал хотя бы один избиратель.
Примечание к примерам тестов
- В Florida 2 избирателя голосует за Gore и три избирателя за Bush, поэтому 25 голосов выборщиков от Floria получает Bush. В Pennsylvania побеждает Gore (4 голоса против 1), поэтому Gore получает 23 голоса выборщиков от Pennsylvania.
Мой код
# Кол-во_штатов
n = int(input())
# Словарь Штат:Кол-во_голосов
states_voices = dict()
# Заполнение словаря states_voices
for i in range(n):
data = input().split()
state = data[0]
cnt = data[1]
states_voices[state] = cnt
# Кол-во избирателей
c = int(input())
# Словарь Штат:{Кандидат:Кол-во_голосов}
state_stateman_cnt = dict()
# Словарь Кандидат:Кол-во_голосов
stateman_cnt = dict()
# Заполнение словаря state_stateman_cnt | В то же время заполним словарь stateman_cnt ключами. Кандидат:0
for i in range(c):
state, stateman = input().split()
stateman_cnt[stateman] = 0
if state not in state_stateman_cnt:
state_stateman_cnt[state] = {stateman: 1}
else:
if stateman not in state_stateman_cnt[state]:
state_stateman_cnt[state][stateman] = 1
else:
state_stateman_cnt[state][stateman] += 1
for state in state_stateman_cnt:
# Определяем победителя в штате и добавляем ему голосов от штата
mx = -1
mxstateman = ''
for stateman in state_stateman_cnt[state]:
cnt = state_stateman_cnt[state][stateman]
if cnt > mx:
mxstateman = stateman
mx = cnt
elif cnt == mx:
mxstateman = min(mxstateman, stateman)
stateman_cnt[mxstateman] += int(states_voices[state])
# Выведем кандидатов согласно условию
for name, cnt in sorted(stateman_cnt.items(), key=lambda p: (-p[1], p[0])):
print(name, cnt)