2023-2024 Всероссийская командная олимпиада школьников по программированию, региональный этап Саратовской области (ВКОШП 23, Саратовский отборочный этап)
A. Треугольник
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

У Поликарпа есть три отрезка с целочисленными длинами $$$a$$$, $$$b$$$ и $$$c$$$.

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

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

  • выбрать один из отрезков и увеличить или уменьшить длину выбранного отрезка ровно на $$$1$$$.

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

Перед вами стоит задача определить минимальное количество операций, которые необходимы, чтобы из измененных после операций отрезков $$$a$$$, $$$b$$$ и $$$c$$$ можно было сделать треугольник с положительной площадью, а концы отрезков были вершинами треугольника.

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

В первой строке следуют три целых числа $$$a$$$, $$$b$$$ и $$$c$$$ ($$$1 \le a, b, c \le 10^{6}$$$) — длины отрезков Поликарпа.

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

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

Примеры
Входные данные
3 2 6
Выходные данные
2
Входные данные
250 100 200
Выходные данные
0
Входные данные
13 111 57
Выходные данные
42
Примечание

В первом примере можно, например, в ходе первой операции увеличить длину первого отрезка на $$$1$$$, а в ходе второй операции уменьшить длину третьего отрезка на $$$1$$$. Таким образом, после двух операций длины отрезков станут равны $$$4$$$, $$$2$$$ и $$$5$$$. Из этих отрезков можно сделать треугольник, удовлетворяющий описанным условиям.

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

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

Поликарп очень любит играть в баскетбол. На последней тренировке он сделал $$$n$$$ точных бросков. Поликарп запомнил для каждого броска расстояние до кольца, с которого бросок был сделан.

Теперь Поликарп хочет посчитать количество очков, которые он набрал на тренировке. Для этого ему нужно выбрать какое-то целое неотрицательное число $$$d$$$. Тогда за каждый точный бросок с расстояния строго меньшего, чем $$$d$$$, Поликарп запишет себе $$$2$$$ очка, а за каждый бросок с расстояния большего либо равного $$$d$$$, Поликарп запишет себе $$$3$$$ очка.

Перед вами стоит задача определить минимально возможное значение $$$d$$$, при котором количество очков Поликарпа на тренировке будет в точности равно числу $$$k$$$.

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

В первой строке следуют два целых числа $$$n$$$ и $$$k$$$ ($$$1 \le n \le 1\,000$$$, $$$2n \le k \le 3n$$$) — количество точных бросков и необходимое количество очков.

Во второй строке следует последовательность целых чисел $$$a_1, a_2, \dots, a_n$$$ ($$$1 \le a_i \le 10^{9}$$$), где $$$a_i$$$ равно расстоянию, с которого был сделан $$$i$$$-й точный бросок. Гарантируется, что все числа в заданной последовательности различные.

Обратите внимание, что ограничения на входные данные таковы, что ответ всегда найдется.

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

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

Примеры
Входные данные
3 7
20 10 30
Выходные данные
21
Входные данные
5 15
4 8 7 3 5
Выходные данные
0
Входные данные
10 24
10 8 7 5 6 9 2 3 4 1
Выходные данные
7
Примечание

В первом примере $$$d$$$ должно быть равно $$$21$$$. Тогда за первые два броска Поликарп запишет себе по два очка, а за третий бросок — три очка. Таким образом, суммарно Поликарп наберет $$$2 + 2 + 3 = 7$$$ очков.

Во втором примере $$$n=5$$$, а $$$k=15$$$, поэтому за каждый бросок Поликарп должен записывать себе по три очка. Таким образом, минимально возможное целое неотрицательное значение $$$d$$$ равно $$$0$$$.

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

У Поликарпа есть две последовательности целых чисел $$$a$$$ и $$$b$$$. В каждой из этих последовательностей по $$$n$$$ элементов.

Поликарпу стало интересно, сколько существует различных целых чисел $$$x$$$ таких, что для всех $$$i$$$ от $$$1$$$ до $$$n$$$ верно, что $$$x$$$ находится между $$$a_i$$$ и $$$b_i$$$, то есть для всех $$$i$$$ от $$$1$$$ до $$$n$$$ выполняется хотя бы одно из двух условий:

  • $$$a_i \le x \le b_i$$$;
  • $$$b_i \le x \le a_i$$$.

