Innopolis Open 2024. Отборочный этап 1
A. Fence Painting
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Том и Гек красят забор. Забор состоит из $$$a + b$$$ сегментов, при чем первые $$$a$$$ сегментов — деревянные, а оставшиеся $$$b$$$ — металлические.

Тому и Геку обещали вознаграждение за покраску забора. На деревянные и металлические сегменты тратится разное количество усилий, поэтому покраска деревянного сегмента оценивается в $$$x$$$ монет, а металлического — в $$$y$$$ монет.

Том начинает красить забор с первого (крайнего левого) сегмента и красит подряд сегмент за сегментом. Гек, аналогично, начинает красить забор справа и двигается навстречу Тому. Разумеется, ребята хотят, чтобы вознаграждение за покраску забора было разделено справедливо: суммы, которые получат за забор Том и Гек, должны отличаться на минимальную возможную величину.

Помогите им определить, какое должно быть их место встречи $$$k$$$, чтобы вознаграждение за покраску Тому и Геку различалось как можно меньше. Местом встречи будем считать номер последнего сегмента, который покрасит Том. Иными словами, если место встречи — $$$k$$$, Том покрасил $$$k$$$ левых сегментов, а Гек — оставшиеся $$$a + b - k$$$ правых.

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

В первой строке ввода даны два целых числа $$$a$$$ и $$$b$$$ — количество деревянных и металлических сегментов забора, соответственно ($$$1 \le a, b \le 10^9$$$).

Во второй строке ввода даны два целых числа $$$x$$$ и $$$y$$$ — количество монет, которое платят за покраску одного деревянного или металлического сегмента, соответственно ($$$1 \le x, y \le 10^9$$$).

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

Выведите единственное целое число $$$k$$$ — место встречи, при котором Том и Гек получат наиболее близкие по значению вознаграждения. Если оптимальных вариантов ответа несколько, выведите любой из них.

Система оценки

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

ПодзадачаБаллыОграничения Необходимые подзадачи
0–примеры из условия
116$$$a, b \le 1000$$$0
219$$$x = y$$$
321$$$a = b$$$
424$$$a, b \le 10^6$$$0, 1
520нет0 – 4
Примеры
Входные данные
1 1
1 1
Выходные данные
1
Входные данные
5 10
2 1
Выходные данные
5

B. Work, Sleep, Repeat
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

В компании VK работают очень талантливые программисты. Поскольку им постоянно приходится решать интересные задачи, работа проходит быстро и с удовольствием. Однако это не значит, что при этом можно совсем от нее не отдыхать.

Программист Лев, (почти) занимающий позицию тимлида, решил взять себе отпуск. Но поскольку его присутствие на рабочем месте и доступность могут быть критичными для команды, он разобьет этот отпуск на несколько частей: а именно, он будет на протяжении обозримого будущего жить в цикличном режиме «$$$x$$$ дней работы, затем $$$y$$$ дней отпуска».

Разумеется, у него есть запланированные совещания с командой, дни релиза новой версии и другие события, которые никак нельзя пропускать. Известно всего $$$n$$$ таких событий, и $$$i$$$-е из них запланировано на день $$$d_i$$$.

Считая, что сегодня день номер $$$1$$$, а все события запланированы не раньше, чем на день номер $$$1$$$ определите, существует ли такой день $$$D \le x + y$$$, что если в день $$$D - x - y$$$ (то есть еще до первого дня) Лев перейдет на новый режим, он не пропустит ни одно запланированное событие. Иными словами, требуется добиться того, чтобы все дни $$$d_i$$$ приходились на фазу работы в соответствующем цикле.

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

В первой строке ввода через пробел даны три целых числа $$$n$$$, $$$x$$$ и $$$y$$$ — количество запланированных событий, а также длина фазы работы и длина фазы отпуска, запланированных Львом ($$$1 \le n \le 2 \cdot 10^5$$$; $$$1 \le x, y \le 10^9$$$).

