Решение: Максимальное произведение показаний
По каналу связи передаётся последовательность натуральных чисел — показания прибора. В течение $N$ минут ($N$ — натуральное число) прибор ежеминутно регистрирует значение напряжения в электрической сети и передаёт его на сервер.
Определите три таких переданных числа, чтобы между моментами передачи любых двух из них прошло не менее $K$ минут, а произведение этих трёх чисел было максимально возможным. Запишите найденное произведение.
Даны два входных файла — файл A и файл B. В первой строке каждого файла содержится натуральное число $K$ — минимальное количество минут, которое должно пройти между моментами передачи показаний, а во второй — количество переданных показаний $N$ ($1 \leq N \leq 10\,000\,000$, $N > K$). В каждой из следующих $N$ строк находится одно натуральное число, не превышающее $10\,000\,000$, обозначающее значение напряжения в соответствующую минуту.
Для выполнения задания используйте данные из прилагаемых файлов. При обработке файла B нельзя использовать переборный алгоритм, вычисляющий произведение для всех возможных вариантов.
Решение по шагам
4 шагаНумеруем показания последовательности начиная с единицы. Для трёх выбранных позиций $i<j<l$ должны выполняться условия $j-i\geq K$ и $l-j\geq K$.
Для каждой позиции поддерживаем максимальное произведение пары чисел, выбранных среди уже доступных позиций с необходимым расстоянием. При обработке очередного числа учитываем только позиции, отстоящие от него минимум на $K$.
Чтобы обработать файл B за приемлемое время, не перебираем тройки. Используем динамическое программирование и префиксные максимумы: вычисление выполняется за $O(N)$ времени и требует $O(N)$ памяти либо $O(K)$ памяти при соответствующей оптимизации.
После обработки последнего показания выбираем максимальное из значений произведения трёх допустимых чисел.
Численные ответы зависят от содержимого файлов A и B, которое не предоставлено в исходных данных.
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Проверяют расстояние только между первой и последней выбранными позициями.
Разрешают выбирать соседние показания, если расстояние между ними меньше $K$.
Используют полный перебор всех троек для файла B.
Путают номера минут с самими значениями показаний.