Almaty Code Cup 2024
A. Треугольник ACC
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Делать задачи сложно. Поэтому Влад пошел играться с ежами в кубики. У него было 2 вида кубиков, на $$$x$$$ кубиках нарисованы буквы A, на $$$y$$$ кубиках буквы C. Он придумал треугольник ACC, по принципу треугольника Паскаля. На $$$i$$$-м слое $$$(i \gt 0)$$$ треугольника АСС должна находиться ровно одна буква А и ровно $$$i-1$$$ букв С следующих за ней.

пример треугольника ACC высоты 4

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

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

Единственная строка входных данных содержит 2 целых числа $$$x$$$ и $$$y$$$ $$$(1 \le x, y \le 10^{18})$$$.

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

Выведите одно целое число — ответ на задачу.

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

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

Это интерактивная задача.

Задан отсортированный в неубывающим порядке массив $$$a$$$ длины $$$n$$$. Элементы массива не превосходят $$$n$$$. Вам известна только длина массива. Используя не более чем $$$2 \cdot n$$$ запросов, необходимо отгадать весь массив. Запросы можно выполнять следующего типа: «? i x», где $$$1 \leq i \leq n$$$ и $$$x$$$ — целое число. Жюри ответит следующим образом:

  • = если $$$a_i = x$$$,
  • > если $$$x \gt a_i$$$,
  • < если $$$x \lt a_i$$$.

После того как вы определите массив, вы должны вывести его следующим образом: «! $$$a_1$$$ $$$a_2$$$ ... $$$a_n$$$», где $$$a_1, a_2, \ldots, a_n$$$ — это элементы массива, которые вы угадали.

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

Единственная строка входных данных содержит единственное целое число $$$n$$$ $$$(1 \leq n \leq 3000)$$$ - размер массива.

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

Выведите ответ в формате «! $$$a_1$$$ $$$a_2$$$ ... $$$a_n$$$». Гарантируется что для всех $$$i (1 \leq i \leq n)$$$ выполняется $$$1 \leq a_i \leq n$$$.

Протокол взаимодействия
  1. Выведите запросы в формате «? i x».
  2. Жюри ответит одним из трех символов: «=» если $$$a_i = x$$$, «>» если $$$x \gt a_i$$$, или «<» если $$$x \lt a_i$$$.
  3. Выведите ответ в формате «! $$$a_1$$$ $$$a_2$$$ ... $$$a_n$$$».
Пример
Входные данные
3

=

> 

>

=

=
Выходные данные
? 1 1

? 1 2

? 2 3

? 2 2

? 3 3

! 1 2 3

C. Поезда 2
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Недавно Максим прилетел в Корею и захотел попасть на фестиваль фейерверков в Пусане.

Система поездов Кореи представляет собой дерево из $$$n$$$ вершин. Пути поездов двусторонние, и для каждой поездки нужно потратить $$$1$$$ билет.

Максим начинает свой путь из вершины $$$1$$$ и должен попасть в вершину $$$n$$$. Находясь в вершине $$$i$$$ можно купить любое количество билетов по $$$a_i$$$ вон.

Найдите минимальное количество вон, необходимое, чтобы Максим попал в вершину $$$n$$$ из вершины $$$1$$$.

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

В первой строке дано число $$$n$$$ $$$(2 \leq n \leq 2\cdot 10^{5})$$$ — количество вершин в дереве.

Во второй строке даны $$$n$$$ чисел — массив $$$a$$$ $$$(1 \leq a_i \leq 10^6)$$$. $$$a_i$$$ — цена одного билета в вершине $$$i$$$.

В следующих $$$n-1$$$ строках дано по $$$2$$$ числа: $$$v_i, u_i$$$ — концы путей поездов.

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

Выведите минимальное количество денег, необходимое, чтобы Максим попал в вершину $$$n$$$ из вершины $$$1$$$.

Примеры
Входные данные
6
100 10 5 4 100 10
1 2
2 3
3 4
1 5
5 6
Выходные данные
130
Входные данные
7
8 1 5 7 9 4 3
1 2
1 3
2 4
3 5
1 6
2 7
Выходные данные
9
Входные данные
9
1000 100 30 100 10 1000 1000 1000 10
1 2
2 3
2 4
4 5
1 6
6 7
7 8
8 9
Выходные данные
1260