Во второй строке через пробел перечислены $$$n$$$ целых чисел $$$d_i$$$ — дни, на которые запланированы события ($$$1 \le d_i \le 10^9$$$). Не гарантируется, что все $$$d_i$$$ различны.

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

Выведите единственное целое число от $$$1$$$ до $$$x + y$$$ — номер дня, в который Льву следует перейти на новый режим. Если возможных ответов несколько, выведите любой из них. Если ответа не существует, выведите -1.

Система оценки

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

ПодзадачаБаллыОграничения Необходимые подзадачи
0–примеры из условия
115$$$x = 1$$$
219$$$n, x, y \le 1000$$$0
318$$$y = 1$$$
421$$$x \le y$$$0, 2
527нет0 – 4
Примеры
Входные данные
3 3 1
5 8 11
Выходные данные
3
Входные данные
4 3 1
5 8 11 14
Выходные данные
-1
Входные данные
5 4 3
10 16 17 18 99
Выходные данные
1
Примечание

В первом примере если второй цикл начинается с третьего дня, Лев будет работать в дни 3 – 5, затем 7, 8, 9 и, наконец, 11 – 13.

C. Palindromization
ограничение по времени на тест
4 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Палиндромы — последовательности, читающиеся одинаково как слева направо, так и справа налево. Такие последовательности играют большую роль в строковых алгоритмах. Программист Влад считает, что работать с палиндромами проще, чем с любыми другими строками и массивами, поэтому каждый раз, когда Влад видит массив, он стремится сделать из него палиндром.

В этот раз Влад получил массив $$$a$$$ из $$$n$$$ целых чисел. За одну операцию Влад может выбрать любой отрезок этого массива и прибавить ко всем элементам на этом отрезке одинаковое число $$$x$$$ от $$$1$$$ до $$$k$$$ включительно.

Несмотря на то, что Влад привык работать с палиндромами, в этот раз у него возникли проблемы с тем, чтобы получить из $$$a$$$ палиндром за минимальное число действий. Помогите ему поскорее справиться с этой задачей.

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

Первая строка ввода содержит два целых числа $$$n$$$ и $$$k$$$ — размер исходного массива и ограничение на прибавляемые значения ($$$1 \le n \le 10^6$$$; $$$1 \le k \le 3$$$).

Во второй строке ввода через пробел даны $$$n$$$ целых чисел $$$a_i$$$ — элементы массива ($$$1 \le a_i \le 10^9$$$).

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

Выведите единственное число — минимальное количество операций, необходимое, чтобы сделать из массива $$$a$$$ палиндром.

Система оценки

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

ПодзадачаБаллыОграничения Необходимые подзадачи
0–примеры из условия
110$$$n, a_i \le 10$$$0
211$$$a_i \le 2$$$, $$$k=1$$$
312$$$a_i \le a_{i+1}$$$ для всех $$$i$$$
420$$$k = 1$$$2
522$$$k \le 2$$$4
625$$$k \le 3$$$, $$$n \le 1000$$$0, 1

Обратите внимание, что нет группы с $$$k = 3$$$ без каких-либо других дополнительных ограничений!

Примеры
Входные данные
5 1
1 2 3 4 5
Выходные данные
4
Входные данные
6 2
3 6 4 1 2 5
Выходные данные
4
Входные данные
8 3
1 4 3 1 2 1 1 2
Выходные данные
3
Примечание

В первом примере нужно прибавить $$$1$$$ к отрезку $$$[1, 3]$$$, прибавить $$$1$$$ к отрезку [$$$1, 2$$$], а затем два раза прибавить $$$1$$$ к первому элементу. Таким образом после четырех операций массив равен $$$[5, 4, 4, 4, 5]$$$.