Перед вами стоит задача помочь Поликарпу и найти количество различных целых чисел $$$x$$$, которые удовлетворяют всем описанным условиям.

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

В первой строке следует целое число $$$n$$$ ($$$1 \le n \le 200\,000$$$) — количество элементов в последовательностях $$$a$$$ и $$$b$$$.

Во второй строке следует последовательность целых чисел $$$a_1, a_2, \dots, a_n$$$ ($$$1 \le a_i \le 10^{9}$$$).

В третьей строке следует последовательность целых чисел $$$b_1, b_2, \dots, b_n$$$ ($$$1 \le b_i \le 10^{9}$$$).

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

Выведите количество целых чисел $$$x$$$, которые удовлетворяют всем описанным условиям.

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

В первом примере подходят $$$x = 3$$$, $$$x = 4$$$, $$$x = 5$$$ и $$$x = 6$$$. Таким образом, нужно вывести $$$4$$$, так как ровно четыре целых числа удовлетворяют всем условиям.

Во втором примере подходит только $$$x = 5$$$.

В третьем примере не подходит ни одно целое число.

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

Перестановкой длины $$$n$$$ называется массив из $$$n$$$ целых чисел, в котором каждое целое число от $$$1$$$ до $$$n$$$ встречается ровно один раз.

Инверсией в перестановке $$$p$$$ назовем такую пару элементов $$$p_i$$$ и $$$p_j$$$, что $$$i \lt j$$$ и $$$p_i \gt p_j$$$. В таком случае эти два элемента участвуют в инверсии.

Вам даны два целых числа $$$n$$$ и $$$k$$$. Постройте такую перестановку длины $$$n$$$, в которой ровно $$$k$$$ элементов, участвующих в инверсиях, или сообщите, что такой перестановки не существует.

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

В первой строке задано одно целое число $$$n$$$ ($$$2 \le n \le 100$$$).

Во второй строке задано одно целое число $$$k$$$ ($$$0 \le k \le n$$$).

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

Если перестановки, удовлетворяющей условию задачи, не существует, выведите $$$0$$$.

Иначе выведите $$$n$$$ различных целых чисел от $$$1$$$ до $$$n$$$ — искомую перестановку. Если таких перестановок несколько, вы можете вывести любую из них.

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

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

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

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

Также Поликарп знает, что цифры $$$a$$$ и $$$b$$$ являются волшебными. Если окажется так, что среди прочитанных Поликарпом страниц ровно $$$k$$$ номеров страниц заканчиваются на цифры $$$a$$$ или $$$b$$$, то произойдет чудо, и Поликарп получит пятерку в четверти по информатике.

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

Перед вами стоит задача определить наибольший номер страницы $$$x$$$, с которой Поликарп должен начать читать книгу, чтобы ровно $$$k$$$ номеров страниц, начиная со страницы $$$x$$$ и заканчивая страницей $$$n$$$, заканчивались на цифры $$$a$$$ или $$$b$$$.

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

В первой строке следуют четыре целых числа $$$n$$$, $$$k$$$, $$$a$$$ и $$$b$$$ ($$$1 \le k \le n \le 10^{12}$$$, $$$0 \le a, b \le 9$$$, $$$a \neq b$$$) — количество страниц в книге, необходимое количество страниц, которые должны заканчиваться на цифры $$$a$$$ или $$$b$$$, а также сами цифры $$$a$$$ и $$$b$$$.

Следует обратить внимание, что входные и выходные данные в этой задаче могут не помещаться в стандартный $$$32$$$-битный тип данных. Необходимо использовать $$$64$$$-битный тип данных (long long в С++, int64 в Паскале, long в Java).

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

Если Поликарп не сможет с помощью книги наколдовать себе пятерку в четверти по информатике, выведите $$$-1$$$.

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

Примеры
Входные данные
29 3 8 0
Выходные данные
18
Входные данные
20 5 4 7
Выходные данные
-1
Входные данные
1000000000000 1234 5 6
Выходные данные
999999993835
Примечание

В первом примере Поликарп должен начать читать книгу со страницы $$$18$$$. Тогда ровно три номера прочитанных страниц будут заканчиваться на $$$8$$$ или $$$0$$$: $$$18$$$-я, $$$20$$$-я и $$$28$$$-я страницы.

