У студента Владислава есть структура данных «мультимножество». В отличие от множества, мультимножество может содержать несколько экземпляров одного и того же элемента.
Владислав выполняет в заданном порядке $$$n$$$ операций одного из следующих двух видов:
После каждой операции ему нужно вывести среднее арифметическое всех чисел в мультимножестве (среднее арифметическое пустого мультимножества считается равным нулю). К сожалению, у него возникли проблемы с этим, и похоже, что он не справится вовремя. Вам надо снова помочь ему и вывести правильные ответы.
В первой строке содержится единственное число $$$n$$$ ($$$1 \le n \le 200000$$$) — количество операций.
В каждой из следующих $$$n$$$ строк дан сначала вид операции: «+» для операции добавления и «-» для операции удаления, а затем целое число $$$x$$$ ($$$0 \le x \le 10^9$$$).
Выведите $$$n$$$ строк, в $$$i$$$-й строке должно содержаться одно число с плавающей точкой — среднее арифметическое всех чисел в мультимножестве после $$$i$$$-й операции. Абсолютная или относительная погрешность для каждого из ответов не должна превышать $$$10^{-9}$$$.
9 + 1 + 2 + 2 + 0 + 3 - 1 + 4 - 2 - 0
1.0 1.5 1.66666666667 1.25 1.6 1.75 2.2 2.25 3.0
5 + 999999001 + 999999002 + 999999003 + 999999004 + 999999005
999999001.0 999999001.5 999999002.0 999999002.5 999999003.0
У студента Владислава есть структура данных «множество». Эта структура данных примечательна тем, что содержит каждый свой элемент в единственном экземпляре, и при попытке добавить в множество элемент, который там уже есть, ничего не происходит.
Изначально Владислав добавил в свое множество $$$n$$$ чисел $$$a_1$$$, ..., $$$a_n$$$. Теперь он собирается $$$10^{10^{10}}$$$ раз выполнить следующую операцию: извлечь из множества минимальный элемент, и добавить в множество этот элемент, умноженный на 2.
Владислав боится, что к концу контеста не успеет проделать эти операции, поэтому вы должны сообщить ему, сколько чисел будет в множестве после того, как он все же закончит свою процедуру.
В первая строке содержится целое число $$$n$$$ ($$$1 \le n \le 200000$$$) — изначальное количество чисел в множестве.
Во второй строке содержится $$$n$$$ целых чисел от $$$1$$$ до $$$10^9$$$ — изначальные элементы множества $$$a_1$$$, ..., $$$a_n$$$.
Выведите единственное число — итоговый размер множества.
3 2 3 4
2
3 20 10 5
1
Правильная скобочная последовательность определяется следующим образом:
Дана скобочная последовательность. Гарантируется, что ее длина четная, а количество открывающих и закрывающих скобок в ней совпадает. За одну операцию вы можете выбрать две различные позиции $$$i$$$ и $$$j$$$, и поменять местами символы на этих позициях. За какое минимальное количество таких операций можно превратить данную скобочную последовательность в правильную?
В единственной строке содержится непустая скобочная последовательность, она состоит только из символов «(» и «)», а ее длина не превышает $$$10^6$$$.
Выведите единственное число — минимальное количество операций.
))((
1
(())
0
Школьник Вася придумал строку $$$s$$$ длины $$$n$$$. Она ему очень понравилась, поэтому ему показалось, что память об этой строке обязательно должна быть увековечена на заборе, мимо которого он каждый день проходит по дороге в школу.
Вася понимает, что писать эту строку как есть слишком рискованно, поэтому в $$$i$$$-й из следующих $$$n$$$ дней он будет записывать на заборе строку без $$$i$$$-го символа. Т. е. в первый день он запишет строку $$$s_{2}s_{3}\ldots s_{n}$$$, во второй — строку $$$s_{1}s_{3}s_{4}\ldots s_{n}$$$, а в последний, $$$n$$$-й день — строку $$$s_{1}s_{2}\ldots s_{n-1}$$$.
Сколько различных строк будет написано на заборе?
Во входных данных содержится строка $$$s$$$. Она состоит из строчных латинских букв, а ее длина $$$n$$$ находится в промежутке от $$$2$$$ до $$$200000$$$.
Выведите единственное целое число — сколько различных строк получится у Васи.
abca
4
zzz
1
Есть трехмерное пространство из кубиков, размера $$$x \times y \times z$$$. Некоторые из этих кубиков пустые, а некоторые заполнены и образуют фигуру (не обязательно связную).
Вам даны три проекции этой фигуры (вид слева, вид спереди и вид сверху). Требуется построить фигуру из максимально возможного числа кубиков, которая давала бы точно такие же проекции.
В первой строке содержатся три целых числа $$$x$$$, $$$y$$$, $$$z$$$ ($$$1 \le x, y, z \le 100$$$) — линейные размеры пространства (если смотреть спереди, то $$$x$$$ — это ширина, $$$y$$$ — глубина, а $$$z$$$ — высота).
Затем дан вид слева ($$$z$$$ строк по $$$y$$$ символов), а после него пустая строка.
Затем дан вид спереди ($$$z$$$ строк по $$$x$$$ символов), а после него пустая строка.
Затем дан вид сверху ($$$y$$$ строк по $$$x$$$ символов).
Каждый символ — либо «#», что соответствует заполненной клетке в проекции, либо «.», что соответствует пустой клетке. Гарантируется, что во входных данных есть хотя бы один символ «#».
В первой строке выведите «YES» или «NO», в зависимости от того, существует ли такая фигура.
В случае положительного ответа выведите описание фигуры. Оно должно состоять из $$$z$$$ блоков, каждый блок должен описывать кубики фигуры на одной и той же высоте, в порядке сверху вниз. В каждом блоке должно быть $$$y$$$ строк по $$$x$$$ символов. Блоки должны быть отделены друг от друга пустой строкой.
4 3 2 ### #.# #### #### #### #.## ###.
YES #### #.## ###. #### .... ###.
3 3 3 ### ### ### ### #.# ### ### ### ###
YES ### ### ### #.# #.# #.# ### ### ###
3 3 3 #.. .#. ..# .#. ..# #.. ..# #.. .#.
NO
3 3 3 #.. .#. ..# .#. #.. ..# .#. #.. ..#
YES .#. ... ... ... #.. ... ... ... ..#
У вас есть $$$n$$$ монет. Вы точно знаете, что одна из них фальшивая и отличается по весу, но неизвестно, на сколько и в какую сторону.
Вы хотите c помощью серии взвешиваний определить, какая же из монет фальшивая. У вас есть весы с двумя чашами. На каждую чашу весов можно класть сколько угодно монет (но количества на первой и второй чашах должны совпадать).
Это интерактивная задача. Ваша программа должна общаться с программой жюри, используя для этого стандартные потоки ввода и вывода.
В самом начале вашей программе сообщается единственное число $$$n$$$ ($$$3 \le n \le 1000$$$) — количество монет.
После этого вы можете сделать не более $$$9$$$ взвешиваний. Чтобы провести взвешивание, нужно вывести три строки. В первой строке должен содержаться символ «?», а затем через пробел целое положительное число $$$k$$$ — количество монет, которое вы положите на каждую чашу весов. Во второй строке должны содержаться $$$k$$$ чисел — номера монет, которые вы положите на первую чашу весов. В третьей строке аналогичным образом должны содержаться $$$k$$$ номеров монет, которые вы положите на вторую чашу весов. Все выведенные номера монет во второй и третьей строках должны быть в промежутке от $$$1$$$ до $$$n$$$ и быть различны.
В ответ на такой запрос вам приходит результат взвешивания — один из трех символов «<», «=» или «>».
После того, как вы однозначно установите фальшивую монету, выведите символ «!», а затем через пробел целое число от $$$1$$$ до $$$n$$$ — ее номер. После этого ваша программа должна завершиться.
6 > < =
? 3 1 2 3 4 5 6 ? 2 1 4 2 5 ? 1 3 4 ! 2
Обратите внимание, что каждое выведенное вами сообщение должно завершаться переводом строки. Также после вывода каждого сообщения ваша программа должна очищать потоковый буфер, чтобы выведенная вами информация дошла до программы жюри: например, это делают вызовы «fflush(stdout)» или «cout.flush()» в C++, «System.out.flush()» в Java, «Console.Out.Flush()» в C#, «flush(output)» в Pascal, «sys.stdout.flush()» в Python.
Пустые строки в примере приведены лишь для удобства, чтобы было лучше понятно, в каком порядке выводятся сообщения. При решении задачи вам не нужно выводить пустые строки, и программа жюри тоже не будет выводить пустые строки.
Есть $$$n$$$ кнопок. На каждой кнопке есть дисплей, на котором отображается число. Изначально на $$$i$$$-й кнопке отображается число $$$a_i$$$. Если нажать на $$$i$$$-ю кнопку, число на ней уменьшится на $$$1$$$, а числа на всех остальных кнопках увеличатся на $$$1$$$.
Вам нужно, чтобы на $$$i$$$-й кнопке отображалось число $$$b_i$$$. Можете ли вы этого добиться, и если да, на какие кнопки надо нажимать?
В первой строке содержится целое число $$$n$$$ ($$$1 \le n \le 200000$$$) — количество кнопок.
Вторая строка содержит $$$n$$$ целых чисел $$$a_i$$$ ($$$-10^9 \le a_i \le 10^9$$$) — числа, которые изначально отображаются на кнопках.
Третья строка содержит $$$n$$$ целых чисел $$$b_i$$$ ($$$-10^9 \le b_i \le 10^9$$$) — числа, которые требуется получить.
Если достигнуть требуемой конфигурации не получится, выведите единственное число $$$-1$$$.
Иначе выведите $$$n$$$ целых чисел $$$c_1$$$, ..., $$$c_n$$$, где $$$c_i$$$ — количество раз, которое надо нажать на $$$i$$$-ю кнопку.
3 1 3 1 2 2 2
0 1 0
3 -1 2 -1 0 0 0
-1
Каждый год лучшие команды Самарского университета ездят в Саратов на четвертьфинал чемпионата мира по программированию ICPC. Как правило, вся делегация снимает одну большую квартиру, тут-то и возникает дилемма.
В квартире есть $$$a$$$ односпальных и $$$b$$$ двуспальных кроватей. В делегации $$$n$$$ человек, и среди них есть люди, которые согласны спать с кем-либо вместе на двуспальной кровати, а есть люди, которые против этого.
Зная эти данные, распределите спальные места среди участников делегации.
В первой строке даны три целых числа $$$n$$$, $$$a$$$ и $$$b$$$ ($$$1 \le n \le 200000, 0 \le a+b \le 200000$$$) — количество человек, а также количество односпальных и двуспальных кроватей.
Вторая строка содержит $$$n$$$ символов «0» и «1» — согласен ли $$$i$$$-й человек спать с кем-то вместе на двуспальной кровати.
В первой строке выведите «YES» или «NO», в зависимости от того, можно ли распределить людей по спальным местам или нет.
В случае положительного ответа выведите еще $$$a+b$$$ строк. Первые $$$a$$$ строк должны содержать по одному числу — номеру человека, который будет спать на соответствующей односпальной кровати (или 0, если никто не будет спать на этой кровати). Следующие $$$b$$$ строк должны содержать по два числа — номера людей, которые будут спать вдвоем на соответствующей двуспальной кровати (если одно или оба спальных места останутся свободными, для этих мест должно быть выведено число 0).
Если возможных ответов несколько, разрешается вывести любой из них.
7 3 2 1111000
YES 5 6 7 1 2 3 4
7 3 2 1011000
NO
5 3 2 10110
YES 0 1 2 3 4 5 0
Кирилл готовится пройти на финал ICPC. Впереди $$$n$$$ контестов, и Кирилл уже вычислил, что на $$$i$$$-м из них он сможет увеличить свой рейтинг на $$$a_i$$$. Однако после некоторых контестов Кирилл так сильно устает, что не способен участвовать в нескольких следующих. Конкретно, если он решал $$$i$$$-й контест, он должен будет пропустить как минимум следующие $$$b_i$$$ контестов.
Вычислите максимально возможное увеличение рейтинга Кирилла после $$$n$$$ контестов.
В первой строке содержится целое число $$$n$$$ ($$$1 \le n \le 200000$$$) — количество контестов.
В каждой из следующих $$$n$$$ строк даны два целых числа $$$a_i$$$ и $$$b_i$$$ ($$$-10^9 \le a_i \le 10^9, 0 \le b_i \le 200000$$$) — увеличение рейтинга после $$$i$$$-го контеста, если Кирилл поучаствует в нем, и сколько контестов после $$$i$$$-го Кирилл обязан будет пропустить.
Выведите единственное число — максимально возможное увеличение рейтинга после $$$n$$$ контестов.
3 20 0 100 2 30 0
120
3 20 1 100 2 30 0
100
Перестановкой из $$$n$$$ элементов называется последовательность целых чисел от $$$1$$$ до $$$n$$$, в которой все числа различны.
Есть перестановка $$$p$$$ из $$$n$$$ элементов. Два игрока играют $$$q$$$ раундов в следующую игру: они одновременно называют случайное число от $$$1$$$ до $$$n$$$ (если их числа совпадают, они делают это еще раз, пока их числа не окажутся различными), а побеждает тот игрок, чье число встречается в перестановке $$$p$$$ раньше.
К сожалению, в некоторых случаях определение победителя занимает слишком много времени. Для каждого раунда выведите, какой же игрок победил в этом раунде.
В первой строке содержится целое число $$$n$$$ ($$$2 \le n \le 200000$$$) — количество элементов в перестановке.
Вторая строка содержит $$$n$$$ различных целых чисел от $$$1$$$ до $$$n$$$ — элементы перестановки $$$p_1$$$, ..., $$$p_n$$$.
В третьей строке содержится целое число $$$q$$$ ($$$1 \le q \le 200000$$$) — количество раундов.
В каждой из следующих $$$q$$$ строк содержится два различных целых числа $$$a_j$$$ и $$$b_j$$$ ($$$1 \le a_j, b_j \le n, a_j \ne b_j$$$) — числа, названные в $$$j$$$-м раунде первым и вторым игроком соответственно.
Для каждого из $$$q$$$ раундов, в зависимости от того, какой игрок в нем победил, выведите «First» или «Second».
3 2 3 1 4 1 2 1 3 2 1 2 3
Second Second First First
Деревом называется связный граф без циклов. Количество ребер в дереве всегда на 1 меньше, чем количество вершин.
Есть дерево с $$$n$$$ вершинами. Вы должны пройти по каждому его ребру ровно один раз. Вы можете начать обход с любой вершины, а также в любой момент телепортироваться из любой вершины в любую другую.
Какое минимальное количество раз придется телепортироваться, чтобы выполнить свой план?
В первой строке содержится целое число $$$n$$$ ($$$1 \le n \le 200000$$$) — количество вершин в дереве.
В каждой из следующих $$$\left(n-1\right)$$$ строк содержатся по два различных целых числа от $$$1$$$ до $$$n$$$ — пары вершин, соединенных ребрами.
Выведите единственное число — минимальное количество раз, которое придется телепортироваться.
4 1 2 2 3 3 4
0
4 1 2 1 3 1 4
1
Есть две строки $$$s$$$ и $$$t$$$. Разрешается любое количество раз выполнять следующую операцию: выбрать две позиции $$$i$$$ и $$$j$$$ в строке $$$s$$$ ($$$i \lt j$$$), и перевернуть подстроку $$$s_{i\ldots j}$$$. Т. е. $$$i$$$-й символ поменяется местами с $$$j$$$-м, $$$\left(i+1\right)$$$-й с $$$\left(j-1\right)$$$-м, и т. д.
Можно ли с помощью таких операций превратить $$$s$$$ в $$$t$$$?
Во входных данных содержатся две строки $$$s$$$ и $$$t$$$, каждая из них непустая, имеет длину до $$$200000$$$ и состоит из строчных латинских букв.
Выведите «YES» или «NO», в зависимости от того, можно ли превратить $$$s$$$ в $$$t$$$ или нет.
abac acba
YES
xxx yyy
NO
abcd abc
NO
Многоугольник называется выпуклым, если любая прямая, полностью содержащая одну из его сторон, оставляет остальные точки многоугольника строго по одну сторону от себя.
Выпуклой оболочкой множества точек на координатной плоскости назовем наименьший выпуклый многоугольник, содержащий все заданные точки. При этом какие-то из заданных точек оказываются на границе выпуклой оболочки, а какие-то — строго внутри нее.
Представьте себе доску, в которую вбито — но не по самую шляпку — много гвоздей. Возьмите верёвку, свяжите на ней скользящую петлю (лассо) и набросьте её на доску, а потом затяните. Верёвка окружает все гвозди, но касается она только некоторых, самых внешних. Те гвозди, которых она касается, составляют выпуклую оболочку для всей группы гвоздей. — Википедия
Даны 4 точки. Найдите, сколько из них лежат на границе их выпуклой оболочки.
Во входных данных содержатся 4 строки, в каждой из них по два целых числа — координаты $$$x_i$$$, $$$y_i$$$ ($$$-100 \le x_i, y_i \le 100$$$). Гарантируется, что никакие две точки не совпадают, и никакие три не лежат на одной прямой.
Выведите количество точек из заданных, которые лежат на границе их выпуклой оболочки.
0 0 3 0 3 3 0 3
4
-1 -1 2 -1 2 2 1 0
3