Международная открытая олимпиада по Математике и Программированию Нархоз 2025
A. Минимизация инверсий с предопределённым префиксом
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Вам, как великому повелителю чисел, поручено выполнить одно архиважное задание, от которого, как утверждают древние пророчества, зависит судьба не только конкурсной таблицы, но и, быть может, всей вычислительной вселенной. $$$ \\ $$$ В некотором королевстве целых чисел обитает благородное множество $$$ S=\{1,2,3,\cdots,n\} $$$, в котором нет ни одного повторяющегося элемента — каждый житель уникален. Однако в последнее время в этом множестве начали происходить странные события. $$$ \\ $$$ Великий прорицатель, используя магические силы предсказания, заранее определил, как именно будут располагаться первые mm чисел итоговой перестановки. Эти элементы уже прочно закрепились на своих позициях в начале будущего массива — и сдвинуть их невозможно, ибо они уже запечатаны волей судьбы. $$$ \\ $$$ Ваша задача, о могучий упорядочиватель, заключается в следующем: определить порядок оставшихся $$$ n-m $$$ элементов $$$ (p_{m+1},p_{m+2},\cdots,p_{n}) $$$, так чтобы, после объединения с предсказанным префиксом, полученная перестановка $$$ p=\left[ p_1,p_2,p_3,\cdots,p_n \right] $$$ была всё ещё корректной (то есть содержала все числа от $$$ 1 $$$ до $$$ n $$$ ровно по одному разу), но при этом количество инверсий в ней было минимально возможным. $$$ \\ $$$ Определения:

  • Перестановка длины $$$ n $$$ — это такой массив из $$$ n $$$ различных целых чисел от $$$ 1 $$$ до $$$ n $$$, в котором каждое число встречается ровно один раз.
  • Инверсией в перестановке называют такую пару индексов $$$ (i, j) $$$, что $$$( 1 \le i \lt j \le n )$$$ и одновременно выполняется $$$ ( p_i \gt p_j ) $$$.
Входные данные

Первая строка содержит два целых числа $$$ n $$$ и $$$ m $$$ $$$ (1 \le m \lt n \le 10^{5}) $$$ — общее количество элементов и количество зафиксированных чисел соответственно. $$$ \\ $$$ Вторая строка содержит $$$ m $$$ различных целых чисел: $$$ p_1,p_2,\cdots,p_m $$$, каждая из которых принадлежит диапазону от $$$ 1 $$$ до $$$ n $$$, и все они различны.

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

Выведите $$$ n-m $$$ целых чисел — элементы $$$ p_{m+1},p_{m+2},\cdots,p_n$$$, такие, чтобы результат $$$ p=\left[ p_1,p_2,p_3,\cdots,p_n \right] $$$ был корректной перестановкой, а количество инверсий в нём было минимально возможным.

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

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

Вам дано футбольное поле в трёхмерном пространстве. Мяч изначально находится в точке $$$(x, y, z)$$$. Перед мячом расположены ворота — прямоугольный параллелепипед с одной вершиной в точке $$$(0, 0, 0)$$$ и противоположной в точке $$$(A, B, C)$$$.

После удара мяч начинает лететь с начальной скоростью $$$v$$$ в направлении, определяемом двумя углами:

  • $$$\theta$$$ — горизонтальный угол в градусах,
  • $$$\phi$$$ — вертикальный угол в градусах.

В каждый момент времени $$$t \ge 0$$$ положение мяча задаётся формулами:

$$$X(t) = x + v \cdot \cos(\phi) \cdot \cos(\theta) \cdot t$$$

$$$Y(t) = y + v \cdot \cos(\phi) \cdot \sin(\theta) \cdot t$$$

$$$Z(t) = z + v \cdot \sin(\phi) \cdot t - \frac{1}{2} \cdot g \cdot t^2$$$

где $$$g = 9.81$$$, а углы переводятся в радианы:

$$$\theta_\text{рад} = \theta \cdot \pi / 180$$$, $$$\phi_\text{рад} = \phi \cdot \pi / 180$$$.

Вам нужно определить, попадёт ли мяч когда-либо в объём ворот.

Считается, что мяч находится внутри ворот, если в некоторый момент времени $$$t \ge 0$$$ его положение $$$(X(t), Y(t), Z(t))$$$ удовлетворяет всем условиям:

$$$0 \le X(t) \le A$$$, $$$0 \le Y(t) \le B$$$, $$$0 \le Z(t) \le C$$$

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

В одной строке даны 9 вещественных чисел:

$$$x,y,z,A,B,C,\theta,\phi,v$$$

Где:

  • $$$(x, y, z)$$$ — начальная позиция мяча,
  • $$$(A, B, C)$$$ — размеры объёма ворот,
  • $$$\theta$$$, $$$\phi$$$ — углы в градусах,
  • $$$v$$$ — начальная скорость.