Во втором примере в книге всего четыре страницы, чьи номера заканчиваются на $$$4$$$ или $$$7$$$: страницы $$$4$$$, $$$7$$$, $$$14$$$ и $$$17$$$. Так как $$$k = 5$$$, Поликарп не сможет наколдовать себе пятерку в четверти по информатике.

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

Поликарп приехал на склад с ящиками. Он выстроил все ящики в $$$n$$$ стопок, в каждой из стопок ящики стоят друг на друге.

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

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

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

Перед вами стоит задача определить, возможно ли перераспределить ящики таким образом, чтобы в каждой из $$$2\cdot n - 1$$$ стопок было одинаковое количество ящиков. Ящики запрещено выкидывать или добавлять, то есть Поликарп должен перераспределить именно те ящики, которые были в $$$n$$$ изначальных стопках.

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

В первой строке следует целое число $$$n$$$ ($$$2 \le n \le 200\,000$$$) — количество изначальных стопок.

Во второй строке следует последовательность целых чисел $$$a_1, a_2, \dots, a_n$$$ ($$$1 \le a_i \le 1\,000$$$), где $$$a_i$$$ равно количеству ящиков в $$$i$$$-й изначальной стопке.

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

Если невозможно перераспределить ящики описанным образом, выведите «NO» (без кавычек).

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

Примеры
Входные данные
3
7 13 5
Выходные данные
YES
Входные данные
2
30 10
Выходные данные
NO
Входные данные
6
8 16 13 18 12 10
Выходные данные
YES
Входные данные
3
11 5 9
Выходные данные
NO
Примечание

В первом примере после добавления двух новых стопок, последовательность количества ящиков в стопках (обозначим ее как $$$a$$$) равна $$$[7, 0, 13, 0, 5]$$$. После этого можно взять два ящика из первой стопки и положить во вторую. После этого $$$a = [5, 2, 13, 0, 5]$$$. Затем можно взять $$$5$$$ ящиков из третьей стопки и положить в четвертую. После этого $$$a = [5, 2, 8, 5, 5]$$$. После этого можно взять $$$3$$$ ящика из третьей стопки и положить во вторую. После этого $$$a = [5, 5, 5, 5, 5]$$$. Таким образом, Поликарп может сделать количество ящиков во всех стопках одинаковым.

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

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

У Поликарпа есть строка $$$s$$$ длины $$$n$$$, состоящая из строчных букв латинского алфавита.

Поликарп решил, что удалит из своей строки ровно $$$k$$$ букв. После удаления $$$k$$$ букв строка Поликарпа разделится на некоторое количество частей. Поликарп будет рассматривать только те части строки, в которых есть хотя бы одна буква, то есть пустые части рассматриваться не будут. Например, если $$$s = $$$ «abcdefghij» и Поликарп удалит первую, четвертую и шестую буквы, его строка разделится на три части «bc», «e» и «ghij».

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

Поликарп хочет, чтобы все получившиеся части его строки были одинаковыми. Перед вами стоит задача определить, возможно ли удалить ровно $$$k$$$ букв из строки $$$s$$$, учитывая все описанные условия, так, чтобы желание Поликарпа исполнилось.

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

В первой строке следуют два целых числа $$$n$$$ и $$$k$$$ ($$$2 \le n \le 200\,000$$$, $$$1 \le k \le \frac{n + 1}{2}$$$) — количество букв в строке Поликарпа и количество букв, которые нужно удалить.

Во второй строке следует строка $$$s$$$ длины $$$n$$$, состоящая из строчных букв латинского алфавита — строка Поликарпа.

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

Если невозможно удалить ровно $$$k$$$ букв из строки Поликарпа, учитывая описанные условия, так, чтобы все оставшиеся части строки были одинаковыми, выведите «NO» (без кавычек).

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

Примеры
Входные данные
3 2
acm
Выходные данные
YES
Входные данные
9 3
abcabaabb
Выходные данные
YES
Входные данные
7 1
abacaba
Выходные данные
YES
Входные данные
6 3
vkoshp
Выходные данные
NO
Примечание

В первом примере нужно удалить первую и третью буквы. После этого получится только одна часть «c», поэтому нужно вывести «YES».

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

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

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

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