Во втором примере нужно прибавить $$$2$$$ к отрезку $$$[1, 1]$$$, прибавить $$$2$$$ к отрезку $$$[4, 5]$$$ и прибавить $$$1$$$ к отрезку $$$[4, 5]$$$, после чего прибавить $$$1$$$ к отрезку $$$[5, 5]$$$. Таким образом после четырех операций массив равен $$$[5, 6, 4, 4, 6, 5]$$$.

В третьем примере нужно прибавить $$$1$$$ к отрезку $$$[1, 4]$$$, прибавить $$$3$$$ к отрезку $$$[6, 7]$$$ и прибавить $$$1$$$ к отрезку $$$[7, 7]$$$. Таким образом после трех операций массив равен $$$[2, 5, 4, 2, 2, 4, 5, 2]$$$.

D. Hackathon
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

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

В этот раз VK организует новый хакатон, и на него на площадке проведения собрались $$$m$$$ участников. Для этих $$$m$$$ участников организаторы заказали $$$n$$$ пицц, которые на площадке расположили в ряд и пронумеровали от $$$1$$$ до $$$n$$$. Известно, что

  • каждая пицца состоит из бесконечного числа кусочков;
  • первый кусочек $$$i$$$-й пиццы имеет толщину теста $$$a_i$$$, а каждый следующий — на $$$1$$$ больше предыдущего (то есть $$$a_i + 1$$$, $$$a_i + 2$$$, и так далее);
  • наиболее привлекательными для участников кажутся кусочки с наименьшей толщиной теста;
  • любой участник может подойти к ряду с пиццами в произвольном месте, но после может перемещаться только влево (в сторону меньших номеров), чтобы не мешать другими участникам.

Периодически участники встают со своих мест и подходят к ряду пицц, чтобы взять один кусочек. Участник номер $$$i$$$ подходит к пицце с номером $$$s_i$$$ в момент времени $$$t_i$$$, после чего моментально находит кусочек пиццы с наименьшей толщиной теста среди пицц от $$$1$$$-й до $$$s_i$$$-й и начинает двигаться в его сторону. На перемещение между двумя соседними пиццами у каждого участника уходит одинаковое время — $$$v$$$ секунд. Несколько участников могут одновременно находиться около одной пиццы.

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

Формально этот процесс можно описать следующим образом. В каждое целое число секунд $$$t$$$:

  1. все участники, уже стоявшие в ряду в момент времени $$$t - 1$$$, сдвигаются на $$$\frac{1}{v}$$$ влево;
  2. все участники с $$$t_i = t$$$ подходят к пицце с номером $$$s_i$$$;
  3. время «останавливается»;
  4. определяются все участники, стоящие на таких целых позициях $$$p$$$, что $$$a_p = \min(a_1, a_2, \ldots, a_p)$$$;
  5. для каждого такого $$$p$$$ участник с минимальным номером, стоящий на позиции $$$p$$$, забирает кусочек пиццы толщиной $$$a_p$$$ и уходит; $$$a_p$$$ увеличивается на $$$1$$$;
  6. после того, как некоторые кусочки пицц забрали, могло случиться так, что у каких-то участников изменилась минимальная толщина кусочка, который они все еще могут получить, в таком случае процесс повторяется с шага 4;
  7. иначе, время «запускается заново» и процесс переходит на следующую секунду.

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

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

В первой строке ввода через пробел даны целые числа $$$n$$$, $$$m$$$ и $$$v$$$ — количество пицц, количество участников и время перемещения каждого участника между соседними пиццами ($$$1 \le n, m \le 10^5$$$; $$$1 \le v \le 10^9$$$).

Во второй строке через пробел перечислены $$$n$$$ целых чисел $$$a_i$$$ — толщина первого кусочка каждой пиццы ($$$0 \le a_i \le 10^9$$$).

В $$$i$$$-й из следующих $$$m$$$ строк даны параметры $$$i$$$-го участника: два целых числа $$$s_i$$$ и $$$t_i$$$, записанные через пробел — стартовое положение и время подхода участника к ряду пицц ($$$1 \le s_i \le n$$$; $$$0 \le t_i \le 10^9$$$).

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