D. Красивые тройки
ограничение по времени на тест
1.5 секунд
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Вам дан массив $$$a$$$ длины $$$n$$$. Тройка чисел $$$(x, y, z)$$$ называется красивой, если выполняются условия: $$$x$$$ делится на $$$y$$$ без остатка, $$$y$$$ делится на $$$z$$$ без остатка, и $$$x \gt y \gt z$$$.

Даны $$$q$$$ запросов вида $$$(l, r)$$$. Необходимо для каждого запроса найти такие индексы $$$i \lt j \lt k$$$ в массиве $$$a$$$, что тройка $$$(a_i, a_j, a_k)$$$ является красивой и $$$l \leq i \lt j \lt k \leq r$$$. Из всех таких троек выбрать ту, которая максимизирует значение $$$n^2 \cdot a_i + n \cdot a_j + a_k$$$. Если существует несколько троек с максимальным значением, выбрать лексикографически минимальную тройку $$$(i, j, k)$$$.

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

Первая строка содержит одно целое число $$$n$$$ — длину массива $$$a$$$ ($$$1 \leq n \leq 10^{5}$$$).

Вторая строка содержит $$$n$$$ целых чисел $$$a_1, a_2, \ldots, a_n$$$ ($$$1 \leq a_i \leq n$$$) — элементы массива $$$a$$$.

Третья строка содержит одно целое число $$$q$$$ ($$$1 \leq q \leq 10^{5}$$$) — количество запросов.

Далее следуют $$$q$$$ строк, каждая из которых содержит два целых числа $$$l$$$ и $$$r$$$ ($$$1 \leq l \leq r \leq n$$$) — границы текущего запроса.

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

Для каждого запроса выведите тройку $$$(i, j, k)$$$, которая является ответом на запрос, если такая тройка найдена. Если тройка $$$(i, j, k)$$$ не была найдена, выведите $$$-1$$$.

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

E. Чертовы ежи!
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Shenfe1 во время РО 2023 случайно попал на поляну ежей. Изначально на поляне нет ни одного ежа. Каждый из $$$n$$$ ($$$1 \leq n \leq 300$$$) ежей имеет три характеристики. $$$i$$$-й еж имеет три характеристики: $$$L_i$$$ ($$$1 \leq L_i \leq 10^8$$$), $$$C_i$$$ ($$$-10^8 \leq C_i \leq 10^8$$$) и скорость. Если $$$i \lt j$$$, то еж под номером $$$i$$$ быстрее ежа под номером $$$j$$$. Так же, гарантируется, что все $$$L_i$$$ уникальны.

В $$$L_i$$$-ю минуту еж $$$i$$$ приходит на поляну, и если он все еще на поляне, то через $$$T$$$ ($$$1 \leq T \leq 10^8$$$) минут он уйдет. Обратите внимание, все ежи находятся на поляне одинаковое количество времени, и что $$$i$$$-й еж еще будет находиться на поляне в момент времени $$$L_i + T$$$.

Shenfe1 может в любой момент времени, если на поляне есть хотя бы один еж, кинуть им еду. В таком случае, если на поляне $$$i$$$-й еж — самый быстрый еж, то он забирает еду и уходит, а к настроению Shenfe1 добавляется $$$C_i$$$ раздраженности. Временем броска еды, подбором еды и прихода/ухода ежа можно пренебречь.

Shenfe1 хочет знать, какую максимальную раздраженность в самом худшем случае он может получить, если изначально его раздраженность равна 0.

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

В первой линии дается 2 числа: $$$n$$$ ($$$1 \leq n \leq 300$$$) и $$$T$$$ ($$$1 \leq T \leq 10^8$$$).

В следующих $$$n$$$ линиях следуют описание ежей. В $$$i$$$-й строке находятся характеристики $$$i$$$—го ежа: $$$L_i$$$ и $$$C_i$$$ ($$$1 \leq L_i \leq 10^8, -10^8 \leq C_i \leq 10^8$$$). Гарантируется, что все $$$L_i$$$ уникальны.

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

Выведите одно число, максимальную раздраженность, которую может получить Shenfe1.

Примеры
Входные данные
5 3
1 -5
3 -8
2 15
10 9
11 -10
Выходные данные
19
Входные данные
4 4
3 -3
1 -2
7 -2
5 5
Выходные данные
3

F. Миним и его борьба
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

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