У Поликарпа есть строка $$$s$$$ длины $$$n$$$, состоящая из строчных букв латинского алфавита.

Поликарп может выполнять со своей строкой следующую операцию:

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

Например, если строка Поликарпа равна «cccrrrttt», то после применения одной операции строка станет равна «ccrrrttt», а если строка Поликарпа равна «aabbbcc», то после применения одной операции строка станет равна «aabbcc».

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

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

В первой строке следуют два целых числа $$$n$$$ и $$$k$$$ ($$$2 \le n \le 200\,000$$$, $$$1 \le k \lt n$$$) — длина строки Поликарпа, а также количество операций, которые нужно последовательно к ней применить.

Во второй строке следует строка Поликарпа $$$s$$$ длины $$$n$$$, состоящая из строчных букв латинского алфавита.

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

Выведите строку Поликарпа после последовательного применения к ней $$$k$$$ описанных операций.

Примеры
Входные данные
9 4
aabbbbccc
Выходные данные
abbcc
Входные данные
10 6
abcdefghij
Выходные данные
ghij
Примечание

Рассмотрим подробнее первый пример:

  1. после первой операции строка Поликарпа станет равна «aabbbccc»;
  2. после второй операции строка Поликарпа станет равна «aabbccc»;
  3. после третьей операции строка Поликарпа станет равна «aabbcc»;
  4. после четвертой операции строка Поликарпа станет равна «abbcc».

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

Поликарп является тренером футбольного клуба в Берляндии.

За прошедший сезон его команда сыграла $$$n$$$ матчей, за которые набрала $$$p$$$ очков. Известно, что за один матч команда может получить следующее количество очков:

  • в случае победы команда получает $$$k$$$ очков ($$$k \gt 1$$$);
  • в случае ничьи команда получает $$$1$$$ очко;
  • в случае поражения команда получает $$$0$$$ очков.

Поликарп не помнит точные результаты каждого из $$$n$$$ матчей его команды. Ему стало интересно, какое максимальное количество ничьих могло быть у его команды за прошедший сезон, если она набрала $$$p$$$ очков за $$$n$$$ матчей. Перед вами стоит задача помочь Поликарпу и определить максимальное количество ничьих.

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

В первой строке следуют три целых числа $$$n$$$, $$$p$$$ и $$$k$$$ ($$$1 \le n \le 10^{12}$$$, $$$0 \le p \le 10^{15}$$$, $$$2 \le k \le 1\,000$$$) — количество матчей, количество очков, которые набрала команда, а также количество очков, которые получает команда за победу в матче.

Следует обратить внимание, что входные и выходные данные в этой задаче могут не помещаться в стандартный $$$32$$$-битный тип данных. Необходимо использовать $$$64$$$-битный тип данных (long long в С++, int64 в Паскале, long в Java).

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

Если невозможно набрать за $$$n$$$ матчей $$$p$$$ очков, выведите $$$-1$$$.

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

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

В первом примере команда Поликарпа могла выиграть один матч, сыграть в ничью в четырех матчах и проиграть один матч. В таком случае, команда набрала бы $$$1 \cdot 3 + 4 \cdot 1 + 1 \cdot 0 = 3 + 4 = 7$$$ очков. Таким образом, максимальное количество ничьих равно $$$4$$$.

Во втором примере невозможно за один матч набрать $$$2$$$ очка, так как в случае победы команда получает $$$5$$$ очков, в случае ничьи — $$$1$$$ очко, а в случае поражения — $$$0$$$ очков.

В третьем примере команда за $$$10^{12}$$$ матчей набрала $$$10^{12}$$$ очков, поэтому каждый матч мог завершиться в ничью.

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

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

Поликарп вышел в финал телепередачи «Твоя игра».

В финале для Поликарпа подготовлены $$$n$$$ вопросов, пронумерованных целыми числами от $$$1$$$ до $$$n$$$, причем каждый вопрос имеет свою стоимость. Если Поликарп ответит на вопрос, то к его счету прибавится стоимость вопроса, а если Поликарп не ответит на вопрос, то из его счета вычтется стоимость вопроса. Изначально счет Поликарпа равен нулю.

