РУҚА
25

Максимальная сумма подпоследовательности

ЕГЭ · Информатика · Задание 25 · Динамическое программирование
ВысокаяФИПИ072D53Короткий ответ≈ 15 минут

Дана последовательность из $N$ натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, сумма элементов каждой из которых кратна $k=71$. Найдите среди них подпоследовательность с максимальной суммой и определите её длину. Если таких подпоследовательностей найдено несколько, укажите количество элементов самой короткой из них.

Даны два входных файла — файл А и файл B. Каждый файл содержит в первой строке количество чисел $N$ ($1 \leq N \leq 10\,000\,000$). Каждая из следующих $N$ строк содержит одно натуральное число, не превышающее $10\,000$.

Для обработки файла B не следует использовать переборный алгоритм для всех возможных вариантов, поскольку такая программа будет выполняться слишком долго.

Условие как в банке ФИПИ — открыть и сверить
Впишите правильный ответ.

Задание выполняется с использованием прилагаемых
к заданию файлов.

Дана последовательность из N натуральных чисел. Рассматриваются все её непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 71. Найдите среди них подпоследовательность с максимальной суммой, определите её длину. Если таких подпоследовательностей найдено несколько,
в ответе укажите количество элементов самой короткой из них.

Входные данные

Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество чисел N (1 ≤ N ≤ 10 000 000). Каждая из следующих N строк содержит одно натуральное число,
не превышающее 10 000.

Пример организации исходных данных во входном файле:

7

1

3

4

93

8

5

95

Для указанных входных данных при k = 50 искомая длина последовательности равна 2.

В ответе укажите два числа: значение длины искомой подпоследовательности сначала для файла А, затем для файла B.

Предупреждение: для обработки файла B не следует использовать переборный алгоритм для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.



Ваш ответ

Формат: число или слово без единиц измерения; дробную часть отделяйте запятой.

!
3 уровня: от лёгкого толчка до почти готового решения. Следующий открывается, когда прочитан предыдущий, — чтобы не перепрыгнуть сразу к ответу.
1Мягкая — с чего смотретьуровень 1 из 3

Как выразить сумму непрерывной подпоследовательности через префиксные суммы?

2Наводящая — какие числа считатьуровень 2 из 3

Две префиксные суммы дают сумму, кратную $71$, если имеют одинаковые остатки при делении на $71$.

3Прямая — фактически решениеуровень 3 из 3

Для каждого остатка храните первую позицию и минимальную префиксную сумму, а также последнюю позицию и максимальную префиксную сумму. При обработке очередной префиксной суммы проверяйте подпоследовательность с каждым ранее встреченным таким же остатком.

Всё равно не складывается?Полное решение с обоснованием каждого шага — на отдельной странице.
Открыть решение

Задание 25 ЕГЭ, информатика

Задача из темы «Динамическое программирование»: в ней 72 задачи с ответом и разбором по шагам. В 25-м номере бланка — 216 задач.

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