Для прояснения, допустим, что последний раз он ел в час под номером $$$x$$$. Тогда, если с момента времени $$$x+1$$$ и до момента времени $$$x+b$$$ включительно он не поест, то Миним умрет, и будет очень грустно... Со сном аналогично.

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

В первой строке три числа $$$n$$$, $$$a$$$ и $$$b$$$ - количество часов до олимпиады и сколько он может не спать и не есть соответственно. ($$$1 \le a, b \le n \le 100$$$)

Во второй строке одна строка $$$c$$$ длины $$$n$$$ и состоящая из строчных букв 's' и 'e'. Если $$$c_i$$$ = 's', то в час $$$i$$$ он может спать, и наоборот.

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

Одно число - ответ на задачу. Если же нет такого расписание, в котором бы Миним не умер, то выведите -1.

Примеры
Входные данные
5 3 3
seses
Выходные данные
3
Входные данные
10 5 4
sesseseess
Выходные данные
5
Входные данные
5 1 2
seees
Выходные данные
-1
Примечание

В первом примере он ест в час 2 и 4, а спит в час 3.

G. Леба Нон и обеды
ограничение по времени на тест
3 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Все мы знаем нашего дорогого друга - Леба Нона. Плейбой, миллиардер, филантроп, а также составитель задач АСС. Эта задача о нем.

Во время составления задач турнира злой злодей Башкиров Даниил заточил всех членов жюри в клетки. Для коммуникации из каждой клетки есть односторонний туннель в одну другую. Изначально $$$i$$$-й член жюри сидит в клетке $$$i$$$. Но чтобы дело шло эффективно, нужно, чтобы каждый член жюри хорошо питался. Для этого Даниил поручил Леба Нону одно задание — накормить всех членов жюри. Для этого Леба Нон решил организовать $$$q$$$ обедов. Каждый обед проводится в одной из клеток. Если член жюри может дойти до клетки с обедом, то он идет в нее и не возвращается обратно. Расстояние между клетками - это количество туннелей, которые составляют путь между ними. Помогите Леба Нону посчитать суммарное расстояние, которое пройдет каждый член жюри.

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

В первой строке дано одно число $$$n$$$ — количество членов жюри. ($$$1 \le n \le 2\cdot 10^{5}$$$)

Во второй строке даны $$$n$$$ чисел $$$a_i$$$ — клетка, в которую ведет туннель из клетки $$$i$$$. ($$$1 \le a_i \le n$$$)

В третьей строке дано одно число $$$q$$$ — количество обедов. ($$$1 \le q \le 2\cdot 10^{5}$$$)

В последней строке дано $$$q$$$ чисел $$$b_j$$$ — клетка, в которой проходит $$$j$$$-й обед. ($$$1 \le b_j \le n$$$)

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

В одной строке выведите $$$n$$$ чисел — суммарное расстояние, которое пройдет каждый член жюри.

Примеры
Входные данные
10
2 3 4 5 1 3 6 6 7 7
8
7
6
3
1
5
1
2
4
Выходные данные
13 12 11 15 14 12 13 13 14 14 
Входные данные
10
2 3 4 5 1 3 6 6 7 7
2
6
7
Выходные данные
0 0 0 0 0 0 1 1 2 2 
Входные данные
5
2 5 5 3 3
5
2
3
5
2
5
Выходные данные
4 3 1 2 2 

H. Railgun и анимешные точки
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Как оказалось, Railgun обожает задачи на геометрию. Его наставник в этом деле, fractal, дал ему множество из $$$N$$$ точек на плоскости, некоторые из них можно сделать анимешными. Особенность анимешной точки (условно $$$H$$$) в том, что имея произвольную точку $$$P$$$, можно за одну операцию превратить ее в точку $$$P'$$$, повернув относительно $$$H$$$ на какой-либо угол. Иными словами, если описать окружность $$$\omega$$$ вокруг точки $$$H$$$ радиуса $$$dist(H, P)$$$, то должно выполняться $$$P' \in \omega$$$.

Также fractal дал ему $$$Q$$$ независимых запросов: имея произвольную точку $$$A(x, y)$$$, сказать, возможно ли из нее перейти в точку $$$B(-x, -y)$$$, вращая ее вокруг анимешных точек. Изначально у Railgun нет анимешных точек. А так как делать их долго, он попросил вас сказать наименьшее количество анимешных точек, которые ему пригодятся (если, конечно, запрос fractal осуществим). А так же сказать сколько существует способов выбрать их. Так как это число может быть большим, он попросил вывести его по модулю $$$10^9 + 7$$$.