По правилам финала сначала Поликарп должен удалить ровно $$$k$$$ вопросов, которые ему точно не будут заданы. Относительный порядок остальных вопросов останется без изменений.

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

Поликарп перед началом финала узнал темы всех $$$n$$$ вопросов. Теперь он точно знает на какие вопросы он сможет ответить верно, а на какие не сможет.

Перед вами стоит задача определить максимальный счет, который может набрать Поликарп в конце финала, если вы можете помочь ему и подсказать, какие $$$k$$$ вопросов нужно удалить в начале финала и какие вопросы в ходе финала ему нужно пропустить.

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

В первой строке следуют два целых числа $$$n$$$ и $$$k$$$ ($$$2 \le n \le 200\,000$$$, $$$1 \le k \le min(10, n - 1)$$$) — изначальное количество вопросов и количество вопросов, которые Поликарп должен удалить в начале финала.

Во второй строке следует последовательность целых чисел $$$a_1, a_2, \dots, a_n$$$ ($$$-10^{9} \le a_i \le 10^{9}$$$, $$$a_i \neq 0$$$), где $$$|a_i|$$$ равно стоимости $$$i$$$-го вопроса. Если $$$a_i \gt 0$$$, то Поликарп сможет ответить на $$$i$$$-й вопрос. Если $$$a_i \lt 0$$$, то Поликарп не сможет ответить на $$$i$$$-й вопрос.

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

Выведите максимальный счет, который может набрать Поликарп в конце финала. Обратите внимание, что ответ может быть отрицательным числом.

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

В первом примере Поликарпу нужно удалить третий вопрос. Затем ему будут заданы четыре вопроса $$$[1, 2, 3, 2]$$$. Поликарпу не нужно пропускать ни одного вопроса, потому что он сможет ответить на все. Таким образом, его счет в конце финала будет равен $$$1 + 2 + 3 + 2 = 8$$$.

Во втором примере Поликарп может, например, удалить третий и пятый вопросы. Затем ему будут заданы восемь вопросов $$$[4, 3, -2, -2, 3, -2, 3, 6]$$$. Из них Поликарп может, например, пропустить третий и шестой вопросы. Таким образом, его счет в конце финала будет равен $$$4 + 3 + (-2) + 3 + 3 + 6 = 17$$$.

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

Поликарп отметил на координатной прямой $$$n$$$ точек с целочисленными координатами.

Он хочет отметить на координатной прямой еще одну точку, при этом суммарное расстояние от нее до всех остальных $$$n$$$ точек должно быть в точности равно $$$d$$$.

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

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

В первой строке следуют два целых числа $$$n$$$ и $$$d$$$ ($$$1 \le n \le 200\,000$$$, $$$0 \le d \le 10^{17}$$$) — количество точек, которые отметил Поликарп, а также необходимое суммарное расстояние от новой точки до всех остальных.

Во второй строке следует последовательность целых чисел $$$x_1, x_2, \dots, x_n$$$ ($$$0 \le x_i \le 10^{12}$$$), где $$$x_i$$$ равно координате $$$i$$$-й точки. Обратите внимание, что среди заданных точек могут быть точки с одинаковыми координатами.

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

Если невозможно добавить еще одну точку, чтобы суммарное расстояние от нее до всех остальных $$$n$$$ точек было в точности равно $$$d$$$, выведите «NO» (без кавычек).

В противном случае, в первую строку выведите «YES» (без кавычек). Во вторую строку выведите координату искомой точки. Если подходящих точек несколько, выведите координату любой из них. Обратите внимание, что координата искомой точки может быть отрицательной.

Примеры
Входные данные
5 15
10 7 4 8 1
Выходные данные
YES
5
Входные данные
2 6
1 4
Выходные данные
NO
Входные данные
7 0
100 100 100 100 100 100 100
Выходные данные
YES
100
Примечание

В первом примере подходит, например, точка с координатой $$$5$$$. Суммарное расстояние от нее до всех остальных равно $$$|5 - 10| + |5 - 7| + |5 - 4| + |5 - 8| + |5 - 1| = 5 + 2 + 1 + 3 + 4 = 15$$$.

Во втором примере нет ни одной подходящей точки.

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

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

Дан неориентированный граф, состоящий из $$$n$$$ вершин, пронумерованных от $$$1$$$ до $$$n$$$.

