Как уменьшить потребляемую программой память? ( на тестах ML )

Условие

Как известно, в США президент выбирается не прямым голосованием, а путем двухуровневого голосования. Сначала проводятся выборы в каждом штате и определяется победитель выборов в данном штате. Затем проводятся государственные выборы: на этих выборах каждый штат имеет определенное число голосов — число выборщиков от этого штата. На практике, все выборщики от штата голосуют в соответствии с результами голосования внутри штата, то есть на заключительной стадии выборов в голосовании участвуют штаты, имеющие различное число голосов.

На этот раз вам известно число выборщиков от каждого штата США и результаты голосования каждого гражданина США (а также в каком штате проживает данный гражданин).

Вам необходимо подвести результаты голосования: сначала определить результаты голосования в каждом штате и определить, за какого из кандидатов отданы голоса выборщиков данного штата. Далее необходимо подвести результаты голосования выборщиков по всем штатам.

Входные данные

Первая строка входных данных содержит количество штатов в США N. Далее идет N строк, описывающих штаты США, каждая строка состоит из названия штата и числа выборщиков от этого штата. Далее следует целое число C - количество голосующих. Далее идут C строк - записи результатов голосования по каждому из участников голосования. Одна строка соответствует одному избирателю. Записи имеют вид: название штата, имя кандидата, за которого проголосовал данный избиратель. Названия штатов и имена кандидатов не содержат пробелов.

Выходные данные

Выведите список кандидатов, упорядоченный по убыванию числа голосов выборщиков, полученных за данного кандидата, а при равенстве числа голосов выборщиков: в лексикографическом порядке. После имени кандидата выведите число набранных им голосов.

Если в каком-либо штате два или более число кандидатов набрали одинаковое число голосов, то все голоса выборщиков этого штата получает наименьший в лексикографическом порядке кандидат из числа победителей в этом штате.

Гарантируется, что в каждом штате проголосовал хотя бы один избиратель.

Примечание к примерам тестов

  1. В 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)

Ответы (0 шт):