Выведите $$$m$$$ строк, в $$$i$$$-й из которых выведите через пробел пару чисел: толщину теста в кусочке пиццы, полученном $$$i$$$-м участником, и время, которое участник потратит на то, чтобы до него дойти.

Система оценки

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

ПодзадачаБаллыОграничения Необходимые подзадачи
0–примеры из условия
18$$$\max(t_i) \le 10^4$$$; $$$n, m, v \le 100$$$0
210все $$$s_i$$$ равны и все $$$t_i$$$ равны
313$$$|a_i - a_j| \ge m$$$ для любых $$$i \ne j$$$
419$$$n, m \le 1000$$$0, 1
516$$$m \le 1000$$$0, 1, 4
634нет1 – 5
Примеры
Входные данные
5 3 1
1 2 3 4 5
5 1
3 2
2 4
Выходные данные
2 3
1 2
2 1
Входные данные
7 7 3
1 5 3 2 5 4 1
5 4
2 3
4 2
1 6
7 8
3 2
2 4
Выходные данные
2 3
1 3
5 6
2 0
1 0
4 6
3 3
Примечание

В первом примере события будут происходить в следующем порядке:

  1. Первый участник появляется на позиции $$$5$$$ в момент времени $$$1$$$; его цель — пицца номер $$$1$$$.
  2. К моменту времени $$$2$$$ первый участник находится на позиции $$$4$$$, а на позиции $$$3$$$ появляется второй участник. Оба будут двигаться к пицце номер $$$1$$$.
  3. В третью секунду не происходит никаких изменений, участники продолжают двигаться влево.
  4. В момент времени $$$4$$$: второй участник стоит около первой пиццы, первый и третий — вместе около второй. Второй учатник забирает кусочек пиццы толщины $$$1$$$, $$$a_1$$$ становится равно $$$2$$$.
  5. Первый и третий участник моментально видят, что кусочек пиццы толщины $$$1$$$ они уже не получат, а вот толщины $$$2$$$ они могут забрать на своей текущей позиции. Первый, как участник с меньшим номером, забирает $$$a_2 = 2$$$, после чего $$$a_2$$$ становится равно $$$3$$$.
  6. Оставшемуся третьему участнику остается только сдвинуться еще на $$$1$$$ влево и забрать $$$a_1 = 2$$$.

E. Tree Trisection
ограничение по времени на тест
4 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

На территории Университета Иннополис растет множество деревьев, за которыми надо ухаживать. В частности, в Иннополисе растут взвешенные полные двоичные деревья, которые иногда надо подрезать, чтобы они не разрастались очень быстро.

Рассмотрим некоторое полное двоичное дерево с $$$n = 2^k$$$ листьями. Дадим корню номер $$$1$$$, его детям — номера $$$2$$$ и $$$3$$$ (слева направо), и так далее занумеруем каждый слой вершин последовательными целыми номерами. Листья дерева будут иметь номера от $$$n$$$ до $$$2n - 1$$$. У вершины номер $$$i$$$ вес равен $$$w_i$$$. Весом множества вершин мы будем называть сумму весов вершин этого множества.

Тогда от вас требуется определять, как эффективно подрезать деревья. Запрос на подрезку задается номерами листьев $$$l$$$ и $$$r$$$, и осуществляется следующим образом:

  1. Сначала выбирается множество вершин $$$V$$$ — минимальное по размеру связное множество вершин, содержащее все листья с $$$l$$$-го по $$$r$$$-й. Обозначим самую близкую к корню дерева вершину множества $$$V$$$ за $$$\mathtt{root}(V)$$$.
  2. Затем требуется выбрать в множестве $$$V$$$ две различные вершины $$$x$$$ и $$$y$$$ такие, что ни одна из них не является потомком другой.
  3. Когда вершины $$$x$$$ и $$$y$$$ выбраны, ребра, ведущие из $$$\mathtt{root}(V)$$$, $$$x$$$ и $$$y$$$ «наверх» (в сторону корня), обрезаются. Тем самым $$$V$$$ отделяется от всего дерева, и распадается на три подмножества, обозначим их как $$$V_\mathtt{root}$$$, $$$V_x$$$ и $$$V_y$$$, соответственно.
  4. После чего все три этих подмножества высаживаются в качестве отдельных поддеревьев, чтобы повысить благоустройство территории.

