Задача к ЕГЭ по информатике на тему «пары/тройки чисел, выбрать из каждой, кратность» №3

Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел делилась на 4 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – максимально возможную сумму, соответствующую условиям задачи.

Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество пар N (1 ≤ N ≤ 100000)  . Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000.

Пример входного файла:

6

1 3

5 11

6 9

5 4

3 3

1 1

Для указанных входных данных значением искомой суммы должно быть число 32.

В ответе укажите два числа через пробел: сначала значение искомой суммы для файла А, затем для файла B.

f = open(’1.txt’)
n = int(f.readline())
krat = 4
mr = [100000000500000000]*krat
s = 0
for i in range(n):
    a,b = map(int, f.readline().split())
    s += max(a, b)
    d = abs(a-b)
    mr1 = mr[:] #копия mr
    for j in range(krat):
        #берем разность и складываем с каждым элементом списка mr1
        #сравниваем получившуюся сумму с mr
        #если она меньше, то записываем данную сумму в mr
        if d + mr1[j] < mr[(d+mr[j]) % krat]:
            mr[(d+mr[j]) % krat] = d + mr1[j]
    #проверка, что если разность меньше соответствующего элемента в списке
    #то записываем эту разность в список
    if d < mr[d % krat]:
        mr[d % krat] = d

#Если сумма s не делится на krat, то сумма корректируется
#путем вычитания значения из mr[s % krat]
if s % krat != 0:
    s -= mr[s % krat]
print(s)

Ответ: 10756 32719168
Оцените статью
Я решу все!