ЕГЭ Информатика 27: Разбор демоверсии 2021

Задание 27 — задача высокого уровня сложности, оцениваемая в два первичных балла. Один балл начисляется за указание одного правильного числа из двух необходимых, а также за указание обоих чисел в неправильном порядке. За отсутствие ответа или указание неправильных чисел выставляется 0 баллов.

Описание задания

Задание проверяет умение программировать с целочисленными данными, считываемыми из файла. Требуется написать программу, которая из каждой пары положительных целых чисел выбирает одно так, чтобы сумма выбранных чисел не делилась на 3 и была максимально возможной. Гарантируется существование решения. Программа должна вывести одно число — максимально возможную сумму.

Входные данные находятся в файлах a и b. Файл a содержит число n — количество пар чисел, файл b содержит n пар чисел (каждое число не превышает 10000). В ответе указываются два числа: максимально возможная сумма для файла a и для файла b, в указанном порядке. Размер данных в файле b значительно меньше, чем в файле a (например, 20 пар против 60000), что требует эффективного алгоритма.

Решение на языке Python

Представленный алгоритм на Python эффективен для больших массивов данных.

Чтение данных и вычисление суммы

Программа считывает данные из файла 27a.txt:

with open('27a.txt', 'r') as f:
    n = int(f.readline())
    s = 0
    for i in range(n):
        x, y = map(int, f.readline().split())
        s += max(x, y)

Код считывает количество пар (n), затем, в цикле, попарно считывает числа, выбирая максимум из пары и добавляя его к сумме s.

Коррекция суммы

Если s делится на 3, находим пару чисел с минимальной разностью, не кратной 3, и вычитаем эту разность из s:

min_diff = 10001
with open('27a.txt', 'r') as f:
    f.readline() #Пропускаем первую строку (n)
    for i in range(n):
        x, y = map(int, f.readline().split())
        diff = abs(x - y)
        if diff % 3 != 0:
            min_diff = min(min_diff, diff)

if s % 3 == 0:
    s -= min_diff

Вывод результата

Результат выводится на экран:

print(s)

Этот код повторяется для файла b, результаты для a и b выводятся последовательно.

Успешное выполнение задания требует не только знания Python, но и умения создавать эффективные алгоритмы для обработки больших данных. Важно быть внимательным и соблюдать порядок вывода результатов для файлов a и b.

Что будем искать? Например,программа