Все значения — вещественные числа, такие что $$$(0 \le x,y,z,A, B, C, v \le 1000)$$$, $$$(0 \le \theta \le 360)$$$ и $$$(-90 \le \phi \le 90)$$$.

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

Выведите YES, если мяч в какой-то момент попадёт в ворота. В противном случае выведите NO.

Примеры
Входные данные
10 10 10 30 30 30 180 0 10
Выходные данные
YES
Входные данные
100 100 100 10 10 10 0 0 1
Выходные данные
NO

C. Криптографический след
ограничение по времени на тест
3 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

В далеком будущем информация — самый ценный ресурс. Ты — элитный криптограф в Межгалактической разведке. Недавно был перехвачен бинарный сигнал $$$s$$$ длиной $$$n$$$ — предположительно, сообщение вражеской организации. По данным разведки, они используют специальный код $$$t$$$ длины $$$m$$$, который вставляется в передаваемые сигналы, чтобы передать секретные команды.

Но есть проблема: из-за космических помех часть битов могла быть случайно испорчена. Теперь перед тобой стоит важная задача: изменить минимум битов в сигнале $$$s$$$, чтобы в нем ровно $$$k$$$ раз встречалась подстрока $$$t$$$, для каждого возможного $$$k$$$ от $$$0$$$ до $$$n - m + 1$$$.

Минимальное число изменений — это количество замен 0 → 1 или 1 → 0, которые нужно сделать в $$$s$$$, чтобы точно $$$k$$$ вхождений подстроки $$$t$$$ появилось в измененной версии $$$s$$$.

Штаб-квартира ждет отчета: для каждого $$$k$$$ — какова минимальная цена (в изменениях), чтобы получить $$$k$$$ вхождений $$$t$$$?

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

Первая строка содержит два целых числа $$$n$$$ и $$$m$$$ — длины бинарных строк a и b соответственно $$$ (1 \le m \le n \le 500) $$$. Вторая строка содержит бинарную строку $$$s$$$ длины $$$n$$$. Третья строка содержит бинарную строку $$$t$$$ длины $$$m$$$.

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

Выведите $$$n - m + 2$$$ целых чисел: Пусть $$$k$$$ — это количество вхождений строки $$$b$$$ в строку $$$a$$$. Тогда $$$k+1$$$-е выведенное число должно означать минимальное число изменений (замен 0 на 1 или 1 на 0) в строке $$$s$$$, которые необходимо сделать, чтобы строка $$$t$$$ встретилась ровно $$$k$$$ раз как подстрока в $$$s$$$.

Пример
Входные данные
5 2
01010
10
Выходные данные
2 1 0 -1 -1 
Примечание

k = 0 (чтобы убрать все вхождения 10): Можно изменить 1 символ, например 01010 → 00000, тогда 10 ни разу не встретится. Ответ: 2.

k = 1 (чтобы осталась одна подстрока 10): Строка 01010 можно оставить как есть и изменить один из двух вхождений. Например: 01010 → 01110. Ответ: 1.

k = 2 (оставить оба вхождения): Исходная строка уже подходит. Ничего менять не нужно. Ответ: 0.

D. Одни и те же лекции
ограничение по времени на тест
1.5 секунд
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

> Сегмент является хорошим, если каждое различное число в нем появляется ровно одинаковое количество раз.

Вам дан массив $$$a$$$ длиной $$$n$$$, где каждый элемент представляет собой ID преподавателя, назначенного на лекцию. $$$ \\ $$$ Вам также даны $$$q$$$ запросов. Для каждого запроса вам нужно определить, является ли сегмент массива от позиции $$$l$$$ до $$$r$$$ (включительно) хорошим.

Помогите Айгерим определить, какие сегменты соответствуют правилу справедливости декана.

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

Первая строка содержит два целых числа $$$n$$$ и $$$q$$$ $$$(1 \le n,q \le 10^{5},q \bmod 5 = 0 )$$$ — количество лекций и количество запросов.$$$ \\ $$$ Вторая строка содержит $$$n$$$ целых чисел $$$a_1, a_2, \cdots, a_n$$$ $$$(1 \le a_i \le n)$$$— ID преподавателей, назначенных на каждую лекцию.$$$ \\ $$$ Каждая из следующих $$$q$$$ строк содержит два целых числа $$$l$$$ и $$$r$$$ $$$(1\le l \le r \le n)$$$ — границы проверяемого сегмента.

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

Для каждого запроса выведите yes, если отрезок хороший, иначе выведите no.

После вывода ответов на группу запросов не забудьте вывести символ конца строки и сбросить буфер вывода. В противном случае вы можете получить вердикт Idleness Limit Exceeded. Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • обратитесь к документации для других языков.

