Задача к ЕГЭ по информатике на тему «Макс/мин, кол-во пар, сумма/разность кратна/не кратна» №2

Дано число N,  затем N  натуральных чисел. Рассматриваются все пары элементов последовательности, разность которых четна, и в этих парах, по крайней мере, одно из чисел делится на 17  .

Среди всех таких пар найдите пару с максимальной суммой элементов и выведите элементы пары в порядке возрастания их числовых значений.

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

В первой строке подается натуральное число 1 < N < 100000  . В каждой строке после записано одно натуральное число, не превышающее 10000  .

Переборное решение:

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)

Ответ: 3077 8759 9996 10000
Оцените статью
Я решу все!