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

На вход программы поступает последовательность из N  натуральных чисел. Рассматриваются все пары различных элементов последовательности, у которых одинаковые остатки от деления на L = 29  и хотя бы одно из чисел делится на A = 17  . Необходимо найти и вывести максимальную сумму элементов пары среди таких пар. В ответ запишите 2  числа через пробел: ответ для файла А и ответ для файла В.

Решение 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] % 29 == a[j] % 29:
            if (a[i] % 17 == 0) or (a[j] % 17 == 0):
                ans = max(ans, a[i] + a[j])
print(ans)

Решение 2 (эффективное)

file = open(’file_B.txt’)
n = int(file.readline())

ans = -1
maxim_krat_17 = [-1] * 29
maxim_nekrat_17 = [-1] * 29

for i in range(n):
    x = int(file.readline())
    ost = x % 29
    if x % 17 == 0:
        ans = max(ans, maxim_nekrat_17[ost] + x, maxim_krat_17[ost] + x)
        maxim_krat_17[ost] = max(maxim_krat_17[ost], x)
    else:
        ans = max(ans, maxim_krat_17[ost] + x)
        maxim_nekrat_17[ost] = max(maxim_nekrat_17[ost], x)
print(ans)

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