Вы должны сбрасывать буфер вывода после $$$5$$$-го, $$$10$$$-го, $$$15$$$-го запроса (и так далее), то есть после каждого запроса с индексом, кратным $$$5$$$. После этого вы можете читать следующую группу запросов.

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

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

У студента Бекзата есть $$$n$$$ шариков. Каждый шарик либо красный (обозначается символом R), либо синий (символ B). Он выстроил их в один ряд и хочет узнать:

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

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

Одна строка $$$s$$$ $$$(2 \le |s| \le 100)$$$ , состоящая только из символов R и B.

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

Выведите YES, если можно за один обмен соседних шариков получить правильную последовательность, иначе — NO.

Пример
Входные данные
BR
Выходные данные
YES
Примечание

Можно поменять местами B и R, получится RB

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

Комитет по Национальным Археологическим Исследованиям в Исследовании Организованных Зон (NARXOZ) обнаружил старинный сундук в Алматинской области. Однако на сундуке был замок с паролем, который состоит из $$$n$$$ положительных чисел.

К счастью, учёные также нашли правильную версию этого списка — ту, которая открывает сундук.

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

Чтобы изменить текущий пароль на правильный, вы можете использовать следующую операцию:

  • Выберите индекс $$$i$$$ такой, что $$$1 \le i \lt n$$$.
  • Пусть $$$x$$$ — значение на позиции $$$i$$$ до операции. Пусть $$$y$$$ — значение на позиции $$$i + 1$$$ до операции.
  • После операции: число на позиции $$$i$$$ становится равным $$$y - 1$$$. Число на позиции $$$i + 1$$$ становится равным $$$x + 1$$$.

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

Если сделать два списка одинаковыми невозможно, выведите -1.

NARXOZ проводит конкурс: тот, кто быстрее всех решит эту задачу, получит отличное предложение о работе. Вы хотите победить — так что приступайте к работе!

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

В первой строке дано одно целое число $$$n$$$ ($$$1 \le n \le 3*10^5$$$) — длина пароля.

Во второй строке содержатся $$$n$$$ положительных целых чисел — текущая версия пароля.

В третьей строке содержатся $$$n$$$ положительных целых чисел — правильная версия пароля.

Все значения чисел положительные и не превышают $$$10^9$$$.

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

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

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

В первом примере можно выполнить операции в следующем порядке: обменять $$$(1, 2)$$$, обменять $$$(2, 3)$$$ и обменять $$$(1, 2)$$$. Можно показать, что другого способа с меньшим количеством операций не существует.

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

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

В университете Narxoz профессор по алгоритмам дал студентам очередную головоломку. Он выдал массив $$$A$$$ длины $$$n$$$, записанный на доске, и массив $$$B$$$ длины $$$m$$$, который называется эталонной последовательностью.

Студенты могут применять к отрезкам массива $$$A$$$ следующую специфическую операцию очистки:

  • Пока длина текущего отрезка больше $$$m$$$, разрешается выбрать позицию $$$i$$$ ($$$L \le i \lt R$$$) и удалить элемент $$$A_i$$$, но только если $$$A_i \ne A_{i+1}$$$.

Профессор хочет узнать: сколько существует таких отрезков $$$A[L..R]$$$, которые можно очистить, чтобы в результате получить массив $$$B$$$?

Помогите студентам Narxoz решить задачу и заслужить дополнительный балл на экзамене!

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

Первая строка содержит два целых числа $$$n$$$ и $$$m$$$ ($$$1 \le n \le 2 \cdot 10^5$$$, $$$1 \le m \le 100$$$, $$$m \le n$$$) — длины массивов $$$A$$$ и $$$B$$$.

Вторая строка содержит $$$n$$$ целых чисел $$$A_1, A_2, \dots, A_n$$$ ($$$1 \le A_i \le 10^9$$$).

Третья строка содержит $$$m$$$ целых чисел $$$B_1, B_2, \dots, B_m$$$ ($$$1 \le B_i \le 10^9$$$).

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

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

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

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

Два студента — Ерлан и Даулет — увлекаются математикой и любят проводить эксперименты с числами.Однажды Ерлан выбрал число $$$a$$$, а Даулет — число $$$b$$$. Вместе они решили вычислить выражение $$$a^2$$$ - $$$b^2$$$ и узнать, может ли результат быть простым числом.

Напомним, что простое число — это целое число больше 1, которое делится только на 1 и на само себя. Помогите студентам выяснить, получился ли у них такой результат.

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

Первая строка содержит два целых числа $$$a$$$ и $$$b$$$ $$$(1 \le b \lt a \le 10^{12} ) $$$ — числа, выбранные Ерланом и Даулетом соответственно.

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

