Дана последовательность целых положительных чисел. Рассматриваются все пары элементов последовательности, сумма которых чётна, и в этих парах по крайней мере одно из чисел пары делится на 13. Порядок элементов в паре неважен. В ответ запишите максимальную сумму элементов среди таких пар.
Входные данные.
Даны два входных файла («file_A»и «file_B»), каждый из которых содержит в первой строке количество чисел (
). В каждой из последующих
строк записано одно натуральное число, не превышающее 1000.
В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.
Решение 1 (неэффективное)
f = open("27A.txt")
n = int(f.readline())
a = [int(f.readline()) for x in range(n)]
ans = 0
for i in range(n):
for j in range(i + 1, n):
if (a[i] + a[j]) % 2 == 0:
if (a[i] % 13 == 0) or (a[j] % 13 == 0):
ans = max(ans, a[i] + a[j])
print(ans)
Решение 2 (эффективное)
f = open(’10.txt’)
n = int(f.readline())
# Список, где первый индекс - кратность 13 (0 - не кратно, 1 - кратно),
# а второй индекс - остаток от деления на 2
nums = [[-10 ** 10] * 2 for i in range(2)]
mx = -10 ** 10
for i in range(n):
x = int(f.readline())
ost = (2 - (x % 2)) % 2
# Если x кратен 13, к нему в пару можно ставить числа
# и кратные и не кратные 13
if x % 13 == 0:
mx = max(mx, x + nums[0][ost], x + nums[1][ost])
nums[1][x % 2] = max(x, nums[1][x % 2])
# Если же x не кратен 13, к нему в пару можно ставить
# только числа, кратные 13
else:
mx = max(mx, x + nums[1][ost])
nums[0][x % 2] = max(x, nums[0][x % 2])
print(mx)