У руководства есть несколько вариантов, как подрезать данное вам дерево. Ваша цель — определить для каждого из их запросов $$$(l, r)$$$, какие вершины $$$x$$$ и $$$y$$$ следует выбрать, чтобы минимизировать максимальный из весов $$$V_\mathtt{root}$$$, $$$V_x$$$ и $$$V_y$$$.

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

В первой строке через пробел даны два целых числа $$$n$$$ и $$$m$$$ — количество листьев в дереве и количество запросов у руководства ($$$2 \le n \le 2^{16}$$$; $$$1 \le m \le 10^5$$$; $$$n = 2^k$$$ для некоторого целого $$$k$$$).

В следующей строке через пробел перечислены $$$2n - 1$$$ целых чисел $$$w_i$$$ — веса вершин дерева ($$$1 \le w_i \le 10^9$$$).

В $$$i$$$-й из следующих $$$m$$$ строк дан $$$i$$$-й запрос руководства, два целых числа $$$l_i$$$ и $$$r_i$$$ — номер первого и последнего листьев, участвующих в подрезке дерева ($$$n \le l_i, r_i \le 2n - 1$$$; $$$r_i \ge l_i + 1$$$).

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

Для каждого запроса руководства выведите в отдельной строке через пробел два целых числа $$$x$$$ и $$$y$$$ — номера дополнительных вершин, по которым стоит обрезать дерево, чтобы минимизировать максимальный из весов трех отрезанных частей.

Если есть несколько вариантов ответов, минимизирующих максимальный вес отрезанной части, выведите любой из них.

Система оценки

По умолчанию баллы за каждую подзадачу начисляются только в случае, если все тесты этой подзадачи и необходимых подзадач успешно пройдены. Баллы за подзадачу с потестовой оценкой начисляются за каждый пройденный тест независимо (по $$$2$$$ балла за каждый из шестнадцати тестов).

ПодзадачаБаллыОграничения Необходимые подзадачи Оценка
0–примеры из условия–
16$$$n \le 32$$$, $$$m \le 20$$$0полная группа
210$$$n \le 512$$$, $$$m \le 400$$$0, 1полная группа
313$$$r_i = l_i + 1$$$ для всех $$$i$$$полная группа
423$$$w_i = 1$$$ для всех $$$i$$$полная группа
516$$$n \le 1024$$$, $$$m \le 2000$$$0 – 2полная группа
616 $$$\times$$$ 2нет0 – 5потестовая
Примеры
Входные данные
4 4
1 1 1 1 1 1 1
4 5
5 6
6 7
4 7
Выходные данные
4 5
5 3
6 7
5 3
Входные данные
8 7
5 3 1 4 2 1 5 1 2 2 5 1 2 1 4
8 15
8 11
10 13
8 12
11 12
9 14
13 15
Выходные данные
5 3
4 11
5 3
4 5
5 3
5 3
6 15
Примечание

Ниже дана иллюстрация для первых четырех запросов во втором примере из условия задачи.

У каждой вершины отмечен ее вес. Серыми выделены вершины, которые не вошли во множество $$$V$$$. Выбранные листья $$$l$$$ и $$$r$$$ обведены зеленым. Вершина $$$\mathtt{root}(V)$$$ обведена красным цветом, а вершины $$$x$$$ и $$$y$$$, которые нужно выбрать в качестве ответа — синим. Пунктиром выделены те ребра, которые обрезаются при выполнении соответствующей подрезки.