Выведите YES (без кавычек), если значение выражения является простым числом, иначе выведите NO.

Вы можете выводить каждую из букв в любом регистре (строчную или заглавную).

Пример
Входные данные
2 1
Выходные данные
YES

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

На арене сегодня - Seduneon, и он готов пройти сквозь матрицу, чтобы достичь финального угла (n, n), выжав максимум из всех побитовых AND! $$$ \\ $$$ Задана квадратная матрица размером $$$ n \times n $$$ , состоящая из неотрицательных целых чисел. $$$ \\ $$$ Седунеон начинает в левом верхнем углу матрицы - клетке $$$(1,1)$$$ — и хочет дойти до правого нижнего угла — клетке $$$(n,n)$$$ $$$ \\ $$$ На каждом шаге он может двигаться вниз или вправо. $$$ \\ $$$ Профит пути — это побитовая операция AND всех чисел, встреченных на пути (включая начальную и конечную клетку). $$$ \\ $$$ Ваша задача — найти максимально возможный профит, который может получить седунеон, выбрав оптимальный путь.

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

Первая строка содержит одно целое число $$$ n $$$ $$$(1 \le n \le 1000) $$$ — размер матрицы. $$$ \\ $$$ Следующие $$$n$$$ строк содержат по $$$n$$$ целых чисел $$$ a_{i,j} $$$ $$$(0 \le a_{i,j} \le 2^{26}-1) $$$ — элементы матрицы

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

Выведите одно число — максимально возможный профит (AND всех чисел вдоль оптимального пути из $$$ (1,1) $$$ в $$$(n,n)$$$)

Примеры
Входные данные
3
7 3 3
6 3 7
4 4 4
Выходные данные
4
Входные данные
5
66969516 62881771 41514568 11972118 43940139
57756114 60816879 60776426 34516231 9491106
59277745 6543967 60776122 62741759 45421615
11938623 3439903 5163738 67108333 65003244
24596084 58055461 47893159 41145539 60652974
Выходные данные
60644520

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

В университете Нархоз факультеты — это не просто кафедры, это часть живой, развивающейся структуры.

Существует $$$n$$$ факультетов, расположенных в круглом здании. Это значит, что факультет $$$0$$$ является соседом факультета $$$n - 1$$$. У каждого факультета есть тип — возможно, это экономика, бизнес или даже магическая бухгалтерия — и каждый тип представлен целым числом.

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

Но иногда этого недостаточно. Поэтому разрешается строить коридоры между соседними факультетами, то есть между факультетом $$$i$$$ и $$$(i + 1) \bmod n$$$. После строительства по ним можно свободно передвигаться в обоих направлениях.

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

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

  • $$$1$$$ $$$i$$$ $$$x$$$ — факультет $$$i$$$ меняет свой тип на $$$x$$$;
  • $$$2$$$ $$$i$$$ — между факультетом $$$i$$$ и $$$i + 1$$$ $$$mod$$$ $$$n$$$ строится коридор;
  • $$$3$$$ $$$a$$$ $$$b$$$ — проверьте, можно ли добраться от факультета $$$a$$$ до факультета $$$b$$$, используя любое количество коридоров и/или порталов.

Ваша задача — для каждого запроса типа 3 вывести YES, если перемещение возможно, и NO в противном случае.

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

Первая строка содержит два целых числа $$$n$$$ и $$$q$$$ — количество факультетов и количество запросов соответственно ($$$1 \le n, q \le 10^5$$$).

Вторая строка содержит $$$n$$$ целых чисел: $$$t_0, t_1, \dots, t_{n-1}$$$ — начальные типы факультетов ($$$0 \le t_i \lt 10^{18}$$$).

Каждая из следующих $$$q$$$ строк описывает один запрос в одном из следующих форматов:

  • $$$1$$$ $$$i$$$ $$$x$$$ ($$$0 \le i \lt n,\ 0 \le x \lt 10^{18}$$$)
  • $$$2$$$ $$$i$$$ ($$$0 \le i \lt n$$$)
  • $$$3$$$ $$$a$$$ $$$b$$$ ($$$0 \le a, b \lt n$$$)

Гарантируется, что все запросы типа $$$2$$$ — уникальны (между каждой парой соседей можно построить коридор не более одного раза).

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

Для каждого запроса типа $$$3$$$ выведите YES, если из факультета $$$a$$$ можно добраться до факультета $$$b$$$, иначе выведите NO.

Примеры
Входные данные
3 3
0 0 2
2 2
3 0 2
1 0 0
Выходные данные
YES
Входные данные
10 9
2 1 0 1 2 1 2 0 2 2
2 6
1 5 3
2 5
1 5 4
3 0 6
1 9 3
2 2
2 7
3 9 3
Выходные данные
YES
NO