Ваша задача — выбрать подмножество из ровно $$$k$$$ различных вершин данного графа. Пусть выбранные вершины — это $$$v_1, v_2, \cdots, v_k$$$. Тогда все эти вершины удаляются из графа, а вместо них добавляется новая вершина $$$V$$$, соединённая со всеми вершинами, с которыми была соединена каждая из вершин $$$v_1, v_2, \cdots, v_k$$$ (то есть если хотя бы одна вершина $$$v_i$$$ не соединена с какой-то вершиной $$$x$$$, то и $$$V$$$ не будет соединена с $$$x$$$).

Можно ли сделать так, чтобы вершина $$$V$$$ была соединена со всеми оставшимися вершинами графа? Если можно, то выведите выбранные вершины $$$v_1, v_2, \cdots, v_k$$$ в произвольном порядке.

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

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

В первой строке записаны два целых числа $$$n$$$ и $$$k$$$ ($$$1 \le k \lt n \le 2000$$$) — количество вершин графа и требуемый размер подмножества.

В $$$i$$$-й из следующих $$$n$$$ строк записаны $$$n$$$ целых чисел $$$g_{i,1}, g_{i,2}, \dots, g_{i,n}$$$, где $$$g_{i, j}$$$ равно $$$1$$$, если между вершинами $$$i$$$ и $$$j$$$ в графе есть ребро, и $$$0$$$, если ребра нет. $$$g_{i, i} = 0$$$ для всех $$$i$$$. $$$g_{i, j} = g_{j, i}$$$ для всех $$$i$$$ и $$$j$$$.

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

Если не существует требуемого подмножества размера ровно $$$k$$$, то выведите $$$-1$$$.

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

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

M. Чередующаяся раскраска
ограничение по времени на тест
4 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Бинарная строка — это строка, состоящая из символов 0 и/или 1. Назовем бинарную строку чередующейся, если в ней нет двух одинаковых соседних символов. Например, строки 0, 1, 101, 0101 — чередующиеся.

Для бинарной строки определим чередующуюся $$$k$$$-раскраску следующим образом:

  • для каждого символа строки выбирается цвет от $$$1$$$ до $$$k$$$;
  • для каждого цвета, если выписать все символы строки, покрашенные в этот цвет, в том порядке, в котором они идут в строке, мы получим чередующуюся строку.

Например, для строки 100111 существует чередующаяся $$$3$$$-раскраска: покрасим символы $$$2$$$ и $$$6$$$ в цвет $$$1$$$, символы $$$1$$$, $$$3$$$, и $$$4$$$ в цвет $$$2$$$, а символ $$$5$$$ — в цвет $$$3$$$. Тогда для каждого из трех цветов строка, состоящая только из символов этого цвета, будет чередующаяся (для цвета $$$1$$$ это 01, для цвета $$$2$$$ — 101, для цвета $$$3$$$ — 1).

Вам дана бинарная строка $$$s$$$. Вам нужно обрабатывать запросы двух типов:

  • $$$1$$$ $$$i$$$ — заменить символ $$$s_i$$$ на противоположный (0 на 1, 1 на 0);
  • $$$2$$$ $$$l$$$ $$$r$$$ — посчитать минимальное $$$k$$$ такое, что для строки $$$s_l s_{l+1} s_{l+2} \dots s_r$$$ существует чередующаяся $$$k$$$-раскраска.
Входные данные

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

Во второй строке задана $$$s$$$ ($$$|s| = n$$$) — последовательность из $$$n$$$ символов 0 и/или 1.

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

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

  • $$$1$$$ $$$i$$$ ($$$1 \le i \le n$$$) — запрос «заменить символ $$$s_i$$$ на противоположный (0 на 1, 1 на 0)»;
  • $$$2$$$ $$$l$$$ $$$r$$$ ($$$1 \le l \le r \le n$$$) — запрос «посчитать минимальное $$$k$$$ такое, что для строки $$$s_l s_{l+1} s_{l+2} \dots s_r$$$ существует чередующаяся $$$k$$$-раскраска».
Выходные данные

На каждый запрос второго типа выведите одно целое число — ответ на него (минимальное $$$k$$$, для которого существует чередующаяся $$$k$$$-раскраска соответствующей строки).

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