machine_solution's blog

By machine_solution, 9 months ago, In Russian

Сегодняшний пост посвящен задаче E из последнего раунда Codeforces Round 1078 (Div. 2), а именно тому, как же до неё додуматься.

Предупреждение: Все индексы в этом посте написаны в привычной для кодера 0-нумерации, вместо привычной для обычного человека 1-нумерации.

Все мы знаем, как решается задача о черепашке. Пусть дана таблица $$$n \times m$$$, в каждой клетке записаны числа $$${a_i}_j$$$. Черепашка может ходить только вниз или вправо на одну клетку, то есть из клетки $$$(i, j)$$$ в клетки $$$(i + 1, j)$$$, $$$(i, j + 1)$$$. Награда черепашки при прохождении от клетки $$$(0, 0)$$$ до клетки $$$(n - 1, m - 1)$$$ определяется как сумма значений $$${a_i}_j$$$ во всех клетках, которые она посетила. Требуется найти максимальную награду, которую может получить черепашка.

Такая задача решается за $$$O(n \cdot m)$$$ и решение находит награду максимального пути от клетки $$$(0, 0)$$$ до каждой клетки $$$(i, j)$$$.

Если же Вы не знаете решение такой задачи, рекомендуется сначала его придумать или прочитать на просторах интернета.

В этой же задаче Рафаэль сначала изменяет значение ровно одной клетки на противоположное, после чего Микеланджело решает задачу о черепашке и максимизирует свою награду. Требуется посчитать какую минимальную награду может гарантировать Рафаэль. Ограничения: $$$n \cdot m \leq 10^5$$$

Вопрос 1: как решать эту задачу за любую асимптотику?

Подсказка 1.1
Ответ 1.1

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

Вопрос 2: как посчитать ответ на задачу о черепашке, если изменить значение в одной клетке?

Подсказка 2.1
Ответ 2.1
Подсказка 2.2
Ответ 2.2
Подсказка 2.3
Ответ 2.3

Из прошлых пунктов мы знаем, как посчитать ответ на задачу для изменения каждой клетки. Остался лишь последний рывок:

Вопрос 3: как посчитать ответ для изменения каждой клетки за $$$O(n \cdot m)$$$ суммарно?

Подсказка 3.1
Ответ 3.1

Итого, мы за $$$O(n \cdot m)$$$ времени и памяти суммарно научились получать ответ на все $$$n \cdot m$$$ задач о черепашке, в каждой из которых изменился знак значения одной из клеток. Теперь давайте возьмём минимум из всех полученных значений — это и будет ответом на задачу.

Замечание: Если Вам понравился это пост, то, возможно, Вам понравится контент из телеграм канала, в который я выкладываю свою подготовку к финалу ICPC 2026. Переходите по ссылке

  • Vote: I like it
  • +17
  • Vote: I do not like it