Количество операций минимизировать не нужно.

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

Первая строка входных данных содержит два целых числа $$$N$$$, $$$Q$$$ $$$(1 \le N, Q \le 10^5)$$$.

Следующие $$$N$$$ строк описывают точки множества и содержат два целых числа $$$x$$$, $$$y$$$ $$$(-10^9 \le x, y \le 10^9)$$$. Гарантируется что все точки множества различные.

Следующие $$$Q$$$ строк описывают запросы и содержат два целых числа $$$Ax$$$, $$$Ay$$$ $$$(-10^9 \le Ax, Ay \le 10^9)$$$.

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

Для каждого запроса на отдельной строке выведите $$$-1$$$ $$$-1$$$, если запрос fractal неосуществим. В ином случае, выведите два целых числа — минимальное количество точек, которые нужно сделать анимешными и количество способов их выбрать по модулю $$$10^9 + 7$$$.

Между запросами анимешные точки не сохраняются.

Пример
Входные данные
5 3
1 1
2 2
3 -3
4 4
0 5
-1 1
3 0
-1 -1
Выходные данные
1 3
1 1
1 1

I. топоЛогическая задачка
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

fractal любит геометрию, по этому поместим его в привычное ему пространство, двумерную плоскость. Изначально, fractal находится в координате O(0, 0) и смотрит в сторону оси Ox. Ему дали задание, листок и четное число $$$n$$$ $$$(4 \le n \le 10^6)$$$, зачем и почему мало кто знает, но такова судьба. Ему необходимо выполнить ровно n операций, каждая операция происходит следующим образом:

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

Если после выполнения всех операций, fractal оказался в координате O(0, 0) и смотрит в сторону оси Ox, а так же никогда, кроме самого последнего момента последней операции, не был в координате, которую он посещал раньше, то полученная запись на листке будет называться как «ответ» на задание.

Но так как fractal любит все считать и числа Каталана, он захотел посчитать, сколько «ответов» он сможет получить. Так как ответ может быть очень большим, выведите его по модулю $$$10^9 + 7$$$.

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

В первой строке находится единственное четное число $$$n$$$ $$$(4 \le n \le 10^6)$$$.

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

Выведите одно единственное число, количество «ответов» по модулю $$$10^9 + 7$$$.

Примеры
Входные данные
4
Выходные данные
2
Входные данные
6
Выходные данные
12
Примечание

Заметьте, что после серии операций:

  • X = 4, R — координата (0, 4)
  • X = 2, R — координата (2, 4)
  • X = 2, R — координата (2, 2)
  • X = 4, L — координата (-2, 2)
  • X = 2, L — координата (-2, 0)
  • X = 2, L — координата (0, 0)
Полученная запись на бумаге не будет считаться ответом, так как клетка $$$(0, 2)$$$ была посещена дважды.

J. Звездный Союз и Кибер-вирусы
ограничение по времени на тест
3 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

В далеком будущем, в галактике под управлением Звездного Союза, межзвездные корабли и планеты образуют сложную сеть, являющуюся деревом. Эта сеть состоит из $$$n$$$ вершин. Союз сталкивается с серьезной угрозой — $$$m$$$ типов кибер-вирусов, которые могут быстро распространяться через сеть и заражать все планеты и корабли.

Каждый из $$$m$$$ типов кибер-вирусов обладает уникальными свойствами и может заражать соседние вершины в сети. В момент времени $$$t$$$, если планета или корабль $$$v$$$ заражены вирусом типа $$$i$$$, то в момент времени $$$t + 1$$$ все соседние вершины также будут заражены этим вирусом. Задача Звездного Союза — контролировать и отслеживать распространение вирусов, чтобы предотвратить катастрофические последствия.

Звездный Союз создал командный центр для управления распространением кибер-вирусов. К ним поступают запросы трех типов:

  1. Внедрение вируса:

    В момент времени $$$time$$$ вершина $$$v$$$ заражается кибер-вирусом типа $$$i$$$. Важно отметить, что каждый кибер-вирус типа $$$i$$$ уникален, и моменты времени $$$time$$$ не обязательно возрастают.

  2. Удаление вируса:

    Нужно удалить кибер-вирус типа $$$i$$$, что означает, что этот вирус больше не учитывается при анализе.

  3. Анализ заражений:

    Нужно определить минимальное время $$$t$$$, когда найдется вершина, которая заражена всеми не удаленными кибер-вирусами на отрезке $$$[l, r]$$$, то есть такая вершина $$$v$$$, что она заражена всеми вирусами на отрезке. Также необходимо вывести все вершины, которые будут заражены каждым кибер-вирусом из этого диапазона в момент $$$t$$$.

