Дано число затем
натуральных чисел. Рассматриваются все пары элементов последовательности, разность которых четна, и в этих парах, по крайней мере, одно из чисел делится на
.
Среди всех таких пар найдите пару с максимальной суммой элементов и выведите элементы пары в порядке возрастания их числовых значений.
Входные данные
В первой строке подается натуральное число . В каждой строке после записано одно натуральное число, не превышающее
.
Переборное решение:
f = open(’19_A.txt’)
n = int(f.readline())
nums = [int(i) for i in f]
pair = [-10 ** 10] * 2
for i in range(n):
for j in range(i + 1, n):
if abs(nums[i] - nums[j]) % 2 == 0:
if nums[i] % 17 == 0 or nums[j] % 17 == 0:
if nums[i] + nums[j] > sum(pair):
pair = [nums[i], nums[j]]
print(*sorted(pair))
Эффективное решение:
# Индексы массивов - остатки от деления на 2
# Элементы массивов - максимальные числа с соответствующим остатком
kr17 = [0, 0]
nekr = [0, 0]
n = int(input())
ans = [0]
for i in range(n):
x = int(input())
# Если x кратен 17, ему в пару можно ставить и кратные и не кратные 17 числа
if x % 17 == 0:
if x + kr17[x % 2] > sum(ans):
ans = [x, kr17[x % 2]]
if x + nekr[x % 2] > sum(ans):
ans = [x, nekr[x % 2]]
kr17[x % 2] = max(kr17[x % 2], x)
# Если же x не кратен 17, ему в пару можно ставить только кратные 17 числа
else:
if x + kr17[x % 2] > sum(ans):
ans = [x, kr17[x % 2]]
nekr[x % 2] = max(nekr[x % 2], x)
print(ans)