machine_solution's blog

By machine_solution, 7 months ago, In Russian

Не закрывайте этот пост, пусть номер задачи вас не пугает. Уверяю, что реализация этой задачи сопоставима с реализацией задачи B из Div 2 раунда.

Этот пост посвящён задаче G. Рациональная пузырьковая сортировка из Div 1 + Div 2 раунда, которая является примером, что математический подход может решать даже такие сложные задачи по программированию. Итак, реализация тут простая, но как же додуматься до решения? Этому и посвящён текущий пост

Задача такова — дано $$$n \leq 10^6$$$ целых неотрицательных чисел, за один ход мы можем усреднить два соседних числа, получая уже рациональные числа. Требуется понять, можно ли за 0 или больше таких операций сделать массив неубывающим.

Итак, у нас есть задача, ответом на которую является "Да" или "Нет", так что логично будет попытаться найти какие-то случаи входных данных, в которых ответ нас будет известен. Так как в задаче есть много вариантов действий, давайте сначала попробуем понять, когда ответ точно "Да"

Вопрос 1: Опишите какие-нибудь ограничения на входные данные, при которых ответ всегда "Да"

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

Итак, мы поняли один, но довольно частый и реалистичный случай, в котором ответ "Да". Следует закономерный вопрос

Вопрос 2: Нет ли ещё случаев, когда ответ точно "Да"?

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

Итак, мы уже получили сильное свойство, довольно частое, при котором ответ всегда "Да"

Вопрос 3: Достаточно ли его?

Ответ 3

Давайте попробуем понять, когда же из оставшихся случаев ответ "Нет"

Вопрос 4: Когда ответ точно "Нет"?

Подсказка 4.1
Ответ 4.1
Подсказка 4.2
Ответ 4.2
Подсказка 4.3
Ответ 4.3

Мы довольно сильно переформулировали задачу и получили строгое разделение на ответы "Да" и "Нет". Нужно только понять, как проверить условие на "Нет"

Вопрос 5: Как же это проверять?

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

Итого, наше решение работает за $$$O(n)$$$ и использует не больше реализации, чем начальная задачка на div 2 раунде, но содержит в себе математическую сложность. Пишите в комментарии, насколько просто в итоге додуматься до этой задачи? Ведь несмотря на большое количество текста, шаги в нём не самые сложные

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

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