Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел делилась на 4 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – максимально возможную сумму, соответствующую условиям задачи.
Входные данные: Даны два входных файла: файл A и файл B, каждый из которых содержит в первой строке количество пар N . Каждая из следующих 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)