Задание 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.