Изначально ни одна из вершин не заражена никаким вирусом.

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

Первая строка входных данных $$$n$$$, $$$m$$$ и $$$q$$$ $$$(2 \le n,m,q \le 2 \cdot 10^5)$$$ — размер графа, количество кибер-вирусов, и количество запросов.

Следующие $$$n - 1$$$ строк ввода содержат по два целых числа $$$u$$$ и $$$v$$$ $$$(1 \le u,v \le n)$$$, обозначающие ребра в графе.

Следующие $$$q$$$ строк содержат целое число $$$t(1 \le t \le 3)$$$ — тип запроса, а также

Если $$$t = 1$$$, то строка содержит дополнительно $$$3$$$ целых числа $$$time,v,i$$$ $$$(0 \le time \le n$$$, $$$1 \le v \le n$$$, $$$1 \le i \le m)$$$.

Если $$$t = 2$$$, строка будет содержать еще $$$1$$$ целое число $$$i$$$ $$$(1 \le i \le m)$$$.

Если $$$t = 3$$$, строка будет содержать еще $$$2$$$ целых числа $$$l,r$$$ $$$(1 \le l,r \le m)$$$. Гарантируется, что в данном диапазоне существует хотя бы 1 внедренный вирус, который еще не был удален.

Все $$$i$$$ в запросах Внедрения и Удаления вируса уникальны.

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

Выведите ответ на каждый запрос Анализа заражений. Первая строка ответа должна содержать два целых числа, минимальное время $$$t$$$, когда найдется вершина, зараженный всеми не удаленными кибер-вирусами из диапазона, а также количество вершин, зараженных каждым кибер-вирусом из диапазона в момент времени $$$t$$$. Следующая строка должна содержать номера всех зараженных вершин в отсортированном, по номеру, порядке.

Гарантируется, что суммарное количество вершин во всех запросах не превосходит $$$10^7$$$.

Пример
Входные данные
3 2 6
1 2
1 3
1 0 2 1
3 1 2
1 1 3 2
3 1 2
2 1
3 1 2
Выходные данные
0 1
2 
2 2
1 3 
1 1
3 

K. MnTm
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

ААлихан и $$$k$$$ его друзей собираются пойти на концерт AAdo. Концертный зал можно представить в виде таблицы из $$$n$$$ строк и $$$m$$$ столбцов(цена на место в строке $$$i$$$ и столбце $$$j$$$ равна $$$c_{i,j}$$$), где первая строка стоит ближе всего к сцене, а последняя дальше всего от сцены. Каждая клетка таблицы является одним местом. Места внутри одного столбца стоят по убыванию цены от первой строки к последней (чем ближе к сцене, тем дороже). Можно считать, что сцена находится на строке $$$0$$$. ААлихан и его друзья хотят купить по одному месту каждый так, чтобы суммарно потратить не больше $$$B$$$ бетабаксов и их места образовывали одну компоненту связности. Также они все мечтают увидеть лицо AAdo, поэтому они хотят сесть так, чтобы самый дальний из друзей был как можно ближе к сцене. Найдите ряд самого дальнего друга.

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

Гарантируется, что у ААлихана всегда будет способ купить $$$k+1$$$ место.

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

Первая строка входных данных содержит три целых числа $$$n, m, k(1 \le n,m \le 100,0 \le k \lt min(100,n * m))$$$ — количество рядов, столбцов в таблице и количество друзей ААлихана.

Вторая строка содержит одно целое число $$$B(1 \le B \le 10^9)$$$ — количество бетабаксов у ААлихана.

В следующих $$$n$$$ строках записано по $$$m$$$ целых чисел, описывающих матрицу $$$c$$$.В $$$i$$$-й из этих строк записаны цены на билеты в $$$i$$$-й строке $$$с_{i,1},c_{i,2},...c_{i,m}(1 \le c_{i,j} \le 10^5)$$$. Гарантируется, что цены на места внутри одного столбца строго убывают по мере отдаления от сцены.

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

Выведите одно целое число — ответ на задачу.

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