Задача №27 ЕГЭ по информатике регулярно просит обработать большой файл чисел и найти нечто «максимальное/минимальное» с условием кратности. Наивный перебор пар за O(N²) на реальных данных не успеет. Ниже — понятный, «рабочий» алгоритм в одну проходку, которым мои ученики стабильно берут баллы. Дан файл из N натуральных чисел. Требуется найти максимальную сумму пары чисел, кратную K (например, 120). Если такой пары нет — вывести 0 (или сообщить, что не существует). Вариации: «минимальная сумма, кратная K», «сумма, дающая остаток R», «пара/тройка чисел». Принцип везде схож. Сумма двух чисел кратна K, когда (x % K) + (y % K) ≡ 0 (mod K).
Значит, числу с остатком r подходит число с остатком (K − r) % K. Идея алгоритма: в один проход держим для каждого остатка лучший кандидат (например, максимальное число с этим остатком). Встречая новое число x, сразу пытаемся составить пару с «дополняющим» остатком и обновляем ответ. Пусть best[r] — максимальное число среди уже просмотренных, дающее ост