Плюсануть
Поделиться
Класснуть
Запинить


Олимпиадный тренинг

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

Тапочки

Перебор

У меня в прихожей стоят в ряд 20 тапочек – 10 левых и 10 правых. Приходя домой, я переобуваюсь и выбираю два тапочка – левый и правый, в которые мне удобнее всего засунуть ноги. Естественно, что левый тапочек должен стоять левее правого, и расстояние (количество других тапочек) между ними должно быть как можно меньше. Напишите программу, которая вычисляет, сколько же тапочек стоит между теми, которые мне удобнее всего надеть.

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

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

Будильники

Условный оператор Одномерные массивы Дата и время Перебор

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

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

Входные данные
В первой строке вводятся три числа, задающие текущее время: день недели (от 1 до 7), часы и минуты.

Во второй строке вводится одно натуральное число N, не превосходящее 100 – количество будильников.

В следующих N строках вводятся описания N будильников. Описание каждого будильника состоит из трех чисел: дня недели (число от 1 до 7 для понедельника,  …, воскресенья, соответственно, 0 – если будильник должен звонить каждый день), часов (от 0 до 23), минут (от 0 до 59).


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

Примеры
Входные данные Выходные данные Пояснение
1 2 10 20
2
1 23 15
0 10 10
3 10 10  
2 7 1 1
3
7 0 59
7 23 59
7 1 1
7 1 1 Во втором примере третий будильник будет звенеть в начальный момент времени.

Буквы по кругу

Строки Перебор

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

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

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

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

Примеры
Входные данные Выходные данные
1 abcdefg
abd
NO
2 abcdg
bag
YES
3 a
aaa
YES

Преферанс

Циклы Перебор

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

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

Например, они сказали 1, 1, 1, 2. Следовательно, заведомо солгал 1 игрок. (Какие-то трое могли сказать правду, но все четверо правду сказать не могли, так как тузов всего 4).

Входные данные
Вводятся 4 числа (от 0 до 9 каждое), разделенных пробелом – количество тузов по словам первого, второго, третьего и четвертого игроков.

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

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

Взвешивание

Перебор Рекурсия

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

Входные данные
Вводится сначала K — вес предмета, который положили на левую чашу (1≤K≤50). Далее записано общее количество гирек N (1≤N≤10). Далее записано N различных натуральных чисел, не превышающих 50, — веса гирек.

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

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

Квас

Перебор Обход в ширину

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

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

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

Входные данные
Первая строка входных данных содержит число N – количество городов ( N ≤ 10) и еще N чисел – количество кваса, требуемое ежедневно 1-м, 2-м, …, N -м городом (города нумеруются подряд вдоль кольцевой дороги).

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

Примеры
Входные данные Выходные данные Пояснение
1 3 5 3 10 3  
2 6 4 4 1 5 1 3 2 На острове 6 городов, потребность каждого города указана в кружочках, номер города рядом с кружочком.

Если построить завод во 2-м городе (он выделен серым), то потребуется заплатить 4 + 1 (стоимость перевозки в 1-й и 3-й города) + 5*2 + 3*2 (в 4-й и 6-й) + 1*3 (в 5-й см. рисунок).
Во 2-й вообще ничего не везем. Это будет 24 тугрика. Легко проверить, что если построить завод в других городах, сумма будет больше. Например, если построить в 4-м городе, то сумма составит 1 + 1 + 3*2 + 4*2 + 4*3 = 28 тугриков.

Простой квадрат

Простые задачи на перебор Перебор

У Пети имеется игровое поле размером 3x3, заполненное числами от 1 до 9. В начале игры он может поставить фишку в любую клетку поля. На каждом шаге игры разрешается перемещать фишку в любую соседнюю по стороне клетку, но не разрешается посещать одну и ту же клетку дважды. Петя внимательно ведет протокол игры, записывая в него цифры в том порядке, в котором фишка посещала клетки. Пете стало интересно, какое максимальное число он может получить в протоколе. Помогите ему ответить на этот вопрос.

Входные данные
Входной файл содержит описание поля — 3 строки по 3 целых числа, разделенных пробелами. Гарантируется, что все девять чисел различны и лежат в диапазоне от 1 до 9.

Выходные данные
Выведите одно целое число — максимальное число, которое могло получиться в протоколе при игре на данном поле.

Ответ можно выводить не в виде числа, а в виде строки или в виде последовательности отдельных цифр (но не разделяя их пробелами).

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

Схема игры

Перебор Разбиения

В тактике футбола одним из основных понятий является схема игры. Она определяет, сколько из десяти полевых игроков будут играть в защите, сколько — в полузащите и сколько — в нападении.

Например, схема игры 5-3-2 означает, что в команде пять защитников, три полузащитника и два нападающих. В соответствии с современными представлениями на схему игры накладываются следующие ограничения: должно быть не менее одного и не более пяти защитников, не менее одного и не более пяти полузащитников и не более трех нападающих. Отметим, что нападающих может в команде и не быть совсем. Будем рассматривать только такие схемы.

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

Будем также считать, что игрок в некоторый момент времени находится в линии полузащиты, если он находится на расстоянии не более 20 метров от центральной линии. Соответственно, игрок находится в линии защиты, если он находится не более чем в 40 метрах от «своей» лицевой линии, и в линии нападения, если находится не более чем в 40 метрах от «чужой» лицевой линии.


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

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

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

Входные данные
Входной файл содержит десять строк, содержащих по два целых числа xi и yi каждая, — координаты каждого из игроков команды (0 ≤ xi ≤ 120, xi ≠ 40, xi ≠ 80, 0 ≤ yi ≤ 80).

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

Примеры
Входные данные Выходные данные
1 97 0
13 18
2 6
119 11
42 21
72 80
75 78
106 45
22 67
28 47
9
2-5-3
3-5-2
3-4-3
4-5-1
4-4-2
4-3-3
5-4-1
5-3-2
5-2-3

Bovine Genomics №2

Вывод формулы Перебор

У Фермера Джона есть N коров с пятнами и N коров без пятен. Как генетик, ФД уверен, что пятна на его коровах вызваны мутацией коровьего генома.
За большие деньги ФД выписал геномы своих коров. Каждый геном - это строка длины M, состоящая из четырёх символов A, C, G, T. Когда он выписал геномы всех коров, он получил таблицу, представленную ниже для N=3:
 
Позиция:                     1 2 3 4 5 6 7 ... M
 
Пятнистая корова 1:  A A T C C C A ... T
Пятнистая корова 2:  G A T T G C A ... A
Пятнистая корова 3:  G G T C G C A ... A
 
Корова без пятен 1:  A C T C C C A ... G
Корова без пятен 2:  A G T T G C A ... T
Корова без пятен 3:  A G T T C C A ... T
 
Посмотрев внимательно на эту таблицу он предположил, что позиции 2 и 4 могут отвечать за пятнистость. Поскольку, глядя на символы в этих позициях, ФД может предсказать, какая из его коров пятнистая, а какая - нет (например, если он видит G и С - значит, корова не пятнистая).
 
ФД предположил, что может быть объяснена множеством из трёх различных позиций. Помогите ему посчитать количество трёх различных позиций, которые могут объяснять пятнистость.
 
ФОРМАТ ВВОДА:
 
Первая строка ввода содержит NN (1≤N≤500) и MM (3≤M≤50). Каждая из следующих N строк содержит по M символов. Это описание геномов пятнистых коров. Следующие N строк описывают геномы коров без пятен.
 
ФОРМАТ ВЫВОДА:
 
Вычислите количество множеств из трёх различных позиций, которые могут объяснять пятнистость. Множество из трёх различных позиций может объяснять пятнистость, если пятнистость может быть предсказана абсолютно точно для популяции коров ФД, при анализе этих трёх позиций генома.
 
Ввод Вывод
3 8
AATCCCAT
GATTGCAA
GGTCGCAA
ACTCCCAG
ACTCGCAT
ACTTCCAT
22

Where's Bessie?

Обход в глубину Перебор Задача на реализацию

Фермер Джон тестирует новую камеру, которая может "схватить картинку" и автоматически вычислить положение коров. К несчастью, у камеры не очень хороший алгоритм поиска коров и ФД нуждается в Вашей помощи.
Картинка, получаемая камерой, может быть описана решёткой из N×N символов, каждый в интервале A…Z, представляющих один из 26 возможных различных цветов. ФД считает наилучшим такой алгоритм распознавания коров: PCL (возможное размещение коровы) - это прямоугольник на решётке (возможно вся решётка) со сторонами параллельными сторонам решётки, не содержащий внутри других PCL и обладающий следующим свойством: внутри этого прямоугольника должны присутствовать ровно два цвета, один формирует непрерывный регион, а другой формирует два или более непрерывных регионов.
 
Например, такой образ
 
AAAAA
ABABA
AAABB
есть PCL, поскольку символы A формируют непрерывный регион, символы B форрмируют более одного непрерывного региона. Интерпретация - это корова с цветом A и с пятнами цвета B.
 
Регион является непрерывным, если вы может пройти его весь, перемещаясь из одной клетки в другую соседнюю по направлениям вверх, вниз, влево, вправо.
 
По заданному образу камеры ФД определите количество PCL.
 
ФОРМАТ ВВОДА:
 
Первая строка ввода содержит N, размер решётки (1≤N≤20). Следующие N строк описывают образ, каждая состоит из N символов.
 
ФОРМАТ ВЫВОДА:
 
Количество PCL в образе.
 
Ввод Вывод
4
ABBC
BBBC
AABB
ABBC
2

Треугольники

Вывод формулы Перебор

Фермер Джон хочет создать треугольное пастбище для своих коров.
Всего имеется N столбов забора (3 ≤ N ≤ 100) как различных (X1,Y1)…(XN,YN) точек на карте фермы. Он может выбрать три из них чтобы сформировать вершины треугольного пастбища, но так чтобы одна из сторон была параллельна оси x, а другая - параллельно оси y.

Какова сумма площадей всех возможных пастбищ, которые может сформировать ФД?

Входные данные
Первая строка содержит N.
Каждая из последующих N строк содержит два целых числа Xi и Yi, каждое в интервале −104…104 включительно, описывающих положение столба.

Выходные данные
Поскольку сумма площадей может быть числом не целым и очень большим, выведите остаток от деления удвоенной суммы площадей на 109+7.

Примеры
Входные данные Выходные данные Пояснение
1
4
0 0
0 1
1 0
1 2
3 Точки (0,0), (1,0), (1,2) образуют треугольник с площадью 1.
Точки (0,0), (1,0), (0,1) образуют треугольник с площадью 0.5.
Поэтому ответ 2⋅(1+0.5)=3.

Palindromic Paths

Перебор meet in the middle

Ферма Джона представлена решёткой из N×N полей(2≤N≤18), каждое из которых помечено буквой алфавита. Например,
ABCD
BXZX
CDXB
WCBA
Каждый день корова Беси идёт с левого верхнего угла в правый нижний, двигаясь либо на одну клетку вправо, либо на одну клетку вниз. Беси записывает строку, которая получается в результате её маршрута, построенную из букв, по которым она прошла. Он будет очень расстроена, если в результате построенная строка окажется палиндромом (читается одинаково от начала к концу и от конца к началу), поскольку она запутается в каком направлении она шла.
 
Пожалуйста, помогите Беси определить количество различных палиндромов, которые она сможет сформировать во время своего путешествия. Различные способы формировать один и тот же палиндром следует учитывать только один раз. Например, в примере выше имеется несколько способов сформировать палиндром ABXZXBA, однако существует всего 4 различных палиндрома, которые Беси может сформировать ABCDCBA, ABCWCBA, ABXZXBA, ABXDXBA.
 
ФОРМАТ ВВОДА :
Первая строка ввода содержит N, а последующие N строк содержат N описание поля. Каждая строка содержит по N символов в диапазоне A..Z.

ФОРМАТ ВЫВОДА :
Выведите количество различных палиндромов, которые Беси может сформировать.
 
Ввод Вывод
4
ABCD
BXZX
CDXB
WCBA
4

 

Бесси поквиталась

Перебор

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

Беси даёт ФД выражение  (B+E+S+S+I+E)(G+O+E+S)(M+O+O), содержащее семь переменных B,E,S,I,G,O,M ( "O" это переменная, а не 0). Для каждой переменной она даёт ФД список до 20 целых чисел, которые эта переменная может принять. Беси просит ФД посчитать количество различных способов назначить значения переменным, чтобы вычисленное выражение было чётным числом.

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

Первая строка ввода содержит целое число N. Каждая из N следующих строк содержит переменную и возможное значение для этой переменной. Каждая переменная появится в этом списке не менее одного раза и не более 20 раз. Для одной и той же переменной все задаваемые значения различны. Все значения находятся в диапазоне от −300 до 300.

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

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

 

Ввод Вывод
10
B 2
E 5
S 7
I 10
O 16
M 19
B 3
G 1
I 9
M 2
6
 

Всего имеется 6 подходящих вариантов назначения переменным значений:

 

(B,E,S,I,G,O,M) = (2, 5, 7, 10, 1, 16, 19) -> 53,244
                = (2, 5, 7, 10, 1, 16, 2 ) -> 35,496
                = (2, 5, 7, 9,  1, 16, 2 ) -> 34,510
                = (3, 5, 7, 10, 1, 16, 2 ) -> 36,482
                = (3, 5, 7, 9,  1, 16, 19) -> 53,244
                = (3, 5, 7, 9,  1, 16, 2 ) -> 35,496

Заметим, что (2,5,7,10,1,16,19) и (3,5,7,9,1,16,19) рассматриваются как различные назначения, несмотря на то, что они дают одинаковый результат.

Moocryption

Перебор

Коровы увлекаются словесными пазлами. Например, таким
USOPEN
OOMABO
MOOMXO
PQMROM
Как коровам, им интересно только единственное слово "MOO", которое может появиться во многих местах горизонтально, вертикально или по диагонали. Пример сверху содержит 6 таких слов.
 
Фермер Джон тоже любитель таких пазлов. Поскольку коровы не хотят, чтобы он разгадывал пазлы раньше коров, они зашифровали пазл, используя заменяющий шифр, который заменяет каждую букву алфавита некоторой другой, отличающейся буквой. Например, A может заменяться буквой X, B - буквой A и т.д. Никакая буква не заменяется собой и никакие две буквы не заменяются одной и той же буквой (иначе расшифровка может стать неоднозначной).
 
К несчастью, коровы потеряли свою таблицу шифрования и теперь не могут расшифровать свой пазл. Пожалуйста, помогите им определить максимально возможное количество слов MOO, которое может существовать для их пазла, при выборе соответствующей таблицы шифрования
 
ФОРМАТ ВВОДА :
Первая строка ввода содержит N и M, описывающие количество строк и столбцов в пазле (оба не более 50). Каждая из следующих N строк содержит по M символов, описывающих одну строку зашифрованного пазла. Каждый символ - большая латинская буква в диапазоне A..Z.

ФОРМАТ ВЫВОДА :
Выведите максимально возможное количество слов MOO, содержащееся в пазле, если его расшифровывать с соответствующей таблицей шифрования.
 
Ввод Вывод
4 6
TAMHGI
MMQVWM
QMMQSM
HBQUMQ
6

 

Пояснение
Это пазл, приведенный в начале задачи, где "M" и "O" были заменены на "Q" и "M" соответственно.

Коровий алфавит

Перебор Строки

Малоизвестен тот факт, что у коров свой алфавит "cowphabet". Он состоит из тех же 26 букв от 'a' до 'z', но в другом порядке.
Чтобы скоротать время, Беси бормочет cowphabet опять и опять. Фермеру Джону интересно, сколько раз она его пробормотала.

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

Входные данные
Первая строка ввода содержит 26 маленьких латинских букв от 'a' до 'z' в порядке их появления в cowphabet. Следующая строка содержит строку из маленьких латинских букв, которые услышал ФД. Эта строка имеет длину от 1 до 1000.
Выходные данные
Выведите минимальное количество раз, которое Беси пробормотала алфавит.

Примеры
Входные данные Выходные данные Пояснение
1
abcdefghijklmnopqrstuvwxyz
mood
3

В этом примере cowphabet упорядочен как нормальный алфавит.

Бесси пробормотала cowphabet как минимум 3 раза. Ниже показано, как Беси бормотала, и большими буквами - какие буквы услышал ФД.

abcdefghijklMnOpqrstuvwxyz abcdefghijklmnOpqrstuvwxyz abcDefghijklmnopqrstuvwxyz

Фотография коров

Перебор

Фермер Джон хочет сфотографировать своих пасущихся коров, чтобы повесить эту фотографию на стене. Пастбище представлено решёткой из N * N ячеек (как шахматная доска размером N×N) (2≤N≤1000). ФД хочет, чтобы коровы были распределены по пастбищу с выполнением следующих правил:
Никакие две коровы не могут находится в одной и той же ячейке.
Каждая подрешётка размером 2×2 (всего таких подрешёток (N−1)×(N−1)) должна содержать ровно 2 коровы
Например, такое размещение соотвествует правилам:

CCC
...
CCC
А такое размещение - нет

C.C
.C.
C..
поскольку 2×2 регион в правом нижем углу содержит только одну корову.
Других ограничений нет. Вы можете считать, что у ФД есть бесконечное количество коров.

Некоторые ячейки более предпочтительный для ФД, нежели другие. В частности, ФД считает. что если корова размещена в ячейке (i,j), красота фотографии увеличивается на aij (0≤aij≤1000) единиц.

Определите максимально возможную красоту корректного размещения коров.

Входные данные
Первая строка содержит число N. Каждая из следующих N строк содержит по N целых чисел. j-ое число в i-ой строке сверху есть значение aij.
Выходные данные
Выведите одно целое число - максимально возможную красоту результирующего фото.

 

Примеры
Входные данные Выходные данные Пояснения
1
4
3 3 1 1
1 1 3 1
3 3 1 1
1 1 3 3
22 В этом примере максимальная красота может быть достигнута следующим размещением:

CC..
..CC
CC..
..CC
Красота этого размещения 3+3+3+1+3+3+3+3=22.

Гекльберри Финн и две строки

Хеш Префиксные суммы(минимумы, ...) Перебор

У Гекльберри Финна есть две строки s и t одинаковой длины n.
Гекльберри Финну нравится, когда у строк одинаковые префиксы (начала), поэтому он может поменять местами два символа в строке s, чтобы общий префикс строк s и t стал больше.
Однако этот трюк довольно утомительный, поэтому Гекльберри Финн либо совсем не будет его делать, либо сделает ровно один раз.

Помогите Гекльберри Финну определить наибольшую длину общего префикса строк s и t, которую он может получить.


Входные данные:
В первой строке дано натуральное число n (1 <= n <= 200000) - длина строк s и t
Во второй строке дана строка s, состоящая из строчных латинских букв.
В третьей строке дана строка t, состоящая из строчных латинских букв.

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

Примеры:
 

Входные данные Выходные данные
3
wai
add
1
5
qdyid
xreac
0

Культурный контакт

Хеш Префиксные суммы(минимумы, ...) Перебор

В начале XVIII века группа европейских исследователей прибыла на остров, населённый группой племён, никогда не вступавших в контакт с представителями европейской цивилизации.

Для успешного налаживания контактов с аборигенами руководитель группы планирует делать подарок вождю каждого встреченного племени. С этой целью он привёз длинную цепочку из стекляшек, похожих на драгоценные камни. 
Представим цепочку как строку s, состоящую из маленьких букв английского алфавита, где каждая буква означает тип кусочка стекла на соответствующей позиции. 
Исследователи собираются разрезать цепочку на некоторые фрагменты, после чего вручать ровно один фрагмент вождю каждого встреченного группой племени. Руководитель исследователей решил разделить цепочку на фрагменты согласно следующим правилами:

  • Чтобы не тратить на разрезания много времени, каждый фрагмент должен являться группой соседних стекляшек цепочки, то есть подстрокой строки s.
  • Все стекляшки должны быть использованы, то есть каждая стекляшка должна оказаться включённой ровно в один фрагмент.
  • Поскольку исследователи не знают, как аборигены оценят те или иные виды стекляшек, они хотят, чтобы каждому вождю достался один и тот же набор стекляшек без учёта порядка. Иными словами, для любого типа стекляшек количество стекляшек этого типа должно быть одинаковым в каждом из фрагментов.
  • Исследователи не знают, сколько племён обитает на острове, поэтому количество подготовленных фрагментов должно быть максимальным.

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

Входные данные:
В первой строке дана строка s (1 <= |s| <= 5000000).

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

Примеры:
 
Входные данные Выходные данные
abbabbbab 3
aabb 1

Пояснения:
В первом примере исследователи могут разбить цепочку 'abbabbbab' на фрагменты 'abb', 'abb', 'bab', тогда вождю каждого встреченного ими племени достанется по одной стекляшке типа 'a' и по две стекляшки типа 'b'.

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

Xor-пути в матрице

meet in the middle Перебор

Задано прямоугольное поле размера n*m. В каждой клетке записано целое неотрицательное число. Требуется посчитать количество путей из клетки (1,1) в клетку (n,m), удовлетворяющих следующим условиям.
1) Из каждой клетки можно перемещаться только вниз или вправо, не выходя при этом за пределы поля.
2) Побитовое исключающее ИЛИ всех чисел на пути должно быть равно k.
Найдите количество подходящих путей для заданного поля.

Входные данные
Первая строка содержит три целых числа n, m и k (1 <= n, m <= 20, 0 <= k <= 1018) - высота и ширина поля, и число k.
Следующие n строк содержат по m целых чисел ai,j, где j-й элемент i-й строки равен ai,j (0 <= ai,j <= 1018).

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

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

Orders

Обход в глубину Перебор Бор

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

Входные данные
В первой строке на вход подается числа n и m - количество приказов, которые отдал Блейз, и количество команд, которые понимают его войска соответственно. (1 <= n, m <= 5000)
В следующей строке на вход подаются m слов - команды, которые понимают войска Блейза.
В следующих n строках на вход подаются слова - приказы, которые отдает Блейз.
Все строки длиной не превышают 100.
 
Выходные данные
Выведите n строк: в строке номер i содержится ответ на задачу для приказа Блейза номер i. Строки, являющиеся ответом на этот запрос, выводятся через пробел в одну строку.
 
Пример
Ввод
5 5
is in if on of
it
in
of
ij
op

Вывод
if in is
if in is on
if of on
if in is
of on

(с) Евгений Григорьев

7151

Одномерные массивы Перебор

Известны очки (3или 0), полученные футбольной командой за ряд игр в порядке их проведения. Известно, что команда как минимум одну игру выиграла и как минимум одну игру проиграла.
Что было раньше: первый выигрыш (3 очка) или первый проигрыш (0 очков)?
В первой строке вводится количество проведенных командой игр (не менее 2 и не более 15).
Во второй строке вводятся очки за каждую проведенную игру.
Если выигрыш встретился раньше, то вывести слово WIN.
Если проигрыш встретился раньше, то вывести слово LOSE.


 

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

Конфеты и коробки

Цикл for Одномерные массивы Перебор

В ряд расположены N ящиков. Изначально в i-м ящике слева находится ai конфет.  Громозека выбирает ящик, содержащий хотя бы одну конфету, и съедает одну из конфет в выбранном ящике.Он может выполнять это действие любое количество раз. Его цель добиться того, чтобы в любых двух соседних коробках содержалось не более x конфет.
Найдите минимальное количество операций, необходимых для достижения цели Громозеки.

Входные данные
В первом строке задается два числа N (\(2<=N<=10^5\)) и (\(0<=x<=10^9\)).  Во второй строке содержится N целых чисел a(\(0<=a_i<=10^9\)).

Выходные данные
Выведите ответ на задачу.

 

Примеры
Входные данные Выходные данные Пояснения
1 3 3
2 2 2
1 Необходимо съесть одну конфету во второй коробке. Тогда количество конфет в каждой коробке станет (2,1,2).
2 6 1
1 6 1 2 0 4
11 Например, можно съесть шесть конфет во второй коробке, две в четвертой и три в шестой. Тогда количество конфет в каждой коробке станет (1,0,1,0,0,1).
3 5 9
3 1 4 1 5
0 Цель уже достигнута
4 2 0
5 5
10 Все конфеты должны быть съедены.

 

Все ПСП

Рекурсия Динамическое программирование Перебор Перебор с возвратом

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

Входные данные
В первой строке дано натуральное число n (1 <= n <= 8).

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

 

Счастливого Нового Года!

Рекурсия Перебор Рекурсивный перебор

В каком-то другом мире сегодня 31 декабря. Дед Кокованя решил приготовить многомерный бургер, который так любит Дарёна. Бургер уровня L (L - целое число, большее или равное 0) готовится следующим образом:

  • Бургер нулевого уровня - это котлета.
  • Бургер с уровнем L (L >= 1) - это булочка, бургер с уровнем (L-1), котлета, бургер с другим уровнем (L-1) и еще одна булочка, уложенные вертикально в указанном порядке, считая снизу.
Например, бургер уровня 1 и бургер уровня 2 выглядят как БКККБ и ББКККБКБКККББ (повернутые на 90 градусов), где Б и К обозначают булочку и котлету.

Бургер, который приготовит дед Кокованя, - это бургер уровня N. Дарёна всегда съедает только Х слоев нижней части бургера (слой - это котлета или булочка). Сколько котлет она съест?


Входные данные
Программа получает на вход 2 целых числа через пробел: N и X (1 <= N <= 50, 1 <= X <= (общее количество слоев в бургере N-го уровня)).

Выходные данные
Выведите количество котлет в самых нижних X слоях, считая от нижней части бургера уровня N.
 
Примеры
Входные данные Выходные данные Пояснение
1 2 7 4 В самых нижних 7 слоях бургера второго уровня ( ББКККБКБКККББ) находятся 4 котлеты.
2 1 1 0  
3 50 4321098765432109 2160549382716056 Бургер 50-го уровня довольно толстый настолько, что количество его слоев не укладывается в 32-битное целое число.

Сенсор

Комбинаторика Перебор

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

Сенсор выдает число s равное суммарному числу точек на нижних гранях игральных костей.
Все бросаемые кости шестигранные и удовлетворяют условию правильной игральной кости, то есть сумма точек на противоположных гранях кубика равна семи (1 и 6, 2 и 5, 3 и 4). Вам необходимо найти количество возможных сумм на верхних гранях кубиков.
 
Формат входных данных
В первой строке входного файла задано число s  сумма на нижних гранях костей (s <= 105).
 
Формат выходных данных
Выведите одно число: количество различных всевозможных сумм на верхних гранях костей.
 
Ввод Вывод
2 2
4 4
 
Пояснение к примеру
В первом примере на нижних гранях могло выпасть 1 + 1 или 2, суммы на верхних гранях 12 и
5, соответственно.

Турист Петр

Перебор

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

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

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

Формат входного файла
В первой строке входных данных заданы два целых числа V и E (1 <= V, E <= 3 · 105 ) — количество городов и маршрутов поездов, соответственно. В следующей строке заданы V целых чисел pi (1 <= pi <= 108 ), где pi обозначает ожидаемую радость от посещения го- рода с номером i. В следующих E строках заданы описания маршрутов поездов. Каждое описание состоит из пары различных чисел ai и bi (1 <= ai, bi <= V ) — номеров городов, меж- ду которыми курсирует этот маршрут поезда. Гарантируется, что между каждой парой городов существует не более одного маршрута поезда.

Формат выходного файла
В первой строке выходных данных выведите число K (1 <= K <= 4) — количество горо- дов в оптимальном маршруте туриста Петра. В следующей строке выведите номера этих городов в порядке посещения. Города нумеруются начиная с единицы. Если оптимальных маршрутов несколько, выведите любой из них.

Ввод Вывод
5 4
4 2 3 1 5
1 2
2 3
3 4
4 5
4
2 3 4 5
4 3
1 2 3 4
1 2
1 3
1 4
3
4 1 3

Бельвита и вывеска для пекарни

Перебор

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

Входные данные
Первая строка содержит две строчные латинские буквы - строка s, которую Бельвита хочет видеть в названии пекарни. Вторая строка содержит одно целое число n (1 <= n <= 100) - количество наборов табличек в чулане. Следующие n строк содержат по две строчные латинские буквы каждая, описывающие надписи на табличках в наборах.

Выходные данные
Выведите «YES», если Бельвита может выбрать несколько табличек так, чтобы в получившемся слове была подстрока s, и «NO» иначе.
 
Примеры
Входные данные Выходные данные Примечание
1 ya
4
ah
oy
to
ha
YES Можно использовать третий, второй и первый набор, составив слово "tooyah", в котором есть подстрока "ya".
2 hp
2
ht
tp
NO Получить слово с подстрокой "hp" никак нельзя.
3 ah
1
ha
YES Можно использовать две из трех табличек первого набора, составив слово "haha", где есть подстрока "ah".

 

Бельвита и пифагоровы тройки

Линейный поиск Перебор

Сегодня Бельвита узнала про пифагоровы тройки. Если вы вдруг не знали, то это тройка целых чисел (a, b, c) таких, что можно образовать прямоугольный треугольник с длинами первого катета, второго катета и гипотенузы, равными a, b и c соответственно. Более формально, должно выполняться, что a2 + b2 = c2.
Вечером она решила поискать существующие пифагоровы тройки, но забыла формулу. В итоге вместо правильного критерия она использовала следующий: c = a2 - b.
Вскоре Бельвита опознала ошибку, однако по ее критерию нашлись такие тройки чисел, что они действительно являлись пифагоровыми.
Это заинтересовало Бельвиту и она решила посчитать количество троек целых чисел (a, b, c) таких, что  1 <= a, b, c <= n и они подходят и под настоящую формулу пифагоровых троек, и под ошибочную.
Посчитайте и вы.

Входные данные
Первая строка содержит одно целое число n (1 <= n <= 109).

Выходные данные
Выведите одно число - количество троек целых чисел (a, b, c) таких, что они подходят под оба критерия.

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

Гармоничная последовательность lite - 1

Простые задачи на перебор Перебор

Цикл лекций в университете Флатландии посвящен изучению последовательностей.

Профессор называет последовательность целых чисел \(a_1, a_2, ..., a_n\) гармоничной, если каждое число, кроме \(a_1\) и \(a_n\), равно сумме соседних: \(a_2 = a_1 + a_3, a_3=a_2+a_4, ..., a_{n-1}=a_{n-2}+a_n\). Например, последовательность [1,2,1,–1]  является гармоничной, поскольку 2=1+1, и 1=2+(–1) .

Рассмотрим последовательности равной длины: \(A=[a_1,a_2, ... a_n]\)   и \(B=[b_1,b_2, ... b_n]\). Расстоянием между этими последовательностями будем называть величину \(d(A,B)= |a_1-b_1|+|a_2-b_2|+...+|a_n-b_n|\) . Например, \(d([1,2,1,–1][1,2,0,0])=|1–1|+|2–2|++|1–0|+|–1–0|=0+0+1+1=2 \)

В конце лекции профессор написал на доске последовательность из n целых чисел \(B=[b_1,b_2, ... b_n]\)и попросил студентов в качестве домашнего задания найти гармоничную последовательность \(A=[a_1,a_2, ... a_n]\), такую, что \(d(A, B)\) минимально. Чтобы облегчить себе проверку, профессор просит написать в качестве ответа только искомое минимальное расстояние \(d(A,B)\) .

Требуется написать программу, которая по заданной последовательности B определяет, на каком минимальном расстоянии от последовательности B найдется гармоничная последовательность A.

Входные данные
Первая строка содержит целое число n – количество элементов в последовательности ( \(3 \le n \le 100\)).
Вторая строка содержит n целых чисел \(b_1, b_2, …, b_n (–100 \le b_i \le 100 )\) .

Выходные данные
Выведите одно целое число: минимальное возможное расстояние от исходной до гармоничной последовательности.
 

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

Отслеживание контактов

Задача на реализацию Задачи на моделирование Перебор

Фермер Джон продолжает заботиться о здоровье своих коров, последовательно пронумерованных 1…N.
Недавно ФД проверил их всех и выяснил, что некоторые из них больны. Используя видео из амбара, ФД может узнать какие пары коров взаимодействовали распространяя при этом болезнь. ФД собрал список с указанием времени, в которое происходило взаимодействие пар коров в видео (t,x,y), означающем, что в момент времени t корова x взаимодействовала с коровой y. Также ФД знает следующее:

  1. Ровно одна корова была инфицирована изначально (нулевой пациент).
  2. После того, кaк корова инфицирована, она передаёт инфекцию её следующим K взаимодействиям (возможно включая одного и того же партнера несколько раз). После K раз передачи инфекций, она перестаёт передавать инфекцию (осознав что заражает, она начинает тщательно мыть копыта).
  3. Однажды заболев, она остаётся больной.

К несчастью, ФД не знает, какая из его N коров, является "нулевым пациентом", кроме того он не знает значение K!. Помогите ему сузить диапазоны этих неизвестных, основываясь на его данных. Гарантируется, что ответ существует.

Входные данные
Первая строка ввода содержит N (2<= N <=100) и T (1 <= T <= 250). Следующая строка содержит строку длиной N, состоящую из 0 и 1, описывающую текущее состояние N коров ФД, 0 - здорова, 1 - больна. Каждая из последующих T строк описывает запись из списка взаимодействий ФД, и состоит из трёх чисел, t,x,y, где t - положительное целое время взаимодействия (t <= 250), x и y - различные целые в интервале 1…N, указывающее какие коровы взаимодействовали в момент времени T. В один момент времени T происходит не более одного взаимодействия.

Выходные данные
Выведите одну строку, содержащую три целых числа x,y,z, где x - количество различных коров, которые могли быть "нулевым пациентом", y - минимально возможное значение K, подходящее к исходным данным, z - наибольшее возможное значение K, подходящее к исходным данным. Если для K нет верхней границы, выведите "Infinity" для z. Заметим, что возможно K=0.
 
Примеры
Входные данные Выходные данные
1 4 3
1100
7 1 2
5 2 3
6 2 4
1 1 Infinity

Гармоничная последовательность lite - 2

Простые задачи на перебор Перебор

Цикл лекций в университете Флатландии посвящен изучению последовательностей.

Профессор называет последовательность целых чисел \(a_1, a_2, ..., a_n\) гармоничной, если каждое число, кроме \(a_1\) и \(a_n\), равно сумме соседних: \(a_2 = a_1 + a_3, a_3=a_2+a_4, ..., a_{n-1}=a_{n-2}+a_n\). Например, последовательность [1,2,1,–1]  является гармоничной, поскольку 2=1+1, и 1=2+(–1) .

Рассмотрим последовательности равной длины: \(A=[a_1,a_2, ... a_n]\)   и \(B=[b_1,b_2, ... b_n]\). Расстоянием между этими последовательностями будем называть величину \(d(A,B)= |a_1-b_1|+|a_2-b_2|+...+|a_n-b_n|\) . Например, \(d([1,2,1,–1][1,2,0,0])=|1–1|+|2–2|++|1–0|+|–1–0|=0+0+1+1=2 \)

В конце лекции профессор написал на доске последовательность из n целых чисел \(B=[b_1,b_2, ... b_n]\)и попросил студентов в качестве домашнего задания найти гармоничную последовательность \(A=[a_1,a_2, ... a_n]\), такую, что \(d(A, B)\) минимально. Чтобы облегчить себе проверку, профессор просит написать в качестве ответа только искомое минимальное расстояние \(d(A,B)\) .

Требуется написать программу, которая по заданной последовательности B определяет, на каком минимальном расстоянии от последовательности B найдется гармоничная последовательность A.

Входные данные
Первая строка содержит целое число n – количество элементов в последовательности ( \(3 \le n \le 500\)).
Вторая строка содержит n целых чисел \(b_1, b_2, …, b_n (–100 \le b_i \le 100 )\) .

Выходные данные
Выведите одно целое число: минимальное возможное расстояние от исходной до гармоничной последовательности.
 

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

Вордл наоборот

Строки Задача на реализацию Перебор

Камила и Динара играют в <<Wordle>>. Камила загадала слово длины \(n\), состоящее из различных латинских букв. Динара сделала одну попытку угадать и назвала слово длины \(n\), также состоящее из различных латинских букв. Камила раскрасила буквы в догадке Динары в соответствии со следующими правилами:

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

  • Буква, которая присутствует в загаданном слове, но стоит не своей позиции, красится в жёлтый цвет и обозначается Y.

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

Например, если было загадано слово ALERT, а догадка была ALONE, то буквы будут раскрашены в цвета GGWWY. Первые две буквы в словах совпадают, поэтому они зеленые. Буква E есть в загаданном слове, но находится на другой позиции, поэтому она жёлтая. Остальные буквы белые, так как их нет в загаданном слове.

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

В первой строке вводится одно целое число \(n\) \((1 \le n \le 10)\) — длина загаданного слова.

Во второй строке вводится строка длины \(n\), состоящая из заглавных латинских букв — загаданное слово. Гарантируется, что все буквы в нем различны.

В третьей строке вводится строка длины \(n\), состоящая из букв G, Y, W — цвета, в которые были раскрашены буквы в слове Динары.

Если подходящих слов не существует, выведите No.

Если хотя бы одно подходящее слово существует, в первой строке выведите Yes, во второй  — любое подходящее слово.

 

Разберем первый пример из условия.

Буквы H и G не встречаются в загаданном слове, поэтому они белые.

Буквы E и B встречаются, но на других позициях, поэтому они жёлтые

Буквы C и D совпадают с буквами на соответствующих позициях в загаданном слове, поэтому они зелёные.

Есть и другие ответы, любой правильный ответ будет зачтен.

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

 

Двоичные числа

Перебор

Найдите количество чисел Z, удовлетворяющих неравенству A ≤ Z ≤ B, таких, что в записи Z
в двоичной системе счисления используется ровно 2 единицы. Например, если A=10; B=20; то таких чисел 5 (это числа 10=10102; 12=11002; 17=100012; 18=100102; 20=101002).

Входные данные
На вход программы поступают два числа, записанных через пробел — A, B ( 0 ≤ A, B ≤ 109)

Выходные данные
Выведите одно число – количество чисел Z.

Выражение

Перебор

Даны N целых чисел X1, X2, ..., XN. Расставить между ними знаки "+" и "-" так, чтобы значение получившегося выражения было равно заданному целому S.

Входные данные
В первой строке находятся числа N и S. В следующей строке - N чисел через пробел. 2 <= N <= 24, 0 <= Xi <= 50 000 000, -1 000 000 000 <= S <= 1 000 000 000.

Выходные данные
Если получить требуемый результат невозможно, вывести "No solution", если можно, то вывести равенство. Если решение не единственное, вывести любое.

Разложение на слагаемые

Перебор

Вывести все представления натурального числа N суммой натуральных чисел. Перестановка слагаемых нового способа представления не даёт.

Входные данные
В первой строке находится единственное число N. 2 <= N <= 40

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

Скобки(2)

Перебор Стек

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

Входные данные
В первой строке находится единственное число N. 1 <= N <= 14, N - чётное.

Выходные данные
Каждое выражение выводится в отдельной строке, порядок вывода последовательностей произвольный.

Крестики

Двумерные массивы Перебор

Требуется расставить в некоторые клетки таблицы 3 x 3 крестики так, чтобы в каждой строке и в каждом столбце было заданное количество крестиков.

Входные данные
Вводятся 6 чисел (от 0 до 3) – требуемое количество крестиков в первом, втором, третьем столбце, в первой, второй, третьей строке.

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

Ферзи

Перебор

На шахматной доске (размером 8 × 8 клеток) стоит несколько ферзей. За один ход разрешается взять одной фигурой другую (цвет фигур значения не имеет; ходы без взятия делать нельзя). Требуется найти последовательность ходов: за каждый ход один из ферзей может взять другого ферзя. В результате доске должна остаться одна фигура. После каждого хода количество ферзей на поле должно уменьшиться.
Ферзь ходит по горизонтали, вертикали или диагонали на любое число клеток. Он не может перепрыгивать через другие фигуры.

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

Выходные данные
В выходной файл выведите возможную последовательность в следующем формате. Для каждого хода указывается сначала клетка, с которой делается ход, затем двоеточие, затем клетка, на которую делается ход. Клетка задается столбцом и строкой: столбцы нумеруются слева направо строчными латинскими буквами a, b, c, d, e, f, g, h; строки — снизу вверх цифрами 1, 2, 3, 4, 5, 6, 7, 8.
Если решений несколько, приведите любое из них. Если решений нет, выведите NO SOLUTION

C. Сильная жара

математика Перебор реализация *1300

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

Математики Берляндского Государственного Университета (БГУ) придумали специальную оценку, которую назвали интенсивностью температуры. Эта оценка считается следующим образом:

Предположим, что мы хотим проанализировать отрезок из \(n\) подряд идущих дней. Мы измерили температуры в каждый из этих \(n\) дней; температура в \(i\)-й день равна \(a_i\).

Обозначим за среднюю температуру отрезка подряд идущих дней как среднее арифметическое измерений температур, принадлежащих этому отрезку дней. Таким образом, если мы хотим проанализировать среднюю температуру с дня \(x\) по день \(y\), мы будем считать ее как \(\frac{\sum \limits_{i = x}^{y} a_i}{y - x + 1}\) (обратите внимание, что деление производится без округления). Интенсивность температуры — это максимум среди средних температур среди всех отрезков подряд идущих дней длины не менее \(k\). Например, если анализировать измерения \([3, 4, 1, 2]\) и \(k = 3\), интерес представляют отрезки \([3, 4, 1]\), \([4, 1, 2]\) и \([3, 4, 1, 2]\) (мы хотим найти максимальное значение средней температуры среди всех этих отрезков).

Вас нанял Берляндский Государственный Университет, чтобы вы написали программу, которая посчитает интенсивность температуры в заданном отрезке дней. Вы займетесь этой задачей?

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

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 5000\)) — количество дней в заданном отрезке и минимальное допустимое количество дней в отрезке, которое нас интересует при подсчете интенсивности температуры, соответственно.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 5000\)) — измерения температуры в каждый из \(n\) дней.

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

Выведите одно вещественное число — the интенсивность температуры, то есть максимум среди средних температур по всем отрезкам, состоящим не менее, чем из \(k\) последовательных дней.

Ваш ответ будет считаться правильным, если выполняется следующее условие: \(|res - res_0| < 10^{-6}\), где \(res\) — это ваш ответ, а \(res_0\) — ответ авторского решения.

D. Соня и матрица

Конструктив Перебор реализация *2300

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

Соня быстро придумала новый вид матриц, которые назвала ромбические матрицы. Эти матрицы имеют ровно один ноль, а во всех остальных ячейках записано манхэттенское расстояние до клетки с нулём. Ячейки с одинаковыми числами имеют форму ромбов, поэтому, Соня так этот вид и назвала.

Манхэттенское расстояние между ячейками (\(x_1\), \(y_1\)) и (\(x_2\), \(y_2\)) равно величине \(|x_1 - x_2| + |y_1 - y_2|\). Например, манхэттенское расстояние между ячейками \((5, 2)\) и \((7, 1)\) равно \(|5-7|+|2-1|=3\).

Пример ромбической матрицы.

Отметим, что ромбическая матрица однозначно задается своими размерами \(n\), \(m\) и положением ячейки со значением \(0\).

Она нарисовала некоторую \(n\times m\) ромбическую матрицу. Девочка полагает, что вы не сможете возобновить матрицу, если она вам даст только элементы матрицы в случайном порядке (то есть последовательность из \(n\cdot m\) чисел). Отметим, что Соня не даст вам сами числа \(n\) и \(m\), в вашем распоряжении будет только последовательность всех элементов матрицы.

Напишите программу, которая найдет такую \(n\times m\) ромбическую матрицу, что её элементы — это в точности все элементы заданной последовательности, расположенные в матрице подходящим образом.

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

Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10^6\)) — количество ячеек в матрице.

Вторая строка содержит \(t\) целых чисел \(a_1, a_2, \ldots, a_t\) (\(0\leq a_i< t\)) — значения ячеек в произвольном порядке.

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

В первой строке выведите два целых положительных числа \(n\) и \(m\) (\(n \times m = t\)) — размеры матрицы.

В следующей строке выведите два целых числа \(x\) и \(y\) (\(1\leq x\leq n\), \(1\leq y\leq m\)) — номер строки и номер колонки, на пересечении которых расположена ячейка со значением \(0\).

Если существует несколько решений, выведите любое из них. Если решения не существует, выведите одно целое число \(-1\).

Примечание

Рисунок к первому примеру можно увидеть в легенде. Так же можно выбрать ячейку \((2, 2)\) для нуля. Кроме этого, матрица \(5\times 4\) с нулём в \((4, 2)\) тоже является правильной.

Для второго примера существует матрица размером \(3\times 6\), ноль которой находится в ячейки \((2, 3)\).

Для третьего примера решения не существует.

B. Удаляй слева

Перебор реализация Строки *900

Заданы две строки \(s\) и \(t\). За один ход можно выбрать произвольную из двух строк и удалить её первый (самый левый) символ. При этом длина строки уменьшается на \(1\).

Например:

  • применив ход к строке «where», в результате получится строка «here»,
  • применив ход к строке «a», в результате получится пустая строка «».

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

Напишите программу, которая найдет минимальное количество ходов, чтобы сделать две заданные строки \(s\) и \(t\) равными.

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

В первой строке входных данных записана строка \(s\). Во второй строке входных данных записана строка \(t\). Строки состоят только из строчных букв латинского алфавита. Длина каждой строки от 1 до \(2\cdot10^5\) букв.

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

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

Примечание

В первом примере следует один раз применить ход к первой строке и один раз применить ход ко второй строке. В результате обе строки будут равны «est».

Во втором примере ход следует применить \(8\) раз к «codeforces». В результате будет получена строка «codeforces» \(\to\) «es». К строке «yes» ход следует применить один раз. В результате будет получена такая же строка «yes» \(\to\) «es».

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

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

C. Суммируй до степени двойки

жадные алгоритмы Перебор реализация *1300

Последовательность \(a_1, a_2, \dots, a_n\) называется хорошей, если для любого его элемента \(a_i\) найдется такой элемент \(a_j\) (\(i \ne j\)), что \(a_i+a_j\) является степенью двойки (то есть равен \(2^d\) для некоторого неотрицательного целого \(d\)).

Например, следующие последовательности — хорошие:

  • \([5, 3, 11]\) (например, для \(a_1=5\) можно выбрать \(a_2=3\), что сумма — степень двойки, подобную пару можно найти и для \(a_2\) и \(a_3\)),
  • \([1, 1, 1, 1023]\),
  • \([7, 39, 89, 25, 89]\),
  • \([]\).

Обратите внимание, что по определению пустая последовательность (то есть такая, длина которой равна \(0\)) является хорошей.

Например, следующие последовательности не являются хорошими:

  • \([16]\) (для \(a_1=16\) невозможно найти другой элемент \(a_j\), что их сумма — степень двойки),
  • \([4, 16]\) (для \(a_1=4\) невозможно найти другой элемент \(a_j\), что их сумма — степень двойки),
  • \([1, 3, 2, 8, 8, 8]\) (для \(a_3=2\) невозможно найти другой элемент \(a_j\), что их сумма — степень двойки).

Задана последовательность \(a_1, a_2, \dots, a_n\). Какое наименьшее количество элементов надо удалить, чтобы сделать её хорошей? Удалять можно произвольный набор элементов.

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

В первой строке записано целое число \(n\) (\(1 \le n \le 120000\)) — длина заданной последовательности.

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

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

Выведите наименьшее количество элементов, которые надо удалить из заданной последовательности, чтобы сделать её хорошей. Это допустимый случай, что придётся удалить все \(n\) элементов, сделать её пустой и таким образом получить хорошую последовательность.

Примечание

В первом примере достаточно удалить один элемент \(a_4=5\). Оставшиеся элементы образуют последовательность \([4, 7, 1, 4, 9]\), которая является хорошей.

F. Берляндия и кратчайшие пути

графы кратчайшие пути Перебор поиск в глубину и подобное *2100

В Берляндии \(n\) городов, некоторые пары из которых соединены дорогами. Все дороги — двусторонние. Каждая дорога соединяет два различных города. Между парой городов — не более одной дороги. Города пронумерованы от \(1\) до \(n\).

Известно, что из столицы (город с номером \(1\)) можно добраться до любого другого города, перемещаясь по дорогам.

Президент Берляндии планирует улучшение дорожной сети страны. Бюджета хватает на ремонт \(n-1\) дороги. Президент планирует выбрать такой набор из \(n-1\) дороги, что:

  • из столицы будет возможно добраться до любого другого города по выбранной \(n-1\) дороге,
  • пусть \(d_i\) — количество дорог, сколько придется преодолеть на пути из столицы в город \(i\), двигаясь только по выбранной \(n-1\) дороге, тогда \(d_1 + d_2 + \dots + d_n\) — должно быть минимально.

Иными словами, набор из \(n-1\) дорог должен сохранять связность страны и сумма расстояний от города \(1\) до всех городов должна быть минимальна (при условии перемещения только по выбранной \(n-1\) дороге).

Президент поручил министерству подготовить \(k\) возможных вариантов выбрать \(n-1\) дорогу так, чтобы выполнялись оба условия выше.

Напишите программу, которая найдет \(k\) возможных вариантов выбрать дороги для ремонта. Если \(k\) вариантов не существует, то программа должна вывести всевозможные подходящие варианты.

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

В первой строке входных данных записаны целые числа \(n\), \(m\) и \(k\) (\(2 \le n \le 2\cdot10^5, n-1 \le m \le 2\cdot10^5, 1 \le k \le 2\cdot10^5\)), где \(n\) — количество городов в стране, \(m\) — количество дорог, а \(k\) — количество вариантов выбрать набор дорог для ремонта. Гарантируется, что \(m \cdot k \le 10^6\).

Далее в \(m\) строках перечислены дороги, по одной дороге в строке. Каждая строка содержит два целых числа \(a_i\), \(b_i\) (\(1 \le a_i, b_i \le n\), \(a_i \ne b_i\)) — номера городов, которые соединяет \(i\)-я дорога. Между каждой парой городов не более одной дороги. Заданный набор дорог таков, что в любой город можно добраться из столицы.

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

Выведите \(t\) (\(1 \le t \le k\)) — количество вариантов выбора набора дорог. Напомним, что вам надо найти \(k\) различных вариантов, если \(k\) вариантов не существует, то найти всевозможные различные варианты.

Далее выведите \(t\) строк. Каждая из строк должна содержать один из вариантов. Вариант следует выводить как последовательность из \(m\) символов, где \(j\)-й символ равен '1', если \(j\)-я дорога включена в вариант и равен '0', если не включена. Дороги следует нумеровать в соответствии с их порядков во входных данных. Варианты выбора можно выводить в любом порядке. Все строки выведенные \(t\) строк должны быть различны.

Так как гарантируется, что \(m \cdot k \le 10^6\), то суммарный размер всех выведенных \(t\) строк не будет больше \(10^6\).

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

F. Xor-пути

meet-in-the-middle битмаски дп Перебор *2100

Задано прямоугольное поле размера \(n \times m\). В каждой клетке записано целое число; число, записанное в клетке (\(i, j\)) равно \(a_{i, j}\). Ваша задача — посчитать количество путей из клетки (\(1, 1\)) в клетку (\(n, m\)), удовлетворяющих следующим условиям:

  • Из клетки можно перемещаться только вниз или только вправо. Более формально, из клетки (\(i, j\)) можно переместиться в клетку (\(i, j + 1\)) или в клетку (\(i + 1, j\)). Клетка, в которую совершается перемещение, не может находиться за пределами поля.
  • Xor всех чисел на пути из клетки (\(1, 1\)) в клетку (\(n, m\)) должен быть равен \(k\) (xor это побитовое исключающее ИЛИ, эта операция представлена как '^' в Java или C++ и "xor" в Pascal).

Найдите количество подходящих путей для заданного поля.

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

Первая строка входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m \le 20\), \(0 \le k \le 10^{18}\)) — высота и ширина поля, и число \(k\).

Следующие \(n\) строк содержат по \(m\) целых чисел каждая, где \(j\)-й элемент \(i\)-й строки равен \(a_{i, j}\) (\(0 \le a_{i, j} \le 10^{18}\)).

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

Выведите одно целое число — количество путей из (\(1, 1\)) в (\(n, m\)) с xor всех чисел на пути равным \(k\).

Примечание

Все пути из первого тестового примера:

  • \((1, 1) \rightarrow (2, 1) \rightarrow (3, 1) \rightarrow (3, 2) \rightarrow (3, 3)\);
  • \((1, 1) \rightarrow (2, 1) \rightarrow (2, 2) \rightarrow (2, 3) \rightarrow (3, 3)\);
  • \((1, 1) \rightarrow (1, 2) \rightarrow (2, 2) \rightarrow (3, 2) \rightarrow (3, 3)\).

Все пути из второго тестового примера:

  • \((1, 1) \rightarrow (2, 1) \rightarrow (3, 1) \rightarrow (3, 2) \rightarrow (3, 3) \rightarrow (3, 4)\);
  • \((1, 1) \rightarrow (2, 1) \rightarrow (2, 2) \rightarrow (3, 2) \rightarrow (3, 3) \rightarrow (3, 4)\);
  • \((1, 1) \rightarrow (2, 1) \rightarrow (2, 2) \rightarrow (2, 3) \rightarrow (2, 4) \rightarrow (3, 4)\);
  • \((1, 1) \rightarrow (1, 2) \rightarrow (2, 2) \rightarrow (2, 3) \rightarrow (3, 3) \rightarrow (3, 4)\);
  • \((1, 1) \rightarrow (1, 2) \rightarrow (1, 3) \rightarrow (2, 3) \rightarrow (3, 3) \rightarrow (3, 4)\).

B. Замостите параллелепипед

битмаски Комбинаторика математика Перебор теория чисел *2400

Вам дан прямоугольный параллелепипед с целыми положительными сторонами \(A\), \(B\) и \(C\).

Найдите количество различных троек целых чисел (\(a\), \(b\), \(c\)) таких, что \(1\leq a\leq b\leq c\) и параллелепипед \(A\times B\times C\) можно замостить параллелепипедами \(a\times b\times c\). Обратите внимание, что все замощающие параллелепипеды должны быть ориентированы в одну сторону.

Например, параллелепипед \(1\times 5\times 6\) можно разделить на параллелепипеды \(1\times 3\times 5\), но нельзя – на параллелепипеды \(1\times 2\times 3\).

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

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество тестов.

Каждая из следующих \(t\) строк содержит три целых числа \(A\), \(B\) и \(C\) (\(1 \leq A, B, C \leq 10^5\)) — размеры параллелепипеда.

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

Для каждого теста выведите количество троек чисел, которые удовлетворяют всем условиям.

Примечание

В первом тесте параллелепипед со сторонами \((1, 1, 1)\) можно разделить только на параллелепипед со сторонами \((1, 1, 1)\).

Во втором тесте параллелепипед со сторонами \((1, 6, 1)\) можно разделить на параллелепипеды со сторонами \((1, 1, 1)\), \((1, 1, 2)\), \((1, 1, 3)\) и \((1, 1, 6)\).

В третьем тесте параллелепипед со сторонами \((2, 2, 2)\) можно разделить на параллелепипеды со сторонами \((1, 1, 1)\), \((1, 1, 2)\), \((1, 2, 2)\) и \((2, 2, 2)\).

D. Взаимно простой граф

графы жадные алгоритмы Конструктив математика Перебор *1700

Назовем неориентированный граф \(G = (V, E)\) взаимно простым, если для каждого ребра \((v, u) \in E\)  \(GCD(v, u) = 1\) (наибольший общий делитель \(v\) и \(u\) равен \(1\)). Если между некоторой парой вершин \(v\) и \(u\) нет ребра, то значение \(GCD(v, u)\) не важно. Вершины нумеруются от \(1\) до \(|V|\).

Постройте взаимно простой граф из \(n\) вершин и \(m\) ребер такой, что он связный, не содержит петель и кратных ребер.

Если не существует корректного графа с данным числом вершин и ребер, то выведите «Impossible».

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

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

В единственной строке записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^5\)) — количество вершин и количество ребер в графе.

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

Если не существует корректного графа с данным числом вершин и ребер, то выведите «Impossible».

В противном случае выведите ответ в следующем формате:

В первой строке должно быть записано слово «Possible».

В \(i\)-й из следующих \(m\) строк должно содержаться \(i\)-е ребро \((v_i, u_i)\) полученного графа (\(1 \le v_i, u_i \le n, v_i \neq u_i\)). Для каждой пары \((v, u)\) не должно больше содержаться пар \((v, u)\) или \((u, v)\). Вершины нумеруются от \(1\) до \(n\).

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

Примечание

Изображение графа из первого примера:

B. Планировние экспедиции

Бинарный поиск Перебор реализация *1200

Наташа планирует экспедицию на Марс для \(n\) человек. Важная задача — обеспечить питанием каждого участника в каждый из дней экспедиции.

Всего на складе доступны \(m\) суточных комплектов питания. Каждый комплект характеризуется своим типом \(a_i\).

Каждый из участников в день должен съедать ровно один суточный комплект питания. По причине экстремальных нагрузок, каждый участник в каждый из дней экспедиции должен съедать комплект одного и того же типа. Для разных участников типы съедаемых комплектов могут как различаться, так и совпадать.

Формально, для каждого участника \(j\) Наташа должна выбрать тип питания \(b_j\) и каждый день \(j\)-й участник дожен съедать комплект питания типа \(b_j\). Значения \(b_j\) у разных участников могут как различаться, так и совпадать.

Какой максимальной продолжительности в днях можно спланировать экспедицию, чтобы выполнить требования выше?

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 100\), \(1 \le m \le 100\)) — количество участников экспедиции и количество суточных комплектов питания на складе.

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

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

Выведите максимальное количество дней, сколько может продолжаться экспедиция. Если невозможно спланировать экспедицию даже на один день, то выведите 0.

Примечание

В первом примере Наташа может назначить первому участнику тип \(1\), второму — тип \(1\), третьему — тип \(5\), четвёртому — тип \(2\). В таком случае, экспедиция может продолжаться \(2\) дня, так как каждому участнику достанется суточный комплект питания его типа (будут израсходованы \(4\) комлекта типа \(1\) и по два комлекта типов \(2\) и \(5\)).

Во втором примере на \(100\) человек есть только \(1\) комплект питания на базе. Таким образом, экспедиция длительности даже \(1\) день невозможна.

A. Фотография неба

математика Перебор реализация сортировки *1500

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

Более формально, она сделала фотографию всех точек с координатами \((x, y)\), для которых выполнено \(x_1 \leq x \leq x_2\) и \(y_1 \leq y \leq y_2\), где \((x_1, y_1)\) и \((x_2, y_2)\) — координаты левого нижнего и правого верхнего прямоугольника, который фотографируют. Площадь фотографируемого прямоугольника может быть нулевой.

Сразу после фотографирования Паша выписал в блокнот координаты \(n\) своих любимых звёзд, попавших на фото. Эти точки не обязательно различны, так как в одной точке неба может быть несколько звёзд.

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

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

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

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

В первой строке входных данных находится одно целое число \(n\) (\(1 \leq n \leq 100\,000\))— количество точек, координаты которых выписал Паша.

Во второй строке находятся \(2 \cdot n\) целых чисел \(a_1\), \(a_2\), ..., \(a_{2 \cdot n}\) (\(1 \leq a_i \leq 10^9\)) — все координаты, выписанные Пашей, в каком-то порядке.

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

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

Примечание

В первом тестовом примере точки из записей Павла могут быть равными \((1, 3)\), \((1, 3)\), \((2, 3)\), \((2, 4)\). В таком случае, минимальная площадь прямоугольника, который их содержит равна \(1\) (прямоугольник с вершинами в \((1, 3)\) и \((2, 4)\)).

E1. Рисование звезд (упрощенная редакция)

дп жадные алгоритмы Перебор *1700

Звезда — это фигура на клетчатом поле следующего вида: символ звездочка '*' в центре фигуры и четыре луча (влево, вправо, вверх и вниз) одинаковой положительной длины. Размером звезды является длина ее лучей. Размер звезды должен быть строго положительным (то есть лучи длины \(0\) недопустимы).

Пусть пустые клетки обозначены как '.'. Тогда, например, следующие фигуры являются звездами:

Левая фигура — звезда размера \(1\), средняя фигура — звезда размера \(2\) и правая фигура — звезда размера \(3\).

Задано прямоугольное поле размера \(n \times m\), состоящее из звездочек '*' и точек '.'. Строки пронумерованы от \(1\) до \(n\), столбцы пронумерованы от \(1\) до \(m\). Ваша задача — нарисовать это поле при помощи любого количества звезд или понять, что это невозможно сделать. Звезды могут пересекаться, вкладываться и даже совпадать друг с другом. Количество звезд в ответе не может превышать \(n \cdot m\). Каждая из звезд должна находиться строго внутри поля. Вы можете использовать звёзды как одинаковых так и различных размеров.

В этой задаче нет необходимости минимизировать количество звезд. Необходимо найти любой способ нарисовать заданное поле при помощи не более, чем \(n \cdot m\) звезд.

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

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(3 \le n, m \le 100\)) — размер заданного поля.

Следующие \(n\) строк содержат \(m\) символов каждая, \(i\)-я строка описывает \(i\)-ю строку поля. Гарантируется, что поле состоит только из символов '*' и '.'.

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

Если невозможно нарисовать заданное поле только при помощи некоторого количества звезд , выведите «-1».

Иначе в первой строке выедите \(k\) (\(0 \le k \le n \cdot m\)) — количество звезд, необходимое, чтобы нарисовать заданное поле. Следующие \(k\) строк должны содержать по три целых числа каждая — \(x_j\), \(y_j\) и \(s_j\), где \(x_j\) это номер строки центрального символа звезды, \(y_j\) — номер столбца центрального символа звезды и \(s_j\) — размер звезды. Каждая из звезд должна находиться строго внутри поля.

Примечание

В первом примере вывод

2
3 4 1
3 5 2

тоже является корректным.

B. Вхождения в отрезках

Перебор реализация *1300

Заданы две строки \(s\) и \(t\), состоящие только из строчных латинских букв.

Подстрока \(s[l..r]\) — это такая строка, которая получается путем взятия \(s_l, s_{l + 1}, \dots, s_r\) без изменения порядка.

Каждое вхождение строки \(a\) в строку \(b\) — это такая позиция \(i\) (\(1 \le i \le |b| - |a| + 1\)), что \(b[i..i + |a| - 1] = a\) (\(|a|\) — это длина строки \(a\)).

Вам приходят \(q\) запросов: для \(i\)-го запроса необходимо посчитать количество вхождений строки \(t\) в подстроку \(s[l_i..r_i]\).

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

В первой строке записаны три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 10^3\), \(1 \le q \le 10^5\)) — длина строки \(s\), длина строки \(t\) и количество запросов, соответственно.

Вторая строка — это строка \(s\) (\(|s| = n\)), состоящая только из строчных латинских букв.

Третья строка — это строка \(t\) (\(|t| = m\)), состоящая только из строчных латинских букв.

В каждой из следующих \(q\) строк записаны по два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — параметры для \(i\)-го запроса.

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

Выведите \(q\) строк — в \(i\)-й строке должен содержаться ответ на \(i\)-й запрос, то есть количество вхождений строки \(t\) в подстроку \(s[l_i..r_i]\).

Примечание

В первом примере запросами является подстроки: «cod», «deforces», «fo» и «for», соответственно.

D. Wu

битмаски Перебор Структуры данных *1900

Чилден придумал легендарную историю и пытается продать свою подделку — ожерелье с «Wu» семье Касура. Но мистер Касура пытается разузнать всю правду из истории Чилдена. Поэтому он задаст несколько вопросов Чилдену о его так называемом «личном сокровище».

Это «личное сокровище» представляет собой мультимножество \(S\) из \(m\) «01-строк».

«01-строка» — строка, которая состоит из \(n\) символов «0» и «1». Например, если \(n=4\), то «0110», «0000», и «1110» являются «01-строками», но «00110» (в ней \(5\) символов, а не \(4\)) и «zero» (неразрешенные символы) не являются.

Обратите внимание, что мультимножество \(S\) может содержать одинаковые элементы.

Иногда мистер Касура будет давать «01-строку» \(t\) и спрашивать Чилдена количество строк \(s\) в мультимножестве \(S\) таких, что «Wu»-стоимость пары «01-строк» \((s, t)\) не больше чем \(k\).

Миссис Касура и мистер Касура считают, что, если \(s_i = t_i\) (\(1\leq i\leq n\)), то «Wu»-стоимость пары символов равна \(w_i\), иначе — \(0\). «Wu»-стоимость пары «01-строк» равняется сумме всех «Wu»-стоимостей пар их символов. Заметьте, что длина каждой «01-строк» равняется \(n\).

Например, если \(w=[4, 5, 3, 6]\), «Wu» от («1001», «1100») равно \(7\), потому что эти строки имеют одинаковые символы только в первой и третьей позициях, значит \(w_1+w_3=4+3=7\).

Вам нужно помочь Чилдену ответить на запросы мистера Касуры. То есть найти количество строк в мультимножестве \(S\) таких, что «Wu»-стоимость пары не больше \(k\).

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

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(1\leq n\leq 12\), \(1\leq q, m\leq 5\cdot 10^5\)) — длина «01-строк», размер мультимножества \(S\) и количество запросов.

Вторая строка содержит \(n\) целых чисел \(w_1, w_2, \ldots, w_n\) (\(0 \le w_i \le 100\)) — стоимость \(i\)-го символа.

Каждая из следующих \(m\) строк содержит «01-строку» \(s\) длины \(n\) — строка в мультимножестве \(S\).

Каждая из следующих \(q\) строк содержит «01-строку» \(t\) длины \(n\) и целое число \(k\) (\(0\leq k\leq 100\)) — запрос.

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

Для каждого запроса выведите ответ на него.

Примечание

В первом примере мы имеем:

«Wu» от («01», «00») равно \(40\).

«Wu» от («10», «00») равно \(20\).

«Wu» от («11», «00») равно \(0\).

«Wu» от («01», «11») равно \(20\).

«Wu» от («10», «11») равно \(40\).

«Wu» от («11», «11») равно \(60\).

В первом запросе пары («11», «00») и («10», «00») удовлетворяют условие поскольку «Wu» не больше \(20\).

Во втором примере все пары удовлетворяют условие.

В третьем примере пары («01», «11») и («01», «11») удовлетворяют условие. Обратите внимание, что поскольку строка «01» встречается два раза в мультимножестве, то ответ \(2\), а не \(1\).

В четвертом примере, поскольку \(k\) увеличилось, то пара («10», «11») тоже удовлетворяет условие.

В пятом примере, поскольку \(k\) увеличилось, то пара («11», «11») тоже удовлетворяет условие.

F. Нейтральная зона

математика Перебор *2500

Обратите внимание на необычное ограничение по памяти!

После войны разрушенные города в нейтральной зоне были восстановлены и дети опять пошли в школу.

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

Мы все знаем, что функцию логарифма можно записать как: \(\) \log(p_1^{a_1}p_2^{a_2}...p_k^{a_2}) = a_1 \log p_1 + a_2 \log p_2 + ... + a_k \log p_k \(\) где \(p_1^{a_1}p_2^{a_2}...p_k^{a_2}\) — факторизация простыми числами целого числа. Проблема в том, что эта функция выражается сама через себя, поэтому её сложно вычислять.

По этой причине математики из нейтральной зоны придумали это: \(\) \text{exlog}_f(p_1^{a_1}p_2^{a_2}...p_k^{a_2}) = a_1 f(p_1) + a_2 f(p_2) + ... + a_k f(p_k) \(\)

Заметьте, что \(\text{exlog}_f(1)\) всегда равно \(0\).

Функция \(f\) очень сложная, чтобы дети поняли её, поэтому учителя решили, что функция \(f\) в повседневном использовании может быть представлена как многочлен со степенью не более \(3\) (то есть \(f(x) = Ax^3+Bx^2+Cx+D\)).

"Урок закончен! Не забудьте сделать ваше домашние задание!" Вот оно: \(\) \sum_{i=1}^n \text{exlog}_f(i) \(\)

Помогите детям сделать их домашние задание. Поскольку число может быть очень большим, вам нужно найти ответ по модулю \(2^{32}\).

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

Единственная строка содержит пять целых чисел \(n\), \(A\), \(B\), \(C\) и \(D\) (\(1 \le n \le 3 \cdot 10^8\), \(0 \le A,B,C,D \le 10^6\)).

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

Выведите ответ по модулю \(2^{32}\).

Примечание

В первом примере:

\(\text{exlog}_f(1) = 0\)

\(\text{exlog}_f(2) = 2\)

\(\text{exlog}_f(3) = 3\)

\(\text{exlog}_f(4) = 2 + 2 = 4\)

\(\text{exlog}_f(5) = 5\)

\(\text{exlog}_f(6) = 2 + 3 = 5\)

\(\text{exlog}_f(7) = 7\)

\(\text{exlog}_f(8) = 2 + 2 + 2 = 6\)

\(\text{exlog}_f(9) = 3 + 3 = 6\)

\(\text{exlog}_f(10) = 2 + 5 = 7\)

\(\text{exlog}_f(11) = 11\)

\(\text{exlog}_f(12) = 2 + 2 + 3 = 7\)

\( \sum_{i=1}^{12} \text{exlog}_f(i)=63 \)

Во втором примере:

\(\text{exlog}_f(1) = 0\)

\(\text{exlog}_f(2) = (1 \times 2^3 + 2 \times 2^2 + 3 \times 2 + 4) = 26\)

\(\text{exlog}_f(3) = (1 \times 3^3 + 2 \times 3^2 + 3 \times 3 + 4) = 58\)

\(\text{exlog}_f(4) = 2 \times \text{exlog}_f(2) = 52\)

\( \sum_{i=1}^4 \text{exlog}_f(i)=0+26+58+52=136 \)

H. Фильмы

Перебор *3300

В мире телесериала «Человек в высоком замке» есть \(m\) различных окончаний фильмов.

Абендсен владеет складом и книжной полкой. Сначала у него есть \(n\) фильмов на полке в определенном порядке. В месяц номер \(i\) он будет делать следующее:

  1. Он очистит полностью склад.
  2. Положит \(k_i \cdot m\) фильмов на склад, по \(k_i\) фильмов с каждым окончанием.
  3. Задаст себе вопрос — если он переложит все фильмы с полки на склад, потом случайно выберет \(n\) фильмов (из всех фильмов на складе) и переставит их на полку в случайном порядке, то какая вероятность того, что последовательность окончаний на отрезке \([l_i, r_i]\) на полке не изменится? Учтите, что он только задает себе такой вопрос, поэтому книги на полке не меняются.

Ответьте на все вопросы Абендсена.

Вероятность можно представить как дробь \(P_i\). Пусть \(A_i\) — это общее количество способов выбрать \(n\) фильмов со склада в \(i\)-й месяц. Тогда \(P_i \cdot A_i\) всегда является целым числом. Для каждого месяца выведите \(P_i \cdot A_i \pmod {998244353}\).

\(998244353\) — простое число и оно равно \(119 \cdot 2^{23} + 1\).

Гарантируется, что будет не более \(100\) различных значений \(k\).

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

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

Вторая строка содержит \(n\) целых чисел \(e_1, e_2, \ldots, e_n\) (\(1\leq e_i\leq m\)) — окончание \(i\)-го фильма на полке.

Каждая из следующих \(q\) строк содержит три целых числа \(l_i\), \(r_i\) и \(k_i\) (\(1 \le l_i \le r_i \le n, 0 \le k_i \le 10^5\)) — \(i\)-й запрос.

Гарантируется, что будет не более \(100\) различных значений \(k\).

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

Выведите ответ на каждый запрос на отдельной строке.

Примечание

В первом запросе для второго запроса после добавления \(2 \cdot m\) фильмов на склад, склад будет выглядеть так: \(\{1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4\}\).

Всего есть \(26730\) способа выбрать фильмы так, чтобы окончания \(e_l, e_{l+1}, \ldots, e_r\) не изменились, например, \([1, 2, 3, 2, 2]\) и \([1, 2, 3, 4, 3]\).

Всего есть \(2162160\) способов выбрать фильмы, поэтому вам нужно вывести \((\frac{26730}{2162160} \cdot 2162160) \mod 998244353 = 26730\).

A. Выборы

жадные алгоритмы Перебор *1700

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

Скоро должны пройти выборы. Вы знаете количество избирателей и количество партий — \(n\) и \(m\) соответственно. Также, для каждого избирателя вы знаете, за какую партию он собирается голосовать. Однако, при наличии определённой суммы денег, это всё поправимо. В частности, если заплатить \(i\)-му избирателю \(c_i\) байткоинов, можно сделать так, чтобы тот проголосовал за любую партию по вашему усмотрению.

Объединённая Партия Государства Берляндии заказала у вас статистическое исследование — вам нужно выяснить минимальное количество байткоинов, которое ей нужно потратить, чтобы гарантировать себе победу. Чтобы партия выиграла выборы, ей необходимо набрать строго больше голосов, чем набрала любая из остальных партий.

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

В первой строке входных данных записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3000\)) — количество избирателей и количество партий соответственно.

Каждая из следующих \(n\) строк содержит числа \(p_i\) и \(c_i\) (\(1 \le p_i \le m\), \(1 \le c_i \le 10^9\)) — номер партии, за которую собирается голосовать очередной избиратель, а второе — количество байткоинов, за которое он готов изменить своё мнение.

Объединённая Партия Государства Берляндии имеет номер \(1\).

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

Выведите одно число — минимальное количество байткоинов, которое нужно заплатить избирателям, чтобы Объединённая Партия Государства Берляндии смогла победить.

Примечание

В первом тесте из условия Объединённая Партия выигрывает выборы, не покупая голоса избирателей.

Во втором тесте из условия Объединённая Партия может перекупить голоса первого и четвёртого избирателя. Таким образом, она наберёт два голоса, партии номер \(3\), \(4\) и \(5\) по одному, партия номер \(2\) не получит ни одного голоса.

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

A. Одежда

Перебор *1200

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

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

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

В первой строке входного файла заданы целые числа n и m — количество одежек, которые продаются в магазине и количество пар одежек, которые подходят друг к другу ().

В следующей строке даны n целых чисел ai (1 ≤ ai ≤ 106) — стоимости одежек в рублях.

В следующих m строках заданы по одной паре целых чисел ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi) через пробел. Каждая такая пара чисел означает, что ui-тая и vi-тая одежки подходят друг к другу. Гарантируется, что в каждой паре vi и ui различны и все неупорядоченные пары (ui, vi) различны.

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

Выведите единственное число — минимальную сумму в рублях, которую Геральду придется потратить в магазине, или «-1» (без кавычек), если нет трех элементов одежды, подходящих друг к другу.

Примечание

В первом тесте есть всего три одежки, и они все подходят друг к другу. Соответственно, есть единственный вариант купить 3 одежки, и в этом случае он потратит 6 рублей.

Во втором тесте тоже всего три одежки, но Геральд не может их купить, потому что первая одежка не подходит к третьей. Таким образом, нет трех подходящих друг к другу одежек. Ответ -1.

В третьем примере 4 одежки, но никакие 3 из них Геральд не может купить одновременно. Ответ -1.

B. Бейджик

графы Перебор поиск в глубину и подобное *1000

Как вы, возможно, знаете в ЛКШ за плохое поведение ставят дырки в бейджик. Вот и сегодня один из суровых преподавателей поймал группу из \(n\) школьников за очередной проделкой. Пронумеруем для удобства школьников в этой группе от \(1\) до \(n\).

Преподаватель подошёл к школьнику \(a\) и поставил ему дырку в бейджик. Тот, правда, попытался оправдаться, что зачинщиком бы некоторый другой школьник \(p_a\).

После этого преподаватель подошёл к школьнику \(p_a\) и поставил дырку в бейджик и ему. Тот в ответ послал его к школьнику \(p_{p_a}\).

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

После этого он поставил в бейдж этого школьника вторую дырку и счёл на этом свой долг выполненным.

Вы не знаете с какого школьника \(a\) начал преподаватель. Но вы знаете все числа \(p_i\). Выясните для каждого возможного школьника \(a\) того школьника, которому была поставлена вторая дырка.

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — количество нашкодивших школьников.

Вторая строка содержит \(n\) целых чисел \(p_1\), ..., \(p_n\) (\(1 \le p_i \le n\)), где \(p_i\) это номер школьника, к которому посылает преподавателя школьник под номером \(i\).

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

Для каждого школьника \(a\) от \(1\) до \(n\) выведите номер школьника, которому поставят две дырки, если преподаватель начнёт ставить дырки со школьника \(a\).

Примечание

Картинка иллюстрирует первый пример.

В первом примере, если \(a = 1\), то преподаватель подойдёт к школьникам \(1\), \(2\), \(3\), \(2\), тем самым вторую дырку получит школьник \(2\).

В первом примере, если \(a = 2\), то преподаватель подойдёт к школьникам \(2\), \(3\), \(2\) и школьник \(2\) получит вторую дырку в бейдж. Если \(a = 3\), то учитель подойдёт к школьникам \(3\), \(2\), \(3\), тем самым школьник \(3\) получит вторую дырку в бейджик.

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

A. Соответствие шаблону с одним джокером

Перебор реализация Строки *1200

Задано две строки \(s\) и \(t\). Строка \(s\) состоит из строчных букв латинского алфавита и не более одного символа звездочки '*', строка \(t\) состоит только из строчных букв латинского алфавита. Длина строки \(s\) равна \(n\), длина строки \(t\) равна \(m\).

Символ зведочки '*' в строке \(s\) (если он есть) можно заменить на произвольную последовательность символов (возможно, пустую) строчных латинских букв. Другие символы строки \(s\) ни на что заменять нельзя. Если после такой замены в \(s\) можно получить строку \(t\), то говорят, что строка \(t\) соответствует шаблону \(s\).

Например, если \(s=\)«aba*aba», то такому шаблону соответствуют строки «abaaba», «abacaba», «abazzzzaba», но не соответствуют строки «ababa», «abcaaba», «codeforces», «aba1aba», «aba?aba».

Если строка \(t\) из соответствует шаблону \(s\), выведите «YES», иначе выведите «NO».

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

В первой строке входных данных записано два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — длина строки \(s\) и длина строки \(t\) соответственно.

Во второй строке входных данных записана строка \(s\) длины \(n\), состоящая из строчных букв латинского алфавита и не более одного символа звездочки '*'.

В третьей строке входных данных записана строка \(t\) длины \(m\), состоящая только из строчных букв латинского алфавита.

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

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

Примечание

В первом тестовом примере символ звездочки '*' может быть заменен строкой «force». Таким образом, строка \(s\) после этой замены будет равна «codeforces», а ответ «YES».

Во втором тестовом примере символ звездочки '*' может быть заменен пустой строкой. Таким образом, строка \(s\) после этой замены будет равна «vkcup», а ответ «YES».

В третьем тестовом примере нет символа звездочки '*', а строки «v» и «k» не равны, таким образом ответ «NO».

В четвертом тестовом примере не существует такой замены символа звездочки '*', что вы сможете получить строку \(t\), таким образом ответ «NO».

B. Ослабленный Общий Делитель

жадные алгоритмы Перебор теория чисел *1600

В процессе исследования свойств наибольшего общего делителя (НОД) набора чисел известный математик Ильдар предложил новую концепцию ослабленного общего делителя (ООД) набора пар чисел.

Для заданного набора пар целых чисел \((a_1, b_1)\), \((a_2, b_2)\), ..., \((a_n, b_n)\) их ООД называется произвольное число превосходящее \(1\), которое делит хотя бы один элемент в каждой паре. ОДД может и не существовать для некоторых наборов.

Например, если набор пар имеет вид \([(12, 15), (25, 18), (10, 24)]\), то их ОДД может быть равен \(2\), \(3\), \(5\) или \(6\) (каждое из этих чисел строго больше \(1\) и делит хотя бы одно число в каждой паре).

Вы — аспирант Ильдара, и ваша задача помочь ему с вычислением ООД. Поможете ему с эффективной реализацией вычисления ООД?

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

В первой строке задано число \(n\) (\(1 \le n \le 150\,000\)) — количество пар.

В каждой из следующих \(n\) строк задано по два целых числа \(a_i\), \(b_i\) (\(2 \le a_i, b_i \le 2 \cdot 10^9\)).

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

Выведите единственное число — ООД списка пар.

Если возможных ответов несколько, выведите любой; если ответа не существует, выведите \(-1\).

Примечание

В первом примере одним из возможных ООД является число \(6\). В первой паре оно делит \(18\), во второй — \(24\), а в третьей — \(12\).

Во втором примере ни одно число, большее \(1\), не удовлетворяет условию.

В третьем примере одним из возможных ответов является \(5\). Обратите внимание, что одним из возможных ответов также является \(15\), но в задаче не требуется максимизировать ответ.

D. Восстановление BST

Деревья дп математика Перебор теория чисел *2100

Хомяк Дима обожает грызть различные объекты, среди которых клетки, коробки, авторы плохих задач и даже деревья!

Недавно он обнаружил двоичное дерево поиска и тут же сгрыз все его ребра, в результате чего вершины дерева перемешались в случайном порядке. Дима знает, что если Андрей, который кропотливо строил дерево на протяжении долгого времени, придет и увидит, что все разрушено, то он очень расстроится. По счастью, прежде чем сгрызть все ребра, Дима заметил, что для любых двух вершин, соединенных ребром, наибольший общий делитель их значений превосходит \(1\).

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

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

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

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

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

Если можно собрать двоичное дерево поиска, такое что наибольший общий делитель любых двух вершин соединённых ребром больше \(1\), выведите «Yes» (без кавычек).

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

Примечание

На картинке ниже проиллюстрировано одно из возможных деревьев для первого примера.

На картинке ниже проиллюстрировано одно из возможных деревьев для третьего примера.

F. Сделай симметричным

Перебор *2900

Рассмотрим множество точек \(A\), изначально пустое. Есть три типа запросов:

  1. Добавить точку \((x_i, y_i)\) в множество \(A\). Гарантируется, что эта точка не принадлежит \(A\) в данный момент.
  2. Удалить точку \((x_i, y_i)\) из \(A\). Гарантируется, что эта точка принадлежит \(A\) в данный момент.
  3. Дана точка \((x_i, y_i)\), нужно найти минимальное количество точек, которые нужно добавить в множество \(A\) для того, чтобы сделать \(A\) симметричным относительно прямой, проходящей через точки \((0, 0)\) и \((x_i, y_i)\). Обратите внимание, что эти точки на самом деле не добавляются в \(A\), то есть запросы независимы друг от друга.
Входные данные

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

Каждая из следующих \(q\) описывает запрос и содержит три целых числа \(t_i\), \(x_i\) и \(y_i\) (\( t_i \in \{1, 2, 3\}\), \(1 \le x_i, y_i \le 112\,904\)) — тип запроса и координаты точек. Тип \(1\) — это добавление точки, тип \(2\) — удаление точек, а тип \(3\) — это запрос на подсчёт минимального количества точек, необходимого для того, чтобы сделать \(A\) симметричным.

Гарантируется, что дано не более \(10^5\) запросов типа \(3\) и не более \(10^5\) запросов типов \(1\) и \(2\) суммарно.

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

Для каждого запроса третьего типа выведите одно целое число в отдельной строке — ответ на запрос.

Примечание

Первый пример показан на рисунке ниже.

F. Разноцветные маркеры

Бинарный поиск математика Перебор теория чисел *2000

Дана бесконечная доска, состоящая из квадратных клеток. Изначально все клетки белого цвета.

У Вовы есть красный маркер и синий маркер. Красным маркером можно закрасить \(a\) клеток. Синим маркером можно закрасить \(b\) клеток. Если какая-то клетка не белая, то нельзя использовать маркер какого-либо цвета на ней. Каждый маркер должен был использован полностью, поэтому в конце на доске должно оказаться ровно \(a\) красных клеток и ровно \(b\) синих клеток.

Вова хочет раскрасить такой набор клеток, чтобы:

  • они образовали прямоугольник, состоящий ровно из \(a+b\) закрашенных клеток;
  • все клетки хотя бы одного цвета также образовали прямоугольник.

Некоторые примеры корректных раскрасок:

Некоторые примеры некорректных раскрасок:

Среди всех корректных раскрасок Вова хочет выбрать такую, что ее периметр минимален. Какой минимальный периметр Вова может получить?

Гарантируется, что существует хотя бы одна корректная раскраска.

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

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

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

Выведите одно целое число — минимальный периметр закрашенного прямоугольника, который Вова может получить, раскрасив ровно \(a\) клеток в красный и ровно \(b\) клеток в синий.

Гарантируется, что существует хотя бы одна корректная раскраска.

Примечание

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

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

В первом примере можно также сделать прямоугольник со сторонами \(1\) и \(8\), однако его периметр будет \(18\), что больше \(8\).

Во втором примере можно также сделать прямоугольник с теми же сторонами \(3\) и \(4\), но красные клетки образуют прямоугольник со сторонами \(1\) и \(3\), а синие — прямоугольник со сторонами \(3\) и \(3\).

D. Время грабить корованы

Перебор сортировки Структуры данных *2100

Я джва года хочу такую задачу.
Alex_KPR

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

Иногда коровы собираются в корованы. Это, кажется, у них сезонное. Но именно в это время коровы становятся пассивными и слабо реагируют на внешние раздражители. Корован — идеальная мишень для марсианской исследовательской тарелки, самое время для крупномасштабных похищений, или, как говорят марсиане, ограблений. Говоря простым языком, корован — это множество коров, расположенных в ряд.

Если пронумеровать всех коров в короване натуральными числами от 1 до n, то можно формализовать популярную модель похищения, известную как (a, b)-ограбление корована: сперва похищается корова с номером a, затем — с номером a + b, затем — с номером a + 2·b, и так далее, пока номер похищаемой коровы не превысит n. В процессе одного ограбления коровы не перенумеровываются.

Инопланетяне с радостью бы расположили всех коров на борту своего гостеприимного судна, но, к сожалению, размер грузового отсека весьма и весьма ограничен. Исследователи, зная массу каждой коровы в короване, составили p сценариев (a, b)-ограбления. Теперь они хотят определить для каждого сценария в отдельности какая суммарная масса чистой говядины попадет на борт корабля. Все сценарии независимы, в процессе выполнения расчетов похищение коров не осуществляется.

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

В первой строке дано единственное натуральное число n — количество коров в короване (1 ≤ n ≤ 3·105).

Во второй строке содержится n натуральных чисел wi, разделенных пробелами, где i-ое число определяет массу i-ой коровы в короване (1 ≤ wi ≤ 109).

В третьей строке дано единственное натуральное число p — количество сценариев (a, b)-ограблений (1 ≤ p ≤ 3·105).

Каждая последующая строка содержит параметры a и b очередного сценария (1 ≤ a, b ≤ n).

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

На каждый сценарий (a, b)-ограбления выведите суммарную массу коров, которые могут быть похищены в результате ограбления по этому сценарию.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

F. Знакомые операции

графы математика Перебор *2800

Даны два целых положительных числа \(a\) и \(b\). С ними можно проводить следующие операции:

  1. умножить одно из чисел на некоторое простое число \(p\);
  2. разделить одно из чисел на некоторое простое \(p\), на которое оно делится.

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

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

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^5\)) — число пар чисел, для которых нужно найти ответ.

В каждой из следующих \(t\) строк содержатся два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^6\)).

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

Выведите \(t\) строк: в \(i\)-й из них должен содержаться ответ для пары \(a_i\), \(b_i\).

Примечание

Числа с одинаковым количеством делителей, оптимальные для примера:

  • \((27, 10)\), 4 делителя
  • \((100, 1156)\), 9 делителей
  • \((220, 140)\), 12 делителей
  • \((17, 19)\), 2 делителя
  • \((12, 18)\), 6 делителей
  • \((50, 32)\), 6 делителей
  • \((224, 1925)\), 12 делителей

Обратите внимание, что может быть несколько оптимальных пар чисел.

C. Игра с перестановкой

дп игры Перебор *1600

После долгого дня Алиса и Боб решили сыграть в игру. Игровая доска состоит из \(n\) ячеек на прямой, пронумерованных от \(1\) до \(n\), где каждая ячейка содержит число \(a_i\) в диапазоне от \(1\) до \(n\). Кроме того, никакие две ячейки не содержат одинаковые числа.

Игровая фигурка находится на одной ячейке. Они ходят по очереди, двигая фигурку. Алиса ходит первая. Игрок, который ходит, может передвинуть фигурку с ячейки \(i\) на ячейку \(j\), только если выполняются условия:

  • число в новой ячейке \(j\) строго больше, чем в старой ячейке \(i\) (то есть \(a_j > a_i\)), и
  • расстояние, на которое передвигается фигурка в этом ходу, должно делиться на число, расположенное в старой ячейке (то есть \(|i-j|\bmod a_i = 0\)).

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

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество чисел.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)). Гарантируется, что нет таких чисел \(i \neq j\), что \(a_i = a_j\).

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

Выведите \(s\) — строку из \(n\) символов, где \(i\)-й символ представляет результат игры, которая начинается в ячейке \(i\). Если победит Алиса, то \(s_i\) должен быть равен «A»; в другом случае, \(s_i\) должен быть равен «B».

Примечание

В первом примере, если Боб поместит игровую фигурку на число (не на позицию):

  • \(1\): Алиса может переместиться на любую ячейку. Она может выбрать число \(7\), из которого у Боба нет выхода.
  • \(2\): Алиса может переместиться на числа \(3\) и \(5\). При переходе в \(5\), Боб может выиграть, если переместится в \(8\). Если она выберет \(3\), то она победит, так как Боб сможет переместиться только в \(4\), из которого Алиса сможет переместиться в \(8\).
  • \(3\): Алиса может переместиться только в \(4\), после чего Боб побеждает, перемещаясь в \(8\).
  • \(4\), \(5\) или \(6\): Алиса побеждает, перемещаясь в \(8\).
  • \(7\), \(8\): Алиса не может никуда переместиться, поэтому проигрывает.

F. Булевский компьютер

битмаски бпф математика Перебор *2800

У Алисы есть компьютер, который работает с \(w\)-битными целыми числами и имеет \(n\) регистров для чисел. Текущее содержимое регистров задано как массив \(a_1, a_2, \ldots, a_n\).

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

Каждая «супер функция» состоит из логических функций. Существует шесть логических функций: AND, OR, XOR, NOT AND, NOT OR и NOT XOR, которые обозначаются как «A», «O», «X», «a», «o», «x», соответственно. Каждая битовая функция принимает два входных бита. Их результаты с учетом входных данных \(b_1\), \(b_2\) приведены ниже:

\(\begin{matrix} b_1 & b_2 & A & O & X & a & o & x \\ 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 \\ 0 & 1 & 0 & 1 & 1 & 1 & 0 & 0 \\ 1 & 0 & 0 & 1 & 1 & 1 & 0 & 0 \\ 1 & 1 & 1 & 1 & 0 & 0 & 0 & 1 \\ \end{matrix}\)

«Супер функция», которая состоит из \(w\) логических операций, разделяет два входных числа \(x_1\) и \(x_2\) на \(w\) бит, выполняет \(i\)-ю логическую операцию с \(i\)-и битами двух входных чисел. После чего соединяет эти \(w\) бит и возвращает это число.

Например, для \(4\)-битного компьютера мы можем иметь функцию «AXoA» (AND, XOR, NOT OR, AND). Для двух входных чисел: \(13 = 1101_2\) и \(10 = 1010_2\), функция вернет \(12 = 1100_2\), так как \(1\) AND \(1\) равно \(1\), \(1\) XOR \(0\) равно \(1\), NOT (\(0\) OR \(1\)) равно \(0\) и \(1\) AND \(0\) равно \(0\).

Вам дан список всех \(m\) функций. Для каждой функции вам нужно найти количество упорядоченных пар переменных, которые на выходе дадут \(0\). Другими словами, найдите количество упорядоченных пар \((i,j)\), где \(1 \leq i,j \leq n\), таких что \(w_k(a_i, a_j) = 0\), где \(w_k\) — \(k\)-я функция, которую использует «супер функция».

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

Первая строка содержит три целых числа \(w\), \(n\) и \(m~(1 \leq w \leq 12, 1 \leq n \leq 3\cdot 10^4, 1 \leq m \leq 5\cdot 10^4)\) — количество бит, количество переменных и количество функций.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((0 \leq a_i < 2^w)\) — значения переменных.

Каждая из следующих \(m\) строк содержит строку \(g_j~(|g_j| = w)\), которая описывает функцию. Строка \(g_j\) содержит только символы «A», «O», «X», «a», «o», «x».

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

Выведите \(m\) строк. \(i\)-я строка должна содержать количество упорядоченных пар переменных, при которых \(i\)-я функция вернет ноль.

Примечание

В первом примере переменные в бинарной записи имеют вид \(1101\), \(1010\), \(0110\). Пары, которые вернут \(0\) — это \((13, 6)\), \((6, 13)\) и \((6, 6)\). Уже было описано в условии, что \(13 \oplus 10 = 10 \oplus 13 = 12\). При других числах \(13 \oplus 13 = 11\), \(10 \oplus 10 = 8\) и \(10 \oplus 6 = 6 \oplus 10 = 4\).

B. Little C любит 3 II

Конструктив Паросочетания Перебор Потоки *2200

Little C очень любит число «3». Он любит все, что с ним связано.

Сейчас он играет в игру на шахматной доске \(n \times m\). Клетку в строке \(x\) и в столбце \(y\) назовем \((x,y)\). Исходно, шахматная доска пуста. Каждый раз он ставит две шахматные фигуры на две различные пустые клетки, Манхэттенское расстояние между которыми равно \(3\). Манхэттенским расстоянием между клетками \((x_i,y_i)\) и \((x_j,y_j)\) назовем \(|x_i-x_j|+|y_i-y_j|\).

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

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

В первой строке входного файла записаны два целых чисоа \(n\) и \(m\) (\(1 \leq n,m \leq 10^9\)) — количество строк и столбцов в шахматной доске.

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

Выведите единственное целое число — максимально количество шахматных фигур, которое сможет расставить Little C.

Примечание

В первом примере Манхэттенское расстояние между любыми двумя клетками меньше чем \(3\), поэтому ответ \(0\).

Во втором примере, одно из возможных решений это \((1,1)(3,2)\), \((1,2)(3,3)\), \((2,1)(1,3)\), \((3,1)(2,3)\).

G. Истоки и стоки

битмаски Перебор поиск в глубину и подобное *2700

Задан ацикличный ориентированный граф, состоящий из \(n\) вершин и \(m\) ребер. Граф не содержит кратных ребер и петель.

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

Количество истоков в графе равно количеству стоков, и это число не превосходит \(20\).

К графу применяется следующий алгоритм:

  1. если в графе нет истоков и стоков, то выйти;
  2. выбрать произвольный исток \(s\), произвольный сток \(t\), добавить ребро из \(t\) в \(s\) в граф и перейти к шагу \(1\) (эта операция удаляет \(s\) из истоков и \(t\) из стоков). Обратите внимание, что \(s\) и \(t\) могут быть одной и той же вершиной, тогда добавляется петля.

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

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

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^6\)) — количество вершин и количество ребер в графе, соответственно.

В каждой из следующих \(m\) строк записаны по два целых числа \(v_i, u_i\) (\(1 \le v_i, u_i \le n\), \(v_i \ne u_i\)) — описание \(i\)-го ребра изначального графа.

Гарантируется, что количество истоков равно количеству стоков, и это число не превышает \(20\). Гарантируется, что граф не содержит кратных ребер. Гарантируется, что граф не содержит циклов.

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

Выведите «YES», если граф становится сильно связным вне зависимости от выбора истоков и стоков на втором шаге алгоритма. В противном случае выведите «NO».

E. Наибольшее паросочетание

битмаски графы дп Перебор поиск в глубину и подобное *2400

Вам даны \(n\) блоков, каждый из которых выглядит как [color\(_1\)|value|color\(_2\)], при чём блок можно также перевернуть, чтобы получить [color\(_2\)|value|color\(_1\)].

Назовём последовательность блоков корректной, если касающиеся концы блоков совпадают по цветам. Например, последовательность из трёх блоков A, B и C является корректной, если левый цвет B совпадает с правым цветом A и правый цвет B совпадает с левым цветом C.

Ценность последовательности равна сумме ценностей (value) отдельных блоков в ней.

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

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)).

Каждая из следующих \(n\) строчек описывает очередной блок и состоит из трёх целых чисел \(\mathrm{color}_{1,i}\), \(\mathrm{value}_i\) и \(\mathrm{color}_{2,i}\) (\(1 \le \mathrm{color}_{1,i}, \mathrm{color}_{2,i} \le 4\), \(1 \le \mathrm{value}_i \le 100\,000\)).

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

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

Примечание

В первом примере возможно составить корректную подпоследовательность из всех блоков.

Один из корректных способов следующий:

[4|2|1] [1|32|2] [2|8|3] [3|16|3] [3|4|4] [4|1|2]

Первый блок из входных данных ([2|1|4] \(\to\) [4|1|2]) и второй ([1|2|4] \(\to\) [4|2|1]) перевёрнуты.

Во втором примере один из оптимальных ответов состоит только из первых трёх блоков упорядоченных следующим образом (второй или третий блок из входных данных перевёрнут):

[2|100000|1] [1|100000|1] [1|100000|2]

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

B. Витамины

битмаски дп Перебор реализация *1200

В берляндском магазине есть \(n\) видов сока. Каждый сок характеризуется своей ценой \(c_i\), а также витаминами, которые в нём содержатся. В Берляндии есть всего три типа витаминов: витамин «A», витамин «B» и витамин «C». В каждом соке может быть один, два или все три витамина.

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

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

В первой строке следует целое число \(n\) \((1 \le n \le 1\,000)\) — количество видов сока.

В каждой из следующих \(n\) строк следует целое число \(c_i\) \((1 \le c_i \le 100\,000)\) и строка \(s_i\) — цена \(i\)-го сока и описание витаминов, которые в нём есть. Строка \(s_i\) имеет длину от \(1\) до \(3\) и состоит из букв «A», «B» и «C». Гарантируется, что каждая буква встречается в каждой строке \(s_i\) не более одного раза. Порядок букв в строках \(s_i\) произвольный.

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

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

Примечание

В первом примере Петя должен купить первый, второй и четвертый сок. Тогда он потратит \(5 + 6 + 4 = 15\) и получит все три витамина. Также он может купить только третий сок и получить все три витамина, но это невыгодно, так как третий сок стоит \(16\).

Во втором примере Петя не сможет получить все три витамина, так как витамина «C» нет ни в одном соке.

D. Загадочное преступление

meet-in-the-middle Комбинаторика математика Перебор *1700

Ацингел — достаточно маленький городок. В этом городке был всего один доктор — Мисс Ада. Она была очень дружелюбной и никто никогда не говорил про неё ничего плохого. Так что кто мог подумать, что Аду найдут мёртвой в собственном доме? Мистер Гаври, известный во всём мире детектив, был назначен найти преступника. Он опросил \(m\) соседей Ады о клиентах, которые посетили её в тот злосчастный день. Давайте пронумеруем этих клиентов от \(1\) до \(n\). Свидетельством каждого соседа является перестановка этих чисел, которая описывает порядок, в котором этот сосед видел клиентов приходящими к Аде.

Однако некоторые факты выглядят достаточно подозрительно — как могло быть, что, согласно некоторым перестановкам некоторые клиенты были замечены утром, а согласно другим — вечером? «Утром некоторые из соседей скорее всего спали! — подумал Гаври, — А вечером слишком темно, чтобы видеть лица людей...». Теперь он хочет удалить из каждой перестановки некоторый префикс и некоторый суффикс (возможно, пустые) так, что оставшиеся части будут не пусты и равны друг другу. Возможно, часть потенциальных преступников пропадёт, но хотя бы не будет противоречий в свидетельствах соседей.

Сколькими способами он может это сделать? Два способа называются разными, если в них отличается оставшаяся общая часть.

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 100\,000\), \(1 \le m \le 10\)) — количество подозреваемых и количество опрошенных соседей.

Каждая из следующих \(m\) строк содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)). Гарантируется, что эти числа образуют перестановку (то есть каждое число от \(1\) до \(n\) встречается ровно один раз).

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

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

Примечание

В первом примере общей частью может быть \([1]\), \([2]\), \([3]\) и \([2, 3]\).

Во втором и третьем примерах можно оставлять только общие части из \(1\) элемента.

B. Темная Ассамблея

Перебор Теория вероятностей *1800

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

В Темную Ассамблею входит n сенаторов. Каждый из них характеризуется уровнем и лояльностью к игроку. Уровень — это некоторое целое положительное число, которое отражает силу сенатора. Лояльность — это вероятность принятия положительного решения при голосовании, которая измеряется в процентах с точностью до 10%.

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

Если после голосования предложение игрока не утверждается, то игрок может опротестовать решение Темной Ассамблеи. Для этого нужно убить всех сенаторов, что проголосовали против (в убийстве сенаторов нет ничего страшного, они потом воскреснут и будут еще хуже относиться к игроку). Вероятность того, что игроку удастся убить некоторую группу сенаторов, равна A / (A + B), где A — сумма уровней всех персонажей игрока, а B — сумма уровней всех сенаторов в этой группе. Если игрок убивает всех неугодных сенаторов, то предложение игрока утверждается.

Сенаторы очень любят конфеты. Их можно подкупить, раздав им конфеты. За каждую полученную конфету сенатор увеличивает свою лояльность к игроку на 10%. Стоит учесть, что выше 100% лояльность подняться не может. Игрок может взять с собой в зал заседания не более k конфет. Конфеты следует раздать до начала голосования.

Определите вероятность того, что Темная Ассамблея одобрит предложение игрока при оптимальном распределении конфет между сенаторами.

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

В первой строке находятся три целых числа n, k и A (1 ≤ n, k ≤ 8, 1 ≤ A ≤ 9999).

Далее идут n строк. i-ая из них содержит два числа — bi и li — уровень i-го сенатора и его лояльность.

Уровни всех сенаторов — целые числа в диапазоне от 1 до 9999 (включительно). Лояльности всех сенаторов — целые числа в диапазоне от 0 до 100 (включительно), все они делятся нацело на 10.

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

Выведите одно вещественное число с точностью 10 - 6 — максимальная возможная вероятность того, что Темная Ассамблея одобрит предложение игрока при оптимальном распределении конфет между сенаторами.

Примечание

В первом примере выгоднее всего раздать все конфеты первым трем сенаторам — это дает гарантированное большинство голосов.

Во втором примере выгоднее всего отдать все три конфеты последнему сенатору.

C. Мир Вещей

Перебор реализация сортировки *2200

Каждый предмет в игре имеет уровень. Чем выше уровень — тем более высокие базовые параметры имеет вещь. Мы будем рассматривать только следующие базовые параметры: атака (atk), защита (def) и сопротивления к различным воздействиям (res).

Каждая вещь принадлежит одному из классов. В данной задаче мы будем рассматривать только три таких класса: оружие (weapon), броня (armor), защитные сферы (orb).

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

Резиденты — это существа, которые живут внутри предметов. Каждый резидент дает некоторый бонус предмету, в котором он на данный момент находится. Мы будем рассматривать только резидентов типов: гладиатор (gladiator, увеличивает параметр atk предмета), часовой (sentry, увеличивает def) и целитель (physician, увеличивает res).

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

У Лахарла есть некоторое количество предметов. Он хочет перераспределить резидентов между предметами таким образом, чтобы затем выбрать себе оружие, броню и защитную сферу для экипировки. При этом параметр оружия atk должен получиться максимально возможным. Из всех экипировок с максимальным параметром оружия atk параметр брони def должен быть максимальным. Из всех таких экипировок следует выбрать ту, в которой параметр защитной сферы res максимален. Значения параметров def и res у оружия, atk и res у брони и atk и def у защитной сферы Лахарлу безразличны.

Найдите оптимальную экипировку, которую Лахарл может получить.

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

В первой строке находится число n (3 ≤ n ≤ 100) — количество предметов у Лахарла.

Далее идут n строк, в каждой из которых описывается один предмет. Описание предмета имеет вид: «name class atk def res size» — имя предмета, его класс, базовые параметры атаки, защиты, сопротивления и вместимость соответственно.

  • name и class — строки, а atk, def, res и size — целые числа.
  • name состоит из малых латинских букв и имеет длину от 1 до 10.
  • class может быть "weapon", "armor" или "orb".
  • 0 ≤ atk, def, res ≤ 1000.
  • 1 ≤ size ≤ 10.

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

В следующей строке находится целое число k (1 ≤ k ≤ 1000) — количество резидентов.

Далее идут k строк, в каждой из которых описывается один резидент. Описание резидента имеет вид: «name type bonus home» — имя резидента, его тип, количество очков, на которые увеличивает данный резидент соответствующий типу резидента параметр предмета и имя предмета, в котором резидент сейчас находится.

  • name, type и home — строки, а bonus — целое число.
  • name состоит из малых латинских букв и имеет длину от 1 до 10.
  • type может быть "gladiator", "sentry" или "physician".
  • 1 ≤ bonus ≤ 100.

Гарантируется, что количество резидентов в каждом предмете не превосходит вместимости предмета.

Имена всех предметов и резидентов попарно различны.

Все слова и числа во входных данных разделены одиночными пробелами.

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

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

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

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

Если возможных решений несколько — выведите любое.

Примечание

Во втором примере свободного места в предметах нет, поэтому перемещать резидентов нельзя.

D. Занимательная Геодезия

Перебор реализация снм *2700

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

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

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

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

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

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

Если в момент перекрашивания панели на ней находится еще один гео-символ, то он удаляется с карты и помещается в конец очереди.

После перекрашивания гео-символ уничтожается окончательно и из начала очереди извлекается следующий гео-символ (если он есть) и процесс повторяется. Процесс заканчивается если очередь оказалась пуста.

Чтобы лучше понять этот процесс — смотрите разбор примера.

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

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

В первой строке находятся два целых числа n и m (1 ≤ n, m ≤ 300) — высота и ширина карты (в клетках).

Далее идут n строк по m чисел в каждой — цвета гео-панелей.

После этого идут еще n строк по m чисел в каждой — описание гео-символов. -1 означает, что в данной позиции нет гео-символа, иначе число означает цвет гео-символа в данной позиции.

Все цвета — целые числа в диапазоне от 0 до 109. 0 обозначает прозрачный цвет.

В последней строке находятся два целых числа x и y (1 ≤ x ≤ n, 1 ≤ y ≤ m) — номер строки и номер столбца, где находится гео-символ, который уничтожается первым. Строки нумеруются начиная с единицы сверху вниз, столбцы нумеруются начиная с единицы слева направо. Гарантируется, что в позиции с координатами (x, y) находится гео-символ.

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

Выведите одно целое число — общее количество перекрашиваний после уничтожения гео-символа.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

Примечание

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

Если ваш браузер не поддерживает APNG, и вы видите только статичную картинку, то вы можете посмотреть GIF версию этой картинки по следующей ссылке:

105_D_img_2.gif

E. Поднять и бросить

Перебор *2500

Имеется числовой луч, разделенный на отрезки единичной длины, которые мы будем называть позициями. Позиции пронумерованы последовательными натуральными числами, начиная с единицы, т. е. 1, 2, 3 и так далее. Расстояние между позициями — это модуль разности соответствующих чисел.

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

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

  • Сходить на некоторое расстояние.
  • Взять другого персонажа и поднять его над головой.
  • Бросить поднятого персонажа на некоторое расстояние.

Для каждого персонажа имеется параметр дальность хода. Можно ходить только в свободные позиции, расстояние до которых не превышает дальности хода.

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

Также каждый персонаж имеет параметр дальность броска — расстояние, на которое этот персонаж может бросить поднятого над головой. Бросать можно только в свободные позиции и только тогда, когда имеется поднятый персонаж.

Допустима ситуация когда один персонаж поднимает другого, а тот уже держит третьего. При этом образуется «столбик» из трех персонажей. Например, Лахарл может держать над головой Этну, при этом Этна держит над головой Флонн. В данном случае Этна и Флонн не могут выполнять никаких действий, а Лахарл может только бросить Этну (вместе с Флонн) на некоторое расстояние.

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

Определите максимальный номер позиции, до которой может добраться хотя бы один из персонажей.

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

В первой строке имеются три целых числа — позиция Лахарла, его дальность хода и дальность броска. Во второй и третьей строках в том же формате заданы параметры Этны и Флонн соответственно. Гарантируется, что позиции всех трех персонажей различны. Все числа во входных данных от 1 до 10.

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

Выведите одно целое число — наибольший номер позиции, до которой могут добраться Лахарл, Этна или Флонн.

Примечание

Поясним, как можно достигнуть позиции 15 в примере.

Изначально Лахарл находится в позиции 9, Этна — в позиции 4, а Флонн в позиции 2.

Сначала Лахарл ходит в позицию 6.

Затем Флонн ходит в позицию 5 и поднимает Этну над головой.

Лахарл поднимает Флонн и кидает в позицию 9.

Флонн кидает Этну в позицию 12.

Этна ходит в позицию 15.

C. Вася и мультимножества

дп жадные алгоритмы математика Перебор реализация *1500

У Васи есть мультимножество чисел \(s\), состоящее из \(n\) элементов. Вася называет число \(x\) хорошим, если это число встречается в мультимножестве ровно один раз. Например, в мультимножестве \(\{1, 1, 2, 3, 3, 3, 4\}\) хорошими числами являются \(2\) и \(4\).

Вася хочет разбить мультимножество \(s\) на два мультимножества \(a\) и \(b\) (одно из которых может оказаться пустым) так, чтобы количество хороших чисел в мультимножестве \(a\) равнялось количеству хороших чисел в мультимножестве \(b\) (количество чисел, встречающихся ровно один раз в мультимножестве \(a\), равнялось количеству чисел, встречающихся ровно один раз в мультимножестве \(b\)).

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

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

Во второй строке записаны \(n\) целых чисел \(s_1, s_2, \dots s_n~(1 \le s_i \le 100)\) — мультимножество \(s\).

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

Если не существует разбиения мультимножества \(s\), удовлетворяющих описанным выше условиям, в первой строке выведите «NO».

В противном случае в первой строке выведите «YES».

Во второй строке выведите строку из \(n\) символов. \(i\)-й символ должен равняться 'A', если \(i\)-й элемент мультимножества \(s\) попадает в мультимножество \(a\), и 'B', если \(i\)-й элемент мультимножества \(s\) попадает в мультимножество \(b\). Элементы нумеруются от \(1\) до \(n\) в том порядке, в каком они заданы во входном файле.

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

E. Проверь транскрипцию

Перебор Строки Структуры данных хэши *2100

Один из друзей Аркадия работает на огромном радиотелескопе. Несколько десятилетий назад телескоп послал сигнал \(s\) в соседнюю галактику. Кто бы мог подумать, но недавно от инопланетян пришёл ответ — сигнал \(t\)! Учёные хотят проверить, есть ли сходство между сигналами \(s\) и \(t\) или нет.

Исходный сигнал \(s\) был последовательностью нулей и единиц (все знают, что битовая запись является межгалактическим стандартом). Но полученный сигнал \(t\), однако, выглядит более замысловато, чем \(s\). Однако учёные не сдались и представили \(t\) как последовательность латинских букв. Учёные считают, что \(s\) и \(t\) похожи, если можно заменить все нули в \(s\) на некоторую строку \(r_0\), а все единицы в \(s\) на некоторую иную строку \(r_1\) так, что получится строка \(t\). Строки \(r_0\) и \(r_1\) должны быть различными и не пустыми.

Помогите другу Аркадия и посчитайте количество возможных замен нулей и единиц (то есть количество пар строк \(r_0\) и \(r_1\)), которые превращают \(s\) в \(t\).

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

Первая строка содержит строку \(s\) (\(2 \le |s| \le 10^5\)), задающую исходный сигнал и состоящую только из нулей и единиц.

Вторая строка содержит строку \(t\) (\(1 \le |t| \le 10^6\)), состоящую только из строчных латинских букв и задающую полученный сигнал.

Гарантируется, что строка \(s\) содержит хотя бы один «0» и хотя бы одну «1».

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

Выведите одно целое число — количество пар строк \(r_0\) и \(r_1\), которые переводят \(s\) в \(t\).

В случае, если ни одной подходящей пары нет, выведите \(0\).

Примечание

В первом примере возможные пары \((r_0, r_1)\) выглядят следующим образом:

  • «a», «aaaaa»
  • «aa», «aaaa»
  • «aaaa», «aa»
  • «aaaaa», «a»

Пара «aaa», «aaa» не разрешена, так как \(r_0\) и \(r_1\) должны быть различными.

Во втором примере возможны следующие пары:

  • «ko», «kokotlin»
  • «koko», «tlin»

G. Прокатись на метро

графы Перебор Структуры данных *2900

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

К несчастью для Аркадия, это кольцевая линия. Это означает, что станции пронумерованы от \(1\) до \(n\), и между каждой парой последовательных станций есть тоннель, кроме того, тоннель есть между станциями \(1\) и \(n\). Поезда, следующие в направлении по часовой стрелке, посещают станции в порядке \(1 \to 2 \to 3 \to \ldots \to n \to 1\), а поезда, следующие в направлении против часовой стрелки, посещают станции в обратном порядке.

Станции, пронумерованные от \(1\) до \(m\), имеют интерьер в красных тонах, а станции, пронумерованные от \(m + 1\) до \(n\) имеют синий интерьер. Аркадий спустился в метро на станции \(s\) и решил использовать следующий алгоритм для того, чтобы добраться домой.

  1. Изначально он загадывает положительное целое число \(t\).
  2. Если текущая станция имеет красный интерьер, то он садится на поезд, следующий по часовой стрелки, иначе он садится на поезд, следующий против часовой стрелки.
  3. Он проезжает ровно \(t\) тоннелей на поезде и выходит из него.
  4. Он уменьшает \(t\) на один. Если \(t\) остается после этого положительным, он возвращается на шаг \(2\), иначе он выходит из метро.

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

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(3 \le n \le 10^5\), \(1 \le m < n\)) — общее число станций и число станций, имеющих красный интерьер.

Вторая строка содержит два целых числа \(s\) и \(t\) (\(1 \le s \le n\), \(1 \le t \le 10^{12}\)) — начальную станцию и изначальное значение \(t\).

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

Выведите одно целое число — станцию, на которой Аркадий выйдет из метро.

Примечание

Рассмотрим первый пример. Всего в метро \(10\) станций, первые \(4\) из них имеют красный интерьер. Аркадий начинает на станции \(3\) со значением \(t = 1\), поэтому он просто проезжает \(1\) станцию по часовой стрелке и выходит на станции \(4\).

Во втором примере метро такое же, но Аркадий начинает на станции \(3\) со значением \(t = 5\).

  • Это красная станция, поэтому он проедет \(5\) станций по часовой стрелке и выйдет на станции \(8\).
  • Это синяя станция, поэтому он проедет \(4\) станции против часовой стрелки и выйдет на станции \(4\).
  • Это красная станция, поэтому он проедет \(3\) станции по часовой стрелке и выйдет на станции \(7\).
  • Это синяя станция, поэтому он проедет \(2\) станции против часовой стрелки и выйдет на станции \(5\).
  • Это синяя станция, поэтому он проедет \(1\) станцию против часовой стрелки и выйдет на станции \(4\).
Теперь \(t = 0\), поэтому Аркадий выйдет из метро на станции \(4\).

B. DDoS

*особая задача Перебор *1400

В последнее время поступают новости о том, что все большее количество сайтов подвергается DDoS-атакам. Администратор Арсений считает, что его сайт подвергается DDoS-атаке, если суммарное количество запросов за некоторый промежуток времени превышает \(100 \cdot t\), где \(t\) — количество секунд в рассматриваемом промежутке времени.

Арсений знает статистику по количеству запросов в секунду, начиная с перезагрузки сервера. Ему известна последовательность \(r_1, r_2, \dots, r_n\), где \(r_i\) — количество запросов к серверу в \(i\)-ю секунду с момента его перезагрузки.

Определите длину наибольшего непрерывного отрезка времени, который Арсений считает DDoS-атакой. Искомый отрезок времени не должен выходить за границы рассматриваемого в задаче промежутка \([1, n]\).

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

В первой строке записано целое число \(n\) (\(1 \le n \le 5000\)) — количество секунд, прошедших от старта сервера. Вторая строка содержит последовательность целых чисел \(r_1, r_2, \dots, r_n\) (\(0 \le r_i \le 5000\)), \(r_i\) — количество запросов к сайту в \(i\)-ю секунду.

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

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

B. Выбор ноутбука

Перебор реализация *1000

Вася выбирает ноутбук. В магазине имеется n ноутбуков на самый разный вкус.

Васе интересны такие параметры ноутбука как скорость процессора, объем оперативной памяти и место на жестком диске. Вася программист, Вася в игры не играет, поэтому все остальные параметры Васе не интересны.

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

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

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

В первой строке находится число n (1 ≤ n ≤ 100).

Далее идут n строк. В каждой из них описан ноутбук в формате «speed ram hdd cost». При этом:

  • speed, ram, hdd и cost — целые числа
  • 1000 ≤ speed ≤ 4200 — скорость процессора в мегагерцах
  • 256 ≤ ram ≤ 4096 — объем оперативной памяти в мегабайтах
  • 1 ≤ hdd ≤ 500 — размер жесткого диска в гигабайтах
  • 100 ≤ cost ≤ 1000 — цена в тугриках

Все цены ноутбуков различны.

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

Выведите одно число — номер ноутбука, который выберет Вася. Ноутбуки нумеруются натуральными числами от 1 до n в том порядке, в котором они даны во входных данных.

Примечание

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

D. Остров сокровищ

Перебор реализация *1700

Наконец отважные путешественники достигли острова, где зарыты сокровища пиратов. Однако, когда корабль уже подплывал к острову, капитан обнаружил, что какая-то крыса отгрызла кусочек от карты сокровищ.

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

Кроме того, на карте имеется набор из k инструкций, каждая из которых имеет вид:

«Пройти x миль в направлении y»,

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

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

Капитан хочет узнать какие из достопримечательностей имеет смысл проверить. Он просит вас помочь в этом деле.

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

В первой строке находятся два целых числа n и m (3 ≤ n, m ≤ 1000).

Далее расположены n строк по m символов в каждой — описание карты острова. «#» означает море. Гарантируется, что все ячейки по периметру прямоугольника — море. «.» означает проходимую клетку без каких либо достопримечательностей, а достопримечательности обозначаются большими буквами латинского алфавита (от «A» до «Z»). Не все буквы алфавита могут быть использованы. Однако гарантируется, что хотя бы одна из них на карте присутствует. Все достопримечательности обозначены различными буквами.

В следующей строке находится число k (1 ≤ k ≤ 105), после чего идут k строк, в каждой из которых описывается одна инструкция. Каждая из инструкций имеет вид «dir len», где dir — направление, а len — расстояние. dir может принимать значения «N», «S», «W» и «E» для севера, юга, запада и востока соответственно. При этом север находится наверху, юг внизу, запад слева, а восток справа. len — целое число от 1 до 1000.

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

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

A. Телефонные номера

Перебор *800

Назовем телефонным номером строку из 11 цифр вида «8xxxxxxxxxx», где каждый «x» заменен на какую-либо цифру.

Например, «80123456789» и «80000000000» — это телефонные номера, а «8012345678» и «79000000000» — нет.

У вас есть \(n\) карточек с цифрами, вы хотите составить из них как можно больше телефонных номеров. Каждая карточка должна быть использована не более чем в одном телефонном номере. Вы не обязаны использованы использовать все карточки. Составленные номера не обязательно должны быть различными.

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

В первой строке входного файла записано целое число \(n\) — количество карточек с цифрами, которые у вас имеются (\(1 \leq n \leq 100\)).

Во второй строка записана строка из \(n\) цифр (символов «0», «1», ..., «9») \(s_1, s_2, \ldots, s_n\). Строка не содержит лишних символов, в частности, пробелов в начале и в конце.

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

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

Примечание

В первом тестовом примере из карточек можно составить только один номер телефона, «8000000000».

Во втором тестовом примере из карточек можно составить два номера телефона, например «80123456789» и «80123456789».

В третьем тестовом примере из карточек нельзя составить номер телефона.

D. Конфеты детям

математика Перебор *2600

На детском празднике дети водили хороводы. Как только музыка закончила играть, дети всё ещё стояли в кругу. Тут Лена вспомнила, что родители дали ей коробку с \(k\) конфетками «Wilky May». Лена не жадина, поэтому она решила раздать все свои конфетки друзьям из хоровода. Лена знает, что некоторые её друзья сладкоежки, а некоторые нет. Сладкоежки берут из коробки две конфетки, если в коробке есть хотя бы две конфетки, а иначе берут одну. Остальные друзья Лены всегда берут ровно одну конфетку из коробки.

Чтобы начать раздавать конфетки, Лена вышла из хоровода, после чего в хороводе остались \(n\) ее друзей. Чтобы раздавать конфетки было проще, Лена присвоила каждому другу в хороводе номер в порядке по часовой стрелке, начиная с её лучшего друга Ромы, который получил номер \(1\).

Лена дала коробку другу, который получил номер \(l\), после чего каждый друг Лены, начиная с друга с номером \(l\), брал конфетки из коробки и передавал коробку следующему в порядке по часовой стрелке другу. После того, как друг с номером \(r\) взял конфетки, в коробке конфеток не осталось. Обратите внимание, что возможно, что некоторые друзья Лены брали конфетки из коробки несколько раз, то есть коробка могла пройти несколько полных кругов по хороводу.

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

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

В единственной строке задаются четыре целых числа \(n\), \(l\), \(r\), \(k\) (\(1 \le n, k \le 10^{11}\), \(1 \le l, r \le n\)) — количество детей в хороводе, номер друга, которому Лена отдала коробку конфет, номер друга, который взял последнюю конфетку, и количество конфет в коробке, соответственно.

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

Выведите одно целое число — максимально возможное количество сладкоежек среди друзей Лены или «-1» (без кавычек), если Лена ошиблась в своих наблюдениях.

Примечание

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

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

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

В четвёртом примере Лена ошиблась и такой ситуации быть не могло.

A. Сделай треугольник!

геометрия математика Перебор *800

У Маши есть три палочки длиной \(a\), \(b\) и \(c\) сантиметров. За одну минуту Маша может увеличить длину любой из палочек на один сантиметр. Ломать палочки не разрешается.

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

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

В единственной строке даны три целых числа \(a\), \(b\) и \(c\) (\(1 \leq a, b, c \leq 100\)) — длины палочек, которые есть у Маши.

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

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

Примечание

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

Во втором примере Маша не может построить треугольник положительной площади из палочек, которые у нее есть, но может удлинить палочку длиной \(2\) сантиметра на один сантиметр за одну минуту, после чего построить треугольник из палочек со сторонами \(3\), \(3\) и \(5\) сантиметров.

В третьем примере Маша может за \(33\) минуты удлинить одну из палочек длиной \(10\) сантиметров на \(33\) сантиметра, а затем за \(48\) минут удлинить другую палочку длиной \(10\) сантиметров на \(48\) сантиметров. Таким образом, Маша может собрать треугольник со сторонами \(43\), \(58\) и \(100\) сантиметров за \(81\) минуту. Можно показать, что Маша не сможет получить треугольник за меньшее время.

G. Monsters and Potions

дп жадные алгоритмы Перебор реализация *2300

Polycarp is an introvert person. In fact he is so much of an introvert that he plays "Monsters and Potions" board game alone. The board of the game is a row of \(n\) cells. The cells are numbered from \(1\) to \(n\) from left to right. There are three types of cells: a cell containing a single monster, a cell containing a single potion or a blank cell (it contains neither a monster nor a potion).

Polycarp has \(m\) tokens representing heroes fighting monsters, which are initially located in the blank cells \(s_1, s_2, \dots, s_m\). Polycarp's task is to choose a single cell (rally point) and one by one move all the heroes into this cell. A rally point can be a cell of any of three types.

After Policarp selects a rally point, he picks a hero and orders him to move directly to the point. Once that hero reaches the point, Polycarp picks another hero and orders him also to go to the point. And so forth, until all the heroes reach the rally point cell. While going to the point, a hero can not deviate from the direct route or take a step back. A hero just moves cell by cell in the direction of the point until he reaches it. It is possible that multiple heroes are simultaneously in the same cell.

Initially the \(i\)-th hero has \(h_i\) hit points (HP). Monsters also have HP, different monsters might have different HP. And potions also have HP, different potions might have different HP.

If a hero steps into a cell which is blank (i.e. doesn't contain a monster/potion), hero's HP does not change.

If a hero steps into a cell containing a monster, then the hero and the monster fight. If monster's HP is strictly higher than hero's HP, then the monster wins and Polycarp loses the whole game. If hero's HP is greater or equal to monster's HP, then the hero wins and monster's HP is subtracted from hero's HP. I.e. the hero survives if his HP drops to zero, but dies (and Polycarp looses) if his HP becomes negative due to a fight. If a hero wins a fight with a monster, then the monster disappears, and the cell becomes blank.

If a hero steps into a cell containing a potion, then the hero drinks the potion immediately. As a result, potion's HP is added to hero's HP, the potion disappears, and the cell becomes blank.

Obviously, Polycarp wants to win the game. It means that he must choose such rally point and the order in which heroes move, that every hero reaches the rally point and survives. I.e. Polycarp loses if a hero reaches rally point but is killed by a monster at the same time. Polycarp can use any of \(n\) cells as a rally point — initially it can contain a monster, a potion, or be a blank cell with or without a hero in it.

Help Polycarp write a program to choose a rally point and the order in which heroes move.

Input

The first line of the input contains two integers \(n\) and \(m\) (\(1 \le n \le 100\); \(1 \le m \le n\)) — length of the game board and the number of heroes on it.

The following \(m\) lines describe heroes. Each line contains two integers \(s_i\) and \(h_i\) (\(1 \le s_i \le n\); \(1 \le h_i \le 10^6\)), where \(s_i\) is the initial position and \(h_i\) is the initial HP of the \(i\)-th hero. It is guaranteed that each cell \(s_i\) is blank. It is also guaranteed that all \(s_i\) are different.

The following line contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(-10^6 \le a_j \le 10^6\)), where \(a_j\) describes the \(i\)-th cell of the game board:

  • \(a_j=0\) means that the \(i\)-th cell is blank,
  • \(a_j<0\) means that the \(i\)-th cell contains monster with positive HP of \(-a_j\),
  • \(a_j>0\) means that the \(i\)-th cell contains potion with \(a_j\) HP.
Output

On the first line of the output print the index of the rally point cell.

On the second line print \(m\) integers — the order in which heroes should move to the rally point. Heroes are numbered from \(1\) to \(m\) in the order they are given in the input.

If there are multiple solutions, print any of them.

If it is impossible to find a rally point which can be reached by all heroes, print a single integer -1 in the output.

Note

The picture illustrates the first example:

H. BerOS File Suggestion

Перебор реализация *1500

Polycarp is working on a new operating system called BerOS. He asks you to help with implementation of a file suggestion feature.

There are \(n\) files on hard drive and their names are \(f_1, f_2, \dots, f_n\). Any file name contains between \(1\) and \(8\) characters, inclusive. All file names are unique.

The file suggestion feature handles queries, each represented by a string \(s\). For each query \(s\) it should count number of files containing \(s\) as a substring (i.e. some continuous segment of characters in a file name equals \(s\)) and suggest any such file name.

For example, if file names are "read.me", "hosts", "ops", and "beros.18", and the query is "os", the number of matched files is \(2\) (two file names contain "os" as a substring) and suggested file name can be either "hosts" or "beros.18".

Input

The first line of the input contains integer \(n\) (\(1 \le n \le 10000\)) — the total number of files.

The following \(n\) lines contain file names, one per line. The \(i\)-th line contains \(f_i\) — the name of the \(i\)-th file. Each file name contains between \(1\) and \(8\) characters, inclusive. File names contain only lowercase Latin letters, digits and dot characters ('.'). Any sequence of valid characters can be a file name (for example, in BerOS ".", ".." and "..." are valid file names). All file names are unique.

The following line contains integer \(q\) (\(1 \le q \le 50000\)) — the total number of queries.

The following \(q\) lines contain queries \(s_1, s_2, \dots, s_q\), one per line. Each \(s_j\) has length between \(1\) and \(8\) characters, inclusive. It contains only lowercase Latin letters, digits and dot characters ('.').

Output

Print \(q\) lines, one per query. The \(j\)-th line should contain the response on the \(j\)-th query — two values \(c_j\) and \(t_j\), where

  • \(c_j\) is the number of matched files for the \(j\)-th query,
  • \(t_j\) is the name of any file matched by the \(j\)-th query. If there is no such file, print a single character '-' instead. If there are multiple matched files, print any.

D. Берляндская ярмарка

Бинарный поиск жадные алгоритмы Перебор Структуры данных *1700

XXI Ежегодная Всеберляндская ярмарка уже совсем на носу! Традиционно ярмарка включает в себя \(n\) киосков, расположенных по кругу. Киоски пронумерованы от \(1\) до \(n\) по часовой стрелке, киоск номер \(n\) стоит рядом с номером \(1\). В \(i\)-м киоске продаются конфеты по цене \(a_i\) бурлей за штуку. В каждом киоске неограниченный запас конфет.

Поликапр решил потратить не более \(T\) бурлей на ярмарке. Однако, у него также есть план, как он будет перемещаться между киосками:

  • сначала он посещает киоск номер \(1\);
  • если у него хватает бурлей на покупку ровно одной конфеты в текущем киоске, то он ее сразу же покупает;
  • далее он переходит к следующему киоску по часовой стрелке (вне зависимости от того, купил ли он конфету или нет).

У Поликарпа конечное количество бурлей, поэтому процесс закончится, как только он не сможет купить конфету ни в одном киоске.

Посчитайте количество конфет, которые купит Поликарп.

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

В первой строке записаны два целых числа \(n\) и \(T\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le T \le 10^{18}\)) — количество киосков на ярмарке и начальное количество бурлей у Поликарпа.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — цена одной конфеты в киоске номер \(i\).

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

Выведите одно целое число — итоговое количество конфет, которые купит Поликарп.

Примечание

Рассмотрим первый пример. Какие ходы делал Поликарп, пока у него не закончились деньги:

  1. Киоск \(1\), покупает конфету за \(5\), \(T = 33\);
  2. Киоск \(2\), покупает конфету за \(2\), \(T = 31\);
  3. Киоск \(3\), покупает конфету за \(5\), \(T = 26\);
  4. Киоск \(1\), покупает конфету за \(5\), \(T = 21\);
  5. Киоск \(2\), покупает конфету за \(2\), \(T = 19\);
  6. Киоск \(3\), покупает конфету за \(5\), \(T = 14\);
  7. Киоск \(1\), покупает конфету за \(5\), \(T = 9\);
  8. Киоск \(2\), покупает конфету за \(2\), \(T = 7\);
  9. Киоск \(3\), покупает конфету за \(5\), \(T = 2\);
  10. Киоск \(1\), не покупает конфету, недостаточно денег;
  11. Киоск \(2\), покупает конфету за \(2\), \(T = 0\).

Больше нельзя купить конфет. Итоговое число купленных конфет — \(10\).

Во втором примере у него остается \(1\) бурль после посещения киосков, нельзя купить ни одну конфету за столько.

A. Орехус и лифт

Перебор реализация *1000

Орехус живет в доме с \(n\) этажами. На \(i\)-м этаже живут \(a_i\) людей. Каждый житель пользуется лифтом два раза в день: чтобы добраться со своего этажа на первый, и, чтобы добраться с первого на свой, когда возвращается домой.

Было решено, что, когда лифт не работает, он всегда будет стоять на \(x\)-м этаже, но \(x\) пока не выбрали. Когда какому-то жителю надо добраться с этажа \(a\) на этаж \(b\), лифт действует по следующему алгоритму:

  • Перемещается с \(x\)-го этажа (изначально лифт стоит на \(x\)-м этаже) на \(a\)-й и забирает пассажира.
  • Перемещается с \(a\)-го этажа на \(b\)-й и выпускает пассажира (если \(a\) равен \(b\), то лифт все равно приезжает на нужный этаж с \(x\)-го).
  • Перемещается с \(b\)-го этажа обратно на \(x\)-й и ждет там следующего вызова.
Лифт никогда не перемещает более одного человека и всегда возвращается пустым на \(x\)-й этаж перед тем, как начать перемещать следующего пассажира. Лифт тратит одну единицу энергии, чтобы переместиться между соседними этажами. Следовательно, чтобы переместиться с \(a\)-го этажа на \(b\)-й, необходимо \(|a - b|\) единиц энергии.

Ваша задача помочь Орехусу найти минимальное число единиц энергии, которой хватит на один целый день, выбрав оптимальный \(x\)-й этаж. Не забудьте, что лифт начинает и заканчивает на \(x\)-м этаже.

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

Первая строка одно целое число \(n\) (\(1 \leq n \leq 100\)) — количество этажей в доме.

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

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

В единственной строке выведите одно целое число — минимальное количество единиц энергии.

Примечание

В первом примере, если в качестве этажа \(x\) выбрать второй, то двое жителей второго этажа за день потратят по \(4\) единицы энергии каждый (\(2\), чтобы спуститься вниз, и \(2\), чтобы подняться наверх), а единственный житель третьего этажа потратит \(8\) за день (\(4\), чтобы спуститься вниз, и \(4\), чтобы подняться наверх). \(4 \cdot 2 + 8 \cdot 1 = 16\).

Во втором примере оптимальный ответ достигается при выборе первого этажа в качестве \(x\)-го.

A. Ехаб и очередной конструктив

Конструктив Перебор *800

Дано целое число \(x\), найдите 2 целых числа \(a\) и \(b\), таких, что:

  • \(1 \le a,b \le x\)
  • \(b\) делит \(a\) (\(a\) делится на \(b\)).
  • \(a \cdot b>x\).
  • \(\frac{a}{b}<x\).
Входные данные

В единственной строке входного файла записано одно целое число \(x\) \((1 \le x \le 100)\).

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

Выведите два целых числа \(a\) и \(b\), удовлетворяющих условию, разделенных пробелами. Если не существует пары целых чисел, удовлетворяющей данным ограничениям, выведите «-1» без кавычек.

A. Счастливая сумма цифр

Перебор реализация *1000

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

Пете очень интересно, какое минимальное счастливое число имеет сумму цифр n. Помогите ему справиться с этой задачей.

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

В единственной строке задано целое число n (1 ≤ n ≤ 106) — сумма цифр искомого счастливого числа.

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

В единственной строке выведите результат — минимальное счастливое число, сумма цифр которого равна n. Если такого числа не существует, выведите -1.

B. Счастливая вероятность

Перебор Теория вероятностей *1900

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

Петя и его друг Вася играют в интересную игру. Петя выбирает случайным образом целое число p из отрезка [pl, pr], а Вася — целое число v из отрезка [vl, vr] (также случайно). Оба игрока выбирают числа равновероятно. Найдите вероятность того, что количество счастливых чисел на отрезке [min(v, p), max(v, p)] ровно k.

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

В единственной строке задано пять целых чисел pl, pr, vl, vr и k (1 ≤ pl ≤ pr ≤ 109, 1 ≤ vl ≤ vr ≤ 109, 1 ≤ k ≤ 1000).

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

В единственной строке выведите результат с абсолютной погрешностью не более 10 - 9.

Примечание

Считайте, что [a, b] обозначает отрезок целых чисел, включающий границы. То есть

В первом примере есть 32 подходящих пар чисел: (1, 7), (1, 8), (1, 9), (1, 10), (2, 7), (2, 8), (2, 9), (2, 10), (3, 7), (3, 8), (3, 9), (3, 10), (4, 7), (4, 8), (4, 9), (4, 10), (7, 1), (7, 2), (7, 3), (7, 4), (8, 1), (8, 2), (8, 3), (8, 4), (9, 1), (9, 2), (9, 3), (9, 4), (10, 1), (10, 2), (10, 3), (10, 4). Количество всех возможных исходов равно 10·10 = 100. Поэтому ответ: 32 / 100.

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

E. Счастливый отрезок

математика Перебор *2700

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

Однажды Пете попался отрезок чисел [a, a + l - 1]. Пусть F(x) — количество счастливых цифр числа x. Найдите минимальное b (a < b) такое, что F(a) = F(b), F(a + 1) = F(b + 1), ..., F(a + l - 1) = F(b + l - 1).

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

В единственной строке задано два целых числа a и l (1 ≤ a, l ≤ 109) — первое число и длина отрезка, соответственно.

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

В единственной строке выведите число b — ответ на задачу.

Примечание

Считайте, что [a, b] обозначает отрезок целых чисел, включающий границы. То есть

A. Новый год и рождественский орнамент

математика Перебор реализация *800

Алиса и Боб украшают рождественскую ёлку.

Алиса хочет использовать только \(3\) вида украшений на ёлке: желтые, синие и красные. У них есть \(y\) жёлтых украшений, \(b\) синих украшений и \(r\) красных украшений.

По мнению Боба рождественская ёлка красивая, если:

  • синих украшений больше жёлтых ровно на \(1\) и
  • красных украшений больше синих ровно на \(1\).

То есть, если у них есть \(8\) жёлтых украшений, \(13\) синих украшений и \(9\) красных украшений, то можно выбрать \(4\) жёлтых, \(5\) синих и \(6\) красных украшений (\(5=4+1\) и \(6=5+1\)).

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

Два абзаца выше был описан пример, в котором также можно выбрать \(7\) жёлтых, \(8\) синих и \(9\) красных украшений. Если мы это сделаем, то мы получим \(7+8+9=24\) украшений. Это максимально возможное количество.

Поскольку Алиса и Боб заняты подготовкой еды на Канун Нового Года, они просят вас найти максимальное количество украшений, которыми можно украсить красивую рождественскую ёлку!

Гарантируется, что можно выбрать как минимум \(6\) (\(1+2+3=6\)) украшений.

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

Единственная строка содержит три целых числа \(y\), \(b\), \(r\) (\(1 \leq y \leq 100\), \(2 \leq b \leq 100\), \(3 \leq r \leq 100\)) — количество жёлтых, синих и красных украшений.

Гарантируется, что можно выбрать как минимум \(6\) (\(1+2+3=6\)) украшений.

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

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

Примечание

В первом примере ответ \(7+8+9=24\).

Во втором примере ответ \(2+3+4=9\).

B. Новый год и местоположение сокровища

жадные алгоритмы Конструктив Перебор реализация *1200

Боб — пират, ищущий величайшее сокровище, которое когда-либо видел мир. Известно, что сокровище расположено в точке \(T\), координаты которой только предстоит узнать.

Боб путешествовал по миру и собирал подсказки о сокровище в \(n\) обелисках. Эти подсказки были на древнем языке, и он смог их расшифровать только дома. Поскольку он не знает, какая подсказка принадлежит какому обелиску, поиск сокровища может стать проблемой. Вы можете помочь ему?

Как известно, мир — это двумерная плоскость. \(i\)-й обелиск находится в целочисленных координатах \((x_i, y_i)\). \(j\)-я подсказка состоит из \(2\) целых чисел \((a_j, b_j)\) и принадлежит обелиску \(p_j\), где \(p\) — некоторая (неизвестная) перестановка из \(n\) элементов. Это означает, что сокровище находится в точке \(T=(x_{p_j} + a_j, y_{p_j} + b_j)\). Эта точка \(T\) должно быть одинакова для всех подсказок.

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

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

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

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 1000\)) — количество обелисков, оно же равно количество подсказок.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\), \(y_i\) (\(-10^6 \leq x_i, y_i \leq 10^6\)) — координаты \(i\)-го обелиска. Все координаты различны, то есть \(x_i \neq x_j\) или \(y_i \neq y_j\) выполняется для каждой пары \((i, j)\), такой что \(i \neq j\).

Каждая из следующих \(n\) строк содержит два целых числа \(a_i\), \(b_i\) (\(-2 \cdot 10^6 \leq a_i, b_i \leq 2 \cdot 10^6\)) — направление \(i\)-й подсказки. Все координаты различны, то есть \(a_i \neq a_j\) или \(b_i \neq b_j\) выполняется для каждой пары \((i, j)\), такой что \(i \neq j\).

Гарантируется, что существует перестановка \(p\) такая, что для каждой пары \(i,j\) правда, что \(\left(x_{p_i} + a_i, y_{p_i} + b_i\right) = \left(x_{p_j} + a_j, y_{p_j} + b_j\right)\).

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

Выведите два числа \(T_x, T_y\) — координаты сокровища.

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

Примечание

Поскольку \(n = 2\), мы можем рассмотреть все перестановки двух элементов.

Если \(p = [1, 2]\), то обелиск \((2, 5)\) содержит подсказку \((7, -2)\), которая значит, что сокровище спрятано в \((9, 3)\). Второй обелиск \((-6, 4)\) содержал бы подсказку \((-1,-3)\) и сокровище было бы в \((-7, 1)\). Однако оба обелиска должны указывать одно и то же местоположение, поэтому это явно неправильная перестановка.

Если же спрятанная перестановка — это \([2, 1]\), тогда первая подсказка принадлежит второму обелиску, а вторая подсказка первому обелиску. Поэтому \((-6, 4) + (7, -2) = (2,5) + (-1,-3) = (1, 2)\), значит \(T = (1,2)\) — это местоположение сокровища.

Во втором примере скрытая перестановка — \([2, 3, 4, 1]\).

C. Многоугольник для угла

геометрия Перебор *1600

Вам задан угол \(\text{ang}\).

Жюри просит Вас найти такой правильный \(n\)-угольник (правильный многоугольник из \(n\) вершин), что у него найдутся три вершины \(a\), \(b\) и \(c\) (не обязательно последовательные) с углом \(\angle{abc} = \text{ang}\) или сообщить, что такого \(n\)-угольника не существует.

Если существует несколько ответов, выведите наименьший из них. Гарантируется, что если ответ существует, то он не превосходит \(998244353\).

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

Первая строка содержит единственное целое число \(T\) (\(1 \le T \le 180\)) — количество запросов.

Следующие \(T\) строк содержат по одному целому числу \(\text{ang}\) (\(1 \le \text{ang} < 180\)) — заданный угол в градусах.

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

Для каждого запроса выведите по одному целому числу \(n\) (\(3 \le n \le 998244353\)) — наименьшее возможное число вершин в подходящем правильном \(n\)-угольнике либо \(-1\), не такого \(n\) не существует.

Примечание

Ответ для первого запроса изображен на изображении выше.

Ответ для второго запроса достигается на правильном \(18\)-угольнике. Например, \(\angle{v_2 v_1 v_6} = 50^{\circ}\).

Возможный угол для третьего запроса — \(\angle{v_{11} v_{10} v_{12}} = 2^{\circ}\).

В четвертом запросе, минимальный возможный \(n\) равен \(180\) (но не \(90\)).

A. Геннадий и карточная игра

Перебор реализация *800

Геннадий владеет и живёт в небольшом провинциальном отеле. Он любит совершать длительные прогулки, смотреть на закаты и играть в карты с туристами в своём отеле. Его любимая игра называется «Mau-Mau».

Для игры в Mau-Mau нужна колода из \(52\) карт. У каждой карты есть масть (бубны — D, трефы — C, пики — S или червы — H) и достоинство (ранг) (2, 3, 4, 5, 6, 7, 8, 9, T, J, Q, K или A).

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

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

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

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

Каждая строка, описывающая карту, состоит из двух символов. Первый символ означает достоинство и принадлежит следующему множеству: \(\{{\tt 2}, {\tt 3}, {\tt 4}, {\tt 5}, {\tt 6}, {\tt 7}, {\tt 8}, {\tt 9}, {\tt T}, {\tt J}, {\tt Q}, {\tt K}, {\tt A}\}\). Второй символ задаёт масть и принадлежит следующему множеству: \(\{{\tt D}, {\tt C}, {\tt S}, {\tt H}\}\) — бубны, трефы, пики, червы.

Все карты во входных данных различны.

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

Если можно сделать ход хотя бы одной картой, выведите «YES». Иначе выведите «NO».

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

Примечание

В первом примере на столе лежит туз пик (AS). Можно сыграть бубновый туз (AD), потому что обе эти карты — тузы.

Во втором примере нельзя сыграть ни одной карты.

В третьем примере вы можете сыграть бубновый туз (AD), потому что на столе лежит бубновая четвёрка (4D).

B. Пётр и кодовый замок

битмаски дп Перебор *1200

Пётр недавно купил новую машину. Он только приехал на самую известную заправку города Санкт-Петербурга чтобы пополнить свой бензобак, как обнаружил, что бензобак защищён кодовым замком. Замок имеет шкалу в \(360\) градусов и указатель, который изначально указывает на ноль. Замок выглядит следующим образом:

Петр позвонил в свой автосалон и узнал, что должен повернуть колесо замка ровно \(n\) раз, причём \(i\)-й поворот должен составлять ровно \(a_i\) градусов. После всех \(n\) поворотов указатель должен снова указать на ноль.

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

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

Первая строка содержит \(n\) (\(1 \leq n \leq 15\)) — количество поворотов.

Каждая из следующих \(n\) строк содержит одно целое число \(a_i\) (\(1 \leq a_i \leq 180\)) — количество градусов в \(i\)-м повороте.

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

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

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

Примечание

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

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

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

H. Матеуш и бесконечная последовательность

битмаски дп Перебор Строки *3400

Последовательность Туе-Морса-Радецки-Матеуша (Туорса-Радевуша, для краткости) это бесконечная последовательность, получающаяся из конечной последовательности \(\mathrm{gen}\) длины \(d\) и целого числа \(m\), следующим образом:

  • В начале мы определяем \(M_0=(0)\).
  • На \(k\)-м шаге, \(k \geq 1\), мы определяем \(M_k\) как конкатенацию \(d\) копий \(M_{k-1}\). Однако, каждая из них немного изменяется — в \(i\)-й из них (\(1 \leq i \leq d\)) каждый элемент \(x\) заменяется на \((x+\mathrm{gen}_i) \pmod{m}\).

Например, если \(\mathrm{gen} = (0, \color{blue}{1}, \color{green}{2})\) и \(m = 4\):

  • \(M_0 = (0)\),
  • \(M_1 = (0, \color{blue}{1}, \color{green}{2})\),
  • \(M_2 = (0, 1, 2, \color{blue}{1, 2, 3}, \color{green}{2, 3, 0})\),
  • \(M_3 = (0, 1, 2, 1, 2, 3, 2, 3, 0, \color{blue}{1, 2, 3, 2, 3, 0, 3, 0, 1}, \color{green}{2, 3, 0, 3, 0, 1, 0, 1, 2})\), и так далее.

Как можно заметить, при условии, что первый элемент \(\mathrm{gen}\) равен \(0\), каждый последующий шаг порождает последовательность, префиксом которой является последовательность с предыдущего шага. Тогда мы можем определить бесконечную последовательность Туорса-Радевуша \(M_\infty\) как последовательность, получаемую бесконечным применением шага выше. Например, для параметров выше, \(M_\infty = (0, 1, 2, 1, 2, 3, 2, 3, 0, 1, 2, 3, 2, 3, 0, 3, 0, 1, \dots)\).

Матеуш выбрал последовательность \(\mathrm{gen}\) и целое число \(m\), и с помощью них получил последовательность Туорса-Радевуша \(M_\infty\). Затем он выбрал два целых числа \(l\) и \(r\) и записал подпоследовательность этой последовательности: \(A := ((M_\infty)_l, (M_\infty)_{l+1}, \dots, (M_\infty)_r)\).

Обратите внимание, что мы используем нумерацию с \(1\) для \(M_\infty\) и \(A\).

У Матеуша есть его любимая последовательность \(B\) длины \(n\) и хочет узнать, насколько она большая относительно \(A\). Он говорит, что последовательность \(B\) мажорирует последовательность \(X\) длины \(n\) (обозначим как \(B \geq X\)), если для всех \(i \in \{1, 2, \dots, n\}\) выполняется \(B_i \geq X_i\).

Теперь он спрашивает себя, сколько существует целых чисел \(x\) в отрезке \([1, |A| - n + 1]\) таких, что \(B \geq (A_x, A_{x+1}, A_{x+2}, \dots, A_{x+n-1})\). Так как обе последовательности очень большие, то ответить на вопрос, используя только бумагу и ручку, оказалось затруднительно. Не могли бы вы ему помочь?

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

Первая строка содержит два целых числа \(d\) и \(m\) (\(2 \leq d \leq 20\), \(2 \leq m \leq 60\)) — длина последовательности \(\mathrm{gen}\) и целое число, используемое как модуль в вычислениях. Вторая строка содержит \(d\) целых чисел \(\mathrm{gen}_i\) (\(0 \leq \mathrm{gen}_i < m\)). Гарантируется, что первый элемент последовательности \(\mathrm{gen}\) равен нулю.

Третья строка содержит одно целое число \(n\) (\(1 \leq n \leq 30000\)) — длина последовательности \(B\).

Четвёртая строка содержит \(n\) целых чисел \(B_i\) (\(0 \leq B_i < m\)).

Пятая строка содержит два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq 10^{18}\), \(r-l+1 \geq n\)).

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

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

Примечание

Последовательность Туорса-Радевуша в первом примере это стандартная последовательность Туе-Морса, так что последовательность \(A\) выглядит следующим образом: \(11010011001011010010\). Места, где \(B\) мажорирует последовательность \(A\) представлены на картинке:

B. Хорошая таблица

жадные алгоритмы Конструктив математика Перебор *2100

Вам дана таблица \(n \times m\), состоящая из букв «A», «G», «C», «T». Назовем таблицу красивой, если любой квадрат \(2 \times 2\) в ней состоит из различных символов. Ваша задача — найти красивую таблицу, также состоящую из букв «A», «G», «C», «T», которая отличается от данной в минимальном числе символов.

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

В первой строке входных данных записаны два положительных целых числа \(n\) и \(m\) — количество строк и столбцов в данной таблице (\(2 \leq n, m, n \times m \leq 300\,000\)). В каждой из следующих \(n\) строк записано по \(m\) символов — содержимое таблицы. Гарантируется, что в таблице встречаются только символы «A», «G», «C», «T».

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

Выведите \(n\) строк, по \(m\) символов в каждой. Выведенная таблица должна быть красивой и отличаться от данной в минимальном количестве символов.

Примечание

Таблица в первом примере и так является красивой. Таблицу во втором примере можно преобразовать в красивую, изменив 9 символов.

F. Вытянутая матрица

Бинарный поиск битмаски графы дп Перебор *2000

Задана матрица \(a\), состоящая из \(n\) строк и \(m\) столбцов. В каждой ячейке записано целое число.

Разрешается произвольно изменить порядок строк (в том числе и оставить начальный порядок), но не разрешается менять порядок ячеек в строке. После того, как был выбран некоторый порядок строк, матрица полностью обходится следующим образом: сначала посещаются все ячейки первого столбца с верхней строки до нижней, потом так же все ячейки второго столбца и так далее. Во время обхода выписывается последовательность чисел в ячейках в том же порядке, в котором они были посещены. Назовем эту последовательность \(s_1, s_2, \dots, s_{nm}\).

Обход называется \(k\)-приемлемым, если для всех \(i\) (\(1 \le i \le nm - 1\)) \(|s_i - s_{i + 1}| \ge k\).

Найдите такое максимальное целое число \(k\) такое, что существует порядок строк матрицы \(a\), который образует \(k\)-приемлемый обход.

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 16\), \(1 \le m \le 10^4\), \(2 \le nm\)) — количество строк и столбцов, соответственно.

В каждой из следующих \(n\) строк записаны по \(m\) целых чисел (\(1 \le a_{i, j} \le 10^9\)) — описание матрицы.

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

Выведите единственное целое число \(k\) — такое максимальное число, что существует порядок строк матрицы \(a\), который образует \(k\)-приемлемый обход.

Примечание

В первом примере можно переставить строки следующим образом, чтобы получить \(5\)-приемлемый обход:


5 3
10 8
4 3
9 9

Тогда последовательность \(s\) будет \([5, 10, 4, 9, 3, 8, 3, 9]\). Каждая пара соседних элементов отличается хотя бы на \(k = 5\).

Во втором примере максимальное \(k = 0\), любой порядок \(0\)-приемлем.

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

A. Салем и палочки

Перебор реализация *1100

Салем дал вам \(n\) палочек c целыми положительными длинами \(a_1, a_2, \ldots, a_n\).

Для каждой палочки, вы можете поменять её длину на любую другую положительную целую длину (то есть уменьшить или увеличить её). Стоимость изменения у палочки длины \(a\) на длину \(b\) равна \(|a - b|\), где \(|x|\) обозначает модуль \(x\).

Длина палочки \(a_i\) называется почти хорошей для некоторого целого \(t\), если \(|a_i - t| \le 1\).

Салем просит вас поменять длины у каких-то палочек (возможно у всех или у никаких) так, что длины всех палочек будут почти хорошими для некоторого целого положительного \(t\), а суммарная стоимость всех изменений будет минимально возможной. Значение \(t\) заранее не зафиксировано и вы можете выбрать его как произвольное целое положительное число.

В качестве ответа, выведите значение \(t\) и минимальную стоимость всех изменений. Если существует несколько оптимальных \(t\), выведите любое из них.

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — количество палочек.

Вторая строка содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 100\)) — длины всех палочек.

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

Выведите значение \(t\) и минимальную возможную стоимость всех изменений. Если существует несколько оптимальных \(t\), выведите любое из них.

Примечание

В первом примере мы можем заменить \(1\) на \(2\) и \(10\) на \(4\) с суммарной стоимостью \(|1 - 2| + |10 - 4| = 1 + 6 = 7\), тогда итоговые длины будут равны \([2, 4, 4]\) и являться почти хорошими для \(t = 3\).

Во втором примере длины палочек уже являются почти хорошими для \(t = 2\), так что мы можем ничего не делать.

B. Зухаир и строки

Перебор реализация Строки *1100

Задана строка \(s\) длины \(n\) и целое число \(k\) (\(1 \le k \le n\)). Скажем, что строка \(s\) имеет уровень \(x\), если \(x\) это наибольшее неотрицательное целое число, такое что в строке \(s\) можно выбрать:

  • \(x\) непересекающихся подстрок длины \(k\),
  • все символы в этих \(x\) подстроках должны быть одинаковы (т.е. каждая подстрока содержит только один различный символ, который один и тот же для всех выбранных подстрок).

Подстрока — это последовательность подряд идущих символов строки, подстрока определяется парой целых чисел \(i\) и \(j\) (\(1 \le i \le j \le n\)), обозначается как \(s[i \dots j]\) = «\(s_{i}s_{i+1} \dots s_{j}\)».

Например, если \(k = 2\), то:

  • строка «aabb» имеет уровень \(1\) (можно выбрать подстроку «aa»),
  • строки «zzzz» и «zzbzz» имеют уровень \(2\) (можно выбрать две непересекающихся подстроки «zz» в каждой их них),
  • строки «abed» и «aca» имеют уровень \(0\) (невозможно выбрать хотя бы одну подстроку длины \(k=2\), которая содержит один различный символ).

Зухаир дал вам целое число \(k\) и строку \(s\) длины \(n\). Вам нужно найти \(x\) — уровень строки \(s\).

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

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) — длину строки и значение \(k\).

Вторая строка содержит строку \(s\) длины \(n\), состоящую из строчных латинских букв.

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

Выведите одно целое число \(x\) — уровень строки.

Примечание

В первом примере мы можем выбрать \(2\) непересекающиеся строки, состоящей из буквы «a»: «(aa)ac(aa)bb», так что уровень равен \(2\).

Во втором примере мы можем выбрать или подстроку «a» или «b» чтобы получить ответ \(1\).

E. Помочь Хиасату

meet-in-the-middle битмаски дп Перебор *2200

Хиасат недавно зарегистрировал новый аккаут на сайте NeckoForces и, как только его друзья об этом узнали, каждый из них захотел, чтобы его имя было названием хендла профиля Хиасата.

К счастью для Хиасата, он может менять свой профиль в некоторые моменты времени. Также он знает моменты времени, когда его друзья будут заходить на его страницу. Формально, дана последовательность событий двух видов:

  • \(1\) — Хиасат может поменять свой хендл.
  • \(2\) \(s\) — друг \(s\) посещает профиль Хиасата.

Друг \(s\) будет счастлив, если каждый раз, когда он посетит страницу Хиасата, его хендл будет равен \(s\).

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

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10^5, 1 \le m \le 40\)) — количество событий и количество друзей.

Затем следуют \(n\) строк, задающих событие одно из двух видов:

  • \(1\) — Хиасат может поменять свой хендл.
  • \(2\) \(s\) — друг \(s\) (\(1 \le |s| \le 40\)) посещает профиль Хиасата.

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

Гарантируется, что первое событие обязательно первого типа, и что каждый друг посетит профиль Хиасата хотя бы один раз.

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

Выведите одно целое число — наибольшее число счастливых друзей.

Примечание

В первом примере, оптимально поменять хендл на «motarack» в первом событие и на «light» в четвёртом. Таким образом, «motarack» и «light» будут счастливы, а «mike» — нет.

Во втором примере можно выбрать «alice», «bob» или «tanyaromanova», и ровно этот друг и будет счастлив.

B. Делители двух целых чисел

жадные алгоритмы математика Перебор теория чисел *1100

Недавно вы получили два положительных целых числа \(x\) и \(y\). Вы забыли их, но вы запомнили перемешанный список, содержащий все делители \(x\) (включая \(1\) и \(x\)) и все делители \(y\) (включая \(1\) и \(y\)). Если \(d\) является делителем сразу обоих чисел \(x\) и \(y\), то в списке находятся два вхождения \(d\).

Например, если \(x=4\), а \(y=6\), то заданным списком может быть любая перестановка списка \([1, 2, 4, 1, 2, 3, 6]\). Некоторые примеры возможных списков: \([1, 1, 2, 4, 6, 3, 2]\), \([4, 6, 1, 1, 2, 3, 2]\) или \([1, 6, 3, 2, 4, 1, 2]\).

Ваша задача — восстановить подходящие положительные целые числа \(x\) и \(y\), которые формируют заданный список делителей (возможно в другом порядке).

Гарантируется, что ответ существует, то есть заданный список делителей соответствует каким-то положительным целым числам \(x\) и \(y\).

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

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 128\)) — количество делителей \(x\) и \(y\).

Вторая строка входных данных содержит \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(1 \le d_i \le 10^4\)), где \(d_i\) является либо делителем \(x\), либо делителем \(y\). Если число является делителем сразу обоих чисел \(x\) и \(y\), то в списке находятся две его копии.

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

Выведите два положительных целых числа \(x\) и \(y\) — такие числа, что объединенные списки их делителей являются перестановкой заданного списка целых чисел. Гарантируется, что ответ существует.

C. Красивая гирлянда

жадные алгоритмы математика Перебор *1300

У вас есть гирлянда, состоящая из \(n\) ламп. Каждая лампа — красная, зеленая или синяя. Цвет \(i\)-й лампы равен \(s_i\) ('R', 'G' и 'B' — цвета ламп в гирлянде).

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

Гирлянда называется красивой, если две любые лампы одинакового цвета находятся на расстоянии, делящемся на три. То есть если получилась гирлянда \(t\), тогда для всех \(i, j\) таких, что \(t_i = t_j\), должно выполняться \(|i-j|~ mod~ 3 = 0\). Значение \(|x|\) означает абсолютную величину \(x\), операция \(x~ mod~ y\) означает остаток от деления \(x\) на \(y\).

Например, следующие гирлянды являются красивыми: «RGBRGBRG», «GB», «R», «GRBGRBG», «BRGBRGB». Следующие гирлянды не являются красивыми: «RR», «RGBG».

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

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

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

Вторая строка входных данных содержит строку \(s\), состоящую из \(n\) символов 'R', 'G' и 'B' — цвета ламп в гирлянде.

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

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

Во второй строке выходных данных выведите одну строку \(t\) длины \(n\)красивую гирлянду, полученную из изначальной за минимальное количество перекрашиваний. Если существует несколько оптимальных решений, выведите любое из них.

E1. Массив и отрезки (легкая версия)

жадные алгоритмы Перебор реализация *1800

Единственное отличие между легкой и сложной версиями — количество элементов в массиве.

Задан массив \(a\), состоящий из \(n\) целых чисел. Значение \(i\)-го элемента массива равно \(a_i\).

Также задан набор из \(m\) отрезков. \(j\)-й отрезок равен \([l_j; r_j]\), где \(1 \le l_j \le r_j \le n\).

Вы можете выбрать какое-то подмножество заданного множества отрезков и уменьшить значения элементов на каждом из выбранных отрезков на единицу (независимо). Например, если изначальный массив \(a = [0, 0, 0, 0, 0]\), а заданные отрезки — \([1; 3]\) и \([2; 4]\), то вы можете выбрать оба из них и массив станет равен \(b = [-1, -2, -2, -1, 0]\).

Вам необходимо выбрать какое-то подмножество заданного множества отрезков (каждый отрезок может быть выбран не более одного раза) таким образом, что если вы примените этот набор отрезков к массиву \(a\) и получите массив \(b\), то значение \(\max\limits_{i=1}^{n}b_i - \min\limits_{i=1}^{n}b_i\) будет максимально возможным.

Заметим, что вы можете выбрать пустое множество.

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

Если вы программируете на Python, рассмотрите возможность отправки решения на PyPy, а не на Python, когда будете отправлять свой код.

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

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 300, 0 \le m \le 300\)) — длина массива \(a\) и количество отрезков, соответственно.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^6 \le a_i \le 10^6\)), где \(a_i\) — значение \(i\)-го элемента массива \(a\).

Следующие \(m\) строк содержат по два целых числа. \(j\)-я из них содержит два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j \le r_j \le n\)), где \(l_j\) и \(r_j\) — концы \(j\)-го отрезка.

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

В первой строке выходных данных выведите одно целое число \(d\)максимально возможное значение \(\max\limits_{i=1}^{n}b_i - \min\limits_{i=1}^{n}b_i\), если \(b\) — это массив, полученный применением некоторого поднабора заданных отрезков к массиву \(a\).

Во второй строке выходных данных выведите одно целое число \(q\) (\(0 \le q \le m\)) — количество отрезков, которые вы собираетесь применить.

В третьей строке выведите \(q\) различных целых чисел \(c_1, c_2, \dots, c_q\) в любом порядке (\(1 \le c_k \le m\)) — номера отрезков, которые вы собираетесь применить к массиву \(a\), чтобы значение \(\max\limits_{i=1}^{n}b_i - \min\limits_{i=1}^{n}b_i\) полученного массива \(b\) было максимально возможным.

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

Примечание

В первом тестовом примере полученный массив \(b\) будет равен \([0, -4, 1, 1, 2]\), таким образом ответ равен \(6\).

Во втором тестовом примере полученный массив \(b\) будет равен \([2, -3, 1, -1, 4]\), таким образом ответ равен \(7\).

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

D. Саша и интересный факт из теории графов

Деревья дп Комбинаторика математика Перебор *2400

Однажды, во время пары Саше стало скучно и он решил поговорить со своими друзьями. Тут он увидел Кефу. О Кефе можно говорить бесконечно, поэтому делать мы этого не будем. Разговор ребят зашёл о графах. Кефа пообещал рассказать Саше один интересный факт из теории графов, если тот, в свою очередь, поможет Кефе посчитать количество красивых деревьев.

В данной задаче деревом называется взвешенный связный граф, состоящий из \(n\) вершин и \(n-1\)-го ребра, такой, что веса всех рёбер — целые числа от \(1\) до \(m\). Красоту дерева Кефа оценивает следующим образом: он находит в дереве две свои любимые врешины — вершины с номерами \(a\) и \(b\), и считает расстояние между ними. Расстоянием между двумя вершинами \(x\) и \(y\) назовём сумму весов всех рёбер на простом пути из \(x\) в \(y\). Если расстояние от вершины \(a\) до вершины \(b\) равно \(m\), то дерево красивое.

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

Кефа предупредил Сашу, что красивых деревьев очень много, поэтому достаточно будет вычислить их количество по модулю \(10^9 + 7\).

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

Первая строка содержит четыре целых числа \(n\), \(m\), \(a\), \(b\) (\(2 \le n \le 10^6\), \(1 \le m \le 10^6\), \(1 \le a, b \le n\), \(a \neq b\)) — количество вершин в дереве, максимальный вес ребра и две любимые вершины Кефы.

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

Выведите одно число — количество красивых деревьев по модулю \(10^9+7\).

Примечание

В первом примере существует \(5\) красивых деревьев:

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

B. Средняя сила супергероев

математика Перебор реализация *1700

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

Изначально в команде \(n\) супергероев с силами \(a_1, a_2, \ldots, a_n\), соответственно. За одну операцию можно убрать супергероя из команды (если сейчас их не меньше двух) или увеличить силу одного супергероя на \(1\). Можно выполнить не более \(m\) операций. Кроме того, нельзя увеличивать силу одного супергероя больше, чем в \(k\) операциях.

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

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

Первая строка содержит три целых числа \(n\), \(k\) и \(m\) (\(1 \le n \le 10^{5}\), \(1 \le k \le 10^{5}\), \(1 \le m \le 10^{7}\)) — количество супергероев, максимальное количество раз, которое можно увеличивать силу одного супергероя, и общее максимальное число операций.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{6}\)) — начальные силы супергероев в команде мстителей.

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

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

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

В первом примере максимальная средняя сила достигается удалением первого супергероя и увеличением силы второго супергероя на четыре.

Во втором примере один из способов достичь максимальное среднее является удаление первого и третьего супергероев и увеличением сил второго и четвертого супергероев на \(2\).

C. Изобретательный щелчок

Бинарный поиск математика Перебор разделяй и властвуй *1700

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

Представим базу как массив, в каждой ячейке которой может находиться сколько угодно мстителей, но каждый мститель находится ровно в одной ячейке. Длина базы является точной степенью \(2\). Танос хочет уничтожить базу, потратив минимум энергии. Он начинает со всей базы и за один шаг может сделать одно из следующего:

  • если текущая длина базы хотя бы \(2\), разделить базу на \(2\) равные половины и продолжить их уничтожать независимо, или
  • сжечь текущую базу. Если на ней нет мстителей, это отнимает \(A\) единиц энергии, иначе это отнимает \(B \cdot n_a \cdot l\) единиц энергии, где \(n_a\) — число мстителей на этой базе, а \(l\) — длина текущей базы.

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

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

Первая строка содержит четыре целых числа \(n\), \(k\), \(A\) и \(B\) (\(1 \leq n \leq 30\), \(1 \leq k \leq 10^5\), \(1 \leq A,B \leq 10^4\)), где \(2^n\) — длина базы, \(k\) — число мстителей, а \(A\) и \(B\) — константы, описанные в условие.

Вторая строка содержит \(k\) целых чисел \(a_{1}, a_{2}, a_{3}, \ldots, a_{k}\) (\(1 \leq a_{i} \leq 2^n\)), где \(a_{i}\) — позиция очередного мстителя на базе.

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

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

Примечание

Рассмотрим первый пример.

Один из вариантов для Таноса — сжечь базу \(1-4\) целиком, затратив \(2 \cdot 2 \cdot 4 = 16\) единиц энергии.

В другом варианте он может разделить базу на две части \(1-2\) и \(3-4\).

Для базы \(1-2\) он может либо сжечь ее целиком, затратив \(2 \cdot 1 \cdot 2 = 4\) единиц энергии, либо разделить ее на \(2\) части \(1-1\) и \(2-2\).

Для базы \(1-1\) он может сжечь ее, затратив \(2 \cdot 1 \cdot 1 = 2\) единиц энергии. Для базы \(2-2\), он может сжечь ее, затратив \(1\) единицу энергии, так как на ней нет мстителей. Поэтому он может уничтожить базу \(1-2\) за \(2 + 1 = 3\) единицы энергии, что меньше, чем \(4\).

Аналогично, необходимо \(3\) единицы энергии, чтобы уничтожить \(3-4\). Итого, можно уничтожить всю базу за \(6\) единиц энергии.

A. Виноград

жадные алгоритмы Перебор реализация *800

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

Андрей, Дмитрий и Михаил обожают виноград, однако их вкусы достаточно различны. Чтобы все трое из них были счастливы нужно чтобы произошло следующее:

  • Андрей, Дмитрий и Михаил должны съесть \(x\), \(y\) и \(z\) виноградинок соответственно.
  • Андрей питает особую близость к зелёному винограду, а потому готов есть только зелёные виноградинки.
  • С другой стороны, Дмитрий не особый фанат чёрных виноградинок, и готов есть любые виноградинки, кроме чёрных. Другими словами, он готов есть зелёные и фиолетовые виноградинки.
  • Михаил же сохраняет здравый смысл и готов есть любые виноградинки — лишь бы количество было достаточным.

Зная страсть своих друзей к винограду, Аки решил организовать для них виноградную вечеринку. Он также приготовил к ней коробку с \(a\) зелёными, \(b\) фиолетовыми и \(c\) чёрными виноградинками.

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

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

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

Первая строка содержит три целых числа \(x\), \(y\) и \(z\) (\(1 \le x, y, z \le 10^5\)) — количество виноградинок, которые Андрей, Дмитрий и Михаил хотят съесть.

Вторая строка содержит три целых числа \(a\), \(b\), \(c\) (\(1 \le a, b, c \le 10^5\)) — количество зелёных, фиолетовых и чёрных виноградинок в коробке.

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

Если существует распределение виноградинок, которое сделает всех счастливыми, выведите "YES". Иначе выведите "NO".

Примечание

В первом примере есть только одно возможное распределение:

Андрей должен съесть \(1\) зелёную виноградинку, Дмитрий должен съесть \(3\) оставшиеся зелёных виноградинки и \(3\) фиолетовых виноградинки, а Михаил должен съесть \(2\) из \(3\) чёрных виноградинок.

Во втором примере нет подходящего распределения, так как Андрей не сможет съесть достаточное количество зелёных виноградинок. :(

C. Замыкающие нули

математика Перебор реализация теория чисел *1700

Аки любит числа. Особенно те, что заканчиваются на большое количество нулей. Например, число \(9200\) заканчивается на два нуля. Аки считает, что чем больше таких замыкающих нулей в записи числа, тем лучше.

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

Вам даны два целых числа \(n\) и \(b\) (записанные в десятичной системе счисления). Выясните, сколько замыкающих нулей в \(b\)-ичной (то есть в системе счисления с основанием \(b\)) записи числа \(n\,!\) (факториала \(n\)).

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

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

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

Выведите одно целое число — количество замыкающих нулей в \(b\)-ичной записи числа \(n!\).

Примечание

В первом примере \(6!_{(10)} = 720_{(10)} = 880_{(9)}\).

Во втором и третьем примерах \(5!_{(10)} = 120_{(10)} = 1111000_{(2)}\).

Последовательность \(d_1, d_2, \ldots, d_k\) называется представлением числа \(x\) в \(b\)-ичной системе счисления, если \(x = d_1 b^{k - 1} + d_2 b^{k - 2} + \ldots + d_k b^0\), где \(d_i\) являются целыми числами и \(0 \le d_i \le b - 1\). Например, число \(720\) из первого примера имеет представление \(880_{(9)}\) так как \(720 = 8 \cdot 9^2 + 8 \cdot 9 + 0 \cdot 1\).

Вы можете прочитать ещё о системах счисления здесь.

D1. Кофе и курсовая работа (легкая версия)

жадные алгоритмы Перебор *1700

Единственное отличие между легкой и сложной версиями — ограничения.

Поликарпу нужно написать курсовую работу. Курсовая работа состоит из \(m\) страниц.

У Поликарпа также есть \(n\) чашек кофе. Кофе в \(i\)-й чашке содержит \(a_i\) кофеина. Поликарп может выпить некоторые чашки кофе (каждую не более одного раза). Он может пить чашки в любом порядке. Поликарп пьет каждую чашку мгновенно и полностью (то есть он не может разделить какую-либо чашку на несколько дней).

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

Рассмотрим какой-нибудь день работы Поликарпа. Пусть Поликарп выпил \(k\) чашек кофе, а количества кофеина в чашках, которые Поликарп выпил в течение этого дня, равны \(a_{i_1}, a_{i_2}, \dots, a_{i_k}\). Тогда первая чашка, которую он выпьет, даст ему энергию на написание \(a_{i_1}\) страниц курсовой работы, вторая чашка даст ему энергию на написание \(max(0, a_{i_2} - 1)\) страниц, третья чашка даст ему энергию на написание \(max(0, a_{i_3} - 2)\) страниц, ..., и \(k\)-я чашка даст ему энергию на написание \(max(0, a_{i_k} - k + 1)\) страниц.

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

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

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

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 100\), \(1 \le m \le 10^4\)) — количество чашек кофе и количество страниц в курсовой работе.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\)), где \(a_i\) равно количеству кофеина, содержащегося в \(i\)-й чашке.

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

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

Примечание

В первом тестовом примере Поликарп может выпить четвертую чашку в течение первого дня (и написать \(1\) страницу), первую и вторую чашки в течение второго дня (и написать \(2 + (3 - 1) = 4\) страницы), пятую чашку в течение третьего дня (и написать \(2\) страницы) и третью чашку в течение четвертого дня (и написать \(1\) страницу), таким образом, ответ равен \(4\). Очевидно, что невозможно написать курсовую за три дня или быстрее.

Во втором тестовом примере Поликарп может выпить третью, четвертую и вторую чашки в течение первого дня (и написать \(4 + (2 - 1) + (3 - 2) = 6\) станиц) и шестую чашку в течение второго дня (и написать \(4\) страницы), таким образом, ответ равен \(2\). Очевидно, что Поликарп не может написать курсовую работу полностью за один день в этом тесте.

В третьем тестовом примере Поликарп может выпить все чашки кофе в течение первого дня и написать \(5 + (5 - 1) + (5 - 2) + (5 - 3) + (5 - 4) = 15\) страниц курсовой работы.

В четвертом тестовом примере Поликарп не может выпить все чашки кофе в течение первого дня и должен выпить одну из них в течение второго дня. Таким образом, В течение первого дня он напишет \(5 + (5 - 1) + (5 - 2) + (5 - 3) = 14\) страниц курсовой работы, а в течение второго дня он напишет \(5\) страниц курсовой работы. Этого достаточно, чтобы завершить ее.

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

E. Павел и треугольники

бпф дп жадные алгоритмы Перебор Тернарный поиск *1900

У Павла есть набор палок, с длинами равными степеням двойки.

У него есть \(a_0\) палок длины \(2^0 = 1\), \(a_1\) палок длины \(2^1 = 2\), ..., \(a_{n-1}\) палок длины \(2^{n-1}\).

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

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

Найдеите наибольшее количество треугольников, которое может составить Павел.

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

Первая строка содержит единственное целое число \(n\) — количество различных длин палок, которые есть у Павла (\(1 \leq n \leq 300\,000\)).

Вторая строка содержит \(n\) целых чисел, разделенных пробелами, \(a_0\), \(a_1\), ..., \(a_{n-1}\) (\(1 \leq a_i \leq 10^9\)), \(a_i\) обозначает количество палок длины \(2^i\).

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

Выведите одно целое число — максимальное количество невырожденных треугольников, которые может составить Павел.

Примечание

В первом примере Павел может, например, составить такой комплект треугольников (перечислены длины сторон треугольника):

\((2^0, 2^4, 2^4)\), \((2^1, 2^3, 2^3)\), \((2^1, 2^2, 2^2)\).

Во втором примере Павел не может составить ни одного треугольника.

В третьем примере Павел может, например, составить такой комплект треугольников (перечислены длины сторон треугольника):

\((2^0, 2^0, 2^0)\), \((2^1, 2^1, 2^1)\), \((2^2, 2^2, 2^2)\).

B. Майк и дети

Перебор реализация *1200

Майк решил преподавать программирование детям в младших классах. Он знает, что не так-то просто заинтересовать детей программированием в этом возрасте. Вот почему он решил дать каждому из них две конфеты.

У Майка есть \(n\) конфет, размеры которых \(a_1, a_2, \ldots, a_n\). Все его конфеты имеют разные размеры. То есть не существует такой пары \((i, j)\) (\(1 \leq i, j \leq n\)), что \(i \ne j\) и \(a_i = a_j\).

Поскольку Майк преподает уже много лет, он знает, что если он даст две конфеты с размерами \(a_i\) и \(a_j\) одному ребенку, а \(a_k\) и \(a_p\) другому, где \((a_i + a_j) \neq (a_k + a_p)\), то ребенок, у которого меньшая сумма размеров конфет, будет расстроен. То есть, если есть двое детей, у которых разные суммы размеров конфет, то один из них будет расстроен. Очевидно, что Майк не хочет, чтобы кто-то расстраивался.

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

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

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

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 1\,000\)) — количество конфет у Майка.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^5\)) — размеры конфет. Гарантируется, что все размеры разные.

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

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

Примечание

В первом примере Майк может дать \(9+2=11\) первому ребенку, \(8+3=11\) второму и \(7+4=11\) третьему. Поэтому Майк может пригласить три ребенка. Обратите внимание, что это не единственное решение.

Во втором примере Майк может дать \(3+9=12\) первому ребенку и \(1+11\) второму. Поэтому Майк может пригласить два ребенка. Обратите внимание, что это не единственное решение.

A1. Игрушечный поезд (упрощённая версия)

жадные алгоритмы Перебор *1700

Это упрощённая версия задачи Toy Train. Эти две версии отличаются только в ограничениях. Взломы для этой версии отключены.

Боб подарил Алисе набор Toy Train™ (игрушечный поезд). Он состоит из одного поезда и связной железной дороги из \(n\) станций, пронумерованных от \(1\) до \(n\). Поезд занимает одну станцию в один момент времени и перемещается по железнодорожной сети станций по кругу. Более точно, поезд посетит станцию \(i+1\) сразу после станции \(i\), если \(1 \leq i < n\), или станцию \(1\), если \(i = n\). Поезду требуется \(1\) секунда, чтобы по описанному процессу переместиться на следующую станцию.

Боб оставил Алисе интересную задачку перед уходом: доставить \(m\) конфет, которые исходно находятся на некоторых станциях, на их независимые места назначения с помощью поезда. Конфеты пронумерованы от \(1\) до \(m\). Конфета \(i\) (\(1 \leq i \leq m\)), сейчас находящаяся на станции \(a_i\), должна быть доставлена на станцию \(b_i\) (\(a_i \neq b_i\)).

Синие числа на конфетах соответствуют значениям \(b_i\). Картинка соответствует примеру \(1\).

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

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

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

Первая строка содержит два целых числа \(n\) и \(m\), разделенных пробелами (\(2 \leq n \leq 100\); \(1 \leq m \leq 200\)) — количество станций и количество конфет, соответственно.

В \(i\)-й из следующих \(m\) строк содержится два целых числа \(a_i\) и \(b_i\), разделенных пробелами (\(1 \leq a_i, b_i \leq n\); \(a_i \neq b_i\)) — станция, на которой исходно находится конфета \(i\) и ее местоположение, соответственно.

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

В первой и единственной строке вывода выведите \(n\) целых чисел, разделенных пробелами, \(i\)-е из них это минимальное время, в секундах, которое нужно поезду, чтобы доставить все конфеты, начав со станции \(i\).

Примечание

Рассмотрим второй пример.

Если поезд начнет со станции \(1\), будет следующая оптимальная стратегия:

  1. Загрузить первую конфету в поезд.
  2. Добраться до станции \(2\). Это займет \(1\) секунду.
  3. Доставить первую конфету.
  4. Добраться до станции \(1\). Это займет \(1\) секунду.
  5. Загрузить вторую конфету в поезд.
  6. Добраться до станции \(2\). Это займет \(1\) секунду.
  7. Доставить вторую конфету.
  8. Добраться до станции \(1\). Это займет \(1\) секунду.
  9. Загрузить третью конфету в поезд.
  10. Добраться до станции \(2\). Это займет \(1\) секунду.
  11. Доставить третью конфету.

Таким образом, поезду требуется \(5\) секунд чтобы завершить задания.

Если поезд стартует на станции \(2\), ему нужно будет добраться до станции \(1\) перед загрузкой первой конфеты, на что потребуется еще одна секунда. Таким образом, ответ в этом случае будет \(5+1 = 6\) секунд.

A2. Игрушечный поезд

жадные алгоритмы Перебор *1800

Боб подарил Алисе набор Toy Train™ (игрушечный поезд). Он состоит из одного поезда и связной железной дороги из \(n\) станций, пронумерованных от \(1\) до \(n\). Поезд занимает одну станцию в один момент времени и перемещается по железнодорожной сети станций по кругу. Более точно, поезд посетит станцию \(i+1\) сразу после станции \(i\), если \(1 \leq i < n\), или станцию \(1\), если \(i = n\). Поезду требуется \(1\) секунда, чтобы по описанному процессу переместиться на следующую станцию.

Боб оставил Алисе интересную задачку перед уходом: доставить \(m\) конфет, которые исходно находятся на некоторых станциях, на их независимые места назначения с помощью поезда. Конфеты пронумерованы от \(1\) до \(m\). Конфета \(i\) (\(1 \leq i \leq m\)), сейчас находящаяся на станции \(a_i\), должна быть доставлена на станцию \(b_i\) (\(a_i \neq b_i\)).

Синие числа на конфетах соответствуют значениям \(b_i\). Картинка соответствует примеру \(1\).

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

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

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

Первая строка ввода содержит два целых числа \(n\) и \(m\), разделенных пробелами (\(2 \leq n \leq 5\,000\); \(1 \leq m \leq 20\,000\)) — количество станций и количество конфет, соответственно.

В \(i\)-й из следующих \(m\) строк содержится два целых числа \(a_i\) и \(b_i\), разделенных пробелами (\(1 \leq a_i, b_i \leq n\); \(a_i \neq b_i\)) — станция, на которой исходно находится конфета \(i\) и ее местоположение, соответственно.

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

В первой и единственной строке вывода выведите \(n\) целых чисел, разделенных пробелами, \(i\)-е из них это минимальное время, в секундах, которое нужно поезду, чтобы доставить все конфеты, начав со станции \(i\).

Примечание

Рассмотрим второй тестовый пример.

Если поезд начнет со станции \(1\), будет следующая оптимальная стратегия:

  1. Загрузить первую конфету в поезд.
  2. Добраться до станции \(2\). Это займет \(1\) секунду.
  3. Доставить первую конфету.
  4. Добраться до станции \(1\). Это займет \(1\) секунду.
  5. Загрузить вторую конфету в поезд.
  6. Добраться до станции \(2\). Это займет \(1\) секунду.
  7. Доставить вторую конфету.
  8. Добраться до станции \(1\). Это займет \(1\) секунду.
  9. Загрузить третью конфету в поезд.
  10. Добраться до станции \(2\). Это займет \(1\) секунду.
  11. Доставить третью конфету.

Таким образом, поезду требуется \(5\) секунд чтобы завершить задания.

Если поезд стартует на станции \(2\), ему нужно будет добраться до станции \(1\) перед загрузкой первой конфеты, на что потребуется еще одна секунда. Таким образом, ответ в этом случае будет \(5+1 = 6\) секунд.

B. Petr#

Перебор Строки Структуры данных хэши *2000

Когда Петя еще учился в школе, он очень увлекался грамматикой языка Petr#. На одном из уроков Петю заинтересовал следующий вопрос: сколько различных подстрок, начинающихся строкой sbegin этого языка и заканчивающихся строкой send (возможно, sbegin = send), существует у заданной строки t. Подстроки называются различными, если различно их содержание, при этом позиции вхождения не имеют значения. В школе Петя не дружил с математикой, поэтому он не смог посчитать это количество. Помогите ему!

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

Входной файл состоит из трех строк. В первой строке задана строка t. Во второй и третьей строках заданы строки sbegin и send, соответственно. Все три строки непустые, состоят из строчных латинских букв, и длина каждой из них не превышает 2000 символов.

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

Выведите единственное число — количество различных подстрок строки t, которые начинаются со строки sbegin и заканчиваются строкой send.

Примечание

В третьем тесте есть четыре различные подходящие подстроки: ab, abab, ababab, abababab.

В четвертом тесте подстроки, соответствующие sbegin и send, пересекаются.

C. Счастье на двоих

математика Перебор теория чисел *2200

На уроке математики учительница попросила каждого ученика предложить свое множество счастливых чисел. Будучи без ума от теории чисел, Петя сразу же заявил, что простые числа — это его счастливые числа. Вася оказался оригинальнее, он сказал, что число t для него счастливое, если и только если оно может быть представлено в виде:

t = a2 + b2, 
где a, b — произвольные положительные целые числа.

Теперь мальчики решили выяснить сколько дней на отрезке [l, r] (l ≤ r) подходят для парного программирования. Они решили, что день i (l ≤ i ≤ r) подходит для парного программирования, если и только если i является счастливым числом как для Пети, так и для Васи. Помогите мальчикам найти количество таких дней на отрезке [l, r].

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

В единственной строке входных данных записана пара целых чисел l, r (1 ≤ l, r ≤ 3·108).

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

Выведите единственное число — количество дней в отрезке [l, r], которые подходят для парного программирования.

C. Соединить

Перебор поиск в глубину и подобное снм *1400

Алиса живет на плоской земле, которая может быть представлена как квадратная решетка \(n \times n\) со строками и столбцами, пронумерованными от \(1\) до \(n\). Обозначим клетку на пересечении строки \(r\) и столбца \(c\) упорядоченной парой \((r, c)\). Каждая клетка решетки является либо землей, либо водой.

Пример планеты с \(n = 5\). Она также является первым примером.

Алиса живет на клетке, которая является землей, \((r_1, c_1)\). Она хочет добраться до другой клетки, которая является землей, \((r_2, c_2)\). В любой момент она может переместиться в одну из соседних с ней ячеек — в одном из четырех направлений (т.е. вверх, вниз, влево или вправо).

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

Чтобы помочь Алисе, вы хотите создать не более одного туннеля между какими-то двумя земляными клетками. Туннель позволяет Алисе перемещаться между двумя его концами. Создание туннеля требует некоторых затрат: стоимость туннеля между клетками \((r_s, c_s)\) и \((r_t, c_t)\) равна \((r_s-r_t)^2 + (c_s-c_t)^2\).

Таким образом, ваша задача — найти минимальную стоимость постройки не более одного туннеля так, чтобы Алиса смогла добраться от клетки \((r_1, c_1)\) до клетки \((r_2, c_2)\). Если постройка туннеля не обязательна, стоимость полагается равной \(0\).

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 50\)) — длину стороны квадратной решетки.

Вторая строка содержит два целых числа, разделенных пробелами, \(r_1\) и \(c_1\) (\(1 \leq r_1, c_1 \leq n\)), обозначающих клетку, где находится Алиса.

Третья строка строка содержит два целых числа, разделенных пробелами, \(r_2\) и \(c_2\) (\(1 \leq r_2, c_2 \leq n\)), обозначающих клетку, куда намерена попасть Алиса.

Каждая из следующих \(n\) строк содержит строку из \(n\) символов. \(j\)-й символ \(i\)-й такой строки (\(1 \leq i, j \leq n\)) это 0, если клетка \((i, j)\) — земля, и 1, если клетка \((i, j)\) — вода.

Гарантируется, что и \((r_1, c_1)\), и \((r_2, c_2)\) это земля.

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

Выведите одно целое число — минимальную возможную стоимость постройки не более одного туннеля так, чтобы Алиса смогла добраться от клетки \((r_1, c_1)\) до клетки \((r_2, c_2)\).

Примечание

В первом примере должен быть построен туннель между клетками \((1, 4)\) и \((4, 5)\). Стоимость такого туннеля равна \((1-4)^2 + (4-5)^2 = 10\), что является оптимальным. Таким образом, Алиса сможет дойти от \((1, 1)\) до \((1, 4)\), использовать туннель от \((1, 4)\) до \((4, 5)\), а затем дойти от \((4, 5)\) до \((5, 5)\).

Во втором примере должен быть построен туннель между клетками \((1, 3)\) и \((3, 1)\). Стоимость такой постройки равна \((1-3)^2 + (3-1)^2 = 8\).

C. Покраска забора

Перебор *1700

Ваш дом огорожен длинным забором, состоящим из \(n\) секций. К сожалению, этот забор не покрашен, поэтому вы решили нанять \(q\) маляров, чтобы они покрасили забор. \(i\)-й маляр покрасит все секции с такими номерами \(x\), что \(l_i \le x \le r_i\).

Все бы было хорошо, но у вас достаточно денег, чтобы нанять только \(q - 2\) маляров. Очевидно, только те маляры, которых вы наняли, будут выполнять свою работу.

Вы хотите максимизировать количество покрашенных секций забора, для этого вам нужно выбрать \(q - 2\) маляров оптимальным образом. Секция будет считаться покрашенной, если ее покрасит хотя бы один маляр.

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

В первой строке записаны два целых числа \(n\) и \(q\) (\(3 \le n, q \le 5000\)) — количество секций и маляров, соответственно.

Затем следуют \(q\) строк, каждая из которых описывает одного из маляров: в \(i\)-й строке заданы два целых \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)).

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

Выведите одно целое число — максимально возможное количество окрашенных секций, если вы можете нанять только \(q - 2\) маляров.

B. Цирк

жадные алгоритмы математика Перебор Строки *1800

Это просто цирк какой-то!

Поликарп — руководитель труппы небольшого цирка. Всего в труппе \(n\) — четное число — артистов. Про \(i\)-го артиста известно, может ли он на манеже выступить как клоун (если да, то \(c_i = 1\), иначе \(c_i = 0\)), и может ли он выступить на манеже как акробат (если да, то \(a_i = 1\), иначе \(a_i = 0\)).

Разделите артистов на два выступления так, чтобы:

  • каждый артист участвовал ровно в одном выступлении,
  • количество артистов в каждом выступлении одинаково (следовательно, равно \(\frac{n}{2}\)),
  • количество артистов в первом выступлении, которые могут выступить клоунами, равно количеству артистов во во втором выступлении, которые могут выступить акробатами.
Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 5\,000\), \(n\) четно) — число артистов в труппе.

Вторая строка содержит \(n\) цифр \(c_1 c_2 \ldots c_n\), \(i\)-я из которых равна \(1\), если \(i\)-й артист может выступить как клоун, и \(0\) иначе.

Третья строка содержит \(n\) цифр \(a_1 a_2 \ldots a_n\), \(i\)-я из которых равна \(1\), если \(i\)-й артист может выступить как акробат, и \(0\) иначе.

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

Выведите \(\frac{n}{2}\) различных чисел — номера артистов, которые должны войти в первое выступление, в любом порядке.

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

Если решения не существует, выведите одно целое число \(-1\).

Примечание

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

Во втором примере не существует ни одного подходящего разделения.

В третьем примере одно из подходящих разделений следующее: в первом выступлении выступают артисты \(3\) и \(4\). Тогда в первом выступлении количество артистов, которые могут быть клоунами, равно \(2\). Количество артистов во втором выступлении, которые могут быть акробатами, также равно \(2\).

B. PFAST Inc.

битмаски графы Перебор *1500

Когда мальчик Петя вырос и поступил в университет, он начал участвовать в соревнованиях АСМ. Позже он осознал, что ему не нравится формат этих соревнований из-за того, что в команде может быть только три человека (что не позволяло брать ему с собой на соревнования всех друзей, а также хорошо распределять задачи между участниками команды), поэтому он решил сделать свой формат соревнований PFAST Inc. — Petr and Friends Are Solving Tasks Corporation. В соответствии с форматом PFAST Inc. в команде может быть любое количество человек.

Чтобы сделать этот формат соревнований популярным, он организовал свой турнир. Для создания команды, которую он будет готовить для соревнований по системе PFAST Inc., он выбрал несколько добровольцев (до 16 человек) и решил составить из них команду. Петя прекрасно понимает, что если в команде будет два человека, которые между собой не ладят, то команда будет выступать плохо. Составьте максимальную по числу человек команду, в которой все между собой ладят.

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

В первой строке заданы два целых числа n (1 ≤ n ≤ 16) — количество добровольцев и m () — количество неладящих пар добровольцев. Следующие n строк содержат имена добровольцев (каждое имя — непустая строка из прописных или строчных латинских букв длиной не более 10 символов), следующие m строк содержат два имени — имена неладящих добровольцев. Имена в паре разделены ровно одним пробелом. Каждая пара неладящих встречается ровно один раз. Регистр букв имеет значение. Все заданные n имен различны.

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

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

C. Плейлист

Перебор сортировки Структуры данных *1600

В вашем плейлисте есть \(n\) песен. \(i\)-я песня характеризуется двумя числами \(t_i\) и \(b_i\) — длиной и красотой соответственно. Удовольствие от прослушивания множества песен равно суммарной длине этих песен умноженной на минимальную красоту среди них. Например, удовольствие от прослушивания \(3\) песен с длинами \([5, 7, 4]\) и красотами \([11, 14, 6]\) равна \((5 + 7 + 4) \cdot 6 = 96\).

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

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

Первая строка содержит два числа \(n\) и \(k\) (\(1 \le k \le n \le 3 \cdot 10^5\)) – количество песен в плейлисте и максимальное количество песен, которое вы можете выбрать.

Каждая из следующих \(n\) строк содержит по два числа \(t_i\) и \(b_i\) (\(1 \le t_i, b_i \le 10^6\)) — длина и красота \(i\)-й песни.

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

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

Примечание

В первом тестовом примере вам нужно выбрать песни \({1, 3, 4}\), и удовольствие будет равно \((4 + 3 + 6) \cdot 6 = 78\).

Во втором тестовом примере нужно просто выбрать песню под номером \(3\). Удоволоствие от неё будет равно \(100 \cdot 100 = 10000\).

A. The Beatles

математика Перебор *1700

В Байтландии появилась Золотая Окружность Жуколюбителей (сокращённо ЗОЖ) — маршрут, проходящий по \(n \cdot k\) городам, и, понятно, представляющий из себя окружность. Города пронумерованы по кругу от \(1\) до \(n \cdot k\), расстояние между соседними городами на окружности равно \(1\) км.

Сергей не любит жуков, а любит бургеры. Хорошо, что на окружности есть \(n\) ресторанов фастфуда, которые расположены в \(1\)-м, \((k + 1)\)-м, \((2k + 1)\)-м, и так далее, \(((n-1)k + 1)\)-м городах, то есть через каждые \(k\) км.

Сергей начал своё путешествие из какого-то города \(s\) и ехал по кругу, останавливаясь в городах через равные расстояния \(l\) км (\(l > 0\)), пока не остановился вновь в городе \(s\). Сергей забыл числа \(s\) и \(l\), но он помнит, что от города \(s\) расстояние до ближайшего фастфуда было равно \(a\) км, а из города, в котором он остановился, проехав первые \(l\) км из \(s\), расстояние до ближайшего фастфуда было равно \(b\) км. Сергей ехал всегда в одну и ту же сторону по кругу, но при измерении расстояния до фастфуда учитывал оба направления.

Теперь его интересуют два числа. Первое \(x\) — минимальное число остановок (не считая первой), которое мог сделать Сергей до того, как вновь оказался в \(s\). Второе число \(y\) — максимальное число остановок (не считая первой), которое мог сделать Сергей до того, как вновь оказался в \(s\).

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

В первой строке находятся два целых числа \(n\) и \(k\) (\(1 \le n, k \le 100\,000\)) — число ресторанов фастфуда на ЗОЖ и расстояние между соседними городами с ресторанами фастфуда, соответственно.

Во второй строке находятся два целых числа \(a\) и \(b\) (\(0 \le a, b \le \frac{k}{2}\)) — расстояния до ближайших фастфудов в начальном городе пути и первом городе, в котором остановился Сергей, соответственно.

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

Выведите два целых числа \(x\) и \(y\).

Примечание

В первом примере бургерные стоят в городах \(1\) и \(4\), начальный город \(s\) мог располагаться в городах \(2\), \(3\), \(5\), \(6\). Следующий город на пути мог также располагаться в городах \(2, 3, 5, 6\). Переберём все попарные комбинации этих городов. Тогда, если и \(s\), и город первой остановки Сергея — это город \(2\) (например, \(l = 6\)), Сергей уже в первой остановке оказался в \(s\), значит, \(x = 1\). В остальных же парах, потребуется \(1, 2, 3\) или \(6\) ходов для того, чтобы вновь попасть в \(s\), значит, \(y = 6\).

Во втором примере Сергей оба раза был в городах с ресторанами фастфуда, значит \(l\) равно \(2\), \(4\) или \(6\). Отсюда \(x = 1\), \(y = 3\).

В третьем примере бургерная всего одна, значит, существует два различных варианта расположения \(s\) и первого города в маршруте: \((6, 8)\) и \((6, 4)\), тогда для первого варианта \(l = 2\), для второго \(l = 8\). В обоих случаях для попадания в \(s\) Сергею потребуется сделать по \(x=y=5\) остановок.

B. Nirvana

математика Перебор теория чисел *1200

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

Помогите Курту найти максимальное возможное произведение цифр среди всех целых чисел от \(1\) до \(n\).

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

В единственной строке входных данных записано целое число \(n\) (\(1 \le n \le 2\cdot10^9\)).

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

Выведите максимальное произведение цифр среди всех целых чисел от \(1\) до \(n\).

Примечание

В первом примере максимальное произведение достигается для числа \(389\) (произведение цифр равно \(3\cdot8\cdot9=216\)).

Во втором примере максимальное произведение достигается для числа \(7\) (произведение цифр равно \(7\)).

Во третьем примере максимальное произведение достигается для числа \(999999999\) (произведение цифр равно \(9^9=387420489\)).

B. Kanban Numbers

*особая задача Перебор

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

Входные данные содержат одно целое число \(a\) (\(1 \le a \le 99\)).

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

Выведите "YES" или "NO".

C. Загадочная схема

битмаски Перебор

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

Входные данные содержат одно целое число \(a\) (\(0 \le a \le 15\)).

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

Выведите целое число.

B. Фигуры Хладни

Перебор Строки *1900

У Инаки есть диск, длина окружности которого равна \(n\) единицам. Окружность разделена на равные части \(n\) точками, пронумерованными от \(1\) до \(n\) так, что точки \(i\) и \(i + 1\) (\(1 \leq i < n\)) соседние, кроме того, соседними являются точки \(n\) и \(1\).

На диске нарисованы \(m\) хорд, соединяющих некоторые из данных \(n\) точек.

Инака хочет понять, имеет ли ее диск вращательную симметрию, т. е. существует ли целое число \(k\) (\(1 \leq k < n\)), такое, что если повернуть все хорды по часовой стрелке на \(k\) единиц, то диск будет выглядеть так же.

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 100\,000\), \(1 \leq m \leq 200\,000\)) — количество точек и число хорд, соответственно.

В \(i\)-й из следующих \(m\) строк находятся два целых числа \(a_i\) и \(b_i\) (\(1 \leq a_i, b_i \leq n\), \(a_i \neq b_i\)), означающих, что есть хорда, соединяющая точки \(a_i\) и \(b_i\).

Гарантируется, что никакие две хорды не совпадают.

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

Выведите «Yes» если диск имеет вращательную симметрию, и «No» в обратном случае (без кавычек).

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

Примечание

Первые два примера показаны на рисунке ниже. Оба диска совпадают с собой после поворота на \(120\) градусов.

B. Born This Way

Бинарный поиск Перебор *1600

Аркадий купил авиабилет из города A в город C. К сожалению, прямых рейсов нет, но есть много рейсов из A в город B, а также из B в C.

Всего есть \(n\) рейсов из A в B, они вылетают в моменты времени \(a_1\), \(a_2\), \(a_3\), ..., \(a_n\) и прилетают в B \(t_a\) моментов времени спустя.

Всего есть \(m\) рейсов из B в C, они вылетают в моменты времени \(b_1\), \(b_2\), \(b_3\), ..., \(b_m\) и прилетают в C \(t_b\) моментов времени спустя.

Временем пересадки можно пренебречь, поэтому можно использовать \(i\)-й рейс из A в B и \(j\)-й рейс из B в C, если и только если \(b_j \ge a_i + t_a\).

Вы можете отменить не более \(k\) рейсов. Если вы отменяете рейс, Аркадий не сможет его использовать.

Аркадий хочет попасть в C как можно раньше, а вы хотите, чтобы Аркадий оказался в C как можно позже. Найдите самый ранний момент времени, когда Аркадий сможет попасть в C, если вы оптимально отмените \(k\) рейсов. Если можно отменить \(k\) или меньше рейсов так, что попасть в C станет невозможно, выведите \(-1\).

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

Первая строка содержит пять целых чисел \(n\), \(m\), \(t_a\), \(t_b\) и \(k\) (\(1 \le n, m \le 2 \cdot 10^5\), \(1 \le k \le n + m\), \(1 \le t_a, t_b \le 10^9\)) — количество рейсов из A и B, количество рейсов из B в C, время полета из A в B, время полета из B в C и максимальное число рейсов, которое вы можете отменить, соответственно.

Вторая строка содержит \(n\) различных целых чисел в возрастающем порядке: \(a_1\), \(a_2\), \(a_3\), ..., \(a_n\) (\(1 \le a_1 < a_2 < \ldots < a_n \le 10^9\)) — времена, в которые рейсы вылетают из A в B.

Третья строка содержит \(m\) различных целых чисел в возрастающем порядке: \(b_1\), \(b_2\), \(b_3\), ..., \(b_m\) (\(1 \le b_1 < b_2 < \ldots < b_m \le 10^9\)) — времена, в которые рейсы вылетают из B в C.

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

Если можно отменить \(k\) или меньше рейсов так, что попасть в C невозможно, выведите \(-1\).

Иначе выведите минимальное время, в которое Аркадий сможет оказаться в C, если вы оптимальным образом отмените \(k\) рейсов так, чтобы максимизировать это время.

Примечание

Рассмотрим первый пример. Рейсы из A в B отправляются в моменты времени \(1\), \(3\), \(5\) и \(7\) и прибывают в B в моменты времени \(2\), \(4\), \(6\), \(8\), соответственно. Рейсы из B в C вылетают в моменты времени \(1\), \(2\), \(3\), \(9\) и \(10\) и прилетают в C в моменты времени \(2\), \(3\), \(4\), \(10\), \(11\), соответственно. Вы можете отменить не более двух рейсов. Оптимальный выбор — отменить первый рейс из A в B и четвертый рейс из B в C. Тогда Аркадий сможет использовать первый рейс из A в B, прибыть в B в момент времени \(4\), затем использовать последний рейс из B в C и прибыть в C в момент времени \(11\).

Во втором примере можно просто отменить все рейсы из A в B.

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

D. Отказ от дорог

графы дп жадные алгоритмы Перебор *3000

Codefortia это маленькое островное государство, расположенное где-то в западной части Тихого океана. Оно состоит из \(n\) поселений, соединенных \(m\) двусторонними дорогами из гравия. Любопытно, что верования жителей требуют, чтобы время, необходимое для прохода по каждой дороге было равно \(a\) или \(b\) секунд. Гарантируется, что из любого поселения можно добраться до любого другого, пользуясь только дорогами из гравия.

Codefortia не так давно столкнулась с финансовым кризисом. Таким образом, король решил отказаться от некоторых дорог так, чтобы:

  • было возможно добраться из любого поселения до любого другого, пользуясь только оставленными дорогами,
  • сумма времен, которые требуются для проезда по каждой дороге, должна быть минимально возможной (другими словами, оставленные дороги должны образовывать минимальное остовное дерево, используя время, которое требуется для проезда по дороге как ее вес),
  • среди всех планов, которые минимизируют описанную выше сумму, время, которое нужно, для путешествия от королевской резиденции (в поселении \(1\)) до дома парламента (в поселении \(p\)) используя только оставленные дороги, должно быть минимально возможно.

К сожалению, король забыл, где находится дом парламента Для каждого поселения \(p = 1, 2, \dots, n\), можете ли вы сказать, за какое минимальное время король может проехать от королевской резиденции до дома парламента (расположенном в поселении \(p\)), после отказа от некоторых дорог, по правилам описанным выше?

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

В первой строке записано четырые целых числа \(n\), \(m\), \(a\) and \(b\) (\(2 \leq n \leq 70\), \(n - 1 \leq m \leq 200\), \(1 \leq a < b \leq 10^7\)) — количество поселений и дорог из гравия в Codefortia, и два возможных времен проезда.

В следующих строках записано по три целых числа \(u, v, c\) (\(1 \leq u, v \leq n\), \(u \neq v\), \(c \in \{a, b\}\)), описывающих дорогу из гравия между поселениями \(u\) и \(v\), для проезда по которой требуется \(c\) минут.

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

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

Выведите одну строку, содержащую \(n\) целых чисел. \(p\)-е из них должно содержать минимальное время, которое нужно для проезда из \(1\) в \(p\), после отказа от выбранных дорог. Обратите внимание, что для разных \(p\) вам может быть нужно отказаться от разных наборов дорог.

Примечание

Минимальное возможное время проездов по дорогам в первом примере равно \(85\) — следует отказаться ровно от одной дороги, время проезда по которой равно \(25\). Обратите внимание, что после отказа от одной из этих дорог, становится невозможно проехать от поселения \(1\) до поселения \(3\) за время \(50\).

A. Максим и биология

Перебор Строки *1000

Сегодня в научном лицее Королевства Кремляндия был урок биологии. Темой урока были геномы. Назовем геномом строку «ACTG».

Максиму было очень скучно сидеть на уроке, поэтому учитель придумал для него задание: по заданной строке \(s\), состоящей из заглавных латинских букв и длины как минимум \(4\), необходимо найти минимальное количество операций которое нужно применить, чтобы в ней появился геном как подстрока. За одну операцию можно заменить любую букву в строке \(s\) на следующую или предыдущую в алфавите. Например, для буквы «D» предыдущей будет «C», а следующей — «E». В этой задаче считаем, что для буквы «A» предыдущей будет буква «Z», а следующей — буква «B», а для буквы «Z» предыдущей будет буква «Y», а следующей — буква «A».

Помогите Максиму решить задачу, которую дал ему учитель.

Напомним, что строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

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

Первая строка содержит одно целое число \(n\) (\(4 \leq n \leq 50\)) — длина строки \(s\).

Вторая строка содержит строку \(s\), состоящую ровно из \(n\) заглавных букв латинского алфавита.

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

Выведите минимальное количество операций, которые нужно применить к строке \(s\), чтобы в ней появился геном как подстрока.

Примечание

В первом примере следует заменить букву «Z» на «A» за одну операцию, букву «H» — на букву «G» за одну операцию. Получится строка «ACTG», в которой присутствует геном как подстрока.

Во втором примере заменим букву «A» на «C» за две операции, букву «D» — на букву «A» за три операции. Получится строка «ZACTG», в которой есть геном.

B. Дима и плохой XOR

битмаски дп Конструктив Перебор *1600

У лицеиста Димы из Кремляндии есть таблица \(a\) размера \(n \times m\), заполненная целыми неотрицательными числами.

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

Формально, он хочет выбрать последовательность чисел \(c_1, c_2, \ldots, c_n\) (\(1 \leq c_j \leq m\)) так, чтобы выполнялось неравенство \(a_{1, c_1} \oplus a_{2, c_2} \oplus \ldots \oplus a_{n, c_n} > 0\), где \(a_{i, j}\) — элемент таблицы в \(i\)-й строке и \(j\)-м столбце.

Здесь \(x \oplus y\) обозначает операцию побитового исключающего ИЛИ чисел \(x\) и \(y\).

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

В первой строке записаны два целых числа \(n\) и \(m\), разделенных пробелом (\(1 \leq n, m \leq 500\)) — количество строк и столбцов в матрице \(a\).

В следующих \(n\) строках записано по \(m\) целых чисел, разделенных пробелом: \(j\)-е число в \(i\)-й из этих строк обозначает \(j\)-й элемент \(i\)-й строки матрицы \(a\), то есть \(a_{i, j}\) (\(0 \leq a_{i, j} \leq 1023\)).

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

Если не существует способа выбрать в каждой строке таблицы одно число, чтобы их побитовое исключающее ИЛИ было строго больше нуля, выведите «NIE».

В противном случае выведите «TAK», и в следующей строке выведите \(n\) целых чисел \(c_1, c_2, \ldots c_n\), разделенных пробелами, (\(1 \leq c_j \leq m\)), чтобы выполнялось неравенство \(a_{1, c_1} \oplus a_{2, c_2} \oplus \ldots \oplus a_{n, c_n} > 0\).

Если существует более одного возможного ответа, вы можете вывести любой.

Примечание

В первом примере все числа в матрице равны \(0\), поэтому невозможно выбрать в каждой строке таблицы по одному числу так, чтобы их побитовое исключающее ИЛИ было строго больше нуля.

Во втором примере выбранные числа \(7\) (первое число в первой строке) и \(10\) (третье число во второй строке), \(7 \oplus 10 = 13\), \(13\) больше чем \(0\), поэтому ответ найден.

C. Неко занимается математикой

математика Перебор теория чисел *1800

Неко любит делители. На последнем уроке по теории чисел он получил интересное упражнение от своего учителя.

У Неко есть два целых числа \(a\) и \(b\). Он должен найти такое целое неотрицательное число \(k\), что наименьшее общее кратное чисел \(a+k\) и \(b+k\) является минимально возможным. В случае если есть несколько подходящих чисел \(k\), он должен выбрать наименьшее из них.

Учитывая его математические способности, Неко без особого труда получил «Неправильный ответ» по этой задаче. Не могли бы вы помочь ему решить её?

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

Единственная строка содержит два целых числа \(a\) и \(b\) (\(1 \le a, b \le 10^9\)).

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

Выведите наименьшее неотрицательное число \(k\) (\(k \ge 0\)), такое что наименьшее общее кратное чисел \(a+k\) и \(b+k\) является минимально возможным.

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

Примечание

В первом пример следует выбрать \(k = 2\), тогда наименьшее общее кратное \(6 + 2\) и \(10 + 2\) будет равно \(24\), что является наименьшим возможным наименьшим общим кратным.

A. Сервал и автобус

математика Перебор *1000

Идет сильный дождь. Но Сервалу сегодня исполнилось 3 года, и это его первый день, когда он должен пойти в детский сад! К сожалению, он живет далеко от детского сада, а его отец слишком занят, чтобы отвезти его туда. Единственный выбор для этого бедного маленького мальчика в этот дождливый день — ждать автобуса. При таких обстоятельствах Сервал воспользуется первым попавшимся автобусом, куда бы он ни поехал. Если одновременно придет несколько автобусов, он выберет любой из них случайно.

Сервал придет на автобусную остановку во время \(t\), через эту автобусную остановку проходят \(n\) автобусных маршрутов. Первый автобус \(i\)-го маршрута приходит в момент времени \(s_i\) минут, а каждый следующий автобус этого маршрута приходит на \(d_i\) минут позже предыдущего.

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

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

Первая строка содержит два целых числа \(n\) и \(t\) (\(1\leq n\leq 100\), \(1\leq t\leq 10^5\)) — количество автобусных маршрутов и время прибытия Сервала.

Каждая из следующих \(n\) строк содержит два целых числа \(s_i\) и \(d_i\) (\(1\leq s_i,d_i\leq 10^5\)) — время прибытия первого автобуса этого маршрута и интервал между двумя автобусами этого маршрута.

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

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

Примечание

В первом примере первый автобус первого маршрута приходит во время \(6\), а автобус второго маршрута приходит во время \(9\), поэтому ответом является первый маршрут.

Во втором примере третий автобус приходит во время \(5\), поэтому это и есть ответ.

В третьем примере автобусы первого маршрута приходят во времена \(2\), \(4\), \(6\), \(8\) и так далее, автобусы второго маршрута приходят во времена \(2\), \(5\), \(8\) и так далее, автобусы третьего маршрута приходят во времена \(2\), \(6\), \(10\) и так далее, поэтому \(1\) и \(2\) являются правильными ответами, а \(3\) — нет.

E. Сервал и Змейка

Бинарный поиск интерактив Перебор *2200

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

Сейчас Сервал ученик старшей школы Джапари. На пути в школу он должен пройти через пруд, в котором обитает опасная змея! Пруд можно описать таблицей \(n \times n\). У змеи есть голова и хвост, которые находятся в разных клетках, а ее тело — это последовательность соседних клеток, соединяющих голову и хвост, без самопересечений. Если Сервал зайдет в клетку с головой или в клетку с хвостом, змея укусит его и он умрет.

К счастью, у него есть специальное оборудование, которое может отвечать на следующий вопрос: вы можете выбрать прямоугольник, и оно скажет вам, сколько раз вы пересечете границу прямоугольника, если вы пройдете по змее от ее головы до хвоста. На иллюстрациях ниже изображена возможная змея и возможный запрос к ней, ответ на который равен \(4\).

Сегодня Сервал проснулся слишком поздно и у него хватит времени только на то, чтобы задать \(2019\) запросов. Как его лучший друг, может быть, вы ему поможете определить положения головы и хвоста?

Две клетки считаются соседними тогда и только тогда, когда у них есть общее ребро таблицы. Змея может иметь тело длины \(0\), что означает, что у нее есть только соседние голова и тело.

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

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

В первой строке входного файла записано одно целое число \(n\) (\(2\leq n \leq 1000\)) — размер таблицы.

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

Когда ваша программа готова вывести ответ, выведите ! x1 y1 x2 y2, где \((x_1, y_1)\) обозначает позицию головы, а \((x_2,y_2)\) обозначает позицию хвоста. Вы можете вывести голову и хвост в любом порядке.

Протокол взаимодействия

Чтобы задать запрос, вы должны вывести ? x1 y1 x2 y2 (\(1 \leq x_1 \leq x_2 \leq n\), \(1\leq y_1 \leq y_2 \leq n\)), описывая прямоугольник, содержащий все клетки \((x,y)\) с \(x_1 \leq x \leq x_2\) и \(y_1 \leq y \leq y_2\).Затем считайте одно число — ответ на запрос.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

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

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

Если ваша программа неправильно определит голову или хвост змеи, вы также получите врдикт «Неправильный ответ».

Взломы

Чтобы сделать взлом, выведите одно целое число \(n\) (\(2 \leq n \leq 1000\)) на первой строке, описывающее размер таблицы.

Во второй строке выведите целое число \(k\) (\(2 \leq k \leq n^2\)), описывающее длину змеи.

Затем в \(k\) строках выведите \(k\) пар целых чисел \(x_i, y_i\) (\(1 \leq x_i, y_i \leq n\)), каждую пару следует выводить на новой строке, описывая \(i\)-ю клетку змеи. Все соседние пары должны быть соседними в таблице, и все \(k\) клеток должны быть различны.

Примечание

На иллюстрациях выше изображены наши запросы и ответы на них из первого примера. Сначала мы спросили клетку \((1,1)\) и получили ответ \(1\), затем поняли, что она должна быть соединена ровно с одной другой клеткой. Затем мы спросили \((1,2)\), и получили ответ \(0\), что значит, что в этой клетке нет змеи совсем. Это значит, что клетка, соседняя с \((1,1)\), должна быть \((2,1)\). Затем мы сделали запрос к клетке \((2,2)\), получили ответ \(0\) и поняли, что змеи также нет в клетке \((2,2)\). Таким образом змея не выходит из клетки \((2,1)\), из чего следует, что ответ \((1,1)\) и \((2,1)\).

На иллюстрациях выше изображены наши запросы и ответы на них из второго примера. Сделав запрос к клетке \((2,2)\) и получив \(2\), мы поняли, что змея содержит клетку \((2,2)\). Затем, спросив прямоугольник от \((2,1)\) до \((2,3)\), и получив ответ \(0\), мы поняли, что змея никогда не выходит из прямоугольника от \((2,1)\) до \((2,3)\). Так как первый ответ равен \(2\), обе клетки \((2,1)\) и \((2,3)\) должны быть внутри змеи, из чего следует, что ответ \((2,1)\) и \((2,3)\).

G. Минимально возможный LCM

жадные алгоритмы математика Перебор теория чисел *2200

Задан массив \(a\), состоящий из \(n\) целых чисел \(a_1, a_2, \dots, a_n\).

Ваша задача — найти такую пару индексов \(i, j\) (\(1 \le i < j \le n\)), что \(lcm(a_i, a_j)\) минимально возможно.

\(lcm(x, y)\) — это наименьшее общее кратное \(x\) и \(y\) (минимально возможное положительное число такое, что и \(x\) и \(y\) являются делителями этого числа).

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

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^6\)) — количество элементов в \(a\).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^7\)), где \(a_i\) — это \(i\)-й элемент массива \(a\).

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

Выведите два целых числа \(i\) и \(j\) (\(1 \le i < j \le n\)) такие, что значение \(lcm(a_i, a_j)\) минимально среди всех корректных пар \(i, j\). Если существует несколько возможных ответов, выведите любой.

D. Красивый массив

дп жадные алгоритмы Перебор разделяй и властвуй Структуры данных *1900

Вам дан массив \(a\) состоящий из \(n\) целых чисел. Красота массива – это максимальная сумма какого-то последовательного подотрезка этого массива (этот подотрезок может быть пустым). Например красота массива [10, -5, 10, -4, 1] равна 15, а красота массива [-3, -5, -1] равна 0.

Вы можете выбрать не более одного последовательного подотрезка массива \(a\) и домножить все элементы этого подотрезка на \(x\). Вы хотите максимизировать красоту массива после применения такой операции.

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

Первая строка содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 3 \cdot 10^5, -100 \le x \le 100\)) — длина массива \(a\) и число \(x\) соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — сам массив \(a\).

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

Выведите одно число — максимальную красоту массива \(a\) после не более одного домножения непрерывного подотрезка этого массива на \(x\).

Примечание

В первом тестовом примере нужно домножить подотрезок [-2, 1, -6], после этого массив примет вид [-3, 8, 4, -2, 12] с красотой 22 ([-3, 8, 4, -2, 12]).

Во втором примере нам не нужно домножать какой-либо подотрезок массива вообще.

В третьем тестовом примере независимо от того, какой подотрезок мы домножим, красота массива будет равна 0.

E. Угадай корень

интерактив математика Перебор *2200

Жюри загадало многочлен \(f(x) = a_0 + a_1 \cdot x + a_2 \cdot x^2 + \dots + a_k \cdot x^k\). \(k \le 10\) и все \(a_i\) — целые числа с \(0 \le a_i < 10^6 + 3\). Гарантируется, что существует хотя бы одно \(i\), для которого \(a_i > 0\).

Теперь жюри просит вас найти такое \(x_0\), что \(f(x_0) \equiv 0 \mod (10^6 + 3)\) или сказать, что такого \(x_0\) не существует.

Вы можете задать не более \(50\) запросов: вы спрашиваете значение \(x_q\), а жюри говорит вам значение \(f(x_q) \mod (10^6 + 3)\).

Заметьте, вывод ответа не является запросом.

Протокол взаимодействия

Чтобы спросить значение, выведите "? \(x_q\)" \((0 \le x_q < 10^6 + 3)\). Жюри ответит вам единственным числом \(f(x_q) \mod (10^6 + 3)\). Если вы получите в ответ \(−1\) (из-за неправильного запроса), завершите программу, чтобы избежать получения другого вердикта.

После вывода запроса не забудьте сбросить буфер, иначе вы можете получить вердикт Idleness limit exceeded. Для этого вы можете использовать:

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

Когда вы готовы вывести ответ, выведите "! \(x_0\)", где \(x_0\) — ответ на задачу, либо \(-1\) если такого значения \(x_0\) не существует.

Вы можете задать не более \(50\) запросов.

Формат взломов

Для взломов используйте следующий формат:

В единственной строке выведите \(11\) целых чисел \(a_0, a_1, \dots, a_{10}\) (\(0 \le a_i < 10^6 + 3\), \(\max\limits_{0 \le i \le 10}{a_i} > 0\)) — соответствующие коэффициенты многочлена.

Примечание

Многочлен из первого примера — это \(1000002 + x^2\).

Многочлен из второго примера — это \(1 + x^2\).

F. Олигополия на доставку

графы дп Перебор *2800

Весь рынок доставки Берляндии находится под контролем у двух враждующих компаний: BerEx и BerPS. Обе компании предоставляют быструю и надежную доставку по всем городами Берляндии.

Карта Берляндии может быть представлена в виде неориентированного графа. Города — это вершины, а дороги — ребра, их соединяющие. Каждая пара городов соединена не более, чем одной дорогой. Каждая дорога соединяет различные города.

BerEx и BerPS соперничают настолько серьезно, что для каждой пары городов \((v, u)\) они установили свои маршруты из \(v\) в \(u\) таким образом, что эти два маршрута не имеют ни одной общей дороги. Гарантируется, что это было возможно.

Теперь правительство Берляндии решило урезать траты на поддержание дорог путем отказа от поддержания некоторых. Очевидно, они хотят поддерживать как можно меньше дорог. С другой стороны, они не хотят разрушить всю структуру доставок. То есть BerEx и BerPS должны сохранить возможность выбирать пути между каждой парой городов так, чтобы они не имели общих ребер.

Какое минимальное количество ребер правительство Берляндии может поддерживать?

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

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(3 \le n \le 14\), \(n \le m \le \frac{n(n - 1)}{2}\)) — количество городов и количество дорог между ними.

В каждой из следующих \(m\) строк записаны по два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\), \(v \ne u\)) — города, соединенные очередной дорогой.

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

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

В первой строке выведите одно целое число \(k\) – минимальное число дорог, которое правительство Берляндии может поддерживать так, чтобы у BerEx и BerPS оставалась возможность выбирать пути между каждой парой городов так, чтобы они не имели общих ребер.

Следующие \(k\) строк должны содержать список дорог, которые будут поддерживаться. Каждая строка имеет вид "\(v~u\)", где \(v\) и \(u\) — это города, соединенные очередной дорогой.

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

Примечание

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

G. Обращение строк и столбцов

Конструктив Перебор *2200

Задана двоичная матрица \(a\) размера \(n \times m\). Двоичная матрица — это такая матрица, в которой каждый элемент равен либо \(0\), либо \(1\).

Вы можете совершить несколько (возможно, ноль) операций над этой матрицей. В течение каждой операции вы можете обратить либо строку этой матрицы, либо столбец этой матрицы. Формально, обращение строки — это изменение всех значений в этой строке на противоположные (\(0\) на \(1\), \(1\) на \(0\)). Обращение столбца — это изменение всех значений в этом столбце на противоположные.

Ваша задача — отсортировать изначальную матрице при помощи какой-то последовательности операций. Матрица является отсортированной, если массив \([a_{1, 1}, a_{1, 2}, \dots, a_{1, m}, a_{2, 1}, a_{2, 2}, \dots, a_{2, m}, \dots, a_{n, m - 1}, a_{n, m}]\) отсортирован в неубывающем порядке.

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

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 200\)) — количество строк и количество столбцов в матрице.

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

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

Если невозможно получить отсортированную матрицу, выведите «NO» в первой строке.

Иначе выведите «YES» в первой строке. Во второй строке выведите строку \(r\) длины \(n\). \(i\)-й символ этой строки \(r_i\) должен быть равен '1', если \(i\)-я строка матрицы должна быть обращена, и '0' иначе. В третьей строке выведите строку \(c\) длины \(m\). \(j\)-й символ этой строки \(c_j\) должен быть равен '1', если \(j\)-й столбец матрицы должен быть обращен, и '0' иначе. Если существует несколько возможных ответов, вы можете вывести любой из них.

B. Двойная матрица

жадные алгоритмы Перебор *1400

Вам даны две матрицы с размерами \(n \times m\), содержащие целые числа. Последовательность целых чисел строго возрастает, если каждое следующее число больше предыдущего. Строка строго возрастает, если все числа слева направо строго возрастают. Столбец строго возрастает, если все числа сверху вниз строго возрастают. Матрица возрастает, если все строки строго возрастают и все столбцы строго возрастают.

Например, матрица \(\begin{bmatrix} 9&10&11\\ 11&12&14\\ \end{bmatrix}\) возрастает, потому что каждая отдельная строка и столбец строго возрастает. А вот матрица \(\begin{bmatrix} 1&1\\ 2&3\\ \end{bmatrix}\) не возрастает, потому что первая строка не строго возрастает.

Пусть позиция в \(i\)-й строке (сверху) и \(j\)-м столбце (слева) в матрице обозначается как \((i, j)\).

За одну операцию вы можете выбрать любые два числа \(i\) и \(j\) и поменять местами число, расположенное в \((i, j)\) в первой матрице, с числом в \((i, j)\) во второй матрице. Другими словами, вы можете поменять местами два числа в разных матрицах, если они расположены в соответствующих позициях.

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

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n,m \leq 50\)) — размеры каждой матрицы.

Каждая из следующих \(n\) строк содержит \(m\) целых чисел \(a_{i1}, a_{i2}, \ldots, a_{im}\) (\(1 \leq a_{ij} \leq 10^9\)) — число, которое находится в позиции \((i, j)\) в первой матрице.

Каждая из следующих \(n\) строк содержит \(m\) целых чисел \(b_{i1}, b_{i2}, \ldots, b_{im}\) (\(1 \leq b_{ij} \leq 10^9\)) — число, которое находится в позиции \((i, j)\) во второй матрице.

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

Выведите либо «Impossible», либо «Possible».

Примечание

В первом примере мы можем выполнить операцию в верхней левой и нижней правой ячейках матриц. Полученные матрицы будут \(\begin{bmatrix} 9&10\\ 11&12\\ \end{bmatrix}\) и \(\begin{bmatrix} 2&4\\ 3&5\\ \end{bmatrix}\).

Во втором примере нам не нужно делать никаких операций.

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

C1. Передача энергии (упрощенная версия)

геометрия Перебор *1900

Эта задача такая же как и следующая, но с меньшими ограничениями.

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

На входе на станцию висит карта, описывающая систему проводов электростанции. Селена лучше всего из друзей разбирается в математике. Он решил нарисовать карту на декартовой плоскости. Теперь каждый полюс это точка по координатам \((x_i, y_i)\). Так как все полюса различны, то различны и точки, представляющие их. Также каждые два полюса соединены друг с другом проводом, представляющим из себя бесконечную в обе стороны прямую на плоскости. В случае если более двух полюсов лежат на одной прямой, то они все соединены одним общим проводом.

Селена думает, что когда два различных электрических провода пересекаются, то между ними может возникать опасная интерференция. Поэтому он интересуется, сколько пар проводов пересекаются?

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

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 50\)) — количество электрических полюсов.

Каждая из \(n\) следующих строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^4 \le x_i, y_i \le 10^4\)) — координаты полюсов.

Гарантируется что все эти \(n\) точек различны.

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

Выведите одно целое число — количество пересекающихся пар проводов.

Примечание

В первом примере:

Во втором примере:

Обратите внимание, что три полюса \((0, 0)\), \((0, 2)\) и \((0, 4)\) соединены одним проводом.

В третьем примере:

E. Волшебные перестановки

битмаски графы Конструктив математика Перебор Структуры данных *2400

Куро только что узнал о перестановках и этого его вдохновило придумать новый вид перестановок. Он выбрал \(n\) различных целых положительных чисел и сделал из них множество \(S\). Теперь он определяет волшебную перестановку следующим образом:

  • Это перестановка всех целых чисел от \(0\) до \(2^x - 1\), где \(x\) это какое-то неотрицательное целое число.
  • Побитовое исключающее или любых двух соседних элементов перестановки лежит в множестве \(S\).

Так как Куро очень восхищённо относится к волшебным перестановкам, то он хочет создать самую длинную возможную волшебную перестановку. Иначе говоря, он хочет найти такое наибольшее неотрицательное целое число \(x\), что существует волшебная перестановка целых чисел от \(0\) до \(2^x - 1\). Поскольку он немного новичок в вопросе перестановок, он хочет чтобы вы ему помогли и нашли это \(x\), а также волшебную перестановку для этого \(x\).

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество элементов в множестве \(S\).

Вторая строка содержит \(n\) различных целых чисел \(S_1, S_2, \ldots, S_n\) (\(1 \leq S_i \leq 2 \cdot 10^5\)) — элементы множества \(S\).

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

В первой строке выведите наибольшее неотрицательное целое число \(x\), такое что существует волшебная перестановка чисел от \(0\) до \(2^x - 1\).

Затем выведите \(2^x\) целых чисел задающую волшебную перестановку чисел от \(0\) до \(2^x - 1\). В случае если существует несколько таких волшебных перестановок, выведите любую из них.

Примечание

В первом примере \(0, 1, 3, 2\) образует волшебную перестановку так как:

  • \(0 \oplus 1 = 1 \in S\)
  • \(1 \oplus 3 = 2 \in S\)
  • \(3 \oplus 2 = 1 \in S\)

Где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

D. Милые последовательности

Бинарный поиск жадные алгоритмы математика Перебор *2200

Пусть зафиксировано целое положительное число \(m\). Мы называем последовательность \(x_1, x_2, \dots, x_n\) положительных чисел \(m\)-милой, если для всех индексов \(i\) таких, что \(2 \le i \le n\), выполняется \(x_i = x_{i - 1} + x_{i - 2} + \dots + x_1 + r_i\), где \(r_i\) — некоторое положительное целое число, удовлетворяющее \(1 \le r_i \le m\).

Вам даны \(q\) запросов, каждый из которых описывается тремя целыми числами \(a\), \(b\) и \(m\). Для каждого запроса нужно определить, существует ли \(m\)-милая последовательность, первый член которой равен \(a\), а последний равен \(b\). Если такая последовательность существует, вы должны найти пример такой последовательности.

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

Первая строка содержит одно целое число \(q\) (\(1 \le q \le 10^3\)) — количество запросов.

Каждая из следущих \(q\) строк содержит три целых числа \(a\), \(b\) и \(m\) (\(1 \le a, b, m \le 10^{14}\), \(a \leq b\)), описывающих один запрос.

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

Для каждого запроса, если \(m\)-милой последовательности, первый член которой равен \(a\), а последний — \(b\) не существует, выведите \(-1\).

Иначе выведите целое число \(k\) (\(1 \le k \leq 50\)), а затем \(k\) целых чисел \(x_1, x_2, \dots, x_k\) (\(1 \le x_i \le 10^{14}\)). Должно быть выполнено \(x_1 = a\), \(x_k = b\), а последовательность \(x_1, x_2, \dots, x_k\) должна быть \(m\)-милой.

Можно показать, что в пределах ограничений данной задачи для каждого запроса либо не существует \(m\)-милой последовательности, либо существует такая, которая содержит не более \(50\) членов.

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

Примечание

Рассмотрим первый пример. В первом запросе последовательность \(5, 6, 13, 26\) корректно, так как \(6 = 5 + \bf{\color{blue} 1}\), \(13 = 6 + 5 + {\bf\color{blue} 2}\), и \(26 = 13 + 6 + 5 + {\bf\color{blue} 2}\). Все выделенные жирным значения лежат в пределах от \(1\) до \(2\), поэтому последовательность является \(2\)-милой. Существуют и другие коррестные последовательности, например, \(5, 7, 13, 26\), они тоже будут приняты.

Во втором примере единственная \(1\)-милая последовательность, начинающаяся с \(3\), это \(3, 4, 8, 16, \dots\), она не содержит числа \(9\).

E. НОКи должны быть большими

битмаски Конструктив математика Перебор теория чисел *2100

Даша-путешественница решила использовать все заработанные за несколько лет отчисления на шоппинг. А где же еще лучше магазины, чем в Нлогонии?

Всего в Нлогонии \(n\) магазинов, пронумерованных от \(1\) до \(n\). В \(i\)-м из этих магазинов можно купить положительное целое число \(a_i\).

В каждый из последних \(m\) дней Даша покупала по одному числу в некоторых магазинах. В каждый из этих дней лисенок Жулик покупал по одному числу во всех магазинах, в которых Даша не купила число в этот день.

Дора считает, что Жулик соперничает с ней; она считает, что выиграла у Жулика в день \(i\), если и только если наименьшее общее кратное чисел, которые она купила в \(i\)-й день строго больше наименьшего общего кратного чисел, которые купил в \(i\)-й день Жулик.

Наименьшем общем кратном (НОК) набора целых чисел называется наименьшее положительное целое число, делящееся на все числа из набора.

К сожалению, Даша забыла, чему равны значения \(a_i\). Помогите Даше определить, существуют ли такие положительные целые числа \(a_i\), что она выигрывала у Жулика каждый день. Сами значения \(a_i\) находить не нужно.

Обратите внимание, возможно, что некоторые значения \(a_i\) в решении совпадают.

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

Первая строка содержит два целых числа \(m\) и \(n\) (\(1\leq m \leq 50\), \(1\leq n \leq 10^4\)) — количество дней и количество магазинов.

Далее следуют \(m\) строк, \(i\)-я из них начинается с целого числа \(s_i\) (\(1\leq s_i \leq n-1\)) — количества чисел, которые купила Даша в день \(i\), а затем находятся \(s_i\) различных целых чисел — номера магазинов, в которых Даша купила число в день \(i\). Все индексы находятся в диапазоне от \(1\) до \(n\).

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

Выведите единственную строку, содержащую "possible", если существуют положительные целые числа \(a_i\) такие, что в каждый день наименьшее общее кратное чисел, купленных Дашей, было строго больше наименьшего общего кратного всех чисел, купленных Жуликом в тот же день. В противном случае выведите "impossible".

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

Примечание

В первом примере возможные числа \(a_i\) равны \(3, 4, 3, 5, 2\). В первый день Даша покупает числа \(3, 4\) и \(3\), НОК которых равен \(12\), а Жулик покупает числа \(5\) и \(2\), НОК которых равен \(10\). Во второй день Дора покупает числа \(3, 5\) и \(2\), НОК которых равен \(30\), а Жулик покупает числа \(3\) и \(4\), НОК которых равен \(12\).

A. Телефонный номер

жадные алгоритмы Перебор Строки *800

Телефонный номер — это последовательность длины ровно 11 из цифр, где первая цифра — это 8. Например, последовательность 80011223388 является телефонным номером, но последовательности 70011223388 и 80000011223388 — не являются телефонными номерами.

Вам дана строка \(s\) длины \(n\), состоящая только из цифр.

За одну операцию вы можете удалить любой символ из строки \(s\). Например, из строки 1121 вы можете получить строку 112, 111 или 121.

Вам нужно определить, существует ли такая последовательность операций (возможно пустая), после которой строка \(s\) станет телефонным номером.

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

Первая строка содержит число \(t\) (\(1 \le t \le 100\)) — количество тестовых примеров.

В первой строке каждого тестового примера содержится число \(n\) (\(1 \le n \le 100\)) — длина строки \(s\).

Во второй строке каждого тестового примера содержится строка \(s\) (\(|s| = n\)), состоящая только из цифр.

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

Для каждого тестового примера выведите ответ в отдельной строке. Если существует последовательность операций, превращающая строку \(s\) в телефонный номер, выведите YES. Иначе выведите NO.

Примечание

В первом тестовом примере вам нужно удалить первую и третью цифры. Тогда строка 7818005553535 превратится в 88005553535.

B. Lost Numbers

интерактив математика Перебор разделяй и властвуй *1400

Это интерактивная задача. Не забывайте о том, что ваша программа должна каждый раз после вывода запроса сбрасывать буфер вывода. Для сброса буфера вывода можно использовать fflush(stdout) в C++, system.out.flush() в Java, stdout.flush() в Python или flush(output) в Pascal. Если вы используете другой язык программирования, посмотрите в его документации, как выполняется эта операция. Также рекомендуем вам прочесть руководство по интерактивным задачам: https://cf.m27.workers.dev/blog/entry/45307.

Жюри загадало некоторый массив \(a\), состоящий из \(6\) чисел. Существуют \(6\) особых чисел — \(4\), \(8\), \(15\), \(16\), \(23\), \(42\) — и каждое из них встречается в массиве \(a\) ровно один раз (то есть \(a\) — некоторая перестановка этих чисел).

Вы не знаете ничего о их порядке в массиве, но вы можете отправить до \(4\) запросов. В каждом запросе вы выбираете два индекса \(i\) и \(j\) (\(1 \le i, j \le 6\), \(i\) и \(j\) не обязательно должны быть различны), и в ответ вы получите значение \(a_i \cdot a_j\).

Можете ли вы отгадать массив \(a\)?

Массив \(a\) в каждом тесте фиксирован заранее, тестирующая программа не пытается адаптировать его в зависимости от ваших запросов.

Протокол взаимодействия

До того, как ваша программа даст ответ на задачу, она может отправить до \(4\) запросов. Чтобы задать запрос, выведите одну строку следующего вида: \(?\) \(i\) \(j\), где \(i\) и \(j\) должны быть двумя целыми числами, удовлетворяющими условию \(1 \le i, j \le 6\). Строка, которую вы отправляете, должна заканчиваться символом перевода строки. После отправки запроса программа должна сбросить буфер вывода и прочитать ответ на запрос — строку, содержащую одно целое число \(a_i \cdot a_j\). Если вы отправите некорректный запрос (или отправите более \(4\) запросов), ответом будет строка 0. Если ваша программа получила такой ответ, она должна немедленно завершиться — иначе вы можете получить вердикт «Ошибка исполнения», «Превышено ограничение времени» или какой-нибудь другой, а не «Неправильный ответ».

Чтобы дать ответ на задачу, ваша программа должна отправить строку \(!\) \(a_1\) \(a_2\) \(a_3\) \(a_4\) \(a_5\) \(a_6\) с символом перевода строки в конце. После этого она должна сбросить буфер вывода и завершиться.

Примечание

Если вы хотите отправить взлом по этой задаче, ваш тест должен содержать ровно шесть целых чисел \(a_1\), \(a_2\), ..., \(a_6\), разделенных пробелами. Каждое из \(6\) особых чисел должно встречаться в тесте ровно один раз. Тест должен заканчиваться символом конца строки.

G. Малобюджетное Начало

геометрия Перебор *3100

Нам стало настолько скучно, что мы неожиданно решили обсудить, как бы выглядел фильм «Начало», если бы бюджет на картину был бы невероятно мал.

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

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

Во-первых, забудьте про 3D, это очень сложно и дорого! Город теперь представляется в виде числовой прямой (бесконечной для простоты, разумеется).

Во-вторых, город совсем не должен выглядеть естественно. На прямой есть \(n\) зданий. Каждое здание — это квадрат \(1 \times 1\). Здания пронумерованы от \(1\) до \(n\) в возрастающем порядке своих позиций. Нижние углы здания \(i\) расположены в точках \(a_i\) и \(a_i + 1\) числовой прямой. Также расстояние между любыми двумя соседними зданиями \(i\) и \(i + 1\) не превышает \(d\) (на самом деле, это условие здесь лишь для того, чтобы город не выглядел сильно разреженным). Расстояние между зданиями \(i\) и \(i + 1\) считается от правого нижнего угла здания \(i\) до левого нижнего угла здания \(i + 1\).

Наконец, изгиб тоже довольно тяжело просимулировать! Будем осуществлять сгиб в некоторой целой координате \(x\) по следующему алгоритму. Возьмем луч из \(x\) в \(+\infty\) и все здания, которые на нем находятся, и начнем поворачивать луч и здания против часовой стрелки относительно точки \(x\). В какой-то момент будет достигнуть угол, на котором некоторое здание коснется либо другого здания, либо части прямой. Необходимо перестать сгибать здесь (реализация разрушения здания уж точно своих денег не стоит).

Назовем угол между двумя лучами в финальном состоянии конечным углом \(\alpha_x\).

Осталось только решить, вокруг какой же целой точки \(x\) лучше всего сгибать. К счастью, мы уже отобрали \(m\) кандидатов для сгиба.

Пожалуйста, помогите нам теперь посчитать конечный угол \(\alpha_x\) для каждого сгиба \(x\) из нашего списка кандидатов.

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

В первой строке записаны два целых числа \(n\) и \(d\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le d \le 7000\)) — количество зданий и максимальное расстояние между двумя соседними зданиями, соответственно.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(a_1 = 0\), \(0 < a_{i + 1} - a_i \le d + 1\)) — координаты левых углов соответствующих зданий в возрастающем порядке.

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

В четвертой сроке записаны \(m\) целых чисел \(x_1, x_2, \dots, x_m\) (\(0 \le x_i \le a_n + 1\), \(x_i < x_{i + 1}\)) — координаты сгибов, для которых требуется посчитать конечный угол, в возрастающем порядке.

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

Выведите \(m\) чисел. Для каждого сгиба \(x_i\) выведите конечный угол \(\alpha_{x_i}\) (в радианах).

Ваш ответ будет считаться правильным, если его абсолютная ошибка не превосходит \(10^{-9}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(|a - b| \le 10^{-9}\).

Примечание

Здесь изображен город из первого примера и сгиб в позиции \(2\) для него. Угол, который необходимо измерить, помечен синим. Можно заметить, что он равен \(\frac \pi 4\).

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

B. Хорошая тройка

Перебор *1900

У жабы Раша есть бинарная строка \(s\). Бинарная строка состоит только из нулей и единиц.

Обозначим за \(n\) длину строки \(s\).

Рашу нужно найти количество таких пар целых чисел \(l\), \(r\), что \(1 \leq l \leq r \leq n\) и существует хотя бы одна такая пара целых чисел \(x\), \(k\), что \(1 \leq x, k \leq n\), \(l \leq x < x + 2k \leq r\) и \(s_x = s_{x+k} = s_{x+2k}\).

Найдите это количество пар для Раша.

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

В первой строке записана строка \(s\) (\(1 \leq |s| \leq 300\,000\)), состоящая из нулей и единиц.

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

Выведите одно целое число: количество таких пар целых чисел \(l\), \(r\), что \(1 \leq l \leq r \leq n\) и существует хотя бы одна такая пара целых чисел \(x\), \(k\), что \(1 \leq x, k \leq n\), \(l \leq x < x + 2k \leq r\) и \(s_x = s_{x+k} = s_{x+2k}\).

Примечание

В первом примере есть три пары \(l\), \(r\), которые мы должны посчитать: \(1\), \(6\); \(2\), \(6\); \(1\), \(5\).

Во втором примере нет подходящей пары \(x\), \(k\) для исходной строки, поэтому ответ \(0\).

B. Очень занимательная игра

Перебор теория чисел *1800

В одной очень древней стране была популярна следующая игра. В игру играет два человека. Сначала первый игрок выписывает строку s1, состоящую ровно из девяти цифр и обозначающую число, не превосходящее a. Потом второй игрок, видя s1, выписывает строку s2, состоящую ровно из девяти цифр и обозначающую число, не превосходящее b. Здесь a и b — некоторые заданные константы, строки s1 и s2 игроки выбирают сами. Лидирующие нули в строках разрешаются.

Если число, задающееся конкатенацией (склейкой) строк s1 и s2, делится на mod, выигрывает второй игрок. Иначе — выигрывает первый игрок. Даны числа a, b, mod. Требуется определить, кто выиграет при оптимальной игре обоих. Если выиграет первый игрок, также требуется найти лексикографически минимальный выигрышный ход.

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

В первой строке заданы три целых числа a, b, mod (0 ≤ a, b ≤ 109, 1 ≤ mod ≤ 107).

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

Если выиграет первый игрок, выведите «1» и лексикографически минимальную строку, которую ему нужно выписать, чтобы победить. Если выиграет второй игрок, выведите одно число «2».

Примечание

Лексикографическое сравнение строк реализует оператор < в современных языках программирования. Строка x лексикографически меньше строки y, если существует такое i (1 ≤ i ≤ 9), что xi < yi, а для любого j (1 ≤ j < i) xj = yj. Сравниваемые строки всегда имеют длину 9.

C. Электрификация

Бинарный поиск жадные алгоритмы Перебор *1600

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

Вам заданы \(n\) точек \(a_1, a_2, \dots, a_n\) на оси \(OX\). И теперь вам необходимо найти такую целочисленную точку \(x\) (также на оси \(OX\)), что значение \(f_k(x)\) — минимально возможное.

Функцию \(f_k(x)\) можно описать следующим образом:

  • создадим список расстояний \(d_1, d_2, \dots, d_n\) где \(d_i = |a_i - x|\) (т.е. расстояние между \(a_i\) и \(x\));
  • отсортируем список \(d\) в неубывающем порядке;
  • возьмем в качестве результата значение \(d_{k + 1}\).

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

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

В первой строке задано единственное число \(T\) (\( 1 \le T \le 2 \cdot 10^5\)) — количество запросов. Следующие \(2 \cdot T\) строк содержат описание запросов. Запросы независимы.

В первой строке каждого запроса заданы два целых числа \(n\), \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le k < n\)) — количество точек и константа \(k\).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_1 < a_2 < \dots < a_n \le 10^9\)) — точки в возрастающем порядке.

Гарантируется, что \(\sum{n}\) не превосходит \(2 \cdot 10^5\).

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

Выведите \(T\) целых чисел — соответствующие точки \(x\), которые имеют минимально возможное значение \(f_k(x)\). Если существует несколько ответов — выведите любой из них.

F. Количество подперестановок

математика Перебор разделяй и властвуй Структуры данных хэши *2500

У вас есть массив \(a_1, a_2, \dots, a_n\).

Назовем подотрезок \(a_l, a_{l + 1}, \dots , a_r\) этого массива подперестановкой если он содержит все числа от \(1\) до \(r-l+1\) ровно по одному разу. Например, массив \(a = [2, 2, 1, 3, 2, 3, 1]\) содержит \(6\) подотрезков, являющихся подперестановками: \([a_2 \dots a_3]\), \([a_2 \dots a_4]\), \([a_3 \dots a_3]\), \([a_3 \dots a_5]\), \([a_5 \dots a_7]\), \([a_7 \dots a_7]\).

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

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

Первая строка содержит число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Вторая строка содержит \(n\) чисел \(a_1, a_2, \dots , a_n\) (\(1 \le a_i \le n\)).

Этот массив может содержать одинаковые числа.

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

В единственной строке выведите количество подперестановок массива \(a\).

Примечание

В первом тестовом примере \(7\) подперестановок: \([1, 4]\), \([3, 3]\), \([3, 6]\), \([4, 7]\), \([6, 7]\), \([7, 7]\) и \([7, 8]\).

Во втором тестовом примере \(6\) подперестановок: \([1, 1]\), \([2, 2]\), \([2, 3]\), \([3, 4]\), \([4, 4]\) и \([4, 5]\).

A. Дели!

жадные алгоритмы Перебор реализация *800

Вам задано целое число \(n\).

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

  1. Заменить \(n\) на \(\frac{n}{2}\), если \(n\) делится на \(2\);
  2. Заменить \(n\) на \(\frac{2n}{3}\), если \(n\) делится на \(3\);
  3. Заменить \(n\) на \(\frac{4n}{5}\), если \(n\) делится на \(5\).

Например, Вы можете заменить \(30\) на \(15\) при помощи первой операции, на \(20\) при помощи второй операции или на \(24\) при помощи третьей операции.

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

Вам необходимо ответить на \(q\) независимых запросов.

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

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 1000\)) — количество запросов.

Следующие \(q\) строк содержат запросы. В каждом запросе задано целое число \(n\) (\(1 \le n \le 10^{18}\)).

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

На каждый запрос выведите ответ на новой строке. Если невозможно получить \(1\) из \(n\), выведите -1. Иначе выведите минимальное количество операций, необходимое, чтобы сделать это.

E. Археология

жадные алгоритмы Конструктив Перебор Строки *1900

После того, как Алиса купила подписку на Congo Prime Video, она начала смотреть документальный фильм об археологических находках с острова Фактор на озере Лох Катрин в Шотландии. Археологи нашли книгу, возраст и происхождение которой неизвестны. Возможно Алиса сможет расшифровать ее?

В книжке записано только одно слово, которое состоит из символов «a», «b» и «c». Было замечено, что нет двух последовательных одинаковых символов. Так же было предположено, что в этой строке есть длинная подпоследовательность, которая читается слева направо так же, как и справа налево.

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

Строка \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов.

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

Первая строка содержит строку \(s\) (\(2 \leq |s| \leq 10^6\)). Строка \(s\) состоит только из символов «a», «b», «c». Гарантируется, что нет двух последовательных одинаковых символов.

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

Выведите палиндром \(t\), который является подпоследовательностью строки \(s\) и \(|t| \geq \lfloor \frac{|s|}{2} \rfloor\).

Если существует несколько решений, выведите любое из них. Обратите внимание, что вам не нужно максимизировать длину \(t\).

Если решения не существует, выведите «IMPOSSIBLE» (без кавычек).

Примечание

В первом примере другими возможными ответами могут быть «cacac», «caac», «aca» и «ccc».

C. Модный номер

жадные алгоритмы Перебор сортировки Строки *1900

Номер машины в Берляндии состоит ровно из n цифр. Номер называется красивым, если в нем есть хотя бы k одинаковых цифр. Вася хочет поменять цифры в номере своей машины так, чтобы он стал красивым. За замену одной из n цифр номера нужно заплатить сумму денег, равную модулю разности старой и новой цифры.

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

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

В первой строке через пробел записаны два целых числа n и k (2 ≤ n ≤ 104, 2 ≤ k ≤ n) — количество цифр в номере и необходимое количество одинаковых цифр в красивом номере. Вторая строка состоит из n цифр. Она задает старый номер Васиной машины. Гарантируется, что номер не содержит пробелов и состоит только из цифр.

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

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

Примечание

В первом примере замена второй цифры на «8» стоит |9 - 8| = 1. Замена пятой цифры на «8» стоит столько же. Замена шестой цифры стоит |6 - 8| = 2. В итоге Вася заплатит 1 + 1 + 2 = 4 чтобы получить красивый номер «888188».

Лексикографическое сравнение строк реализует оператор < в современных языках программирования. Строка x лексикографически меньше строки y, если существует такое i (1 ≤ i ≤ n), что xi < yi, а для любого j (1 ≤ j < i) xj = yj. Сравниваемые строки в этой задаче всегда имеют длину n.

C. Флаг

дп Комбинаторика Перебор реализация *1900

Иннокентий работает на блошином рынке, продавая посетителям всякий хлам необычные вещи. Недавно он нашёл у себя на складе старое прямоугольное покрывало. Как оказалось, это покрывало имеет сетчатую форму, то есть покрывало состоит из \(n \cdot m\) цветных лоскутков, разбитых на \(n\) строк и \(m\) столбцов.

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

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

  

Примеры подпрямоугольников, являющихся флагами

     

Примеры подпрямоугольников, не являющихся флагами

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 1\,000\)) — количество строк и столбцов в покрывале.

Каждая из следующих \(n\) строк описывает очередную строку покрывала и состоит из \(m\) строчных латинских букв от «a» до «z», где одинаковым цветам соответствуют одинаковые буквы, а разным цветам — разные буквы.

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

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

Примечание
 

Пояснение к примеру. Выделены подпрямоугольники, являющиеся флагами

E1. История одной страны (простая)

Перебор разделяй и властвуй сортировки *2500

Эта задача отличается от следующей только ограничениями.

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

Изначально, до появления Байтландии, на её территории были расположены \(n\) различных стран. Каждое государство владело своей территорией, которую можно было представить на карте как прямоугольник, стороны которого параллельны осям координат, а вершины расположены в целочисленных точках. Никакие две страны не пересекались, однако они могли касаться сторонами. Иногда в результате агрессивных переговоров и мирных военных походов две страны объединялись в одну. Слияние происходило только в том случае, если после объединения их владений снова получалась прямоугольная территория. В конце концов осталось только одно государство — Байтландия.

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

Возможное формирование Байтландии. Замки отмечены синим цветом.

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

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 1000\)) — количество замков и стран.

Каждая из следующих \(n\) строк содержат четыре целых числа \(a_i, b_i, c_i, d_i\) (\(0 \leq a_i < c_i \leq 10^9\), \(0 \leq b_i < d_i \leq 10^9\)) — координаты вершин \(i\)-го замка, где \((a_i, b_i)\) — координаты левой нижней точки, а \((c_i, d_i)\) — правой верхней.

Гарантируется, что никакие два замка не пересекаются, однако они могут касаться сторонами.

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

Если существуют расположения изначальных стран, для которых верна данная история, то выведите «YES», иначе выведите «NO».

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

Примечание

На картинках ниже изображено расположение замков в первом и втором примере.

 

E2. История одной страны (сложная)

жадные алгоритмы Перебор сортировки *3000

Эта задача отличается от предыдущей только ограничениями.

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

Изначально, до появления Байтландии, на её территории были расположены \(n\) различных стран. Каждое государство владело своей территорией, которую можно было представить на карте как прямоугольник, стороны которого параллельны осям координат, а вершины расположены в целочисленных точках. Никакие две страны не пересекались, однако они могли касаться сторонами. Иногда в результате агрессивных переговоров и мирных военных походов две страны объединялись в одну. Слияние происходило только в том случае, если после объединения их владений снова получалась прямоугольная территория. В конце концов осталось только одно государство — Байтландия.

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

Возможное формирование Байтландии. Замки отмечены синим цветом.

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

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 100\,000\)) — количество замков и стран.

Каждая из следующих \(n\) строк содержат четыре целых числа \(a_i, b_i, c_i, d_i\) (\(0 \leq a_i < c_i \leq 10^9\), \(0 \leq b_i < d_i \leq 10^9\)) — координаты вершин \(i\)-го замка, где \((a_i, b_i)\) — координаты левой нижней точки, а \((c_i, d_i)\) — правой верхней.

Гарантируется, что никакие два замка не пересекаются, однако они могут касаться сторонами.

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

Если существуют расположения изначальных стран, для которых верна данная история, то выведите «YES», иначе выведите «NO».

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

Примечание

На картинках ниже изображено расположение замков в первом и втором примере.

 

F. Возвращение Topforces

математика Перебор сортировки *2100

Скоро на самой известной платформе по программированию (Topforces) будет проходить очень важное соревнование!

У авторов есть набор из \(n\) задач и они должны выбрать не более трех из них в контест. Красота \(i\)-й задачи равна \(a_i\). Авторы хотят составить самый красивый контест (другими словами, суммарная красота выбранных задач должна быть максимально возможной).

Но в подготовке контеста есть одна очень важная особенность: из-за некоторых предрассудков авторов красоты задач не могут делить друг друга. Иными словами, если красоты выбранных задач равны \(x, y, z\), тогда \(x\) не должен делиться ни на \(y\), ни на \(z\), \(y\) не должен делиться ни на \(x\), ни на \(z\) и \(z\) не должен делиться ни на \(x\), ни на \(y\). Если красоты выбранных задач равны \(x\) и \(y\), то \(x\) должен не делиться на \(y\) и \(y\) должен не делиться на \(x\). Любой контест, составленный из одной задачи, является хорошим.

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

Вам необходимо ответить на \(q\) независимых запросов.

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

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

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов. Каждый запрос состоит из двух строк.

Первая строка запроса содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество задач.

Вторая строка запроса содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(2 \le a_i \le 2 \cdot 10^5\)), где \(a_i\) равно красоте \(i\)-й задачи.

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(2 \cdot 10^5\).

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

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

A1. Хайди изучает хеширование (лёгкая)

математика Перебор теория чисел *1200

Мадам Ковариан украла новорожденную Мелоди Понд у её родителей, чтобы та стала оружием молчания в крестовом походе против Доктора. Мадам Ковариан изменила имя Мелоди на Ривер Сонг, что дало ей новую личность и позволило убить Одиннадцатого Доктора.

Хайди выяснила, что Мадам Ковариан использует достаточно сложную хеш-функцию, чтобы менять имена украденных малышей. Чтобы такое не произошло с будущими Докторами, Хайди решила подговиться и изучить основные технологии хеширования.

Первая хеш-функция, которую она рассматривает, выглядит следующим образом:

Предположим, что даны положительные целые числа \((x, y)\), тогда она определяет \(H(x,y):=x^2+2xy+x+1\).

Теперь, Хайди интересуется, является ли данная функция обратимой. В частности, у неё есть целое положительное \(r\), не могли бы вы найти пару \((x, y)\) (целые положительные числа), такие что \(H(x, y) = r\)?

Если существуют несколько таких пар, то выведите пару с минимальным \(x\). Если ни одной такой пары не существует, то выведите «NO».

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

Первая и единственная строка содержит единственное целое число \(r\) (\(1 \le r \le 10^{12}\)).

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

Выведите целые числа \(x, y\), такие что \(H(x,y) = r\) и \(x\) является минимально возможным, или «NO», если такой пары не существует.

A2. Хайди изучает хеширование (средняя)

Перебор теория чисел *2100

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

Дана битовая строка \(y \in \{0,1\}^n\). Нужно посчитать количество \(k\) (\(0 \leq k < n\)), таких что существует \(x \in \{0,1\}^n\), такой что \(y = x \oplus \mbox{shift}^k(x).\)

Где \(\oplus\) обозначает побитового xor, а \(\mbox{shift}^k\) обозначает операцию циклического сдвига битовой строки направо \(k\) раз. Например, \(001 \oplus 111 = 110\), а \(\mbox{shift}^3(00010010111000) = 00000010010111\).

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длину битовой строки \(y\).

Вторая строка содержит битовую строку \(y\).

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

Выведите одно целое число: количество подходящих \(k\).

Примечание

В первом примере:

  • \(1100\oplus \mbox{shift}^1(1100) = 1010\)
  • \(1000\oplus \mbox{shift}^2(1000) = 1010\)
  • \(0110\oplus \mbox{shift}^3(0110) = 1010\)

Не существует \(x\), такого что \(x \oplus x = 1010\), а значит ответ равен \(3\).

C2. Экзамен в БерГУ (усложнённая версия)

жадные алгоритмы математика Перебор Структуры данных *1700

Единственное отличие этой версии от упрощённой — это ограничения.

Если вы пишете на Python, то, наверняка, при отправке вашего решения на PyPy оно будет работать значительно быстрее.

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

Совсем скоро Полиграф Полиграфович примет экзамен у группы из \(n\) студентов. Студенты будут сдавать экзамен подряд один за другим в порядке от \(1\)-го до \(n\)-го. Процесс сдачи происходит следующим образом:

  • \(i\)-й студент подходит к преподавательскому столу и тянет билет;
  • если студент понимает, что билет для него слишком сложный, то он отказывается отвечать и уходит домой (этот процесс происходит настолько быстро, что считается, что на него не расходуется время);
  • если студент посчитал, что билет несложный, то он тратит ровно \(t_i\) минут на сдачу экзамена, после чего он получает отметку и уходит домой.

Студенты сдают экзамен один за другим без перерывов. Полиграф Полиграфович в один момент времени принимает экзамен у одного студента.

Длительность всего экзамена составляет \(M\) минут (\(\max t_i \le M\)), поэтому чем ближе студент находится к концу списка, тем больше вероятность того, что он не успеет сдать экзамен.

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

Для каждого студента \(i\) ответ надо искать независимо, то есть если при нахождении ответа для студента \(i_1\) про какого-то студента \(j\) выяснилость, что он должен уйти, то при нахождении ответа для \(i_2\) (\(i_2>i_1\)) студент \(j\) не обязательно должен уйти домой.

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

В первой строке входных данных содержатся два целых числа \(n\) и \(M\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le M \le 2 \cdot 10^7\)) — количество студентов и длительность всего экзамена в минутах, соответственно.

Во второй строке входных данных содержится \(n\) целых чисел \(t_i\) (\(1 \le t_i \le 100\)) — длительность сдачи экзамена \(i\)-го студента.

Гарантируется, что все значения \(t_i\) не превосходят \(M\).

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

Выведите \(n\) чисел: \(i\)-е число должно быть равно минимальному количеству студентов, которые должны уйти с экзамена, чтобы \(i\)-й студент успел ответить (полностью).

Примечание

Пояснение к примеру 1.

Обратите внимание, что сумма первых пяти длительностей сдач не превосходит \(M=15\) (сумма равна \(1+2+3+4+5=15\)). Таким образом, первые пять студентов могут сдавать экзамен даже если все студенты до них тоже сдают экзамен. Иными словами, первые пять чисел в ответе равны \(0\).

Для того, чтобы \(6\)-й студент сдал экзамен необходимо, чтобы не менее \(2\)-х студентов до него отказались сдавать (например, \(3\)-й и \(4\)-й, тогда \(6\)-й закончит свою сдачу через \(1+2+5+6=14\) минут, что не превосходит \(M\)).

Для того, чтобы \(7\)-й студент успел сдать экзамен необходимо, чтобы не менее \(3\)-х студентов до него отказались сдавать (например, \(2\)-й, \(5\)-й и \(6\)-й, тогда \(7\)-й закончит свою сдачу через \(1+3+4+7=15\) минут, что не превосходит \(M\)).

E. Поликарп и змейки

Перебор реализация *2000

После тяжёлой рабочий недели Поликарп предпочитает развлечься. Любимое развлечение Поликарпа — это рисование змеек. Поэтому он берёт прямоугольный лист клетчатой бумаги размера \(n \times m\) (\(n\) — количество строк, \(m\) — количество столбцов) и начинает рисовать змей в клеточках.

Поликарп рисует змеек строчными латинскими буквами. Первую змейку он всегда рисует символом 'a', вторую змейку он рисует символом 'b', третью — символом 'c' и так далее. Все змейки имеют свой уникальный символ. Так как в латинице всего \(26\) букв, а Поликарп очень уставший и не хочет придумывать новые символы, то суммарное количество нарисованных змеек не превосходит \(26\).

Поскольку к концу недели Поликарп очень уставший, то он рисует змеек прямыми линиями, без изгибов. Таким образом, каждая змейка может располагаться либо вертикально, либо горизонтально. Ширина любой змейки всегда равна \(1\), то есть каждая змейка имеет размеры либо \(1 \times l\), либо \(l \times 1\), где \(l\) — её длина. Обратите внимание, что изгибаться змейки не могут.

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

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

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

В первой строке входных данных содержится целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных в тесте. Далее содержатся описания \(t\) наборов.

В первой строке описания набора содержатся два целых числа \(n\), \(m\) (\(1 \le n,m \le 2000\)) — длина и ширина клетчатого листа, соответственно.

В каждой из последующих \(n\) строк описания набора содержатся \(m\) символов, отвечающих за содержимое соответствующей клетки на листе. Это может быть либо строчная латинская буква, либо символ точка ('.'), обозначающий пустую клетку.

Гарантируется, что суммарная площадь всех листов в одном тесте не превосходит \(4\cdot10^6\).

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

Выведите ответ для каждого из набора входных данных.

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

В случае положительного ответа выведите его в следующем формате. В следующей строке выведите целое число \(k\) (\(0 \le k \le 26\)) — количество змеек. В следующих \(k\) строках выведите по четыре целых числа \(r_{1,i}\), \(c_{1,i}\), \(r_{2,i}\) и \(c_{2,i}\) — координаты крайних клеток \(i\)-й змейки (\(1 \le r_{1,i}, r_{2,i} \le n\), \(1 \le c_{1,i}, c_{2,i} \le m\)). Змейки должны быть выведены в порядке их рисования. Если ответов несколько, выведите любой из них.

Обратите внимание, что Поликарп начинает процесс рисования змеек с чистого (пустого) листа.

F. Две пиццы

битмаски Перебор *2100

Компания из \(n\) друзей хочет заказать ровно две пиццы. Известно, что всего в природе существует \(9\) ингредиентов для пиццы, которые обозначаются целыми числами от \(1\) до \(9\).

У каждого из \(n\) друзей есть один или более любимых ингредиентов: у \(i\)-го из друзей количество любимых ингредиентов равно \(f_i\) (\(1 \le f_i \le 9\)) и любимые ингредиенты составляют последовательность \(b_{i1}, b_{i2}, \dots, b_{if_i}\) (\(1 \le b_{it} \le 9\)).

На сайте сети ресторанов CodePizza есть \(m\) (\(m \ge 2\)) предложений различных пицц. Каждая пицца характеризуется набором из \(r_j\) ингредиентов \(a_{j1}, a_{j2}, \dots, a_{jr_j}\) (\(1 \le r_j \le 9\), \(1 \le a_{jt} \le 9\)), которые в неё входят, и своей ценой \(c_j\).

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

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

В первой строке входных данных записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 10^5, 2 \le m \le 10^5\)) — количество друзей в компании и количество пицц, соответственно.

Далее в \(n\) строках заданы описания любимых ингредиентов друзей: \(i\)-я из них содержит количество любимых ингредиентов \(f_i\) (\(1 \le f_i \le 9\)) и последовательность различных целых чисел \(b_{i1}, b_{i2}, \dots, b_{if_i}\) (\(1 \le b_{it} \le 9\)).

Далее в \(m\) строках заданы описания пицц: \(j\)-я из них содержит целочисленную цену пиццы \(c_j\) (\(1 \le c_j \le 10^9\)), количество ингредиентов \(r_j\) (\(1 \le r_j \le 9\)) и сами ингредиенты — последовательность различных целых чисел \(a_{j1}, a_{j2}, \dots, a_{jr_j}\) (\(1 \le a_{jt} \le 9\)).

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

Выведите два целых числа \(j_1\) и \(j_2\) (\(1 \le j_1,j_2 \le m\), \(j_1 \ne j_2\)) — номера двух пицц в искомом наборе. Если решений несколько, выведите любое из них. Пиццы можно выводить в любом порядке.

C. Tokitsukaze и дуэль

жадные алгоритмы игры Перебор *2300

"Duel!"

Только что началась дуэль между Tokitsukaze и Quality за прекрасную принцессу Claris.

Есть \(n\) карт, расположенных в ряд. Каждая карта имеет две стороны, одна из которых покрашена в некоторый цвет. В начале дуэли некоторые из карт лежат одной цветной стороной вверх, а некоторые — цветной стороной вниз. Игроки ходят, переворачивая карты, при этом Tokitsukaze ходит первым. Каждый ход игрок выбирает ровно \(k\) последовательных карт и переворачивает их так, чтобы или все они лежали цветной стороной вниз, или все они лежали цветной стороной вверх. Если все цветные стороны этих \(n\) карт смотрят в одном направлении после хода игрока, он выигрывает.

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

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

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^5\)).

Во второй строке записана строка длины \(n\), состоящая только из \(0\) и \(1\), представляющая положение этих \(n\) карт, где цветная сторона \(i\)-й карты смотрит вверх, если \(i\)-й символ строки равен \(1\), или смотрит вниз, если \(i\)-й символ строки равен \(0\).

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

Выведите "once again" (без кавычек), если общее число ходов может превысить \(10^9\), что считается ничьей.

В другом случае, выведите "tokitsukaze" (без кавычек), если Tokitsukaze выиграет, или "quailty" (без кавычек) если Quailty выиграет.

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

Примечание

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

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

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

Ответ на четвертый пример может быть получен аналогично со вторым примером.

A. Tokitsukaze и улучшение

Перебор *800

Tokitsukaze — один из персонажей игры "Kantai Collection". В этой игре каждый персонаж имеет атрибут "health points", сокращенно HP.

Значения HP сгруппированы в \(4\) категории:

  • Категория \(A\): значение HP имеет форму \((4 n + 1)\), то есть при делении на \(4\) остаток равен \(1\);
  • Категория \(B\): значение HP имеет форму \((4 n + 3)\), то есть при делении на \(4\) остаток равен \(3\);
  • Категория \(C\): значение HP имеет форму \((4 n + 2)\), то есть при делении на \(4\) остаток равен \(2\);
  • Категория \(D\): значение HP имеет форму \(4 n\), то есть при делении на \(4\) остаток равен \(0\).

Вышеупомянутое \(n\) может быть любым целым числом.

Эти \(4\) категории упорядочены следующим образом от более высокого к более низкому: \(A > B > C > D\), то есть категория \(A\) является высшей, а категория \(D\) — низшей.

Во время игры игроки могут увеличивать HP персонажа. Теперь Tokitsukaze хочет, чтобы вы увеличили ее HP не больше, чем на \(2\) (то есть на \(0\), \(1\) или \(2\)). На сколько ей нужно увеличить HP так, чтобы категория ее HP стала как можно выше?

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

В единственной строке записано одно целое число \(x\) (\(30 \leq x \leq 100\)) — текущее значение HP у Tokitsukaze.

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

Выведите целое число \(a\) (\(0 \leq a \leq 2\)) и латинскую букву верхнего регистра \(b\) (\(b \in \lbrace A, B, C, D \rbrace\)), обозначающие, что лучший способ — это увеличить её HP на \(a\), и тогда категория станет равной \(b\).

Заметьте, что букву нужно выводить именно в верхнем регистре.

Примечание

В первом примере категория HP у Tokitsukaze и так равна \(A\), поэтому ее не нужно улучшать.

Во втором примере:

  • Если не улучшать ее HP, его значение будет равно \(98\), что равняется \((4 \times 24 + 2)\), а категория — равна \(C\).
  • Если увеличить ее HP на \(1\), значение станет равно \(99\), что равняется \((4 \times 24 + 3)\), а категория — равна \(B\).
  • Если увеличить ее HP на \(2\), значение станет равно \(100\), что равняется \((4 \times 25)\), а категория — равна \(D\).

Исходя из этого, лучший способ — улучшить ее HP на \(1\), чтобы категория стала равна \(B\).

B. Tokitsukaze и маджонг

Перебор реализация *1200

Tokitsukaze играет в игру, произошедшую от японской игры маджонг. В этой игре у нее в руке есть три тайла. Каждый тайл имеет масть (manzu, pinzu или souzu) и число (цифра от \(1\) до \(9\)). В этой задаче мы используем одну цифру и одну букву нижнего регистра, являющуюся первой буквой масти, для представления тайла. Все возможные тайлы представляются комбинациями 1m, 2m, \(\ldots\), 9m, 1p, 2p, \(\ldots\), 9p, 1s, 2s, \(\ldots\), 9s.

Для того, чтобы выиграть, Tokitsukaze должна иметь хотя бы одно mentsu (определение ниже) в руке, поэтому иногда ей нужно брать дополнительные тайлы. Она может взять сколько угодно каких угодно тайлов, даже тех, которые уже есть в ее руке.

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

Вот некоторые полезные определения, связанные с этой игрой:

  • Mentsu, также известное как слияние, это либо koutsu, либо shuntsu;
  • Koutsu, также известное как тройка, это три идентичных тайла, например [1m, 1m, 1m], однако [1m, 1p, 1s] и [1m, 4m, 7m] НЕ являются koutsu;
  • Shuntsu, также известное как последовательность, это три последовательно пронумерованных тайла одной масти, например [1m, 2m, 3m] или [5s, 7s, 6s], однако [9m, 1m, 2m] и [1m, 2p, 3s] НЕ являются shuntsu.

Немного примеров:

  • [2m, 3p, 2s, 4m, 1s, 2s, 4s] не содержит ни koutsu, ни shuntsu, поэтому не содержит mentsu;
  • [4s, 3m, 3p, 4s, 5p, 4s, 5p] содержит koutsu [4s, 4s, 4s], не содержит shuntsu, поэтому содержит mentsu;
  • [5p, 5s, 9m, 4p, 1s, 7p, 7m, 6p] не содержит koutsu, но содержит shuntsu: [5p, 4p, 6p] или [5p, 7p, 6p], поэтому это mentsu.

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

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

В единственной строке записаны три строки — тайлы в руке Tokitsukaze. В каждой строке первый символ является цифрой от \(1\) до \(9\), а второй — m, p или s.

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

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

Примечание

В первом примере у Tokitsukaze уже есть shuntsu.

Во втором примере у Tokitsukaze уже есть koutsu.

В третьем примере Tokitsukaze может собрать shuntsu, если возьмет один тайл — 1p или 4p. Тогда список тайлов в ее руке будет [3p, 9m, 2p, 1p] или [3p, 9m, 2p, 4p].

C. Кубворд

*особая задача meet-in-the-middle дп Перебор

Кубворд — особый вид кроссворда. Для построения кубворда сначала выбирается положительное целое число \(a\) — длина стороны куба. Затем строится большой куб, состоящий из \(a \times a \times a\) единичных кубиков. У большого куба 12 ребер. После этого выкидываются все единичные кубики, которые не касаются ребер большого куба. Рисунок ниже показывает, что получится при \(a=6\).

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

Рисунок ниже показывает фигуру при \(a=6\), где в некоторые единичные кубики уже записаны буквы. Уже можно прочитать слова «SUBMIT», «ACCEPT» и «TURING» вдоль трех ребер большого куба.

Вам дан список осмысленных слов. Каждое слово из этого списка может сколько угодно раз читаться на ребрах кубворда. Найдите число различных кубвордов, которые можно составить из этих слов, по модулю \(998,244,353\).

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

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 100,000\)) – количество слов.

Далее следуют \(n\) строк. Каждая из этих строк содержит одно слово, которое может присутствовать на ребрах большого куба. Длина каждого слова находится в пределах от 3 до 10 включительно.

Гарантируется, что все слова различны.

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

Выведите одно целое число — количество различных кубвордов из данных слов по модулю \(998,244,353\).

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

Подзадача 1 (21 балл): слова содержат только буквы «a» - «f» (строчные)

Подзадача 2 (29 баллов): слова содержат только буквы «a» - «p» (строчные)

Подзадача 3 (34 балла): слова содержат только буквы «a» - «p» (строчные) и «A» - «P» (заглавные)

Подзадача 4 (16 баллов): слова содержат только буквы «a» - «z» (строчные), «A» - «Z» (заглавные) и цифры «0» - «9»

Примечание

В первом примере единственная возможность составить кубворд — написать слово «radar» на всех ребрах.

Во втором примере есть два различных кубворда, которые получаются друг из друга поворотом: слово «robot» на всех ребрах, и разница лишь в том, содержит ли левый нижний передний угол букву «r» или «t».

Третий пример похож на второй. То, что мы можем читать слова в обоих направлениях, не изменяет ответ.

В четвертом примере есть один кубворд со словом «bob» на каждом ребре. Кроме того, есть \(2^{12} = 4096\) кубов со словом «baobab» на каждом ребре: для каждого из 12 ребер есть два возможных направления, в которых можно написать слово «baobab».

E. Посчитайте четырехугольники

битмаски геометрия Перебор сортировки Структуры данных *2200

На плоскости нарисовано \(n\) отрезков; \(i\)-й отрезок соединяет две точки (\(x_{i, 1}\), \(y_{i, 1}\)) и (\(x_{i, 2}\), \(y_{i, 2}\)). Каждый отрезок невырожден и является либо горизонтальным, либо вертикальным — формально, для любого \(i \in [1, n]\) выполняется ровно одно из двух условий: \(x_{i, 1} = x_{i, 2}\) или \(y_{i, 1} = y_{i, 2}\) . Только отрезки разных типов могут пересекаться, т. е. горизонтальные отрезки не имеют общих точек, то же самое верно и для вертикальных.

Четыре отрезка с индексами \(h_1\), \(h_2\), \(v_1\) и \(v_2\), такие, что \(h_1 < h_2\) и \(v_1 < v_2\), образуют прямоугольник при выполнение следующих условий:

  • отрезки \(h_1\) и \(h_2\) горизонтальные;
  • отрезки \(v_1\) и \(v_2\) вертикальные;
  • отрезок \(h_1\) пересекается с отрезком \(v_1\);
  • отрезок \(h_2\) пересекается с отрезком \(v_1\);
  • отрезок \(h_1\) пересекается с отрезком \(v_2\);
  • отрезок \(h_2\) пересекается с отрезком \(v_2\).

Подсчитайте количество способов выбрать четыре отрезка так, чтобы они образовывали прямоугольник. Не забывайте, что условия \(h_1 < h_2\) и \(v_1 < v_2\) должны выполняться.

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

Первая строка содержит целое число \(n\) (\(1 \le n \le 5000\)) — количество отрезков.

Далее следуют \(n\) строк. В \(i\)-й строке содержатся четыре целых числа \(x_{i, 1}\), \(y_{i, 1}\), \(x_{i, 2}\) и \(y_{i, 2}\), обозначающие концы \(i\)-го отрезка. Все координаты концов отрезков находятся в диапазоне \([-5000, 5000]\).

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

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

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

Примечание

На следующих картинках нарисованы тестовые примеры:

B. Спортивная мафия

Бинарный поиск математика Перебор *1000

Каждый вечер после ужина ЛКШата собираются в лодочной станции, чтобы насладиться игрой в спортивную мафию.

Для турнира Аля набирает в банку конфеты — это будет призовой фонд. Она делает это за \(n\) ходов. На первом ходу она кладёт в банку одну конфету. Каждый следующий ход у неё есть выбор:

  • первый вариант хода — если в банке есть хотя бы одна конфета, то она может за ход вытащить ровно одну конфету из банки и съесть её (таким образом, за один ход количество конфет в банке уменьшается на \(1\));
  • второй вариант хода — положить в банку конфеты, в этом случае она кладёт на \(1\) конфету больше, чем клала в последний раз перед этим.

Таким образом, если банка пуста, то она может осуществить только второй вариант хода.

Например, возможная последовательность действий Али такая:

  • положить в банку одну конфету;
  • положить в банку две конфеты;
  • съесть одну конфету из банки;
  • съесть одну конфету из банки;
  • положить в банку три конфеты;
  • съесть одну конфету из банки;
  • положить в банку четыре конфеты;
  • съесть одну конфету из банки;
  • положить в банку пять конфет.

В этом случае будет совершено \(9\) ходов, количество конфет в банке в итоге будет равно \(11\), а Аля съест суммарно \(4\) конфеты.

Известно общее количество ходов \(n\) и количество конфет \(k\) после всех ходов Али. Найдите суммарное количество съеденных Алей конфет (то есть количество ходов первого варианта). Гарантируется, что для заданных \(n\) и \(k\) ответ существует.

Обратите внимание, что за один ход первого варианта Аля вытаскивает и съедает ровно одну конфету.

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

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

Гарантируется, что для заданных \(n\) и \(k\) ответ существует.

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

Выведите одно целое число — количество конфет, которые съела Аля. Обратите внимание, что в этой задаче не может быть нескольких правильных ответов — ответ однозначно определяется по входных данным.

Примечание

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

Во втором примере возможна такая последовательность действий Али:

  • положила \(1\) конфету,
  • положила \(2\) конфеты,
  • съела конфету,
  • съела конфету,
  • положила \(3\) конфеты,
  • съела конфету,
  • положила \(4\) конфеты,
  • съела конфету,
  • положила \(5\) конфет.

В таком случае, она совершит \(n=9\) ходов, в итоге банке будет \(1+2-1-1+3-1+4-1+5=11\) конфет. Ответ равен \(4\) так как суммурно она съела \(4\) конфеты.

A. Три кучки с конфетами

Конструктив математика Перебор *800

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

После того как они возьмут все конфеты из кучек, если у Алисы будет больше конфет, чем у Боба, она выкидывает некоторые конфеты таким образом, что количество ее конфет становится равным количеству конфет Боба. Конечно, Боб сделает то же самое, если у него больше конфет.

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

Вам необходимо ответить на \(q\) независимых запросов.

Рассмотрим следующий пример: \([1, 3, 4]\). Здесь Алиса может взять третью кучку, Боб может взять вторую кучу, и единственную оставшуюся конфету из первой кучки получает Боб — тогда у Алисы будет \(4\) конфеты и у Боба тоже будет \(4\) конфеты.

Другой возможный пример — это \([1, 10, 100]\). Тогда Алиса может выбрать вторую кучку, Боб может выбрать первую кучку, и конфеты из третьей кучки могут быть разделены таким образом, что Боб получит \(54\) конфеты, а Алиса получит \(46\) конфет. Теперь у Боба есть \(55\) конфет, а у Алисы — \(56\) конфет, таким образом, она должна выкинуть одну конфету — и после этого у нее будет также \(55\) конфет.

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

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 1000\)) — количество запросов. Затем следуют \(q\) запросов.

Единственная строка запроса содержит три целых числа \(a, b\) и \(c\) (\(1 \le a, b, c \le 10^{16}\)) — количество конфет в первой, второй и третьей кучках соответственно.

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

Выведите \(q\) строк. \(i\)-я строка должна содержать ответ на \(i\)-й запрос — максимальное количество конфет, которое Алиса может иметь после разделения, если и Алиса, и Боб будут действовать оптимально (конечно же, Боб будет иметь такое же количество конфет).

F. К-й путь

Конструктив кратчайшие пути Перебор сортировки *2200

Вам задан связный неориентированный взвешенный граф, состоящий из \(n\) вершин и \(m\) ребер.

Вам необходимо вывести \(k\)-й минимальный кратчайший путь в этом графе (пути из вершины в саму себя не учитываются, пути из вершины \(i\) в вершину \(j\) и из вершины \(j\) в вершину \(i\) считаются за один).

Более формально, если \(d\) — матрица кратчайших путей, где \(d_{i, j}\) равно длине кратчайшего пути между вершинами \(i\) и \(j\) (\(1 \le i < j \le n\)), то вам необходимо вывести \(k\)-й элемент в отсортированном массиве, состоящем из всех \(d_{i, j}\), где \(1 \le i < j \le n\).

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

Первая строка входных данных содержит три целых числа \(n, m\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\), \(n - 1 \le m \le \min\Big(\frac{n(n-1)}{2}, 2 \cdot 10^5\Big)\), \(1 \le k \le \min\Big(\frac{n(n-1)}{2}, 400\Big)\)) — количество вершин в графе, количество ребер в графе и значение \(k\) соответственно.

Затем следуют \(m\) строк, каждая из которых содержит три целых числа \(x\), \(y\) и \(w\) (\(1 \le x, y \le n\), \(1 \le w \le 10^9\), \(x \ne y\)), обозначающих ребро между вершинами \(x\) и \(y\) веса \(w\).

Гарантируется, что заданный граф является связным (существует путь между каждой парой вершин), в графе отсутствуют петли (ребра, соединяющие вершину с самой собой) и кратные ребра (для каждой пары вершин \(x\) и \(y\) существует не более одного ребра между этими вершинами графа).

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

Выведите одно целое число — длину \(k\)-го минимального кратчайшего пути в заданном графе (пути из вершины в саму себя не учитываются, пути из вершины \(i\) в вершину \(j\) и из вершины \(j\) в вершину \(i\) считаются за один).

B. Социальное государство

Бинарный поиск Перебор сортировки Структуры данных *1600

В некотором государстве живёт \(n\) граждан. Количество денег у \(i\)-го из них равно \(a_{i}\). Государство внимательно следит за благосостоянием своих граждан. Если гражданин совершил покупку или заработал денег, то он обязан отправить в социальные службы справку об изменении баланса с указанием текущего количества денег. Иногда государство делает выплаты малоимущим гражданам: всем гражданам, у кого текущее количество денег строго меньше \(x\), выплачивают пособие такого размера, чтобы количество денег у них стало ровно \(x\). В таком случае гражданин не должен отправлять справку о изменении баланса.

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

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

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

В следующей строке записаны \(n\) чисел, разделённых пробелами, \(a_1\), \(a_2\), ..., \(a_n\) (\(0 \le a_{i} \le 10^{9}\)) — начальные балансы граждан.

В следующей строке записано одно число \(q\) (\(1 \le q \le 2 \cdot 10^{5}\)) — длина лога действий. В следующих \(q\) строках записаны действия в хронологическом порядке, по одному в строке.

Описание одного действия имеет либо вид 1 p x (\(1 \le p \le n\), \(0 \le x \le 10^{9}\)), либо вид 2 x (\(0 \le x \le 10^{9}\)). В первом случае была получена справка о том, что новый баланс гражданина \(p\) равен \(x\). Во втором — была проведена выплата с параметром \(x\).

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

Выведите \(n\) чисел, разделённых пробелами, — балансы всех граждан после всех событий.

Примечание

Процесс изменения балансов в первом примере: 1 2 3 4 \(\rightarrow\) 3 3 3 4 \(\rightarrow\) 3 2 3 4 \(\rightarrow\) 3 2 3 4

Процесс изменения балансов во втором примере: 3 50 2 1 10 \(\rightarrow\) 3 0 2 1 10 \(\rightarrow\) 8 8 8 8 10 \(\rightarrow\) 8 8 20 8 10

A. Лифт

математика Перебор реализация *1000

Недавно в городе N-ске достроили 1000-этажный небоскреб. Для перемещения по этажам небоскреба используются современные сверхскоростные лифты. У каждого лифта имеются две двери: передняя и задняя. Если человек входит в лифт через переднюю дверь, то выходит он через заднюю, и наоборот. В лифте имеются два поручня, пронумерованных числами 1 и 2. Поручень номер 1 находится слева от входа в переднюю дверь (или, соответственно, справа от входа в заднюю дверь), а поручень номер 2 — справа (слева от входа в заднюю дверь). Известно, что каждый человек в N-ске держится за поручень той рукой, которая у него наиболее развита.

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

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

В первой строке записано, через какую дверь важный человек зашел в лифт. В ней записано «front», если человек зашел в лифт через переднюю дверь, и «back», если через заднюю. Во второй строке содержится целое число a (1 ≤ a ≤ 2), обозначающее номер поручня, за который держался пассажир.

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

Выведите символ «R», если очень важный человек является правшой, или «L», если он является левшой.

D. Три сына

Перебор *1400

Старый фермер оставил трем своим сыновьям наследство — прямоугольное кукурузное поле, разбитое на n × m клеточек. Про каждую клеточку известно, сколько тонн кукурузы на ней растет. Своих сыновей фермер любил неодинаково, поэтому завещал разделить свое наследство на три части c суммарным количеством кукурузы A, B и C тонн.

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

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

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

В первой строке через пробел записаны целые числа n и m — размеры участка (1 ≤ n, m ≤ 50, max(n, m) ≥ 3). Далее следует описание поля: n строк, каждая из которых содержит по m целых чисел cij, записанных через пробел (0 ≤ cij ≤ 100) — количество кукурузы в каждой клетке (в тоннах). В последней строке через пробел записаны целые числа A, B, C (0 ≤ A, B, C ≤ 106).

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

Выведите ответ — количество способов разделить наследство так, чтобы на одной из получившихся частей росло A тонн кукурузы, на другой B, а на оставшейся C. Если не существует ни одного способа, выведите 0.

Примечание

Линии раздела могут быть как горизонтальными, так и вертикальными, но должны быть параллельны друг другу.

A. Отельер

Перебор реализация Структуры данных *800

Амуга владеет отелем, представимым в виде длинного коридора с \(10\) комнатами, идущими подряд. Комнаты пронумерованы цифрами от \(0\) до \(9\) слева направо.

В отель есть два входа: с левого конца коридора и с правого. Если гость заходит с левого конца коридора, то он будет расположен в ближайшей к левому входу свободной комнате. Аналогично, если гость заходит с правого конца коридора, то ему будет назначена ближайшая к правому входу свободная комната.

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

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество событий в памяти Амуга.

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

  • «L»: новый гость зашёл в отель с левого конца коридора.
  • «R»: новый гость зашёл в отель с правого конца коридора.
  • «0», «1», ..., «9»: гость из комнаты \(x\) (\(0\), \(1\), ..., \(9\) соответственно) покинул отель.

Гарантируется, что в отеле имеется хотя бы одна свободная комната, когда появляется новый гость. Также гарантируется, что, если задано \(x\) (\(0\), \(1\), ..., \(9\)), то в комнате \(x\) находится гость. В начальный момент времени все комнаты свободны.

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

В единственной строке выведите статус занятости комнат, начиная с комнаты \(0\) и заканчивая комнатой \(9\). Свободную комнату обозначайте как «0», а занятую — как «1». Символы выводите без пробелов.

Примечание

В первом примере статус занятости комнат после каждого из событий следующий:

  • Изначально все комнаты свободны. Статус занятости: 0000000000.
  • L: гость заходит в отель через вход слева. Статус занятости: 1000000000.
  • L: ещё один гость заходит через вход слева. Статус занятости: 1100000000.
  • R: ещё один гость заходит через вход справа. Статус занятости: 1100000001.
  • L: ещё один гость заходит через вход слева. Статус занятости: 1110000001.
  • 1: гость из комнаты \(1\) покидает отель. Статус занятости: 1010000001.
  • R: ещё один гость заходит через вход справа. Статус занятости: 1010000011.
  • L: ещё один гость заходит через вход слева. Статус занятости: 1110000011.
  • 1: гость из комнаты \(1\) покидает отель. Статус занятости: 1010000011.

Таким образом, финальный статус занятости комнат следующий: 1010000011.

Во втором примере статус занятости комнат после каждого из событий следующий:

  • L: гость заходит в отель через вход слева. Статус занятости: 1000000000.
  • 0: гость из комнаты \(0\) покидает отель. Статус занятости: 0000000000.
  • L: гость заходит в отель через вход слева. Статус занятости: 1000000000.
  • 0: гость из комнаты \(0\) покидает отель. Статус занятости: 0000000000.
  • L: гость заходит в отель через вход слева. Статус занятости: 1000000000.
  • L: ещё один гость заходит через вход слева. Статус занятости: 1100000000.
  • R: ещё один гость заходит через вход справа. Статус занятости: 1100000001.
  • R: oещё один гость заходит через вход справа. Статус занятости: 1100000011.
  • 9: гость из комнаты \(9\) покидает отель. Статус занятости: 1100000010.

Таким образом, финальный статус занятости комнат следующий: 1100000010.

D. Белые полосы

дп Перебор реализация Структуры данных *1900

Гильдон приобрел известный графический редактор cfpaint. Рабочая зона cfpaint — квадрат, состоящий из \(n\) строк и \(n\) столбцов квадратных клеток. Строки пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы — от \(1\) до \(n\) слева направо. Будем обозначать клетку в строке \(r\) и столбце \(c\) как \((r, c)\). Каждая клетка может иметь один из двух цветов — белый или черный.

В cfpaint есть инструмент, называемый ластиком. Ластик имеет размер \(k\) (\(1 \le k \le n\)). Чтобы его использовать, Гильдон должен щелкнуть в некоторую клетку \((i, j)\), где \(1 \le i, j \le n - k + 1\). Если он щелкнет в клетку \((i, j)\), то все клетки \((i', j')\) такие, что \(i \le i' \le i + k - 1\) и \(j \le j' \le j + k - 1\) станут белыми. Иными словами, квадрат со стороной в \(k\) клеток, левый верхний угол которого находится в клетке \((i, j)\), будет закрашен белым.

Белой полосой называется строка или столбец, не содержащие черных клеток.

Гильдон уже некоторое время использовал cfpaint, поэтоому некоторый клетки (возможно, все или ни одной) сейчас черные. Он хочет узнать максимальное число белых полос после того, как он использует ластик ровно один раз. Помогите Гильдону найти ответ на его вопрос.

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

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2000\)) — количество строк и столбцов и размер ластика.

Каждая из следующих \(n\) строк содержит \(n\) символов без пробелов. Символ \(j\) в \(i\)-й строке описывает клетку \((i,j)\). Каждый символ — либо «B», что обозначает черную клетку, либо «W», что обозначает белую клетку.

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

Выведите одно целое число: максимальное количество белых полос после ровно одного использования ластика.

Примечание

В первом примере Гильдон может щелкнуть в клетку \((2, 2)\), тогда рабочая зона будет выглядеть так:

BWWW
WWWW
WWWW
WWWB

Здесь есть четыре белых полосы: \(2\)-я и \(3\)-я строки, а также \(2\)-й и \(3\)-й столбцы.

Во втором примере нажатие на клетку \((2, 3)\) сделает \(2\)-ю строку белой.

В третьем примере \(2\)-й столбец и \(5\)-я строка станут белыми полосами, если щелкнуть в клетку \((3, 2)\).

E. Склеивание слов

Перебор реализация Строки строковые суфф. структуры хэши *2000

У Амуга есть предложение, состоящее из \(n\) слов. Он хочет склеить это предложение в одно слово. Амуга не любит повторений, поэтому, когда он склеивает два слова в одно, он удаляет самый длинный префикс второго слова, который совпадает с суффиксом первого слова. Например, слова «sample» и «please» он склеивает в «samplease».

Амуга хочет склеить предложение слева направо (т.е. сначала склеить первые два слова, потом склеить результат с третьим, и так далее). Напишите программу, которая найдет полученное после всех склеиваний слово.

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество слов в предложении Амуга.

Вторая строка содержит \(n\) слов, разделенных единичными пробелами. Каждое слово непусто и состоит из строчных и заглавных латинских букв, а также цифр ('A', 'B', ..., 'Z', 'a', 'b', ..., 'z', '0', '1', ..., '9'). Суммарная длина слов не превосходит \(10^6\).

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

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

F. Graph Traveler

графы дп математика Перебор поиск в глубину и подобное реализация Структуры данных теория чисел *2300

Гильдон проводит эксперименты с интересной машиной под названием Graph Traveler. В этой машине есть ориентированный граф из \(n\) вершин, пронумерованных от \(1\) до \(n\). \(i\)-я вершина имеет \(m_i\) выходящих ребер, они обозначаются \(e_i[0]\), \(e_i[1]\), \(\ldots\), \(e_i[m_i-1]\), где каждый элемент обозначает номер вершины конца ребра. В графе могут быть кратные ребра и петли. Кроме того, в каждой вершине \(i\) написано некоторое целое число \(k_i\).

Путь по графу определяется следующим образом.

  1. Гильдон выбирает вершину, с которой начнет путь, а также некоторое начальное целое число. Запомним это число в переменную \(c\).
  2. Когда Гильдон приходит в вершину \(i\), а также, в начале, если путь начинается с вершины \(i\), он добавляет значение \(k_i\) к \(c\).
  3. Следующая вершина пути — это \(e_i[x]\), где \(x\) — такое целое число \(0 \le x \le m_i-1\), что \(x \equiv c \pmod {m_i}\). Гильдон переходит в эту следующую вершину и возвращается на шаг 2.

Ясно, что такой путь никогда не кончается, потому что шаги 2 и 3 будут повторяться бесконечное число раз.

Например, предположим, что Гильдон начинает в вершине \(1\) с \(c = 5\), при этом \(m_1 = 2\), \(e_1[0] = 1\), \(e_1[1] = 2\), \(k_1 = -3\). Сразу после того, как он начинает в вершине \(1\), \(c\) становится равным \(2\). Так как единственное целое число \(x\) (\(0 \le x \le 1\)) такое, что \(x \equiv c \pmod {m_i}\), это \(0\), то Гильдон пойдет в вершину \(e_1[0] = 1\). После того как он попадет в вершину \(1\) снова, \(c\) станет равной \(-1\). Единственное целое число \(x\), удовлетворяющее сравнению, есть \(1\), поэтому он идет в вершину \(e_1[1] = 2\), и так далее.

Так как Гильдон достаточно любознательный, он хочет спросить у вас \(q\) вопросов. Каждый раз он хочет узнать, сколько различных вершин он посетит бесконечное число раз, если он начнет с определенной вершины с определенным числом \(c\). Обратите внимание, что не нужно учитывать вершины, которые будут посещены только конечное число раз.

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — количество вершин в графе.

Вторая строка содержит \(n\) целых чисел. \(i\)-е из них равно \(k_i\) (\(-10^9 \le k_i \le 10^9\)) — число, написанное в \(i\)-й вершине.

Следующие \(2 \cdot n\) строк описывают ребра, выходящие из каждой вершины. \((2 \cdot i + 1)\)-я строка содедржит одно целое число \(m_i\) (\(1 \le m_i \le 10\)) — число исходящих ребер из вершины \(i\). \((2 \cdot i + 2)\)-я строка содержит \(m_i\) целых чисел \(e_i[0]\), \(e_i[1]\), \(\ldots\), \(e_i[m_i-1]\), все значения которых лежат в пределах от \(1\) до \(n\) включительно.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество вопросов Гильдона.

Каждая из следующих \(q\) строк содержит два целых числа \(x\) и \(y\) (\(1 \le x \le n\), \(-10^9 \le y \le 10^9\)), которые означают, что Гильдон хочет начать путь с вершины \(x\), а начальное значение переменной \(c\) должно быть \(y\).

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

Для каждого запроса выведите количество различных вершин, которые будут посещены бесконечно много раз, если Гильдон начнет путь из вершины \(x\) с начальным значением \(y\).

Примечание

Граф в первом примере показан на рисунке ниже:

Три числа, показанные на вершине \(i\), равны соответственно \(i\), \(k_i\) и \(m_i\). Числа на ребрах показывают их номер в списке выходящих ребер из \(i\)-й вершины.

Путь для каждого запроса показан ниже. Он описывается последовательностью фраз, каждая в формате «вершина (\(c\) после добавления \(k_i\))».

  • \(1(0) \to 2(0) \to 2(0) \to \ldots\)
  • \(2(0) \to 2(0) \to \ldots\)
  • \(3(-1) \to 1(-1) \to 3(-1) \to \ldots\)
  • \(4(-2) \to 2(-2) \to 2(-2) \to \ldots\)
  • \(1(1) \to 3(1) \to 4(1) \to 1(1) \to \ldots\)
  • \(1(5) \to 3(5) \to 1(5) \to \ldots\)

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

Пути во втором примере показаны ниже:

  • \(1(4) \to 2(-1) \to 2(-6) \to \ldots\)
  • \(2(-5) \to 2(-10) \to \ldots\)
  • \(3(-4) \to 1(0) \to 2(-5) \to 2(-10) \to \ldots\)
  • \(4(-3) \to 1(1) \to 3(-2) \to 4(-3) \to \ldots\)
  • \(1(5) \to 3(2) \to 1(6) \to 2(1) \to 2(-4) \to \ldots\)
  • \(1(9) \to 3(6) \to 2(1) \to 2(-4) \to \ldots\)

B. Вам задана десятичная строка...

дп кратчайшие пути Перебор *1700

Предположим, у вас есть специальный \(x\)-\(y\)-счетчик. Этот счетчик способен хранить некоторое число в десятичной записи; первоначально это число \(0\).

Счетчик выполняет следующий алгоритм: он выводит последнюю цифру своего значения, и после этого прибавляет к своему значению либо \(x\), либо \(y\). Поэтому все последовательности, порожденные им, начинаются с \(0\). Для примера, \(4\)-\(2\)-счетчик может вести себя следующим образом:

  1. он выводит \(0\) и добавляет \(4\) к своему значению, поэтому текущее значение — \(4\), и вывод — \(0\);
  2. он выводит \(4\) и добавляет \(4\) к своему значению, текущее значение — \(8\), и вывод — \(04\);
  3. он выводит \(8\) и добавляет \(4\) к своему значению, текущее значение — \(12\), и вывод — \(048\);
  4. он выводит \(2\) и добавляет \(2\) к своему значению, текущее значение — \(14\), и вывод — \(0482\);
  5. он выводит \(4\) и добавляет \(4\) к своему значению, текущее значение — \(18\), и вывод — \(04824\).

Это только один из возможных выводов; например, этот же счетчик мог сгенерировать \(0246802468024\) как вывод, если бы он добавлял \(2\) на каждом шаге.

Вы выписали последовательность, которая была сгенерирована \(x\)-\(y\)-счетчиком. Но последовательность была испорчена и некоторые ее элементы могли быть стерты.

Теперь вы хотите восстановить эту последовательность, но вы даже не знаете тип счетчика, который вы использовали. У вас есть только десятичная строка \(s\) — оставшиеся элементы последовательности.

Для каждого \(0 \le x, y < 10\) посчитайте минимальное количество цифр, которое вам необходимо вставить в строку \(s\), чтобы сделать ее возможным выводом \(x\)-\(y\)-счетчика. Заметим, что вы не можете менять порядок цифр в строке \(s\) или стирать какие-то цифры; разрешены только вставки.

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

В первой строке задана одна строка \(s\) (\(1 \le |s| \le 2 \cdot 10^6\), \(s_i \in \{\text{0} - \text{9}\}\)) — оставшаяся от последовательности информация. Гарантируется, что \(s_1 = 0\).

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

Выведите матрицу \(10 \times 10\), где \(j\)-й элемент (\(0\)-индексация) на \(i\)-й строке (тоже \(0\)-индексация) равен минимальному количеству цифр, которые необходимо вставить в строку \(s\), чтобы сделать ее возможным выводом \(i\)-\(j\)-счетчика, либо \(-1\), если так сделать невозможно.

Примечание

Возьмем, например, \(4\)-\(3\)-счетчик. Один из возможных выводов, который он мог выдать, — \(0(4)8(1)4(7)0\) (в скобках потерянные элементы).

Один из возможных выводов \(2\)-\(3\)-счетчика — \(0(35)8(1)4(7)0\).

А \(6\)-\(8\)-счетчик, например, мог вывести ровно строку \(0840\).

C. Вам задана WASD-строка...

дп жадные алгоритмы математика Перебор реализация Строки Структуры данных *2100

У вас есть строка \(s\) — последовательность команд для робота. Робот находится в одной из клеток клетчатого поля. Он может выполнять следующие команды:

  • 'W' — переместиться на одну клетку вверх;
  • 'S' — переместиться на одну клетку вниз;
  • 'A' — переместиться на одну клетку влево;
  • 'D' — переместиться на одну клетку вправо.

\(Grid(s)\) — прямоугольное поле минимальной площади, такое, что на нем можно выбрать стартовую позицию робота так, что при выполнении всей последовательностей комнад \(s\) робот не выйдет за пределы прямоугольника. Например, если \(s = \text{DSAWWAW}\), то \(Grid(s)\) — это прямоугольник \(4 \times 3\).

  1. вы можете поместить робота в клетку \((3, 2)\);
  2. робот выполняет команду 'D' и перемещается в \((3, 3)\);
  3. робот выполняет команду 'S' и перемещается в \((4, 3)\);
  4. робот выполняет команду 'A' и перемещается в \((4, 2)\);
  5. робот выполняет команду 'W' и перемещается в \((3, 2)\);
  6. робот выполняет команду 'W' и перемещается в \((2, 2)\);
  7. робот выполняет команду 'A' и перемещается в \((2, 1)\);
  8. робот выполняет команду 'W' и перемещается в \((1, 1)\).

У вас есть \(4\) дополнительных буквы: одна 'W', одна 'A', одна 'S' и одна 'D'. Вы можете вставить одну из них (либо не вставлять вообще) в любую позицию в строке \(s\) для минимизации площади \(Grid(s)\).

Какую минимальную площадь \(Grid(s)\) вы можете получить?

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

Первая строка содержит число \(T\) (\(1 \le T \le 1000\)) — количество запросов.

Следующие \(T\) строк содержат запросы. Каждый запрос содержит строку \(s\) (\(1 \le |s| \le 2 \cdot 10^5\), \(s_i \in \{\text{W}, \text{A}, \text{S}, \text{D}\}\)) — последовательность команд.

Гарантируется, что суммарная длина строк \(s\) по всем запросам не превосходит \(2 \cdot 10^5\).

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

Выведите \(T\) строк, по одному числу в каждой строке.

На каждый запрос выведите минимальное значение \(Grid(s)\), которое вы можете получить.

Примечание

В первом запросе вам нужно получить строку \(\text{DSAWW}\underline{D}\text{AW}\).

Во втором и третьем запросах вы не можете уменьшить площадь \(Grid(s)\).

E. Вам задана строка...

Перебор Строки строковые суфф. структуры *2400

Вам задана строка \(t\) и \(n\) строк \(s_1, s_2, \dots, s_n\). Все строки состоят из строчных букв латинского алфавита.

Пусть \(f(t, s)\) равно количеству вхождений строки \(s\) в строку \(t\). Например, \(f('\text{aaabacaa}', '\text{aa}') = 3\), и \(f('\text{ababa}', '\text{aba}') = 2\).

Посчитайте значение \(\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} f(t, s_i + s_j)\), где \(s + t\) — конкатенация строк \(s\) и \(t\). Обратите внимание, что если есть две пары \(i_1\), \(j_1\) и \(i_2\), \(j_2\), такие что \(s_{i_1} + s_{j_1} = s_{i_2} + s_{j_2}\), вы должны учесть и \(f(t, s_{i_1} + s_{j_1})\), и \(f(t, s_{i_2} + s_{j_2})\).

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

Первая строка содержит строку \(t\) (\(1 \le |t| \le 2 \cdot 10^5\)).

Вторая строка содержит число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Каждая из следующих \(n\) строк содержит строку \(s_i\) (\(1 \le |s_i| \le 2 \cdot 10^5\)).

Гарантируется, что \(\sum\limits_{i=1}^{n} |s_i| \le 2 \cdot 10^5\). Все строки состоят из строчных букв латинского алфавита.

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

Выведите число — значение \(\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} f(t, s_i + s_j)\).

D1. Кёрк и бинарная строка (лёгкая версия)

жадные алгоритмы Перебор Строки *2000

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

У Кёрка есть бинарная строка \(s\) (строка, содержащая только нули и единицы) длины \(n\), и он просит вас найти бинарную строку \(t\) такой же длины, для которой выполняются следующие условия:

  • Для любых \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)) длина наибольшей неубывающей подпоследовательности в подстроке \(s_{l}s_{l+1} \ldots s_{r}\) равна длине наибольшей неубывающей подпоследовательности в подстроке \(t_{l}t_{l+1} \ldots t_{r}\);
  • Количество нулей в строке \(t\) — максимально возможное.

Неубывающая подпоследовательность в строке \(p\) — это такая последовательность индексов \(i_1, i_2, \ldots, i_k\), что \(i_1 < i_2 < \ldots < i_k\) и \(p_{i_1} \leq p_{i_2} \leq \ldots \leq p_{i_k}\). Число \(k\) называется длиной подпоследовательности.

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

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

Единственная строка содержит бинарную строку длины не больше \(2\: 000\).

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

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

Примечание

В первом примере:

  • Для подстрок длины \(1\) длина наибольшей неубывающей подпоследовательности равна \(1\);
  • Для \(l = 1, r = 2\) наибольшая неубывающая подпоследовательность для подстроки \(s_{1}s_{2}\) — \(11\), для подстроки \(t_{1}t_{2}\) — \(01\);
  • Для \(l = 2, r = 3\) наибольшая неубывающая подпоследовательность для подстроки \(s_{2}s_{3}\) — \(1\), для подстроки \(t_{2}t_{3}\) — \(1\);
  • Для \(l = 1, r = 3\) наибольшая неубывающая подпоследовательность для подстроки \(s_{1}s_{3}\) — \(11\), для подстроки \(t_{1}t_{3}\) — \(00\);

Второй пример аналогичен первому.

B. Кратчайший цикл

битмаски графы кратчайшие пути Перебор *1900

Даны \(n\) целых чисел \(a_1, a_2, \dots, a_n\). Рассмотрим граф на \(n\) вершинах, в котором вершины \(i\), \(j\) (\(i\neq j\)) соединены тогда и только тогда, когда \(a_i\) И \(a_j\neq 0\), где И обозначает операцию побитового И.

Найдите длину кратчайшего цикла в этом графе, или определите, что в графе нет циклов.

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

Первая строка содержит одно целое число \(n\) \((1 \le n \le 10^5)\) — количество чисел.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^{18}\)).

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

Если в графе нет циклов, выведите \(-1\). Иначе выведите длину кратчайшего цикла.

Примечание

В первом примере, самым коротким циклом будет \((9, 3, 6, 28)\).

Во втором примере, самым коротким циклом будет \((5, 12, 9)\).

В графе нет циклов в третьем примере.

A. Бывает два типа бургеров

жадные алгоритмы математика Перебор реализация *800

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

У вас есть \(b\) булочек, \(p\) говяжьих котлет и \(f\) куриных котлет. Один гамбургер вы продаете за \(h\) долларов, а один чикенбургер за \(c\) долларов. Посчитайте максимальную прибыль, которую вы можете получить.

Вам нужно ответить на \(t\) независимых запросов.

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

Первая строка содержит число \(t\) (\(1 \le t \le 100\)) – количество запросов.

Первая строка каждого запроса содержит три числа \(b\), \(p\) и \(f\) (\(1 \le b, ~p, ~f \le 100\)) — количество булочек, говяжьих и куриных котлет в вашем ресторане.

Вторая строка каждого запроса содержит два числа \(h\) и \(c\) (\(1 \le h, ~c \le 100\)) — цена за гамбургер и чикенбургер в вашем ресторане соответственно.

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

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

Примечание

В первом запросе вам нужно продать два гамбургера и три чикенбургера. Ваш доход составит \(2 \cdot 5 + 3 \cdot 10 = 40\).

Во втором запросе вам нужно продать один гамбургер и два чикенбургера. Ваш доход составит \(1 \cdot 10 + 2 \cdot 12 = 34\).

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

F. Задача об остатках

Перебор реализация Структуры данных *2100

У вас есть массив \(a\), состоящий из \(500000\) целых чисел (элементы нумеруются от \(1\) до \(500000\)). Изначально все элементы \(a\) — нули.

К этому массиву поступают запросы двух типов:

  • \(1\) \(x\) \(y\) — увеличить \(a_x\) на \(y\);
  • \(2\) \(x\) \(y\) — посчитать \(\sum\limits_{i \in R(x, y)} a_i\), где \(R(x, y)\) — множество всех целых чисел от \(1\) до \(500000\), дающих остаток \(y\) при делении на \(x\).

Можете ли вы обработать все запросы?

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

В первой строке записано одно целое число \(q\) (\(1 \le q \le 500000\)) — количество запросов.

Затем следуют \(q\) строк, каждая из которых задает запрос. В \(i\)-й строке записаны три целых числа \(t_i\), \(x_i\) и \(y_i\) (\(1 \le t_i \le 2\)). Если \(t_i = 1\), то это запрос первого типа, \(1 \le x_i \le 500000\), и \(-1000 \le y_i \le 1000\). Если \(t_i = 2\), то это запрос второго типа, \(1 \le x_i \le 500000\), и \(0 \le y_i < x_i\).

Гарантируется, что во входных данных есть хотя бы один запрос типа \(2\).

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

Для каждого запроса типа \(2\) выведите одно целое число — ответ на этот запрос.

B. Уникальность

Бинарный поиск Перебор реализация *1500

Дан массив \(a_{1}, a_{2}, \ldots, a_{n}\). Вы можете удалить из него не более одного подотрезка. Оставшиеся элементы должны быть попарно различны.

Другими словами, не более одного раза вы можете выбрать два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)) и удалить элементы \(a_l, a_{l+1}, \ldots, a_r\) из массива. Оставшиеся в массиве элементы должны быть попарно различны.

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

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

Первая строка ввода содержит целое число \(n\) (\(1 \le n \le 2000\)) — количество элементов массива.

В следующей строке записаны \(n\) целых чисел \(a_{1}, a_{2}, \ldots, a_{n}\) (\(1 \le a_{i} \le 10^{9}\)) — элементы массива.

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

Выведите одно целое число — минимальный размер подотрезка при удалении которого все элементы массива будут попарно различными. Если элементы массива попарно различны и без удаления подотрезка, выведите \(0\).

Примечание

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

Во втором примере вы можете удалить подотрезок с индексами от \(2\) до \(3\).

В третьем примере вы можете удалить подотрезок с индексами от \(1\) до \(2\), или с индексами от \(2\) до \(3\), или с индексами от \(3\) до \(4\).

E1. Вращая столбцы (упрощенная версия)

битмаски дп жадные алгоритмы Перебор сортировки *2000

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

Вам дана прямоугольная матрица \(a\) размером \(n \times m\). За один ход вы можете выбрать произвольный столбец и циклически сдвинуть все элементы в этом столбце. Вы можете выполнять эту операцию произвольное (ноль или более) количество раз. Вы можете применять эту операцию для одного столбца произвольное количество раз.

После того, как вы закончили, вы вычисляете для каждой строки наибольший элемент в ней. Предположим, для \(i\)-й строки он равен \(r_i\). Чему равно наибольшее значение \(r_1+r_2+\ldots+r_n\)?

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

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 40\)), количество наборов входных данных в тесте.

Первая строка каждого набора входных данных содержит целые числа \(n\) и \(m\) (\(1 \le n \le 4\), \(1 \le m \le 100\)) — число строк и число столбцов в матрице \(a\).

Каждая из следующих \(n\) строк содержит \(m\) чисел — элементы матрицы \(a\) (\(1 \le a_{i, j} \le 10^5\)).

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

Выведите \(t\) целых чисел: ответы на все наборы входных данных, в порядке, в котором они заданы в тесте.

Примечание

В первом тестовом наборе можно сдвинуть третий столбец вниз на один, тогда будет \(r_1 = 5\) и \(r_2 = 7\).

Во втором тестовом наборе можно ничего не делать, тогда будет \(r_1 = r_2 = 10\) и \(r_3 = 9\).

C. Счастливая перестановка

Комбинаторика Перебор теория чисел *1900

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

Однажды во сне Петя увидел лексикографически k-ую перестановку целых чисел от 1 до n. Определите, сколько счастливых чисел стоит в этой перестановке на позициях, номера которых также являются счастливыми числами.

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

В первой строке задано два целых числа n и k (1 ≤ n, k ≤ 109) — количество элементов в перестановке и номер перестановки в лексикографическом порядке.

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

Если не существует k-ой перестановки чисел от 1 до n, выведите одно число «-1» (без кавычек). Иначе выведите ответ на задачу: количество таких i, что одновременно и i, и ai являются счастливыми числами.

Примечание

Перестановка — это упорядоченный набор из n элементов, в котором каждое целое число от 1 до n встречается ровно один раз. Элемент перестановки в позиции i обозначается ai (1 ≤ i ≤ n). Перестановка a лексикографически меньше перестановки b, если существует такое i (1 ≤ i ≤ n), что ai < bi, и для любого j (1 ≤ j < i) aj = bj. Составим список из всех возможный перестановок из n элементов, и отсортируем его в порядке лексикографического возрастания. Тогда лексикографически k-ая перестановка — k-ый элемент этого списка перестановок.

В первом примере перестановка имеет вид:

1 2 3 4 6 7 5

Единственная подходящая позиция — 4.

Во втором примере перестановка имеет вид:

2 1 3 4

Единственная подходящая позиция — 4.

A. Анади и домино

графы Перебор *1700

У Анади есть комплект домино. Каждое домино разделено на две части, на каждой части нарисовано сколько-то точек. Для каждой такой пары \(a\) и \(b\), что \(1 \leq a \leq b \leq 6\), есть ровно одно домино с \(a\) точками на одной половине и \(b\) точками на другой половине. Комплект состоит ровно из \(21\) домино. Вот иллюстрация всех домино из набора:

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

Но также есть одно дополнительно условие: если несколько половинок домино направлены к одной и той же вершине, все эти половинки должны содержать одинаковое число точек.

Какое максимальное количество домино Анади может расставить на ребрах графа?

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \leq n \leq 7\), \(0 \leq m \leq \frac{n\cdot(n-1)}{2}\)) — количество вершин и ребер графа.

В каждой из следующих \(m\) строк записано по два целых числа. Числа в \(i\)-й строке это \(a_i\) и \(b_i\) (\(1 \leq a, b \leq n\), \(a \neq b\)), описывающих ребро в графе, соединяющее вершины \(a_i\) и \(b_i\).

Гарантируется, что никакое ребро не соединяет вершину саму с собой, а также между каждой парой вершин есть не более одного ребра.

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

Выведите одно целое число — максимальное количество домино, которое Анади может расставить на ребрах графа.

Примечание

Иллюстрация к графу Анади из первого примера:

А вот один из способов расставить на его ребрах домино:

Обратите внимание, что к каждой вершине направлены половинки домино с одинаковым числом точек. Например, все половинки направленные к вершины \(1\) содержат три точки.

B. Марчин и сборы

жадные алгоритмы Перебор *1700

Марчин — тренер в университете. Есть \(n\) студентов, которые хотят поучаствовать в сборах. Марчин умный тренер, поэтому он хочет отправить только студентов, которые могут спокойно работать вместе.

Рассмотрим студентов. Они пронумерованы целыми числами от \(1\) до \(n\). Каждый из них описывается двумя целыми числами \(a_i\) и \(b_i\); \(b_i\) равно опыту \(i\)-го участника (чем больше, тем лучше). А также есть \(60\) известных алгоритмов, которые пронумерованы целыми числами от \(0\) до \(59\). Если \(i\)-й студент знает \(j\)-й алгоритм, тогда \(j\)-й бит (\(2^j\)) равен единице в двоичной записи \(a_i\). Иначе, он равен нулю.

Студент \(x\) считает, что он лучше студента \(y\) если и только если \(x\) знает какой-то алгоритм, который не знает \(y\). Обратите внимание, что два студента могут считать, что они лучше друг друга. Группа студентов может работать спокойно, если ни один студент из группы не считает, что он лучше всех остальных в этой группе.

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

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

В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 7000\)) — количество студентов, заинтересованных в сборах.

Во второй строке записаны \(n\) целых чисел. \(i\)-е из них это \(a_i\) (\(0 \leq a_i < 2^{60}\)).

В третьей строке записаны \(n\) целых чисел. \(i\)-е из них это \(b_i\) (\(1 \leq b_i \leq 10^9\)).

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

Выведите одно целое число, которое равно максимальной сумме \(b_i\) студентов в группе, в которой студенты могут работать спокойно. Если не существует группы из хотя бы двух студентов, в которой студенты могут работать спокойно, выведите 0.

Примечание

В первом примере оптимально отправить на сборы первого, второго, и третьего студента. Также возможно отправить только первого и третьего студента, но сумма \(b_i\) у них будет меньше.

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

F1. Марек и паросочетания (упрощенная версия)

Перебор Теория вероятностей *3100

Это упрощённая версия задачи. В этой версии, \(n \le 6\).

Марек работает над тестами для новой задачи. Хотите узнать, для какой? Не-а, мы вам не скажем. Однако, мы скажем вам как он генерирует тесты.

Марек выбирает целое число \(n\) и \(n^2\) целых чисел \(p_{ij}\) (\(1 \le i \le n\), \(1 \le j \le n\)). Затем он генерирует случайный двудольный граф на \(2n\) вершин. В этом графе есть \(n\) вершин у левой доли: \(\ell_1, \ell_2, \dots, \ell_n\), и \(n\) вершин у правой доли: \(r_1, r_2, \dots, r_n\). Для каждой пары \(i\) и \(j\), он добавляет в граф ребро между вершинами \(\ell_i\) и \(r_j\) с вероятностью \(p_{ij}\) процентов.

Оказывается, что тест будет сильным, если в этом графе есть совершенное паросочетание. Какова вероятность, что это произойдет?

Можно показать, что ответ можно представить в виде \(\frac{P}{Q}\), где \(P\) и \(Q\) взаимно простые целое число и \(Q \not\equiv 0 \pmod{10^9+7}\). Обозначим за \(Q^{-1}\) целое число, для которого верно \(Q \cdot Q^{-1} \equiv 1 \pmod{10^9+7}\). Выведите значение \(P \cdot Q^{-1}\) по модулю \(10^9+7\).

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

В первой строке записано одно целое число \(n\) (\(\mathbf{1 \le n \le 6}\)). Следующие \(n\) строк описывают вероятности появления каждого ребра в графе. \(i\)-й из них содержит \(n\) целых чисел \(p_{i1}, p_{i2}, \dots, p_{in}\) (\(0 \le p_{ij} \le 100\)); \(p_{ij}\) описывает вероятность, в процентах, наличия в графе ребра между вершинами \(\ell_i\) и \(r_j\).

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

Выведите одно целое число — вероятность, что в двудольном графе есть совершенное паросочетание, записанная как \(P \cdot Q^{-1} \pmod{10^9+7}\) для \(P\), \(Q\) определенных ранее.

Примечание

В первом примере, каждый из \(16\) графов равновероятен. Из них у \(7\) есть совершенное паросочетание:

Таким образом, вероятность равна \(\frac{7}{16}\). Так как \(16 \cdot 562\,500\,004 = 1 \pmod{10^9+7}\), ответ на тест равен \(7 \cdot 562\,500\,004 \mod{(10^9+7)} = 937\,500\,007\).

F2. Марек и паросочетания (усложненная версия)

Перебор Теория вероятностей *3200

Это усложненная версия задачи. В этой версии, \(n \le 7\).

Марек работает над тестами для новой задачи. Хотите узнать, для какой? Не-а, мы вам не скажем. Однако, мы скажем вам как он генерирует тесты.

Марек выбирает целое число \(n\) и \(n^2\) целых чисел \(p_{ij}\) (\(1 \le i \le n\), \(1 \le j \le n\)). Затем он генерирует случайный двудольный граф на \(2n\) вершин. В этом графе есть \(n\) вершин у левой доли: \(\ell_1, \ell_2, \dots, \ell_n\), и \(n\) вершин у правой доли: \(r_1, r_2, \dots, r_n\). Для каждой пары \(i\) и \(j\), он добавляет в граф ребро между вершинами \(\ell_i\) и \(r_j\) с вероятностью \(p_{ij}\) процентов.

Оказывается, что тест будет сильным, если в этом графе есть совершенное паросочетание. Какова вероятность, что это произойдет?

Можно показать, что ответ можно представить в виде \(\frac{P}{Q}\), где \(P\) и \(Q\) взаимно простые целое число и \(Q \not\equiv 0 \pmod{10^9+7}\). Обозначим за \(Q^{-1}\) целое число, для которого верно \(Q \cdot Q^{-1} \equiv 1 \pmod{10^9+7}\). Выведите значение \(P \cdot Q^{-1}\) по модулю \(10^9+7\).

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

В первой строке записано одно целое число \(n\) (\(\mathbf{1 \le n \le 7}\)). Следующие \(n\) строк описывают вероятности появления каждого ребра в графе. \(i\)-й из них содержит \(n\) целых чисел \(p_{i1}, p_{i2}, \dots, p_{in}\) (\(0 \le p_{ij} \le 100\)); \(p_{ij}\) описывает вероятность, в процентах, наличия в графе ребра между вершинами \(\ell_i\) и \(r_j\).

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

Выведите одно целое число — вероятность, что в двудольном графе есть совершенное паросочетание, записанная как \(P \cdot Q^{-1} \pmod{10^9+7}\) для \(P\), \(Q\) определенных ранее.

Примечание

В первом примере, каждый из \(16\) графов равновероятен. Из них у \(7\) есть совершенное паросочетание:

Таким образом, вероятность равна \(\frac{7}{16}\). Так как \(16 \cdot 562\,500\,004 = 1 \pmod{10^9+7}\), ответ на тест равен \(7 \cdot 562\,500\,004 \mod{(10^9+7)} = 937\,500\,007\).

D1. Приравнивание делением (легкая версия)

Перебор реализация *1500

Единственное отличие между легкой и сложной версиями — количество элементов в массиве.

Вам задан массив \(a\), состоящий из \(n\) целых чисел. За один ход вы можете выбрать любое \(a_i\) и разделить его на \(2\) с округлением вниз (иными словами, за один ход вы можете присвоить \(a_i := \lfloor\frac{a_i}{2}\rfloor\)).

Вы можете совершать эту операцию любое (возможно, нулевое) количество раз с любым \(a_i\).

Ваша задача — посчитать минимально возможное количество операций, необходимое для того, чтобы получить хотя бы \(k\) равных чисел в массиве.

Не забудьте, что допустимо иметь \(a_i = 0\) после каких-то операций, таким образом, ответ всегда существует.

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

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 50\)) — количество элементов в массиве и необходимое количество равных элементов.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)), где \(a_i\) равно \(i\)-му элементу \(a\).

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

Выведите одно целое число — минимально возможное количество операций, необходимое для того, чтобы получить хотя бы \(k\) равных элементов в массиве.

D2. Приравнивание делением (сложная версия)

математика Перебор сортировки *1600

Единственное отличие между легкой и сложной версиями — количество элементов в массиве.

Вам задан массив \(a\), состоящий из \(n\) целых чисел. За один ход вы можете выбрать любое \(a_i\) и разделить его на \(2\) с округлением вниз (иными словами, за один ход вы можете присвоить \(a_i := \lfloor\frac{a_i}{2}\rfloor\)).

Вы можете совершать эту операцию любое (возможно, нулевое) количество раз с любым \(a_i\).

Ваша задача — посчитать минимально возможное количество операций, необходимое для того, чтобы получить хотя бы \(k\) равных чисел в массиве.

Не забудьте, что допустимо иметь \(a_i = 0\) после каких-то операций, таким образом, ответ всегда существует.

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

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) — количество элементов в массиве и необходимое количество равных элементов.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)), где \(a_i\) равно \(i\)-му элементу \(a\).

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

Выведите одно целое число — минимально возможное количество операций, необходимое для того, чтобы получить хотя бы \(k\) равных элементов в массиве.

E. Две маленькие строки

Конструктив Перебор *1900

Вам задано две строки \(s\) и \(t\) обе длины \(2\) и состоящие только из символов 'a', 'b' и 'c'.

Возможные примеры строк \(s\) и \(t\): «ab», «ca», «bb».

Вам необходимо найти строку \(res\), состоящую из \(3n\) символов, \(n\) символов должны быть равны 'a', \(n\) символов должны быть равны 'b' и \(n\) символов должны быть равны 'c', а также \(s\) и \(t\) не должны встречаться в \(res\) в качестве подстрок.

Подстрокой строки называется последовательная подпоследовательность этой строки. Таким образом, строки «ab», «ac» и «cc» являются подстроками строки «abacc», а строки «bc», «aa» и «cb» — не являются подстроками строки «abacc».

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

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество символов 'a', 'b' и 'c' в результирующей строке.

Вторая строка входных данных содержит одну строку \(s\) длины \(2\), состоящую из символов 'a', 'b' и 'c'.

Третья строка входных данных содержит одну строку \(t\) длины \(2\), состоящую из символов 'a', 'b' и 'c'.

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

Если невозможно найти подходящую строку, выведите «NO» в первой строке.

Иначе выведите «YES» в первой строке и строку \(res\) во второй строке. \(res\) должна состоять из \(3n\) символов, \(n\) символов должны быть равны 'a', \(n\) символов должны быть равны 'b' и \(n\) символов должны быть равны 'c', а также \(s\) и \(t\) не должны встречаться в \(res\) в качестве подстрок.

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

A. Оптимальный обмен валюты

математика Перебор *1400

Дни олимпиады Мегаполисов пролетели быстро, и вот участник Андрей уже в аэропорту. После пребывания в Москве у него осталось \(n\) рублей. Андрей хочет обменять их на купюры долларов или евро в любой комбинации (то есть, можно покупать одновременно и доллары, и евро). За один доллар придется отдать \(d\) рублей, а за один евро — \(e\) рублей.

Напомним, что долларовые купюры имеют номиналы \(1\), \(2\), \(5\), \(10\), \(20\), \(50\), \(100\), а купюры евро — \(5\), \(10\), \(20\), \(50\), \(100\), \(200\) (купюры номиналом в \(500\) евро в задаче отсутствуют, их тяжело найти в обменниках). Андрей может купить любой набор любых купюр. Он хочет сделать так, чтобы рублей у него осталось как можно меньше.

Помогите ему это сделать — напишите программу, которая по значениям \(n\), \(e\) и \(d\) определит, какое минимальное число рублей может остаться у Андрея после оптимального обмена валюты.

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

В первой строке входных данных находится целое число \(n\) (\(1 \leq n \leq 10^8\)) — количество рублей у Андрея.

Во второй строке находится целое число \(d\) (\(30 \leq d \leq 100\)) — стоимость одного доллара в рублях.

В третьей строке находится целое число \(e\) (\(30 \leq e \leq 100\)) — стоимость одного евро в рублях.

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

Выведите одно целое число — минимальную сумму в рублях, которая может остаться у Андрея после оптимального обмена.

Примечание

В первом примере можно купить только \(1\) доллар, потому что купюры в \(1\) евро не существует.

Во втором примере оптимально купить \(5\) евро и \(1\) доллар.

В третьем примере можно купить одну \(10\)-долларовую купюру.

B. Бейджи

математика Перебор *1100

На Олимпиаду Мегаполисов приехали \(b\) мальчиков и \(g\) девочек. Известно, что \(n\) из них согласились принять участие в турнире по настольным играм. Организаторы не знают сколько именно среди них мальчиков и девочек.

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

Вася приготовил \(n+1\) колоду с бейджами. В \(i\)-й (где \(i\) от \(0\) до \(n\), включительно) колоде у Васи \(i\) синих бейджей и \(n-i\) красных. Суммарное количество бейджей в любой колоде равно \(n\).

Определите, сколько минимум колод из этих \(n+1\) Вася должен взять на турнир, чтобы вне зависимости от количества мальчиков и девочек среди них, нашлась подходящая стопка.

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

В первой строке находится целое число \(b\) (\(1 \le b \le 300\)) — количество мальчиков, которые приехали на олимпиаду.

Во второй строке находится целое число \(g\) (\(1 \le g \le 300\)) — количество девочек, которые приехали на олимпиаду.

В третьей строке находится целое число \(n\) (\(1 \le n \le b + g\)) — количество участников в турнире.

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

Выведите одно целое число — искомое минимальное количество колод.

Примечание

В первом примере все 4 колоды должны быть использованы: (0 синих, 3 красных), (1 синий, 2 красных), (2 синих, 1 красный), (3 синих, 0 красных).

Во втором примере 4 колоды должны быть использованы: (2 синих, 3 красных), (3 синих, 2 красных), (4 синих, 1 красный), (5 синих, 0 красных). Стопки (0 синих, 5 красных) и (1 синий, 4 красных) не могут понадобиться.

E1. Числовая последовательность (простая версия)

Бинарный поиск математика Перебор *1900

Единственное отличие между простой и сложной версиями — максимальное значение \(k\).

Вам задана бесконечная последовательность вида «112123123412345\(\dots\)», в которой следуют блоки всех последовательных целых чисел, записанных друг за другом. Первый блок содержит все числа от \(1\) до \(1\), второй — от \(1\) до \(2\), третий — от \(1\) до \(3\), \(\dots\), \(i\)-й блок содержит все числа от \(1\) до \(i\).

Таким образом, первые \(56\) элементов последовательности равны «11212312341234512345612345671234567812345678912345678910». Элементы последовательности нумеруются с единицы. Например, \(1\)-й элемент последовательности равен \(1\), \(3\)-й элемент последовательности равен \(2\), \(20\)-й элемент последовательности равен \(5\), \(38\)-й элемент равен \(2\), \(56\)-й элемент последовательности равен \(0\).

Перед вами стоит задача ответить на \(q\) независимых запросов. Для \(i\)-го запроса задано целое число \(k_i\). Определите элемент последовательности, который находится в позиции \(k_i\).

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

В первой строке следует целое число \(q\) (\(1 \le q \le 500\)) — количество запросов.

В \(i\)-й из следующих \(q\) строк следует целое число \(k_i\) \((1 \le k_i \le 10^9)\) — описание очередного запроса.

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

Выведите \(q\) строк. В \(i\)-ю строку должна быть выведена цифра \(x_i\) \((0 \le x_i \le 9)\) — ответ на запрос номер \(i\), то есть \(x_i\) должно быть равно элементу последовательности, который находится в позиции \(k_i\).

Примечание

Ответы на запросы из первого примера подробно разобраны в условии.

C. Количество хороших подстрок

Бинарный поиск битмаски Перебор *1700

Вам задана бинарная строка \(s\) (эта строка содержит только цифры \(0\) и \(1\)).

Пусть \(f(t)\) — десятичное представление числа \(t\), записанного в двоичном виде (возможно с лидирующими нулями). Например \(f(011) = 3, f(00101) = 5, f(00001) = 1, f(10) = 2, f(000) = 0\) и \(f(000100) = 4\).

Подстрока \(s_{l}, s_{l+1}, \dots , s_{r}\) хорошая, если \(r - l + 1 = f(s_l \dots s_r)\).

Например, строка \(s = 1011\) имеет \(5\) хороших подстрок: \(s_1 \dots s_1 = 1\), \(s_3 \dots s_3 = 1\), \(s_4 \dots s_4 = 1\), \(s_1 \dots s_2 = 10\) и \(s_2 \dots s_4 = 011\).

Вам нужно посчитать количество хороших подстрок строки \(s\).

Вам нужно ответить на \(t\) независимых запросов.

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

Первая строка содержит число \(t\) (\(1 \le t \le 1000\)) — количество запросов.

Каждый запрос содержит единственную строку \(s\) (\(1 \le |s| \le 2 \cdot 10^5\)), состоящую только из цифр \(0\) и \(1\).

Гарантируется что \(\sum\limits_{i=1}^{t} |s_i| \le 2 \cdot 10^5\).

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

На каждый запрос выведите одно число — количество хороших подстрок строки \(s\).

A. Счастливое деление

Перебор теория чисел *1000

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

Петя называет число почти счастливым, если оно делится без остатка на какое-либо счастливое число. Помогите ему узнать, является ли заданное число n почти счастливым?

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

В единственной строке задано целое число n (1 ≤ n ≤ 1000) — число, которое нужно проверить.

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

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

Примечание

Заметим, что все счастливые числа являются почти счастливыми, так как любое число делится само на себя без остатка.

В первом примере 47 — счастливое число. Во втором примере 16 делится на 4.

B. Счастливая подстрока

Перебор реализация *1000

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

Однажды по почте Пете пришла строка s, состоящая только из цифр. Ему требуется найти строку, которая

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

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

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

В единственной строке задана непустая строка s длиной от 1 до 50 включительно, содержащая только цифры. Строка может содержать лидирующие нули.

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

В единственное строке выведите ответ на задачу Пети. Если искомой строки не существует, выведите «-1» (без кавычек).

Примечание

Лексикографическое сравнение строк реализует оператор < в современных языках программирования. Строка x лексикографически меньше строки y, если либо x является префиксом y, либо существует такое i (1 ≤ i ≤ min(|x|, |y|)), что xi < yi, и для любого j (1 ≤ j < i) xj = yj. Здесь |a| обозначает длину строки a.

В первом примере три условия выполняются для строк «4», «7» и «47». Из них лексикографически минимальная — «4».

Во втором примере s не имеет подстрок, являющихся счастливыми числами.

В третьем примере три условия выполняются только для строки «7».

A. Игра 2048

жадные алгоритмы математика Перебор *1000

Вы играете в вариацию игры 2048. Изначально у вас есть набор \(s\), состоящий из \(n\) чисел. Все числа из этого набора являются степенью двойки.

Вы можете совершать любое количество (возможно, нулевое) операций с этим набором чисел.

Во время каждой операции вы выбираете два равных числа из \(s\), удаляете их из набора \(s\) и добавляете в \(s\) число, равное их сумме.

Например, если \(s = \{1, 2, 1, 1, 4, 2, 2\}\), и вы выберете числа \(2\) и \(2\), то набор превратится в \(\{1, 1, 1, 4, 4, 2\}\).

Вы выиграете, если число \(2048\) окажется в вашем наборе. Например, если \(s = \{1024, 512, 512, 4\}\) вы можете выиграть следующим образом: выберите \(512\) и \(512\), и ваш набор превратится в \(\{1024, 1024, 4\}\). Затем вы можете выбрать числа \(1024\) и \(1024\), и ваш набор превратится в \(\{2048, 4\}\).

Определите, можете ли вы выиграть в этой игре.

Вам нужно ответить на \(q\) независимых запросов.

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

Первая строка содержит число \(q\) (\(1 \le q \le 100\)) — количество запросов.

Первая строка каждого запроса содержит число \(n\) (\(1 \le n \le 100\)) — количество чисел в наборе.

Вторая строка каждого запроса содержит \(n\) чисел \(s_1, s_2, \dots, s_n\) (\(1 \le s_i \le 2^{29}\)) — описание вашего набора чисел. Гарантируется, что все числа в наборе являются степенью двойки.

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

На каждый запрос выведите YES если вы можете получить число \(2048\) в вашем наборе, и NO в обратном случае.

Вы можете выводить ответ в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом запросе вы можете выбрать числа \(512\) и \(512\), и \(s\) превратится в \(\{1024, 64, 1024\}\). А затем вы выбираете числа \(1024\) и \(1024\), после этого набор \(s\) превратится в \(\{2048, 64\}\).

Во втором запросе набор \(s\) содержит число \(2048\) изначально.

G. Граф и числа

meet-in-the-middle битмаски дп Комбинаторика Перебор *2900

Вам задан неориентированный граф из \(n\) вершин и \(m\) ребер. Вы должны написать число на каждой вершине графа, каждое число должно быть равно \(0\) или \(1\). После этого на каждом ребре будет записана сумма чисел на двух вершинах, инцидентных этому ребру.

Вы должны выбрать числа таким образом, чтобы было хотя бы одно ребро с числом \(0\), хотя бы одно ребро с числом \(1\) и хотя бы одно ребро с числом \(2\). Сколько способов так расставить числа? Два способа различны, если существует хотя бы одна вершина, на которой в разных способах записаны разные числа.

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

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n \le 40\), \(0 \le m \le \frac{n(n - 1)}{2}\)) — количество вершин и ребер, соответственно.

Затем следуют \(m\) строк, в каждой из которых записаны два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\), \(x_i \ne y_i\)) — вершины, соединяемые \(i\)-м ребром. Гарантируется, что между каждой парой вершин существует не более одного ребра.

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

Выведите одно целое число — количество способов так записать числа на вершинах, что есть хотя бы одно ребро с числом \(0\), хотя бы одно ребро с числом \(1\) и хотя бы одно ребро с числом \(2\).

C. p-двоичные числа

битмаски математика Перебор *1600

Васе нравятся любые числа, лишь бы они были целыми степенями двойки. Петя, в отличие от Васи, более консервативен, и ему нравится только одно число \(p\) (оно может быть положительным, отрицательным или нулём). Они решили объединить свои вкусы и изобрели \(p\)-двоичные числа вида \(2^x + p\), где \(x\) — неотрицательное целое число.

Например, некоторые \(-9\)-двоичные («минус девять» двоичные) числа — это \(-8\) (минус восемь), \(7\) и \(1015\) (\(-8=2^0-9\), \(7=2^4-9\), \(1015=2^{10}-9\)).

Теперь ребята используют \(p\)-двоичные числа, чтобы представлять всё вокруг. Они столкнулись с проблемой: для данного положительного целого \(n\), какое наименьшее количество \(p\)-двоичных чисел (не обязательно различных) им понадобится, чтобы представить \(n\) в виде их суммы? Возможно, что представления вообще не существует. Помогите им справиться с этой задачей.

Например, при \(p=0\) число \(7\) можно представить как \(2^0 + 2^1 + 2^2\).

А при \(p=-9\) число \(7\) можно представить одним числом \((2^4-9)\).

Обратите внимание, что отрицательные \(p\)-двоичные числа разрешается использовать в сумме (пример есть в секции Примечание).

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

В единственной строке записано два целых числа \(n\) и \(p\) (\(1 \leq n \leq 10^9\), \(-1000 \leq p \leq 1000\)).

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

Если \(n\) нельзя представить как сумму какого угодно количества \(p\)-двоичных чисел, выведите одно число \(-1\). В противном случае, выведите минимальное число слагаемых.

Примечание

\(0\)-двоичные числа — это обычные степени двойки, поэтому в первом примере мы можем представить \(24 = (2^4 + 0) + (2^3 + 0)\).

Во втором примере мы можем представить \(24 = (2^4 + 1) + (2^2 + 1) + (2^0 + 1)\).

В третьем примере мы можем представить \(24 = (2^4 - 1) + (2^2 - 1) + (2^2 - 1) + (2^2 - 1)\). Обратите внимание, что одинаковые слагаемые разрешены.

В четвёртом примере мы можем представить \(4 = (2^4 - 7) + (2^1 - 7)\). Обратите внимание, что второе слагаемое отрицательное, и это разрешено.

В пятом примере ни одного представления не существует.

A. Различные цифры

Перебор реализация *800

Вам заданы два целых числа \(l\) и \(r\). Найдите целое число \(x\) такое, что оно удовлетворяет следующим условиям:

  • \(l \le x \le r\),
  • все цифры в числе \(x\) различны.

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

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

Первая строка содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le 10^{5}\)).

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

Если ответ существует, то выведите любой из них. Иначе выведите \(-1\).

Примечание

В первом примере \(123\) — один из возможных ответов. Тем не менее, \(121\) не может быть ответом потому, что он состоит из нескольких цифр \(1\).

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

D. Три множества

графы Конструктив Перебор реализация хэши *1900

Дан неориентированный простой граф, который состоит из \(n\) вершин и \(m\) ребер. Граф не содержит петель (то есть каждое ребро соединяет две различные вершины), между каждой парой вершин существует не более одного ребра. Заданный граф может быть несвязным.

Определим следующее:

Пусть \(v_1\) и \(v_2\) два некоторых непустых подмножества вершин, которые не пересекаются. Пусть \(f(v_{1}, v_{2})\) будет истиной (true) тогда и только тогда, когда все условия удовлетворены:

  1. Нет ребра, которые соединяет две вершины в множестве вершин \(v_1\).
  2. Нет ребра, которые соединяет две вершины в множестве вершин \(v_2\).
  3. Для каждых двух вершин \(x\) и \(y\) таких, что \(x\) находится в \(v_1\) и \(y\) находится в \(v_2\), есть ребро, которое соединяет \(x\) и \(y\).

Создайте три множества вершин (\(v_{1}\), \(v_{2}\), \(v_{3}\)) таких, что все условия удовлетворены;

  1. Все множества не должны быть пустыми.
  2. Каждая вершина должна принадлежать ровно одному множеству.
  3. \(f(v_{1}, v_{2})\), \(f(v_{2}, v_{3})\), \(f(v_{3}, v_{1})\) должны быть истинами (true).

Возможно ли создать такие три множества? Есть это так, выведите такое разбиение вершин.

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(3 \le n \le 10^{5}\), \(0 \le m \le \text{min}(3 \cdot 10^{5}, \frac{n(n-1)}{2})\)) — количество вершин и ребер в графе.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(a_{i}\) и \(b_{i}\) (\(1 \le a_{i} \lt b_{i} \le n\)), которые значат, что существует ребро между \(a_{i}\) и \(b_{i}\). Граф не содержит петель (то есть каждое ребро соединяет две различные вершины), между каждой парой вершин существует не более одного ребра. Заданный граф может быть несвязным.

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

Если ответ существует, выведите \(n\) целых чисел. \(i\)-е целое число обозначает номер множества (от \(1\) до \(3\)), к которому принадлежит \(i\)-я вершина. Иначе выведите \(-1\).

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

Примечание

В первом примере, если \(v_{1} = \{ 1 \}\), \(v_{2} = \{ 2, 3 \}\) и \(v_{3} = \{ 4, 5, 6 \}\), тогда множества будут удовлетворять всем условиям. Но также существует и другое разбиение. Например, «2 3 3 1 1 1», который также будет засчитан как правильный ответ.

Во втором примере правильное разбиение не существует.

A. Давид и мешки с конфетами

Перебор реализация *800

У Давида есть четыре мешка с конфетами. В \(i\)-м из них лежит \(a_i\) конфет. Также у Давида есть два друга. Он хочет отдать каждый мешок одному из двух друзей. Возможно ли так распределить мешки, чтобы два друга получили одинаковое общее число конфет?

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

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

В первой строке записаны четыре целых числа \(a_1\), \(a_2\), \(a_3\) и \(a_4\) (\(1 \leq a_i \leq 100\)) — количества конфет в каждом мешке.

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

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

Примечание

В первом примере, Давид может дать первый и третий мешок первому другу, а второй и четвертый мешок — второму. Таким образом, каждый друг получит \(12\) конфет.

Во втором примере невозможно распределить конфеты.

A. Камни

жадные алгоритмы математика Перебор *800

Алиса играет с несколькими камнями.

Сейчас у нее три пронумерованные кучки с камнями. Первая содержит \(a\) камней, вторая содержит \(b\) камней, третья содержит \(c\) камней.

Каждый раз она может сделать одну из двух операций:

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

Она хочет сделать несколько операций и получить максимальное количество камней, но не знает что делать. Изначально у нее \(0\) камней. Можете ли вы помочь ей?

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

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество тестовых случаев. Следующие \(t\) строк содержат описания тестовых случаев в следующем формате:

В строке находится три неотрицательных целых числа \(a\), \(b\) и \(c\), разделенных пробелами (\(0 \leq a,b,c \leq 100\)) — количество камней в первой, второй и третьей кучке, соответсвенно.

Во взломах разрешается использовать только один тестовый случай, то есть \(t = 1\) должно быть выполнено.

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

Выведите \(t\) строк, ответы на тестовые случае в том же порядке, в которых они заданы во входных данных. Ответом на тестовый случай является целое число — максимальное количество камней, которое может взять Алиса, совершив несколько операций.

Примечание

В первом тестовом случае первого теста, Алиса может взять два камня из второй кучки и четыре камня из третьей кучки, сделав вторую операцию два раза. Затем она может взять один камень из первой кучки и два камня из второй кучки, сделав первую операцию один раз. Суммарное количество камней, которое Алиса возьмет будет равно \(9\). Невозможно сделать несколько операций так, чтобы взять больше \(9\) камней, поэтому ответ \(9\).

A. Камни

жадные алгоритмы математика Перебор *800

Алиса играет с несколькими камнями.

Сейчас у нее три пронумерованные кучки с камнями. Первая содержит \(a\) камней, вторая содержит \(b\) камней, третья содержит \(c\) камней.

Каждый раз она может сделать одну из двух операций:

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

Она хочет сделать несколько операций и получить максимальное количество камней, но не знает что делать. Изначально у нее \(0\) камней. Можете ли вы помочь ей?

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

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество тестовых случаев. Следующие \(t\) строк содержат описания тестовых случаев в следующем формате:

В строке находится три неотрицательных целых числа \(a\), \(b\) и \(c\), разделенных пробелами (\(0 \leq a,b,c \leq 100\)) — количество камней в первой, второй и третьей кучке, соответсвенно.

Во взломах разрешается использовать только один тестовый случай, то есть \(t = 1\) должно быть выполнено.

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

Выведите \(t\) строк, ответы на тестовые случае в том же порядке, в которых они заданы во входных данных. Ответом на тестовый случай является целое число — максимальное количество камней, которое может взять Алиса, совершив несколько операций.

Примечание

В первом тестовом случае первого теста, Алиса может взять два камня из второй кучки и четыре камня из третьей кучки, сделав вторую операцию два раза. Затем она может взять один камень из первой кучки и два камня из второй кучки, сделав первую операцию один раз. Суммарное количество камней, которое Алиса возьмет будет равно \(9\). Невозможно сделать несколько операций так, чтобы взять больше \(9\) камней, поэтому ответ \(9\).

D. Алиса и кукла

жадные алгоритмы Перебор реализация Структуры данных *2300

У Алисы недавно появилась новая кукла. Она даже может ходить!

Алиса построила лабиринт для куклы и хочет протестировать его. Лабиринт имеет вид таблицы с \(n\) строками и \(m\) столбцами. Также есть \(k\) препятствий, \(i\)-е из них находится в клетке \((x_i, y_i)\), это клетка на пересечении строки с номером \(x_i\) и столбца с номером \(y_i\).

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

Более формально, всего существует \(4\) направления, в которых может смотреть кукла:

  1. Кукла смотрит в направлении вдоль строки от первой клетки к последней. Перемещаясь смотря в этом направлении, кукла переходит из клетки \((x, y)\) в клетку \((x, y + 1)\);
  2. Кукла смотрит в направлении вдоль столбца от первой клетки к последней. Перемещаясь смотря в этом направлении, кукла переходит из клетки \((x, y)\) в клетку \((x + 1, y)\);
  3. Кукла смотрит в направлении вдоль строки от последней клетки к первой. Перемещаясь смотря в этом направлении, кукла переходит из клетки \((x, y)\) в клетку \((x, y - 1)\);
  4. Кукла смотрит в направлении вдоль столбца от последней клетки к первой. Перемещаясь смотря в этом направлении, кукла переходит из клетки\((x, y)\) в клетку \((x - 1, y)\).
.

Находясь в некоторой клетке, кукла может перейти в клетку в направлении, в котором она смотрит, либо повернуться один раз направо. Поворачиваясь один раз направо, кукла меняет направление, в котором она смотрит следующим образом: \(1 \to 2\), \(2 \to 3\), \(3 \to 4\), \(4 \to 1\). В одной клетке, кукла может совершить не более одного поворота направо.

Сейчас Алиса управляет перемещениями куклы. Изначально она поставила куклу в клетку \((1, 1)\) (верхняя левая клетка лабиринта). Изначально кукла смотрит в направлении \(1\), то есть в направлении вдоль строки от первой клетки к последней. Она хочет обойти куклой все клетки лабиринта, не содержащие препятствий ровно по одному разу и закончить в любой клетке. Существует ли способ так сделать?

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

В первой строке находится три целых числа \(n\), \(m\) и \(k\), разделенных пробелами (\(1 \leq n,m \leq 10^5, 0 \leq k \leq 10^5\)) — размеры лабиринта и количество препятствий.

В следующих \(k\) строках находится описание препятствий, \(i\)-я из этих строк содержит два целых числа \(x_i\) и \(y_i\), разделенные пробелом (\(1 \leq x_i \leq n,1 \leq y_i \leq m\)), которые описывают позицию \(i\)-го препятствия.

Гарантируется, что никакие два препятствия не находятся в одной клетке и что нету препятствия в клетке \((1, 1)\).

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

Выведите 'Yes' (без кавычек) если кукла может обойти все клетки, не содержащие препятствий по описанным выше правилам ровно по одному разу.

Если так обойти лабиринт невозможно, выведите 'No' (без кавычек).

Примечание

Картинка с лабиринтом из первого примера:

В первом примере, кукла может идти по следующему пути:

  • Кукла в клетке \((1, 1)\), смотрит в направлении \(1\). Пройти прямо;
  • Кукла в клетке \((1, 2)\), смотрит в направлении \(1\). Пройти прямо;
  • Кукла в клетке \((1, 3)\), смотрит в направлении \(1\). Повернуть направо;
  • Кукла в клетке \((1, 3)\), смотрит в направлении \(2\). Пройти прямо;
  • Кукла в клетке \((2, 3)\), смотрит в направлении \(2\). Пройти прямо;
  • Кукла в клетке \((3, 3)\), смотрит в направлении \(2\). Повернуть направо;
  • Кукла в клетке \((3, 3)\), смотрит в направлении \(3\). Пройти прямо;
  • Кукла в клетке \((3, 2)\), смотрит в направлении \(3\). Пройти прямо;
  • Кукла в клетке \((3, 1)\), смотрит в направлении \(3\). Цель достигнута, все клетки лабиринта, не содержащие препятствия посещены ровно один раз.

B. Перестановки

Комбинаторика Перебор реализация *1400

Дано n k-значных целых чисел. Требуется так переставить цифры в числах, чтобы разница между максимальным и минимальным числом была минимальна. Цифры во всех числах переставляются по одному и тому же правилу.

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

В первой строке заданы целые числа n и k — количество и разрядность чисел соответственно (1 ≤ n, k ≤ 8). В следующих n строках задаются k-значные положительные целые числа. Лидирующие нули разрешены как в исходных, так и в полученных после перестановки числах.

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

Выведите одно число — минимальную возможную разницу между максимальным и минимальным числом после перестановки цифр во всех числах по одному и тому же правилу.

Примечание

В первом примере, если поменять порядок цифр в числах на (3,1,4,2), то 2-ое и 4-ое число будут равны 5237 и 2537 соответственно (они — максимальные и минимальные для такого порядка чисел).

Во втором примере, поменяв вторые по порядку цифры с первыми, получим числа 100, 99 и 102.

B. Комнаты и лестницы

Перебор реализация *1000

Николай живет в двухэтажном доме. На каждом этаже расположено по \(n\) комнат. Комнаты на каждом этаже расположены в ряд и пронумерованы слева направо целыми числами, начиная с единицы. Таким образом, каждая комната характеризуется номером этажа, на котором она находится, а также своим порядковым номером на этаже (это целое число от \(1\) до \(n\)).

Если Николай находится в какой-то комнате, он может перейти из нее в любую из двух соседних комнат на том же этаже (если таковые есть). Комнаты, с порядковыми номерами \(i\) и \(i+1\) на любом из этажей являются соседними, для всех \(1 \leq i \leq n - 1\). Также известно, что между некоторыми парами комнат, которые расположены на разных этажах, но имеют одинаковые порядковые номера, есть лестницы. Если между комнатой с номером \(x\) на первом этаже и комнатой с номером \(x\) на втором этаже есть лестница, то Николай может перейти по лестнице из одной комнаты в другую.

На картинке показан пример дома для случая \(n = 4\). Лестницы есть между комнатой номер \(2\) на первом этаже и комнатой номер \(2\) на втором этаже, а также между комнатой номер \(4\) на первом этаже и комнатой номер \(4\) на втором этаже. Стрелками указаны направления, по которым Николай может перемещаться между комнатами. Эта картинка соответствует строке «0101» во входных данных.

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

Определите максимальное количество комнат, которые Николай может обойти, если:

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

В первой строке следует целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте. Затем следуют сами наборы входных данных. Каждый набор состоит из двух строк.

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

Во второй строке следует строка длины \(n\), состоящая из нулей и единиц. Если \(i\)-й символ строки равен '1', то между комнатой номер \(i\) на первом этаже и комнатой номер \(i\) на втором этаже есть лестница. Если \(i\)-й символ строки равен '0', то между комнатой номер \(i\) на первом этаже и комнатой номер \(i\) на втором этаже нет лестницы.

Во взломах разрешается использовать только один набор входных данных, то есть \(t = 1\) должно быть выполнено.

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

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

Примечание

В первом наборе входных данных примера Николай может начать обход на первом этаже в первой комнате. Затем он может перейти во вторую комнату на первом этаже, а затем в третью комнату на первом этаже. После этого он может подняться по лестнице на второй этаж в третью комнату. Затем он может перейти в четвертую комнату на втором этаже, а после этого в пятую комнату на втором этаже. Таким образом, он посетит \(6\) комнат.

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

В третьем наборе входных данных Николай может обойти все комнаты в доме. Если он начнет обход в первой комнате на первом этаже, его путь может выглядеть следующим образом: первый этаж, первая комната \(\rightarrow\) второй этаж, первая комната \(\rightarrow\) второй этаж, вторая комната \(\rightarrow\) первый этаж, вторая комната \(\rightarrow\) первый этаж, третья комната \(\rightarrow\) второй этаж, третья комната \(\rightarrow\) второй этаж, четвертая комната \(\rightarrow\) первый этаж, четвертая комната \(\rightarrow\) первый этаж, пятая комната \(\rightarrow\) второй этаж, пятая комната.

В четвертом наборе входных данных Николай также может обойти все комнаты. Один из возможных вариантов: второй этаж, третья комната \(\rightarrow\) второй этаж, вторая комната \(\rightarrow\) второй этаж, первая комната \(\rightarrow\) первый этаж, первая комната \(\rightarrow\) первый этаж, вторая комната \(\rightarrow\) первый этаж, третья комната.

C. Футбольный сезон

математика Перебор теория чисел *2000

Совсем недавно закончился футбольный сезон в Берляндии. В каждом футбольном матче в Берляндии участвуют по две команды. Результатом матча может быть победа одной из команд, либо ничья. Победившая в матче команда получает \(w\) очков, а проигравшая команда получает \(0\) очков. Если результат игры ничейный, то обе команды получают по \(d\) очков.

Владелец команды столицы Берляндии захотел подвести итоги сезона, но все данные об играх его команды были утеряны. Осталась лишь информация о том, что команда столицы Берляндии провела за сезон \(n\) матчей, в которых набрала \(p\) очков.

Перед вами стоит задача определить три целых числа \(x\), \(y\) и \(z\) — сколько матчей выиграла, сыграла вничью и проиграла команда столицы Берляндии. Если подходящих ответов несколько, вы можете вывести любой из них. Если не существует ни одной подходящей тройки \((x, y, z)\), сообщите об этом.

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

В первой строке следуют четыре целых числа \(n\), \(p\), \(w\) и \(d\) \((1 \le n \le 10^{12}, 0 \le p \le 10^{17}, 1 \le d < w \le 10^{5})\) — количество матчей, количество очков, набранных в этих матчах, количество очков, которые получает команда за победу в матче, и количество очков, которые получает команда за матч, завершившийся вничью. Обратите внимание, что за победу в матче команда всегда получает больше очков, чем за ничейный результат, то есть \(w > d\).

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

Если не существует ни одного подходящего ответа, выведите \(-1\).

В противном случае, выведите три целых неотрицательных числа \(x\), \(y\) и \(z\) — количество матчей, в которых команда столицы Берляндии одержала победу, количество матчей, в которых она сыграла вничью, и количество матчей, в которых она потерпела поражение. Если подходящих троек \((x, y, z)\) несколько, разрешается вывести любую из них. Для выведенных чисел должны выполняться следующие условия:

  • \(x \cdot w + y \cdot d = p\),
  • \(x + y + z = n\).
Примечание

В первом примере один из подходящих ответов — \(17\) побед, \(9\) ничьих и \(4\) поражения. В таком случае команда столицы Берляндии набрала за сезон \(17 \cdot 3 + 9 \cdot 1 = 60\) очков и сыграла \(17 + 9 + 4 = 30\) матчей.

Во втором примере максимальное количество очков, которое можно было набрать равно \(10 \cdot 5 = 50\). Так как \(p = 51\), то ответа не существует.

В третьем примере команда столицы Берляндии набрала \(0\) очков, следовательно, все \(20\) матчей были проиграны.

D. Покраска вершин

графы Деревья дп Конструктив Перебор реализация *1800

Вам задано дерево, состоящее из \(n\) вершин. Дерево — это связный неориентированный граф, не содержащий циклов.

Пример дерева.

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

Вам нужно покрасить все вершины таким образом, чтобы в любом пути, состоящем ровно из трех различных вершин, цвета всех этих трех вершин были различны. Иными словами, рассмотрим все такие тройки вершин \((x, y, z)\), что \(x \neq y, y \neq z, x \neq z\), вершина \(x\) соединена ребром с вершиной \(y\), а вершина \(y\) соединена ребром с вершиной \(z\). Тогда цвета вершин \(x\), \(y\) и \(z\) должны быть попарно различны. Назовем такую покраску вершин хорошей.

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

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

В первой строке следует целое число \(n\) \((3 \le n \le 100\,000)\) — количество вершин в дереве.

Во второй строке следует последовательность \(c_{1, 1}, c_{1, 2}, \dots, c_{1, n}\) \((1 \le c_{1, i} \le 10^{9})\), где \(c_{1, i}\) равно стоимости покраски \(i\)-й вершины в первый цвет.

В третьей строке следует последовательность \(c_{2, 1}, c_{2, 2}, \dots, c_{2, n}\) \((1 \le c_{2, i} \le 10^{9})\), где \(c_{2, i}\) равно стоимости покраски \(i\)-й вершины во второй цвет.

В четвертой строке следует последовательность \(c_{3, 1}, c_{3, 2}, \dots, c_{3, n}\) \((1 \le c_{3, i} \le 10^{9})\), где \(c_{3, i}\) равно стоимости покраски \(i\)-й вершины в третий цвет.

В каждой из следующих \((n - 1)\) строк следует по два целых числа \(u_j\) и \(v_j\) \((1 \le u_j, v_j \le n, u_j \neq v_j)\) — номера вершин, соединенных неориентированным ребром \(j\). Гарантируется, что заданные ребра образуют дерево.

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

Если не существует хорошей покраски дерева, выведите \(-1\).

В противном случае, в первой строке выведите минимальную стоимость хорошей покраски графа. Во второй строке выведите \(n\) целых чисел \(b_1, b_2, \dots, b_n\) \((1 \le b_i \le 3)\), где \(i\)-е число должно быть равно цвету, в который нужно покрасить вершину \(i\). Если подходящих покрасок минимальной стоимости несколько, разрешается вывести любую из них.

Примечание

В первом примере три вершины, поэтому все они должны быть покрашены в разные цвета. Первую вершину нужно покрасить в цвет \(1\), вторую вершину — в цвет \(3\), а третью вершину — в цвет \(2\). Стоимость такой покраски равна \(3 + 2 + 1 = 6\).

F. Даниэль и весенняя уборка

битмаски дп Комбинаторика Перебор *2300

В ходе проведения очередной весенней уборки, Даниэль нашел старый калькулятор, который ему очень понравился. Однако кажется, что что-то в нем сломано. Когда он хочет посчитать \(1 + 3\) c помощью калькулятора, он получает \(2\) вместо \(4\). Но при вычислении \(1 + 4\) ответ получается правильный, \(5\). Озадаченный таким поведением, он вскрыл калькулятор и нашел разгадку: полные сумматоры стали полусумматорами!

Теперь, когда он хочет посчитать \(a + b\) при помощи калькулатора, он получает ксор-сумму \(a \oplus b\) (определение можно прочитать по ссылке: https://ru.wikipedia.org/wiki/Сложение_по_модулю_2).

Но как он уже заметил ранее, калькулятор иногда выдает правильные ответы. Поэтому его интересует, при данных \(l\) и \(r\) сколько существует таких пар целых чисел \((a, b)\), для которых выполняются следующие условия: \(\)a + b = a \oplus b\(\) \(\)l \leq a \leq r\(\) \(\)l \leq b \leq r\(\)

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

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

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте.

Затем следует \(t\) строк, в каждой записаны по два целых числа \(l\) и \(r\) (\(0 \le l \le r \le 10^9\)).

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

Выведите \(t\) целых чисел, \(i\)-е число должно быть ответом на \(i\)-й набор входных данных.

Примечание

\(a \oplus b\) обозначает побитовое исключающее ИЛИ \(a\) и \(b\).

В первом примере подходящие пары: \((1, 2)\), \((1, 4)\), \((2, 1)\), \((2, 4)\), \((3, 4)\), \((4, 1)\), \((4, 2)\), и \((4, 3)\).

D1. Весь мир — задача по программированию (упрощённая версия)

дп жадные алгоритмы Перебор реализация *2000

Это упрощённая версия задачи. В этой версии \(n \le 500\).

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

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

Напомним, что последовательность \(s\) из круглых скобок называется правильной, если верно одно из:

  • \(s\) является пустой;
  • \(s\) равна «(\(t\))», где \(t\) — правильная скобочная последовательность;
  • \(s\) равна \(t_1 t_2\), то есть конкатенации \(t_1\) и \(t_2\), где \(t_1\) и \(t_2\) являются правильными скобочными последовательностями.

Например, последовательности «(()())», «()» являются правильными, а «)(» и «())» нет.

Циклическим сдвигом строки \(s\) длины \(n\) на \(k\) (\(0 \leq k < n\)) называется строка, представляющая собой конкатенацию (сложение) последних \(k\) символов строки \(s\) и первых \(n - k\) символов строки \(s\). Например, циклический сдвиг строки «(())()» на \(2\) равен «()(())».

Циклические сдвиги на \(i\) и \(j\) называются различными, если \(i \ne j\).

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 500\)) — длина строки, которую подарили Васе.

Вторая строка содержит одну строку, состоящую ровно из \(n\) символов, каждый из которых — либо открывающая скобка «(», либо закрывающая скобка «)».

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

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

Во второй строке выведите целые числа \(l\) и \(r\) (\(1 \leq l, r \leq n\)) — номера символов, которые нужно поменять местами, чтобы максимизировать красоту строки.

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

Примечание

В первом примере после обмена местами \(7\)-й и \(8\)-й скобок получается строка «()()()()()», её циклические сдвиги на \(0, 2, 4, 6, 8\) являются правильными скобочными последовательностями.

Во втором примере после обмена местами \(5\)-й и \(10\)-й скобок получается строка «)(())()()(()», её циклические сдвиги на \(11, 7, 5, 3\) являются правильными скобочными последовательностями.

В третьем примере какие бы две скобки мы не поменяли местами, число циклических сдвигов, являющихся правильными скобочными последовательностями, будет равно \(0\).

C1. Хорошие числа (простая версия)

жадные алгоритмы Перебор реализация *1300

Единственное отличие между простой и сложной версиями — максимальное значение \(n\).

Вам дано положительное целое число \(n\). Вы очень любите хорошие числа, поэтому вам хочется найти минимальное хорошее число, большее или равное \(n\).

Положительное число называется хорошим, если оно может быть представлено в виде суммы различных степеней \(3\) (т.е. повторения степеней \(3\) запрещены).

Например:

  • \(30\)хорошее число: \(30 = 3^3 + 3^1\),
  • \(1\)хорошее число: \(1 = 3^0\),
  • \(12\)хорошее число: \(12 = 3^2 + 3^1\),
  • но \(2\) не является хорошим числом: вы не можете представить его в виде суммы различных степеней \(3\) (\(2 = 3^0 + 3^0\)),
  • \(19\) не является хорошим числом: вы не можете представить его в виде суммы различных степеней \(3\) (например, представления \(19 = 3^2 + 3^2 + 3^0 = 3^2 + 3^1 + 3^1 + 3^1 + 3^0\) не являются корректными),
  • \(20\) тоже не является хорошим числом: вы не можете представить его в виде суммы различных степеней \(3\) (например, представление \(20 = 3^2 + 3^2 + 3^0 + 3^0\) не является корректным).

Обратите внимание, что существуют и другие представления \(19\) и \(20\) в качестве сумм степеней \(3\), но ни одно из них не состоит из различных степеней \(3\).

Для заданного положительного числа \(n\) найдите наименьшее \(m\) (\(n \le m\)) такое, что \(m\)хорошее число.

Вам необходимо ответить на \(q\) независимых запросов.

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

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 500\)) — количество запросов. Затем следуют \(q\) запросов.

Единственная строка запроса содержит одно целое число \(n\) (\(1 \le n \le 10^4\)).

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

Для каждого запроса выведите наименьшее число \(m\) (где \(n \le m\)) такое, что \(m\)хорошее число.

B. The Feast and the Bus

жадные алгоритмы Конструктив математика Перебор *1800

Employees of JebTrains are on their way to celebrate the 256-th day of the year! There are \(n\) employees and \(k\) teams in JebTrains. Each employee is a member of some (exactly one) team. All teams are numbered from \(1\) to \(k\). You are given an array of numbers \(t_1, t_2, \dots, t_n\) where \(t_i\) is the \(i\)-th employee's team number.

JebTrains is going to rent a single bus to get employees to the feast. The bus will take one or more rides. A bus can pick up an entire team or two entire teams. If three or more teams take a ride together they may start a new project which is considered unacceptable. It's prohibited to split a team, so all members of a team should take the same ride.

It is possible to rent a bus of any capacity \(s\). Such a bus can take up to \(s\) people on a single ride. The total cost of the rent is equal to \(s \cdot r\) burles where \(r\) is the number of rides. Note that it's impossible to rent two or more buses.

Help JebTrains to calculate the minimum cost of the rent, required to get all employees to the feast, fulfilling all the conditions above.

Input

The first line contains two integers \(n\) and \(k\) (\(1 \le n \le 5\cdot10^5, 1 \le k \le 8000\)) — the number of employees and the number of teams in JebTrains. The second line contains a sequence of integers \(t_1, t_2, \dots, t_n\), where \(t_i\) (\(1 \le t_i \le k\)) is the \(i\)-th employee's team number. Every team contains at least one employee.

Output

Print the minimum cost of the rent.

F. Data Center

Перебор реализация *800

You are developing a project to build a new data center. The data center will be a rectangle with an area of exactly \(n\) square meters. Each side of the data center must be an integer.

Your goal is to minimize the impact of the external environment on the data center. For this reason, you want to minimize the length of the perimeter of the data center (that is, the sum of the lengths of its four sides).

What is the minimum perimeter of a rectangular data center with an area of exactly \(n\) square meters, if the lengths of all its sides must be integers?

Input

The first and only line of the input contains an integer \(n\) (\(1 \le n \le 10^5\)), where \(n\) is the area of the data center in square meters.

Output

Print the required minimum perimeter in meters.

Note

In the first example, the required shape of the data center is \(6\times6\) square. Its area is \(36\) and the perimeter is \(6+6+6+6=24\).

In the second example, the required shape of the data center is \(1\times13\) rectangle. Its area is \(13\) and the perimeter is \(1+13+1+13=28\).

In the third example, the required shape of the data center is \(1\times1\) square. Its area is \(1\) and the perimeter is \(1+1+1+1=4\).

I. Show Must Go On

Бинарный поиск жадные алгоритмы кратчайшие пути Перебор *3100

The director of the famous dance show plans a tour. It is already decided that the tour will consist of up to \(m\) concerts.

There are \(n\) dancers in the troupe. Each dancer is characterized by her awkwardness: the awkwardness of the \(i\)-th dancer is equal to \(a_i\).

The director likes diversity. For this reason, each concert will be performed by a different set of dancers. A dancer may perform in multiple concerts. For example, it is possible that a set of dancers performs in one concert and a subset of this set of dancers performs in another concert. The only constraint is that the same set of dancers cannot perform twice.

The director prefers the set with larger number of dancers over the set with smaller number of dancers. If two sets consist of the same number of dancers, then the director prefers the one which has smaller sum of awkwardness of dancers. If two sets of dancers are equal in size and total awkwardness, then the director does not have a preference which one is better.

A marketing study shows that viewers are not ready to come to a concert if the total awkwardness of all the dancers performing in the concert is greater than \(k\).

The director wants to find the best plan for \(m\) concerts. He thinks to write down all possible sets of dancers; then get rid of the sets with total awkwardness greater than \(k\). The remaining sets of dancers will be sorted according to his preference. The most preferred set of dancers will give the first concert, the second preferred set — the second concert and so on until the \(m\)-th concert. If it turns out that the total number of valid sets is less than \(m\), then the total number of concerts will be equal to the number of valid sets.

It turns out that the director delegated finding the plan to you! Please, notice that there might be several acceptable plans due to the fact that the director does not have a preference over sets of dancers with the same size and total awkwardness. In this case any of these plans is good enough. For each concert find the number of dancers and the total awkwardness of the set performing. Also, for the last concert find its set of dancers.

Input

The first line contains one integer \(t\) (\(1 \le t \le 10^5\)) — the number of test cases in the input. Then the test cases follow.

Each test case begins with a line containing three integers \(n\), \(k\) and \(m\) (\(1 \le n \le 10^6\), \(1 \le k \le 10^{18}\), \(1 \le m \le 10^6\)) — the total number of dancers, the maximum acceptable awkwardness of a set of dancers and the maximum number of concerts, respectively.

The following line contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^{12}\)), where \(a_i\) is the awkwardness of the \(i\)-th dancer.

The sum of the values of \(n\) over all test cases in the input does not exceed \(10^6\). Similarly, the sum of the values of \(m\) over all test cases in the input does not exceed \(10^6\).

Output

Print the answers to all test cases in the input.

If the troupe cannot give concerts at all, then simply print one line "0". In this case, you should not print anything else.

If the troupe gives a positive number of concerts \(r\) (\(r\) is equal to the minimum of \(m\) and the total number of valid sets), then first print the value of \(r\), then \(r\) lines: the \(j\)-th line should contain two integers \(s_j\) and \(t_j\) — the number of dancers in the \(j\)-th concert and the total awkwardness of the dancers performing in the \(j\)-th concert. Complete the output to a test case with a line that describes the last set: print exactly \(s_r\) distinct integers from \(1\) to \(n\) — the numbers of the dancers who will perform at the \(r\)-th (last) concert, in any order. If there are several answers, print any of them.

A. Сломанная клавиатура

Перебор Строки *1000

Недавно Поликарп заметил, что некоторые кнопки на его клавиатуре неисправны. Клавиатура Поликарпа содержит \(26\) кнопок (по кнопке на каждую букву латинского алфавита). Каждая кнопка либо работает исправно, либо сломана.

Для проверки исправности клавиатуры Поликарп понажимал на некоторые кнопки и строка \(s\) появилась на экране. Когда Поликарп нажимает на кнопку \(c\), происходит одно из двух событий:

  • если кнопка работает исправно, то в конец строки просто добавляется символ \(c\);
  • если кнопка работает неисправно, то ровно два символа \(c\) добавляется в конец строки.

Например предположим, что кнопки a и c работают корректно, а кнопка b неисправна. Если Поликарп нажмет на кнопки в порядке a, b, a, c, a, b, a, то строка будет меняться следующим образом: a \(\rightarrow\) abb \(\rightarrow\) abba \(\rightarrow\) abbac \(\rightarrow\) abbaca \(\rightarrow\) abbacabb \(\rightarrow\) abbacabba.

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

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

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

Первая строка содержит число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Затем следуют сами наборы входных данных. Каждый набор состоит из одной строки, в которой содержится строка \(s\) состоящая из не менее чем из \(1\) и не более чем из \(500\) строчных букв латинского алфавита.

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

Для каждого набора входных данных выведите строку \(res\). Эта строка \(res\) должна содержать все кнопки, которые точно работают корректно в алфавитном порядке, без пробелов. Если нет таких кнопок, то строка \(res\) должна быть пустой.

J. Tiling Terrace

дп Перебор *2300

Talia has just bought an abandoned house in the outskirt of Jakarta. The house has a nice and long yard which can be represented as a one-dimensional grid containing \(1 \times N\) cells. To beautify the house, Talia is going to build a terrace on the yard by tiling the cells. Each cell on the yard contains either soil (represented by the character '.') or rock (represented by the character '#'), and there are at most \(50\) cells containing rocks.

Being a superstitious person, Talia wants to tile the terrace with mystical tiles that have the power to repel ghosts. There are three types of mystical tiles:

  • Type-1: Covers \(1 \times 1\) cell and can only be placed on a soil cell (".").
  • Type-2: Covers \(1 \times 2\) cells and can only be placed on two consecutive soil cells ("..").
  • Type-3: Covers \(1 \times 3\) cells and can only be placed on consecutive soil-rock-soil cells (".#.").

Each tile of Type-1, Type-2, and Type-3 has the power to repel \(G_1\), \(G_2\), and \(G_3\) ghosts per day, respectively. There are also some mystical rules which must be followed for the power to be effective:

  • There should be no overlapping tiles, i.e. each cell is covered by at most one tile.
  • There should be at most \(K\) tiles of Type-1, while there are no limitations for tiles of Type-2 and Type-3.

Talia is scared of ghosts, thus, the terrace (which is tiled by mystical tiles) should be able to repel as many ghosts as possible. Help Talia to find the maximum number of ghosts that can be repelled per day by the terrace. Note that Talia does not need to tile all the cells on the yard as long as the number of ghosts that can be repelled by the terrace is maximum.

Input

Input begins with a line containing five integers: \(N\) \(K\) \(G_1\) \(G_2\) \(G_3\) (\(1 \le N \le 100\,000\); \(0 \le K \le N\); \(0 \le G_1, G_2, G_3 \le 1000\)) representing the number of cells, the maximum number of tiles of Type-1, the number of ghosts repelled per day by a tile of Type-1, the number of ghosts repelled per day by a tile of Type-2, and the number of ghosts repelled by a tile of Type-3, respectively. The next line contains a string of \(N\) characters representing the yard. Each character in the string is either '.' which represents a soil cell or '#' which represents a rock cell. There are at most \(50\) rock cells.

Output

Output in a line an integer representing the maximum number of ghosts that can be repelled per day.

Note

Explanation for the sample input/output #1

Let "A" be a tile of Type-1, "BB" be a tile of Type-2, and "CCC" be a tile of Type-3. The tiling "ACCCBB" in this case produces the maximum number of ghosts that can be repelled, i.e. \(10 + 40 + 25 = 75\)

Explanation for the sample input/output #2

This sample input has the same yard with the previous sample input, but each tile of Type-2 can repel more ghosts per day. The tiling "BB#BBA" or "BB#ABB" produces the maximum number of ghosts that can be repelled, i.e. \(100 + 100 + 10 = 210\). Observe that the third cell is left untiled.

Explanation for the sample input/output #3

The tiling "ACCCA.#", "ACCC.A#", or ".CCCAA#" produces the maximum number of ghosts that can be repelled, i.e. \(30 + 100 + 30 = 160\). Observe that there is no way to tile the last cell.

F. Сделай их похожими

meet-in-the-middle битмаски Перебор хэши *2400

Назовем два числа похожими, если в их двоичных представлениях одинаковое количество цифр равно \(1\). Например:

  • \(2\) и \(4\) похожи (двоичные представления — \(10\) и \(100\));
  • \(1337\) и \(4213\) похожи (двоичные представления — \(10100111001\) и \(1000001110101\));
  • \(3\) и \(2\) не похожи (двоичные представления — \(11\) и \(10\));
  • \(42\) и \(13\) похожи (двоичные представления — \(101010\) и \(1101\)).

Вам задан массив из \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\). Вы должны выбрать неотрицательное целое число \(x\), после чего вы получите новый массив из \(n\) чисел \(b_1\), \(b_2\), ..., \(b_n\), где \(b_i = a_i \oplus x\) (\(\oplus\) обозначает операцию побитового исключающего ИЛИ).

Можно ли получить такой массив \(b\), в котором все числа похожи друг на друга?

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

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

Во второй строке заданы \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0 \le a_i \le 2^{30} - 1\)).

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

Если нельзя выбрать такой \(x\), что все элементы в полученном массиве будут похожи друг на друга, выведите \(-1\).

Иначе выведите любое неотрицательное целое число, не превосходящее \(2^{30} - 1\), которое можно использовать как \(x\) таким образом, что все числа в полученном массиве будут похожи друг на друга.

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

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

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

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

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

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

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

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

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

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

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

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

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

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

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

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

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

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

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

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

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

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

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

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

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

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

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

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

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

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

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

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

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

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

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

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

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

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

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

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

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

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

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

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

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

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

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

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

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

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

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

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

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

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

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

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

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

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

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

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

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

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

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

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

E. Пилюли

Перебор Потоки *2900

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

Доктор хочет сложить 28 пилюль в прямоугольную коробочку размера 7 × 8. При этом каждая пилюля занимает ровно две соседние ячейки, а в любой ячейке находится ровно одна из половин пилюли. Таким образом, получается четырехцветная картинка размера 7 × 8.

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

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

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

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

Первые 7 строк содержат картинку доктора. Каждая из этих строк состоит из 8 символов, каждый из которых может быть «B», «R», «W» и «Y» для синего, красного, белого и желтого цветов соответственно.

В следующих четырех строках находятся 10 чисел, которые означают, соответственно, количество пилюль раскрасок:

«BY» «BW» «BR» «BB»

«RY» «RW» «RR»

«WY» «WW»

«YY»

Эти числа лежат в пределах от 0 до 28 включительно. Гарантируется, что общее количество пилюль не меньше 28.

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

В первой строке выведите наибольшее количество ячеек, для которых цвет совпадает.

Далее выведите 13 строк по 15 символов в каждой — расположение пилюль в наилучшей расстановке. На пересечениях нечетных строк и нечетных столбцов должны располагаться символы «B», «R», «W» и «Y». На всех остальных позициях должны быть символы «.», «-» и «|». Используйте «-» и «|» для того, чтобы показать, какие половинки оболочки связаны в единую пилюлю. Смотрите примеры для более ясного понимания.

Если возможных решений несколько — выведите любое.

E. Турнир

дп жадные алгоритмы Перебор *2400

Вы организуете боксерский турнир, в котором участвует \(n\) боксеров (\(n\) это степень \(2\)), и один из боксеров ваш друг. Все боксеры имеют различную силу от \(1\) до \(n\), и боксер \(i\) побеждает боксера \(j\), когда \(i\) больше чем \(j\).

Турнир орагнизовывается следующим образом: \(n\) боксеров делятся на пары; проигравший в каждой паре выбывает из турнира, а \(\frac{n}{2}\) победителей проходят в следующий этап, в котором снова делятся на пары, после чего победители опять проходят в следующий этап, и так далее, пока не останется только один боксер (он считается победителем).

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

На каждом этапе вы сами делите боксеров на пары.

Боксера с силой \(i\) можно подкупить, заплатив ему \(a_i\) долларов. Какое минимальное количество долларов вам нужно потратить для того, чтобы ваш друг победил, если на каждом этапе вы сами делите всех боксеров на пары?

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

Первая строка содержит число \(n\) (\(2 \le n \le 2^{18}\)) — количество боксеров. \(n\) обязательно равна степени \(2\).

Вторая строка содержит \(n\) чисел \(a_1\), \(a_2\), ..., \(a_n\), где \(a_i\) равно количеству долларов, которое вам нужно заплатить для подкупа боксера с силой \(i\). Ровно одно число \(a_i\) равно \(-1\) — это значит, что боксер с силой \(i\) ваш друг. Все остальные числа находятся в отрезке \([1, 10^9]\).

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

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

Примечание

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

Во втором тестовом примере вы можете распределять боксеров в пары следующим образом (под номером \(2\) ваш друг):

\(1 : 2, 8 : 5, 7 : 3, 6 : 4\) (боксеры \(2, 8, 7\) и \(6\) проходят в следующий этап);

\(2 : 6, 8 : 7\) (боксеры \(2\) и \(8\) проходят в следующий этап, вам нужно подкупить боксера с силой \(6\));

\(2 : 8\) (вам нужно подкупить боксера с силой \(8\));

B. Красивая последовательность

жадные алгоритмы Конструктив Перебор *1900

Последовательность целых чисел называется красивой если абсолютная разница между любыми двумя соседними числами равна \(1\). Более формально, последовательность \(s_1, s_2, \ldots, s_{n}\) красивая, если \(|s_i - s_{i+1}| = 1\) для всех \(1 \leq i \leq n - 1\).

У Вани есть \(a\) чисел равных \(0\), \(b\) чисел равных \(1\), \(c\) чисел равных \(2\) и \(d\) чисел равных \(3\). Он хочет построить красивую последовательность используя все эти \(a + b + c + d\) чисел.

Оказалось, что это непростая задача и Ваня не справился решить ее. Помогите Ване!

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

В единственной строке находятся четыре неотрицательных целых числа \(a\), \(b\), \(c\) и \(d\) (\(0 < a+b+c+d \leq 10^5\)).

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

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

Иначе, выведите «YES» (без кавычек) в первой строке. Затем, во второй строке выведите \(a + b + c + d\) целых чисел, разделенных пробелом — найденная красивая последовательность. Среди выведенных чисел должно быть ровно \(a\) чисел, равных \(0\), ровно \(b\) чисел, равных \(1\), ровно \(c\) чисел, равных \(2\) и ровно \(d\) чисел, равных \(3\).

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

Примечание

В первом тесте, легко заметить, что последовательность красивая, потому что абсолютная разница между любыми двумя соседними числами равна \(1\). Также, в последовательности ровно два числа, равных \(0\), \(1\), \(2\) и ровно одно число, равное \(3\).

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

I. Intriguing Selection

интерактив Конструктив Перебор реализация сортировки *2600

This is an interactive problem.

You are the head coach of a chess club. The club has \(2n\) players, each player has some strength which can be represented by a number, and all those numbers are distinct. The strengths of the players are not known to you.

You need to select \(n\) players who would represent your club in the upcoming championship. Naturally, you want to select \(n\) players with the highest strengths.

You can organize matches between the players to do that. In every match, you pick two players, they play some games, and you learn which one of the two has higher strength. You can wait for the outcome of a match before deciding who will participate in the next one.

However, you do not want to know exactly how those \(n\) players compare between themselves, as that would make the championship itself less intriguing. More formally, you must reach a state where there is exactly one way to choose \(n\) players with the highest strengths that is consistent with the outcomes of the matches you organized, but there must be at least two possible orderings of those \(n\) players by strength that are consistent with the outcomes of the matches you organized.

Interaction

Your program has to process multiple test cases in one run. First, it should read the integer \(t\) (\(t \ge 1\)) — the number of test cases. Then, it should process the test cases one by one.

In each test case, your program should start by reading the integer \(n\) (\(3 \le n \le 100\)) — the number of players to select out of \(2n\) players. The sum of squares of the values of \(n\) over all test cases does not exceed \(10\,000\).

Then your program can organize matches zero or more times. To organize a match, your program should print a match description formatted as ? \(i\) \(j\) — a question mark followed by two distinct numbers of players participating in the match. The players are numbered from 1 to \(2n\), inclusive. Remember to flush the output after printing the match description. Then your program should read the match outcome — it will be either the greater-than character (>), if the first player in the match description has higher strength, or the less-than character (<), if the second player in the match description has higher strength.

Your program can organize at most \(4n^2\) matches. After it is done organizing matches, it should print the exclamation mark (!) and continue to the next test case, or exit gracefully if this was the last test case. Remember to flush the output after printing the exclamation mark.

There must be exactly one way to choose \(n\) players with the highest strength that is consistent with the outcomes of the matches you organized, but there must be at least two possible orderings of those \(n\) players by their strength that are consistent with the outcomes of the matches you organized.

The judging program picks some distinct numbers as the strengths of all players before your program starts organizing matches and uses them to answer the requests.

Note

In the example, the players in the first test case are sorted by strength in decreasing order. From the matches in the example output, we can deduce that players 1, 2, and 3 have the highest strength, but we do not know how the player 1 compares to the player 2.

D. Инвертирования в турнире

графы математика Перебор разделяй и властвуй *3200

Вам дан турнир — полный ориентированный граф.

За одну операцию вы можете взять любую вершину \(v\) и поменять направления всех ребер с \(v\) на одном из концов (таким образом все ребра \(u \to v\) меняют направление на \(v \to u\) и наоборот).

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

А также, если это возможно, вам необходимо посчитать количество способов сделать турнир сильно связным за такое число операций (два способа отличаются, если для какого-то \(i\), вершина выбранная на \(i\)-й операции одного способа, отличается от вершины выбранной на \(i\)-й операции другого способа). Вам нужно найти остаток от деления этой величины на \(998\,244\,353\).

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

В первой строке записано одно целое число \(n\) (\(3 \leq n \leq 2000\)): количество вершин в турнире.

Следующие \(n\) строк содержат описания ребер турнира, каждая из них содержит бинарную строку длины \(n\). Если \(j\)-й символ \(i\)-й строки равен '1', тогда в графе есть ребро \(i \to j\).

Гарантируется, что в графе нет ребер \(i \to i\) и в графе есть ровно одно ребро среди \(i \to j\) и \(j \to i\) для разных \(i\) и \(j\).

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

Если невозможно сделать турнир сильно связным за такое количество операций, выведите «-1».

Иначе, выведите два целых числа: минимальное количество операций, которое нужно, чтобы сделать турнир сильно связным и количество способов сделать турнир сильно связным за такое число операций, по модулю \(998\,244\,353\).

A. Уравнение

математика Перебор *800

Назовем положительное целое число составным если у него есть хотя бы один делитель кроме \(1\) и себя. Например:

  • следующие числа являются составными: \(1024\), \(4\), \(6\), \(9\);
  • cледующие числа не являются составными: \(13\), \(1\), \(2\), \(3\), \(37\).

Вам дано положительное целое число \(n\). Найдите два составных числа \(a,b\), что \(a-b=n\).

Гарантируется, что это возможно.

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

Входные данные содержат одно целое число \(n\) (\(1 \leq n \leq 10^7\)).

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

Выведите два составных числа \(a,b\) (\(2 \leq a, b \leq 10^9, a-b=n\)).

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

B. Равенство по модулю

Перебор сортировки *1500

Вам дано положительное целое число \(m\) и две последовательности положительных целых чисел: \(a=[a_1, a_2, \ldots, a_n]\) и \(b=[b_1, b_2, \ldots, b_n]\). Обе последовательности имеют одинаковую длину \(n\).

Напомним, что перестановкой называется последовательность из \(n\) различных положительных чисел от \(1\) до \(n\). Например, следующие последовательности являются перестановками: \([1]\), \([1,2]\), \([2,1]\), \([6,7,3,4,1,2,5]\). Следующие последовательности перестановками не являются: \([0]\), \([1,1]\), \([2,3]\).

Вам нужно найти неотрицательное целое число \(x\), увеличить все элементы \(a_i\) на \(x\), по модулю \(m\) (другими словами, вы заменяете \(a_i\) на \((a_i + x) \bmod m\)), чтобы было возможно переставить элементы последовательности \(a\), чтобы она стала равна \(b\), среди таких нужно найти минимально возможное \(x\).

Иначе говоря, вам необходимо найти наименьшее неотрицательное целое число \(x\), для которого возможно найти какую-то перестановку \(p=[p_1, p_2, \ldots, p_n]\), что для всех \(1 \leq i \leq n\), \((a_i + x) \bmod m = b_{p_i}\), где \(y \bmod m\) — остаток при делении \(y\) на \(m\).

Например, если \(m=3\), \(a = [0, 0, 2, 1], b = [2, 0, 1, 1]\), вы можете выбрать \(x=1\), и \(a\) будет равна \([1, 1, 0, 2]\), вы можете переставить элементы, чтобы получить \([2, 0, 1, 1]\), что равно последовательности \(b\).

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

В первой строке записаны два целых числа \(n,m\) (\(1 \leq n \leq 2000, 1 \leq m \leq 10^9\)): количество элементов в последовательности \(m\).

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i < m\)).

В третьей строке записаны \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \leq b_i < m\)).

Гарантируется, что можно найти неотрицательное целое число \(x\), для которого возможно найти какую-то перестановку \(p_1, p_2, \ldots, p_n\), что \((a_i + x) \bmod m = b_{p_i}\).

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

Выведите наименьшее неотрицательное целое число \(x\), для которого возможно найти какую-то перестановку \(p_1, p_2, \ldots, p_n\), что \((a_i + x) \bmod m = b_{p_i}\) для всех \(1 \leq i \leq n\).

A. Костюмы

жадные алгоритмы математика Перебор *800

В магазин привезли новую партию одежды, а именно \(a\) галстуков, \(b\) шарфов, \(c\) жилеток и \(d\) пиджаков.

Магазин специализируется на продаже костюмов. Бывают костюмы двух типов:

  • первый тип — костюм, состоящий из галстука и пиджака;
  • второй тип — костюм, состоящий из шарфа, жилетки и пиджака.

Костюмы первого типа стоят \(e\) монет, а костюмы второго — \(f\) монет.

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

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

В первой строке следует целое число \(a\) \((1 \le a \le 100\,000)\) — количество галстуков.

Во второй строке следует целое число \(b\) \((1 \le b \le 100\,000)\) — количество шарфов.

В третьей строке следует целое число \(c\) \((1 \le c \le 100\,000)\) — количество жилеток.

В четвертой строке следует целое число \(d\) \((1 \le d \le 100\,000)\) — количество пиджаков.

В пятой строке следует целое число \(e\) \((1 \le e \le 1\,000)\) — стоимость одного костюма первого типа.

В шестой строке следует целое число \(f\) \((1 \le f \le 1\,000)\) — стоимость одного костюма второго типа.

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

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

Примечание

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

Во втором примере можно составить девять костюмов первого типа и одиннадцать костюмов второго типа. Их суммарная стоимость равна \(9 \cdot 4 + 11 \cdot 6 = 102\).

C. Ларек с шаурмой

геометрия жадные алгоритмы Перебор реализация *1300

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

Известно, что школа в столице Берляндии расположена в точке \((s_x, s_y)\). В школе учатся \(n\) учеников, причем \(i\)-й ученик живет в доме, который расположен в точке \((x_i, y_i)\). Допустимо, что несколько учеников живут в одном и том же доме, но никакой ученик не живет в точке \((s_x, s_y)\).

После занятий каждый ученик идет из школы до своего дома по улицам, причем каждый ученик обязательно идет до своего дома по какому-то из кратчайших путей. Таким образом, расстояние, которое преодолеет \(i\)-й ученик, чтобы добраться из школы до дома, равно \(|s_x - x_i| + |s_y - y_i|\).

Министерство питания решило установить ларек с шаурмой в столице Берляндии в точке с целочисленными координатами. Считается, что \(i\)-й школьник купит шаурму в ларьке, если ларек находится на одном из кратчайших путей \(i\)-го школьника до дома. Запрещено ставить ларек с шаурмой в той же точке, в которой расположена школа, но разрешено ставить ларек в той точке, в которой расположен дом кого-то из учеников.

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

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

В первой строке следует три целых числа \(n\), \(s_x\), \(s_y\) (\(1 \le n \le 200\,000\), \(0 \le s_x, s_y \le 10^{9}\)) — количество школьников и координаты школы.

В \(i\)-й из следующих \(n\) строк следуют по два целых числа \(x_i\), \(y_i\) (\(0 \le x_i, y_i \le 10^{9}\)) — координаты дома \(i\)-го школьника. Координаты домов у некоторых школьников могут совпадать. Гарантируется, что дом никакого школьника не расположен в той же точке, что и школа.

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

В первую строку выведите целое число \(c\) — максимальное количество школьников, которые смогут купить шаурму в ларьке.

Во вторую строку выведите два целых числа \(p_x\) и \(p_y\) — координаты для постройки ларька. Если подходящих ответов несколько, разрешается вывести любой из них. Обратите внимание, что каждое из чисел \(p_x\) и \(p_y\) должно быть не менее \(0\) и не более \(10^{9}\).

Примечание

В первом примере нужно построить ларек с шаурмой в точке \((4, 2)\). Тогда три школьника его посетят. Это школьники, чьи дома расположены в точках \((4, 2)\), \((4, 1)\) и \((5, 1)\).

Во втором примере можно, например, построить ларек с шаурмой в точке \((1, 1)\). В таком случае оба школьника, дом которых расположен в точке \((0, 0)\), его посетят.

F. Разделение студентов

Перебор *2700

Недавно было очередное зачисление новых студентов в Берляндский государственный университет (БГУ). Все студенты при поступлении попадают в группу в зависимости от факультета и направления. Некоторые группы могут получиться очень большими, и тогда группу делят на две подгруппы, которые посещают занятия отдельно друг от друга. Вам нужно помочь разделить группы студентов, принятых на факультет информационных технологий.

Всего на факультет поступило \(t\) разных групп. Студенты каждой группы будут посещать занятия по трём дисциплинам — математике, программированию и физкультуре. Все эти занятия проводятся в разных местах — занятия по математике проходят в лекционных аудиториях, по программированию — в компьютерных классах, по физкультуре — в спортзалах.

Каждую группу необходимо разделить на две подгруппы так, чтобы в каждой подгруппе количество студентов на каждом занятии не превышало вместимость аудитории, класса или спортзала. У первой подгруппы \(i\)-й группы занятия по математике проводятся в аудитории, вмещающей не более \(a_{i, 1}\) студентов; по программированию — в классе, вмещающем не более \(b_{i, 1}\) студентов; по физкультуре — в спортзале, вмещающем не более \(c_{i, 1}\) студентов. Аналогично со второй подгруппой — на занятиях по математике, программированию и физкультуре может поместиться не более \(a_{i, 2}\), \(b_{i, 2}\) и \(c_{i, 2}\) студентов, соответственно.

Как известно, студенты часто пропускают занятия. У каждого студента есть какое-то количество (от \(0\) до \(3\)) предметов, которые он считает бесполезными — а значит, не посещает ни одного занятия по этим предметам (а на занятия по остальным предметам он приходит). Эти данные вам были предоставлены в следующем формате — \(i\)-я группа состоит из:

  1. \(d_{i, 1}\) студентов, посещающих все занятия;
  2. \(d_{i, 2}\) студентов, посещающих все занятия, кроме физкультуры;
  3. \(d_{i, 3}\) студентов, посещающих все занятия, кроме программирования;
  4. \(d_{i, 4}\) студентов, посещающих только математику;
  5. \(d_{i, 5}\) студентов, посещающих все занятия, кроме математики;
  6. \(d_{i, 6}\) студентов, посещающих только программирование;
  7. \(d_{i, 7}\) студентов, посещающих только физкультуру.

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

Теперь перед вами стоит следующая задача: определить, как разделить каждую группу на две подгруппы таким образом, чтобы в каждой аудитории (или в компьютерном классе, или в спортзале, в зависимости от занятия) хватало места для всех студентов из подгруппы, приходящих на это занятие (если это вообще возможно). Каждый студент из \(i\)-й группы должен быть определен ровно в одну подгруппу \(i\)-й группы; перемещать студентов между группами запрещено.

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

В первой строке задано одно целое число \(t\) (\(1 \le t \le 300\)) — количество групп.

Далее следуют описания групп. Описание \(i\)-й группы состоит из трех строк:

  • в первой строке заданы три целых числа \(a_{i, 1}\), \(b_{i, 1}\) и \(c_{i, 1}\) (\(1 \le a_{i, 1}, b_{i, 1}, c_{i, 1} \le 3000\)) — вместимость лекционной аудитории, компьютерного класса и спортзала для первой подгруппы \(i\)-й группы соответственно;
  • во второй строке заданы три целых числа \(a_{i, 2}\), \(b_{i, 2}\) и \(c_{i, 2}\) (\(1 \le a_{i, 2}, b_{i, 2}, c_{i, 2} \le 3000\)) — вместимость лекционной аудитории, компьютерного класса и спортзала для второй подгруппы \(i\)-й группы соответственно;
  • в третьей строке заданы семь целых чисел \(d_{i, 1}\), \(d_{i, 2}\), ..., \(d_{i, 7}\) (\(0 \le d_{i, j} \le 3000\)) — количество студентов каждого из описанных в условии семи типов в \(i\)-й группе. Не гарантируется, что сумма этих чисел будет отличной от нуля — группа вполне может состоять из студентов, не ходящих на занятия вообще.

Гарантируется, что суммарное количество студентов во всех группах не превосходит \(3000\).

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

Для всех групп выведите результат разделения группы в следующем формате:

  • если группу разделить невозможно, выведите одно целое число \(-1\);
  • иначе выведите семь целых чисел \(f_{i, 1}\), \(f_{i, 2}\), ..., \(f_{i, 7}\) (\(0 \le f_{i, j} \le d_{i, j}\)) — количество студентов каждого типа в первой подгруппе \(i\)-й группы (все остальные студенты из группы автоматически определяются во вторую подгруппу). Если ответов несколько, выведите любой из них.

A. Три друга

жадные алгоритмы математика Перебор сортировки *900

Три друга хотят встретиться друг с другом. Изначально первый друг находится в позиции \(x = a\), второй друг находится в позиции \(x = b\), а третий находится в позиции \(x = c\) на координатной оси \(Ox\).

За одну минуту каждый из друзей независимо от других друзей может изменить позицию \(x\) на \(1\) влево или на \(1\) вправо (то есть присвоить \(x := x - 1\) или \(x := x + 1\)), или даже не менять ее.

Введем понятие суммарной попарной дистанции — суммы дистанций между каждой парой друзей. Пусть \(a'\), \(b'\) и \(c'\) — финальные позиции первого, второго и третьего друзей соответственно. Тогда суммарная попарная дистанция равна \(|a' - b'| + |a' - c'| + |b' - c'|\), где \(|x|\) — абсолютная величина (модуль) значения \(x\).

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

Вам необходимо ответить на \(q\) независимых наборов входных данных.

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

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 1000\)) — количество наборов входных данных.

Следующие \(q\) строк описывают наборы входных данных. \(i\)-й набор входных данных описывается тремя целыми числами \(a, b\) и \(c\) (\(1 \le a, b, c \le 10^9\)) — изначальными позициями первого, второго и третьего друзей, соответственно. Позиции друзей могут совпадать.

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

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

D. Удалите один элемент

дп Перебор *1500

Вам задан массив \(a\), состоящий из \(n\) целых чисел.

Вы можете удалить не более одного элемента из этого массива. Таким образом, после этой операции длина массива равна либо \(n-1\), либо \(n\).

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

Напомним, что последовательным подмассивом \(a\) с индексами от \(l\) до \(r\) называется \(a[l \dots r] = a_l, a_{l + 1}, \dots, a_r\). Массив \(a[l \dots r]\) называется строго возрастающим, если \(a_l < a_{l+1} < \dots < a_r\).

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

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество элементов в \(a\).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) равно \(i\)-му элементу \(a\).

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

Выведите одно целое число — максимально возможную длину строго возрастающего последовательного подмассива массива \(a\) после удаления не более одного элемента.

Примечание

В первом примере можно удалить \(a_3=5\). Тогда получившийся массив будет равен \([1, 2, 3, 4]\) и длина его наибольшего возрастающего подмассива будет равна \(4\).

A. Хеширование перемешиванием

Перебор реализация Строки *1000

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

Поликарп решил сохранять хеш пароля, полученный по следующему алгоритму:

  1. получить пароль \(p\), состоящий из строчных латинских букв, и перемешать буквы в нем, чтобы получить \(p'\) (\(p'\) может остаться равным \(p\));
  2. построить две случайные строки, состоящие из строчных латинских букв, \(s_1\) и \(s_2\) (любая из них может быть пустой);
  3. полученный хеш \(h = s_1 + p' + s_2\), где сложение — это склеивание строк.

Например, пусть пароль будет \(p =\) «abacaba». Тогда \(p'\) может быть равно «aabcaab». Случайные строки \(s1 =\) «zyx» и \(s2 =\) «kjh». Тогда \(h =\) «zyxaabcaabkjh».

Обратите внимание, что нельзя удалять или добавлять буквы в \(p\), чтобы получить \(p'\), можно только менять их порядок.

Теперь Поликарп просит вас помочь ему в реализации модуля проверки пароля. По данному паролю \(p\) и хешу \(h\), проверьте, что \(h\) может являться хешом пароля \(p\).

Вам нужно ответить на \(t\) наборов входных данных.

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

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой строке каждого набора входных данных содержится непустая строка \(p\), состоящая из строчных латинских букв. Длина \(p\) не превышает \(100\).

В второй строке каждого набора входных данных содержится непустая строка \(h\), состоящая из строчных латинских букв. Длина \(h\) не превышает \(100\).

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

На каждый набор входных данных выведите «YES», если данный хеш \(h\) может быть получен по данному паролю \(p\), и «NO» в противном случае.

Примечание

Первый набор входных данных объяснен в условии.

Во втором наборе входных данных и \(s_1\), и \(s_2\) пусты, а \(p'=\) «threetwoone» — это перемешанная \(p\).

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

В четвертом наборе входных данных \(s_1=\) «n», \(s_2\) пуста, а \(p'=\) «one» — это перемешанная \(p\) (даже несмотря на то, что они совпадают).

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

B. Стишок для Санты

Бинарный поиск Перебор реализация *1300

Наступает новый год! Вася приготовил стишок и хочет рассказать его Санте Клаусу.

Васин стишок содержит \(n\) частей. Вася тратит \(a_i\) секунд на \(i\)-ю часть. При этом он не может менять порядок частей в стишке: сначала он рассказывает часть, которая занимает \(a_1\) секунд, затем — часть, которая занимает \(a_2\) секунд и так далее. После того, как Вася закончил зачитывать стишок, Вася получает по подарку за каждую полностью рассказаную часть.

Вася может пропустить не более одной части стишка (если он пропустит больше, Санта обязательно это заметит).

Санта будет слушать Васин стишок не более \(s\) секунд. Например, если \(s = 10\), \(a = [100, 9, 1, 1]\), и Вася пропускает первую часть стишка, то он получает два подарка.

Обратить внимание, что Вася может зачитать стишок полностью (если ему хватит времени).

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

Вам нужно ответить на \(t\) наборов входных данных.

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

Первая строка содержит число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два числа \(n\) и \(s\) (\(1 \le n \le 10^5, 1 \le s \le 10^9\)) — количество частей в стишке и количество секунд, которое Санта будет слушать Васю соответственно.

Вторая строка каждого набора входных данных содержит \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

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

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

Примечание

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

Во втором наборе входных данных не важно какую часть стиха пропустить.

В третьем наборе входных данных Вася может прочитать стих полностью.

B. Строка

Конструктив Перебор реализация Строки строковые суфф. структуры хэши *2100

Однажды на уроке информатики Аня и Маша прошли лексикографический порядок.

Строка x лексикографически меньше строки y, если либо x является префиксом y (и при этом x ≠ y), либо существует такое i (1 ≤ i ≤ min(|x|, |y|)), что xi < yi, и для любого j (1 ≤ j < i) xj = yj. Здесь |a| обозначает длину строки a. Лексикографическое сравнение строк реализует оператор < в современных языках программирования.

Учительница задала Ане и Маше домашнее задание. Она выдала им строку длины n. Из этой строки требуется выписать все подстроки, в том числе всю строчку целиком и все одинаковые подстроки (например, из строки «aab» требуется выписать «a», «a», «aa», «ab», «aab», «b»). После этого полученные строки требуется расположить в лексикографическом порядке. А чтобы не проверять все эти строки, хитрая учительница попросила предъявить лишь k-тую строку из этого списка. Помогите Ане с Машей выполнить домашнее задание.

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

В первой строке задана непустая строка, состоящая из строчных латинских букв («a»-«z»), длины не больше, чем 105. Во второй строке задано единственное целое число k (1 ≤ k ≤ 105).

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

Выведите строку, которую требуется выписать Ане с Машей — лексикографически k-ую подстроку заданной строки. Если у строки всего меньше, чем k подстрок, выведите строку «No such line.» (без кавычек).

Примечание

Во втором тесте перед строкой «bc» идут строки «a», «ab», «abc», «b».

C. Фади и НОК

математика Перебор теория чисел *1400

Сегодня Осама вручил Фади целое число \(X\), а Фади стало интересно, какое минимальное значение может принимать \(max(a, b)\) таких, что \(LCM(a, b)\) равен \(X\). \(a\) и \(b\) должны быть положительными целыми числами.

\(LCM(a, b)\) — это наименьшее положительное целое число, которое делится и на \(a\), и на \(b\). Например, \(LCM(6, 8) = 24\), \(LCM(4, 12) = 12\), \(LCM(2, 3) = 6\).

Разумеется, Фади сразу нашел ответ. Сможете ли вы найти любую такую пару прямо как Фади?

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

В первой и единственной строке записано одно целое число \(X\) (\(1 \le X \le 10^{12}\)).

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

Выведите два целых положительных числа, \(a\) и \(b\), такие, что значение \(max(a, b)\) минимально возможное, а \(LCM(a, b)\) равен \(X\). Если существует несколько возможных пар, то выведите любую из них.

D. Dr. Evil Underscores

битмаски Деревья дп жадные алгоритмы Перебор поиск в глубину и подобное разделяй и властвуй Строки *1900

Сегодня Бакри в качестве дружеского подарка вручил Бадави \(n\) целых чисел \(a_1, a_2, \dots, a_n\) и дал ему задачку выбрать такой \(X\), что \(\underset{1 \leq i \leq n}{\max} (a_i \oplus X)\) принимает минимальное возможное значение, где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Бадави, как обычно, ленится, поэтому вы решили помочь ему и найти минимальное возможное значение \(\underset{1 \leq i \leq n}{\max} (a_i \oplus X)\).

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

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

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 2^{30}-1\)).

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

Выведите одно целое число — минимальное возможное значение \(\underset{1 \leq i \leq n}{\max} (a_i \oplus X)\).

Примечание

В первом примере можно выбрать \(X = 3\).

Во втором примере можно выбрать \(X = 5\).

E. Удали один отрезок

графы Деревья дп Конструктив Перебор сортировки Структуры данных *2300

На координатной прямой \(Ox\) заданы \(n\) отрезков \([l_1, r_1]\), \([l_2, r_2]\), ..., \([l_n, r_n]\). Отрезок \([l, r]\) покрывает все точки от \(l\) до \(r\) включительно, то есть такие \(x\), что \(l \le x \le r\).

Отрезки могут располагаться произвольным образом  — вкладываться друг в друга, совпадать и т.п. Отрезки могут вырождаться в точку, то есть допустимо, что \(l_i=r_i\).

Объединением набора отрезков называется такой минимальный набор отрезков, который покрывает в точности тот же набор точек, что и заданный набор. Например:

  • если \(n=3\) и отрезки имеют вид \([3, 6]\), \([100, 100]\), \([5, 8]\), то их объединение состоит из \(2\) отрезков: \([3, 8]\) и \([100, 100]\);
  • если \(n=5\) и отрезки имеют вид \([1, 2]\), \([2, 3]\), \([4, 5]\), \([4, 6]\), \([6, 6]\) то их объединение состоит из \(2\) отрезков: \([1, 3]\) и \([4, 6]\).

Очевидно, что объединение — это набор непересекающихся отрезков.

Требуется удалить ровно один отрезок из заданных \(n\) таким образом, чтобы количество отрезков в объединении оставшихся \(n-1\) было наибольшим.

Например, если \(n=4\) и отрезки имеют вид \([1, 4]\), \([2, 3]\), \([3, 6]\), \([5, 7]\), то:

  • если из набора удалить первый отрезок, то останутся отрезки \([2, 3]\), \([3, 6]\), \([5, 7]\), объединение которых состоит из \(1\) отрезка;
  • если из набора удалить второй отрезок, то останутся отрезки \([1, 4]\), \([3, 6]\), \([5, 7]\), объединение которых состоит из \(1\) отрезка;
  • если из набора удалить третий отрезок, то останутся отрезки \([1, 4]\), \([2, 3]\), \([5, 7]\), объединение которых состоит из \(2\) отрезков;
  • если из набора удалить четвертый отрезок, то останутся отрезки \([1, 4]\), \([2, 3]\), \([3, 6]\), объединение которых состоит из \(1\) отрезка.

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

Напишите программу, которая найдет наибольшее количество отрезков, которые получатся в объединении \(n-1\) оставшегося, если можно удалить любой из заданных \(n\) отрезков.

Обратите внимание, что если в заданном наборе есть несколько одинаковых отрезков, то удалить вы всё-равно можете ровно один из них. То есть набор отрезков после удаления одного будет содержать ровно \(n-1\) отрезок.

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

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(2 \le n \le 2\cdot10^5\)) — количество отрезков в заданном наборе. Далее в \(n\) строках заданы сами отрезки парами целых чисел \(l_i\), \(r_i\) (\(-10^9 \le l_i \le r_i \le 10^9\)), где \(l_i\) и \(r_i\) — координаты левого и правого конца \(i\)-го отрезка, соответственно.

Отрезки заданы в произвольном порядке.

Гарантируется, что сумма значений \(n\) по всем наборам во входных данных не превосходит \(2\cdot10^5\).

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

Выведите \(t\) чисел — ответы на заданные \(t\) наборов входных данных в порядке их следования в тесте. Ответ равен максимальному количеству отрезков в объединении \(n-1\) отрезка из \(n\) заданных, если допускается удалить один любой отрезок.

C1. Дурдом (простая версия)

интерактив Конструктив математика Перебор *2400

Эта задача отличается от сложной версии только ограничением на суммарную длину ответов

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

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

  • ? l r — запросить все подстроки \(s[l..r]\). При этом в ответе все подстроки будут перемешаны, а в каждой из подстрок будут перемешаны буквы.
  • ! s — сделать предположение о загаданной строке. Этот запрос нужно сделать ровно один раз, после него игра завершается. Если строка угадана, то пациент побеждает, а иначе проигрывает.

Пациенту разрешено сделать не более \(3\) запросов первого типа. Чтобы игра была не так утомительна для санитаров, существует следующее ограничение: суммарно на запросы первого типа должно быть возвращено не более \((n+1)^2\) подстрок.

Помогите пациенту выиграть и выбраться из дурдома!

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

Обратите внимание, что в каждом тесте строка фиксирована и не меняется в ходе игры. Иными словами, интерактор не адаптивен.

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

Первая и единственная строка содержит число \(n\) (\(1 \le n \le 100\)) — длину загадываемой строки.

Протокол взаимодействия

Вы начинаете своё взаимодействие, считав \(n\).

Для того, чтобы задать вопрос о подстроке с \(l\) по \(r\) включительно (\(1 \le l \le r \le n\)) выведите в отдельной строке

? l r

В ответ вы получите все подстроки строки \(s[l..r]\) в случайном порядке, каждую ровно один раз. В каждой из подстрок будут случайным образом перемешаны буквы.

В случае, если вы сделаете некорректный запрос, зададите более \(3\) запросов данного типа, или в результате заданных запросов Вам будет возвращено суммарно более \((n+1)^2\) подстрок, то ваше решение получит вердикт Неправильный ответ.

Для того, чтобы сделать предположение о загаданной строке \(s\) выведите в отдельной строке

! s

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

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

Если вы получили строку - (дефис) в качестве ответа на какой-либо запрос, то вам надо завершить программу штатным образом с кодом возврата 0 (например, сделав exit(0)). Это означает, что интерактор зафиксировал ошибку в протоколе или поведении программы. Если вы не завершите в этом случае программу штатным образом с кодом возврата 0, то можете получить любой неуспешный вердикт.

Формат взломов

Для взломов используйте следующий формат:

В первой строке должно быть единственное число \(n\) (\(1 \le n \le 100\)) — длина загадываемой строки.

Во второй строке выведите строку \(s\) — сама загадываемая строка.

C2. Дурдом (сложная версия)

интерактив Конструктив математика Перебор хэши *2800

Эта задача отличается от простой версии только ограничением на суммарную длину ответов

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

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

  • ? l r — запросить все подстроки \(s[l..r]\). При этом в ответе все подстроки будут перемешаны, а в каждой из подстрок будут перемешаны буквы.
  • ! s — сделать предположение о загаданной строке. Этот запрос нужно сделать ровно один раз, после него игра завершается. Если строка угадана, то пациент побеждает, а иначе проигрывает.

Пациенту разрешено сделать не более \(3\) запросов первого типа. Чтобы игра была не так утомительна для санитаров, существует следующее ограничение: суммарно на запросы первого типа должно быть возвращено не более \(\left\lceil 0.777(n+1)^2 \right\rceil\) подстрок (\(\lceil x \rceil\) — округление вверх числа \(x\)).

Помогите пациенту выиграть и выбраться из дурдома!

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

Обратите внимание, что в каждом тесте строка фиксирована и не меняется в ходе игры. Иными словами, интерактор не адаптивен.

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

Первая и единственная строка содержит число \(n\) (\(1 \le n \le 100\)) — длину загадываемой строки.

Протокол взаимодействия

Вы начинаете своё взаимодействие, считав \(n\).

Для того, чтобы задать вопрос о подстроке с \(l\) по \(r\) включительно (\(1 \le l \le r \le n\)) выведите в отдельной строке

? l r

В ответ вы получите все подстроки строки \(s[l..r]\) в случайном порядке, каждую ровно один раз. В каждой из подстрок будут случайным образом перемешаны буквы.

В случае, если вы сделаете некорректный запрос, зададите более \(3\) запросов данного типа, или в результате заданных запросов Вам будет возвращено суммарно более \(\left\lceil 0.777(n+1)^2 \right\rceil\) подстрок, то ваше решение получит вердикт Неправильный ответ.

Для того, чтобы сделать предположение о загаданной строке \(s\) выведите в отдельной строке

! s

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

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

Если вы получили строку - (дефис) в качестве ответа на какой-либо запрос, то вам надо завершить программу штатным образом с кодом возврата 0 (например, сделав exit(0)). Это означает, что интерактор зафиксировал ошибку в протоколе или поведении программы. Если вы не завершите в этом случае программу штатным образом с кодом возврата 0, то можете получить любой неуспешный вердикт.

Формат взломов.

Для взломов используйте следующий формат:

В первой строке должно быть единственное число \(n\) (\(1 \le n \le 100\)) — длина загадываемой строки.

Во второй строке выведите строку \(s\) – сама загадываемая строка.

F. Гарри Гончар

бпф дп Конструктив математика Перебор реализация *3100

Как известно, чтобы победить лорда Волан-де-Морта, Гарри необходимо сперва уничтожить все крестражи. Последний крестраж лорда Сами-Знаете-кого представляет собой массив \(a\) состоящий из \(n\) целых чисел, который Гарри необходимо уничтожить. Массив считается уничтоженным, если все его элементы равны 0. Чтобы его уничтожить, Гарри может производить два типа операций:

  1. выбрать индекс \(i\) (\(1 \le i \le n\)), целое число \(x\) и вычесть из \(a_i\) число \(x\).
  2. выбрать индексы \(i\) и \(j\) (\(1 \le i, j \le n; i \ne j\)), целое число \(x\) и вычесть из \(a_i\) число \(x\), а из \(a_j\) — число \(x + 1\).

Обратите внимание, что \(x\) может быть произвольным, в том числе и отрицательным.

У Гарри осталось совсем немного времени. Помогите ему и узнайте, какое минимальное число операций с массивом ему придётся совершить, чтобы уничтожить массив и покончить с лордом Волан-де-Мортом!

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

Первая строка входных данных содержит одно целое число \(n\) — количество элементов в массиве \(a\) (\(1 \le n \le 20\)).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) — элементы массива (\(-10^{15} \le a_i \le 10^{15}\)).

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

Выведите одно число — минимальное количество действий, за которое Гарри сможет уничтожить массив \(a\).

Примечание

В первом примере можно три раза применить операцию первого типа к массиву.

Во втором примере можно два раза применить операцию второго типа: сначала выбрать \(i = 2, j = 1, x = 4\) и получить массив \((0, -1, -2)\), затем выбрать \(i = 3, j = 2, x = -2\) чтобы уничтожить массив.

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

B. Гиперсет

Перебор реализация Структуры данных *1500

Пчёлки Алиса и Алеся подарили пчеловодке Полине на Новый Год знаменитую карточную игру «Set». Колода для игры состоит из карт, каждая из которых обладает набором из четырех признаков: тип фигуры, количество фигур, их цвет и текстура. Сетом называется тройка карт, у которых каждый признак либо у всех попарно отличается, либо совпадает. Рисунок ниже иллюстрирует возможные комбинации карт.

Полина придумала новый вариант игры и назвала его «Hyperset». В этой игре есть \(n\) карт, обладающих \(k\) признаками, каждый из которых принимает значение «S», «E» или «T». Оригинальная игра «Set» может быть рассмотрена как «Hyperset» с \(k = 4\).

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

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

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

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 1500\), \(1 \le k \le 30\)) — количество карт и количество признаков соответственно.

В каждой из следующих \(n\) строк содержится описание карт. Описание карты представляет собой строку, состоящую из \(k\) букв «S», «E», «T». Символ на позиции \(i\) описывает \(i\)-й признак этой карты. Все карты различны.

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

Выведите единственное число — количество способов выбрать три карты, образующих сет.

Примечание

В третьем примере сетами являются следующие тройки карт:

  1. «SETT», «TEST», «EEET»
  2. «TEST», «ESTE», «STES»

A. Дедлайн

Бинарный поиск математика Перебор Тернарный поиск *1100

Адилбеку назначили особый проект. Для Адилбека это означает, что у него есть \(n\) дней, чтобы запустить особую программу и представить полученные результаты. Но есть одна проблема: программе нужно работать \(d\) дней, чтобы посчитать результаты.

К счастью, Адилбек может оптимизировать программу. Если он потратит \(x\) (\(x\) — целое неотрицательное) дней на оптимизацию, то программа станет работать за \(\left\lceil \frac{d}{x + 1} \right\rceil\) дней (\(\left\lceil a \right\rceil\) — это округление вверх: \(\left\lceil 2.4 \right\rceil = 3\), \(\left\lceil 2 \right\rceil = 2\)). Программу не получится оптимизировать, пока она работает, а потому общее количество потраченных Адилбеком дней будет равняться \(x + \left\lceil \frac{d}{x + 1} \right\rceil\).

Успеет ли Адилбек получить результаты за не более, чем \(n\) дней?

Входные данные

В первой строке задано единственное целое число \(T\) (\(1 \le T \le 50\)) — количество наборов входных данных.

В следующих \(T\) строках заданы сами наборы – по одному в строке. Каждая строка содержит два целых числа \(n\) и \(d\) (\(1 \le n \le 10^9\), \(1 \le d \le 10^9\)) — количество дней перед дедлайном и количество дней, за которое отрабатывает программа.

Выходные данные

Выведите \(T\) ответов — по одному на набор входных данных. Для каждого набора выведите YES (регистр не важен), если Адилбек сможет уложиться в \(n\) дней или NO (регистр не важен) в противном случае.

Примечание

В первом наборе, Адилбек решает совсем не оптимизировать программу, так как \(d \le n\).

Во втором наборе, Адилбек может потратить \(1\) день на оптимизацию и программа станет отрабатывать за \(\left\lceil \frac{5}{2} \right\rceil = 3\) дней. Суммарно, он потратит \(4\) дня и уложится в сроки.

В третьем наборе, невозможно уложиться в сроки. Например, если Адилбек потратит \(2\) дня на оптимизацию, то программа все равно будет работать еще \(\left\lceil \frac{11}{2+1} \right\rceil = 4\) дня.

B. Шнурки и шестиклассники

графы Перебор поиск в глубину и подобное реализация *1200

Аня и Маша ведут математический кружок у шестиклассников. Во время кружка шестиклассники ведут себя плохо. Они принесли на кружок много шнурков, и связались друг с другом. А именно, каждый шнурок связывает вместе двух шестиклассников. При этом, если два шестиклассника связаны шнурком, то шнурок связывает как первого со вторым, так и второго с первым.

Чтобы навести порядок, Аня и Маша делают следующее. Сначала Аня для каждого шестиклассника находит, со сколькими другими шестиклассниками он связан шнурками. Если шестиклассник связан ровно с одним другим, Аня объявляет ему выговор. Потом Маша собирает в группу всех шестиклассников, которым Аня объявила выговор, и выгоняет вон из класса. Выгнанные шестиклассники отвязываются и уходят из класса, забирая с собой шнурки, которыми они были привязаны. Потом снова Аня для каждого шестиклассника находит, со сколькими другими шестиклассниками он связан, и так далее. И так они делают, пока Ане удается объявить хотя бы один выговор.

Определите, сколько групп шестиклассников будут выгнаны из класса.

Входные данные

В первой строке даны два целых числа n и m — исходное число шестиклассников и шнурков (). Шестиклассники пронумерованы числами от 1 до n, а шнурки — числами от 1 до m. В следующих m строках дано по два целых числа a и b — номера шестиклассников, связанных i-ым шнурком (1 ≤ a, b ≤ n, a ≠ b). Гарантируется, что никакие два шестиклассника не связаны более чем одним шнурком. Никакой шнурок не связывает шестиклассника с самим собой.

Выходные данные

Выведите единственное число — количество групп шестиклассников, которые будут выгнаны из класса.

Примечание

В первом примере Ане с Машей не выгонят ни одной группы шестиклассников — в изначальной позиции все шестиклассники привязаны к двум другим шестиклассникам, и Ане не удастся сделать ни одного выговора.

Во втором примере четыре шестиклассника связаны в цепочку, а еще два бегают отдельно. Сначала Аня с Машей выгонят двух крайних шестиклассников из цепочки (1 и 4), а затем — двух оставшихся из цепочки (2 и 3). При этом бегающие отдельно от остальных шестиклассники останутся в классе.

В третьем примере Аня с Машей сразу же выгонят всех шестиклассников, кроме четвертого, и на этом процесс закончится. Правильный ответ — один.

A. Контроль сознания

Перебор реализация Структуры данных *1600

Вы и ваш \(n - 1\) друг нашли массив целых чисел \(a_1, a_2, \dots, a_n\). Вы решили разделить его следующим образом: все \(n\) человек встают в линию в определенном порядке. Каждую минуту, человек в начале линии выбирает либо первый, либо последний элемент массива, удаляет его и забирает себе. Затем, он выходит из линии и процесс продолжается со следующим стоящим в линии человеком.

Вы стоите на \(m\)-й позиции в линии. Перед тем, как процесс начнется, вы можете выбрать не больше чем \(k\) различных людей в линии и каждого из них убедить всегда брать либо первый, либо последний элемент массива во время их хода (для каждого человека свой выбор, не обязательно у всех одинаковый), не зависимо от того, какие это элементы. После того, как процесс начнется, вы не сможете убедить больше людей или изменить выбор уже убежденных вами людей.

Предположим, что вы сделаете ваш выбор оптимально. Чему равно максимальное целое число \(x\), такое что, вне зависимости от ходов тех друзей, которых вы не выбрали, чтобы убедить, элемент массива, который вы получите на вашем ходу, будет не меньше, чем \(x\)?

Обратите внимание, что друзья, которых вы не выбрали для того, чтобы убедить сделать их заранее определенный вами выбор, могут делать свой выбор произвольно и они не обязательно будут брать наибольший доступный для них элемент.

Входные данные

Входные данные содержат несколько тестовых случаев. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 1000\))  — количество тестовых случаев. В следующих строках находится их описание.

В первой строке описания каждого тестового случая находятся три разделенных пробелом целых числа \(n\), \(m\) и \(k\) (\(1 \le m \le n \le 3500\), \(0 \le k \le n - 1\))  — количество элементов в массиве, ваша позиция в линии и количество человек, чей выбор вы можете зафиксировать.

Во второй строке описания каждого тестового случая содержится \(n\) положительных целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\))  — элементы массива.

Гарантируется, что сумма значений \(n\) по всем тестовым случаям не превосходит \(3500\).

Выходные данные

Для каждого тестового случая, выведите наибольшее целое число \(x\), такое что вы можете гарантировать себе получить число не меньше, чем \(x\).

Примечание

В первом тестовом случае, одной из оптимальных стратегий является убедить первого человека брать последний элемент и второго человека брать первый элемент.

  • первый человек возьмет последний элемент (\(5\)), потому что он или она были убеждены вами взять последний элемент. После этого хода оставшийся массив будет \([2, 9, 2, 3, 8]\);
  • второй человек возьмет первый элемент (\(2\)), потому что он или она были убеждены вами взять первый элемент. После этого хода оставшийся массив будет \([9, 2, 3, 8]\);
  • если третий человек выберет взять первый элемент (\(9\)), к вашему ходу оставшийся массив будет \([2, 3, 8]\) и вы сможете взять \(8\) (последний элемент);
  • если третий человек выберет взять последний элемент (\(8\)), к вашему ходу оставшийся массив будет \([9, 2, 3]\) и вы сможете взять \(9\) (первый элемент).

Таким образом, эта стратегия гарантирует получить в конце число не меньше, чем \(8\). Можно доказать, что не существует стратегии, гарантирующей получить число не меньше чем \(9\). Таким образом, ответ равен \(8\).

Во втором тестовом случае, одной из оптимальных стратегий является убедить первого человека взять первый элемент. Тогда, в худшем случае второй и третий человек возьмут первый элементы и вы получите число \(4\).

B. Арома и её поиск

геометрия жадные алгоритмы Конструктив Перебор реализация *1700

С новым телом наш идол Арома Белая (или лучше было сказать Каори Минамийа?) начинает восстанавливать своё потерянное прошлое через OS-пространство.

Это пространство можно представить как 2D плоскость, с бесконечным количеством устройств с данными, пронумерованных с \(0\). Координаты устройств можно описать следующим образом:

  • Координаты \(0\)-го устройства равны \((x_0, y_0)\)
  • Для \(i > 0\), координаты \(i\)-го устройства равны \((a_x \cdot x_{i-1} + b_x, a_y \cdot y_{i-1} + b_y)\)

Изначально Арома расположена в точке \((x_s, y_s)\). Она может находиться в OS-пространстве не более \(t\) секунд, после этого ей придётся вернуться в реальный мир. Чтобы вернутся в реальный мир не требуется возвращаться в изначальную точку \((x_s, y_s)\).

Внутри OS-пространства Арома может делать следующие действия:

  • Из точки \((x, y)\) Арома может перейти в одну из следующих точек \((x-1, y)\), \((x+1, y)\), \((x, y-1)\) или \((x, y+1)\). Это действие занимает \(1\) секунду.
  • Если Арома стоит в точке с устройством, то она может его собрать. Можно считать, что это действие занимает \(0\) секунд. Разумеется, каждое устройство можно собрать не более одного раза.

Арома хочет собрать как можно больше данных перед тем как вернётся назад. Помогите ей определить максимальное количество устройств с данными, которые она сможет собрать за \(t\) секунд.

Входные данные

Первая строка содержит целые числа \(x_0\), \(y_0\), \(a_x\), \(a_y\), \(b_x\), \(b_y\) (\(1 \leq x_0, y_0 \leq 10^{16}\), \(2 \leq a_x, a_y \leq 100\), \(0 \leq b_x, b_y \leq 10^{16}\)), которые задают координаты устройств с данными.

Вторая строка содержит целые числа \(x_s\), \(y_s\), \(t\) (\(1 \leq x_s, y_s, t \leq 10^{16}\)), изначальные координаты Аромы и доступное время.

Выходные данные

Выведите одно целое число — максимальное количество устройств с данными которые Арома сможет собрать за \(t\) секунд.

Примечание

Во всех трёх примерах, координаты первых \(5\) устройств равны \((1, 1)\), \((3, 3)\), \((7, 9)\), \((15, 27)\) и \((31, 81)\) (напомним, что устройства пронумерованы начиная с \(0\)).

В первом примере оптимальный маршрут чтобы собрать \(3\) вершины выглядит следующим образом:

  • Перейти в точку \((3, 3)\) и собрать \(1\)-е устройство. Это занимает \(|3 - 2| + |3 - 4| = 2\) секунд.
  • Перейти в точку \((1, 1)\) и собрать \(0\)-е устройство. Это занимает \(|1 - 3| + |1 - 3| = 4\) секунд.
  • Перейти в точку \((7, 9)\) и собрать \(2\)-е устройство. Это занимает \(|7 - 1| + |9 - 1| = 14\) секунд.

Во втором примере оптимальный маршрут чтобы собрать \(2\) вершины выглядит следующим образом:

  • Собрать \(3\)-е устройство. Это занимает ноль секунд.
  • Перейти в точку \((7, 9)\) и собрать \(2\)-е устройство. Это занимает \(|15 - 7| + |27 - 9| = 26\) секунд.

В третьем примере Арома не может собрать ни одного устройства. Пожалуй стоило отдохнуть, а не рваться в OS-пространство без подготовки.

A. КоннеР и A.R.C. Markland-N

Бинарный поиск Перебор реализация *1100

A.R.C. Markland-N это высокое \(n\)-этажное здание с этажами, пронумерованными от \(1\) до \(n\). Между любыми двумя соседними этажами есть лестница их соединяющая.

У нашего сенсея Колина «КоннеР» Неймена Jr приближается время обеда, поэтому он решил выбрать, в каком месте он собирается поесть.

Офис Коннера располагается на \(s\)-м этаже здания. На каждом этаже здания расположено по одному ресторану, в том числе на этаже \(s\). Однако в связи с идущей реконструкцией, \(k\) ресторанов сейчас закрыты.

Коннер не хочет терять много времени на еду, поэтому хочет найти открытый ресторан как можно ближе к нему. Иначе говоря, его интересует ресторан, требующий прохода по минимальному количеству лестниц от этажа Коннера.

Помогите Коннеру, и кто знает, может быть вы заслужите его похвалу и даже сможете насладиться обедом вместе с ним в элегантном стиле Нейманов!

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

Первая строка каждого набора содержит целые числа \(n\), \(s\) и \(k\) (\(2 \le n \le 10^9\), \(1 \le s \le n\), \(1 \le k \le \min(n-1, 1000)\)) — количество этажей в A.R.C. Markland-N, этаж на котором работает Коннер и количество закрытых ресторанов.

Вторая строка каждого набора содержит \(k\) различных целых чисел \(a_1, a_2, \ldots, a_k\) (\(1 \le a_i \le n\)) — этажи, на которых расположены закрытые рестораны.

Гарантируется, что сумма значений \(k\) по всем наборам во входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество лестниц до ближайшего открытого ресторана от офиса Коннера на этаже \(s\).

Примечание

В первом наборе входных данных примера ближайший открытый ресторан расположен на \(4\)-м этаже.

Во втором наборе входных данных примера ресторан на этаже с офисом Коннера не закрыт, так что Коннер сможет пообедать там.

В третьем наборе входных данных примера ближайший открытый ресторан находится на \(6\)-м этаже.

A. У Ану есть функция

жадные алгоритмы математика Перебор *1500

Ану придумала свою собственную функцию \(f\): \(f(x, y) = (x | y) - y\), где \(|\) обозначает операцию побитового ИЛИ. К примеру, \(f(11, 6) = (11|6) - 6 = 15 - 6 = 9\). Можно показать, что для любых неотрицательных чисел \(x\) и \(y\) значение \(f(x, y)\) также неотрицательное.

Она хотела бы исследовать данную функцию, и придумала несколько задач для себя. К сожалению, она не может решить все из них, и ей нужна ваша помощь. Вот одна из этих задач.

Значение массива \([a_1, a_2, \dots, a_n]\) определяется как \(f(f(\dots f(f(a_1, a_2), a_3), \dots a_{n-1}), a_n)\) (для примеров обратитесь к примечаниям). Вам дан массив из не обязательно различных чисел. Как нужно переставить местами его элементы, чтобы его значение стало максимальным возможным?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\))  — длина массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\))  — элементы массива. Не гарантируется, что элементы массива различны.

Выходные данные

Выведите \(n\) чисел  — перестановку массива с максимальным значением. Если существует несколько решений, выведите любое из них.

Примечание

В первом тестовом случае, значение массива \([11, 6, 4, 0]\) равно \(f(f(f(11, 6), 4), 0) = f(f(9, 4), 0) = f(9, 0) = 9\).

\([11, 4, 0, 6]\) также является верным ответом.

A. У Ану есть функция

жадные алгоритмы математика Перебор *1500

Ану придумала свою собственную функцию \(f\): \(f(x, y) = (x | y) - y\), где \(|\) обозначает операцию побитового ИЛИ. К примеру, \(f(11, 6) = (11|6) - 6 = 15 - 6 = 9\). Можно показать, что для любых неотрицательных чисел \(x\) и \(y\) значение \(f(x, y)\) также неотрицательное.

Она хотела бы исследовать данную функцию, и придумала несколько задач для себя. К сожалению, она не может решить все из них, и ей нужна ваша помощь. Вот одна из этих задач.

Значение массива \([a_1, a_2, \dots, a_n]\) определяется как \(f(f(\dots f(f(a_1, a_2), a_3), \dots a_{n-1}), a_n)\) (для примеров обратитесь к примечаниям). Вам дан массив из не обязательно различных чисел. Как нужно переставить местами его элементы, чтобы его значение стало максимальным возможным?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\))  — длина массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\))  — элементы массива. Не гарантируется, что элементы массива различны.

Выходные данные

Выведите \(n\) чисел  — перестановку массива с максимальным значением. Если существует несколько решений, выведите любое из них.

Примечание

В первом тестовом случае, значение массива \([11, 6, 4, 0]\) равно \(f(f(f(11, 6), 4), 0) = f(f(9, 4), 0) = f(9, 0) = 9\).

\([11, 4, 0, 6]\) также является верным ответом.

A. У Ану есть функция

жадные алгоритмы математика Перебор *1500

Ану придумала свою собственную функцию \(f\): \(f(x, y) = (x | y) - y\), где \(|\) обозначает операцию побитового ИЛИ. К примеру, \(f(11, 6) = (11|6) - 6 = 15 - 6 = 9\). Можно показать, что для любых неотрицательных чисел \(x\) и \(y\) значение \(f(x, y)\) также неотрицательное.

Она хотела бы исследовать данную функцию, и придумала несколько задач для себя. К сожалению, она не может решить все из них, и ей нужна ваша помощь. Вот одна из этих задач.

Значение массива \([a_1, a_2, \dots, a_n]\) определяется как \(f(f(\dots f(f(a_1, a_2), a_3), \dots a_{n-1}), a_n)\) (для примеров обратитесь к примечаниям). Вам дан массив из не обязательно различных чисел. Как нужно переставить местами его элементы, чтобы его значение стало максимальным возможным?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\))  — длина массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\))  — элементы массива. Не гарантируется, что элементы массива различны.

Выходные данные

Выведите \(n\) чисел  — перестановку массива с максимальным значением. Если существует несколько решений, выведите любое из них.

Примечание

В первом тестовом случае, значение массива \([11, 6, 4, 0]\) равно \(f(f(f(11, 6), 4), 0) = f(f(9, 4), 0) = f(9, 0) = 9\).

\([11, 4, 0, 6]\) также является верным ответом.

A. У Ану есть функция

жадные алгоритмы математика Перебор *1500

Ану придумала свою собственную функцию \(f\): \(f(x, y) = (x | y) - y\), где \(|\) обозначает операцию побитового ИЛИ. К примеру, \(f(11, 6) = (11|6) - 6 = 15 - 6 = 9\). Можно показать, что для любых неотрицательных чисел \(x\) и \(y\) значение \(f(x, y)\) также неотрицательное.

Она хотела бы исследовать данную функцию, и придумала несколько задач для себя. К сожалению, она не может решить все из них, и ей нужна ваша помощь. Вот одна из этих задач.

Значение массива \([a_1, a_2, \dots, a_n]\) определяется как \(f(f(\dots f(f(a_1, a_2), a_3), \dots a_{n-1}), a_n)\) (для примеров обратитесь к примечаниям). Вам дан массив из не обязательно различных чисел. Как нужно переставить местами его элементы, чтобы его значение стало максимальным возможным?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\))  — длина массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\))  — элементы массива. Не гарантируется, что элементы массива различны.

Выходные данные

Выведите \(n\) чисел  — перестановку массива с максимальным значением. Если существует несколько решений, выведите любое из них.

Примечание

В первом тестовом случае, значение массива \([11, 6, 4, 0]\) равно \(f(f(f(11, 6), 4), 0) = f(f(9, 4), 0) = f(9, 0) = 9\).

\([11, 4, 0, 6]\) также является верным ответом.

A. У Ану есть функция

жадные алгоритмы математика Перебор *1500

Ану придумала свою собственную функцию \(f\): \(f(x, y) = (x | y) - y\), где \(|\) обозначает операцию побитового ИЛИ. К примеру, \(f(11, 6) = (11|6) - 6 = 15 - 6 = 9\). Можно показать, что для любых неотрицательных чисел \(x\) и \(y\) значение \(f(x, y)\) также неотрицательное.

Она хотела бы исследовать данную функцию, и придумала несколько задач для себя. К сожалению, она не может решить все из них, и ей нужна ваша помощь. Вот одна из этих задач.

Значение массива \([a_1, a_2, \dots, a_n]\) определяется как \(f(f(\dots f(f(a_1, a_2), a_3), \dots a_{n-1}), a_n)\) (для примеров обратитесь к примечаниям). Вам дан массив из не обязательно различных чисел. Как нужно переставить местами его элементы, чтобы его значение стало максимальным возможным?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\))  — длина массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\))  — элементы массива. Не гарантируется, что элементы массива различны.

Выходные данные

Выведите \(n\) чисел  — перестановку массива с максимальным значением. Если существует несколько решений, выведите любое из них.

Примечание

В первом тестовом случае, значение массива \([11, 6, 4, 0]\) равно \(f(f(f(11, 6), 4), 0) = f(f(9, 4), 0) = f(9, 0) = 9\).

\([11, 4, 0, 6]\) также является верным ответом.

F. Keep talking and nobody explodes – easy

битмаски Перебор Разбор выражений

This is an unusual problem in an unusual contest, here is the announcement: http://cf.m27.workers.dev/blog/entry/73543

You have the safe lock which consists of 5 decimal digits. If you rotate some digit, it increases by one, except 9 which becomes 0.

Initially, the lock contains number \(x\). To unlock the safe you must do the following operations in order (and be careful, don't mix up if and else statements).

If sum of digits on positions 1 and 4 is greater than 10, rotate digit on position 1 by 3 times, else rotate digit on position 4 by 8 times.

If sum of digits on positions 3 and 2 is greater than 8, rotate digit on position 4 by 9 times, else rotate digit on position 5 by 8 times.

If digit on position 3 is odd, rotate digit on position 3 by 3 times, else rotate digit on position 3 by 4 times.

If digit on position 5 is greater than digit on position 2, rotate digit on position 4 by 1 times, else rotate digit on position 2 by 7 times.

If digit on position 1 is odd, rotate digit on position 1 by 3 times, else rotate digit on position 3 by 5 times.

If digit on position 4 is odd, rotate digit on position 4 by 7 times, else rotate digit on position 1 by 9 times.

If digit on position 4 is greater than digit on position 1, rotate digit on position 4 by 9 times, else rotate digit on position 4 by 2 times.

If digit on position 1 is greater than digit on position 3, rotate digit on position 2 by 1 times, else rotate digit on position 3 by 1 times.

If digit on position 5 is greater than digit on position 3, rotate digit on position 4 by 5 times, else rotate digit on position 5 by 8 times.

If sum of digits on positions 1 and 3 is greater than 8, rotate digit on position 4 by 5 times, else rotate digit on position 2 by 5 times.

If digit on position 1 is greater than digit on position 4, rotate digit on position 4 by 3 times, else rotate digit on position 2 by 3 times.

If sum of digits on positions 3 and 1 is greater than 9, rotate digit on position 2 by 9 times, else rotate digit on position 2 by 2 times.

If sum of digits on positions 4 and 3 is greater than 10, rotate digit on position 4 by 7 times, else rotate digit on position 5 by 7 times.

If digit on position 3 is greater than digit on position 2, rotate digit on position 3 by 2 times, else rotate digit on position 4 by 6 times.

If digit on position 1 is greater than digit on position 3, rotate digit on position 1 by 9 times, else rotate digit on position 2 by 9 times.

If digit on position 3 is odd, rotate digit on position 3 by 9 times, else rotate digit on position 1 by 5 times.

If sum of digits on positions 3 and 5 is greater than 9, rotate digit on position 3 by 4 times, else rotate digit on position 3 by 9 times.

If digit on position 3 is greater than digit on position 1, rotate digit on position 5 by 1 times, else rotate digit on position 5 by 7 times.

If digit on position 1 is greater than digit on position 3, rotate digit on position 2 by 9 times, else rotate digit on position 4 by 6 times.

If sum of digits on positions 2 and 3 is greater than 10, rotate digit on position 2 by 2 times, else rotate digit on position 3 by 6 times.

Input

Input contains single number \(x\) consisting of exactly 5 digits, leading zeroes are allowed.

Output

Output the number after applying all operations.

B. Самый длинный палиндром

жадные алгоритмы Конструктив Перебор реализация Строки *1100

Вернувшись к решению задач, Гильдонг взялся за изучение палиндромов. Он выяснил, что палиндром это строка, которая равна своему перевороту. Например, строки «pop», «noon», «x», и «kkkkkk» являются палиндромами, а строки «moon», «tv», и «abab» не являются. Пустая строка также является палиндромом.

Гильдонгу очень понравился этот концепт, так что он решил немного с ним поиграть. У него есть \(n\) различных строк равной длины \(m\). Он хочет удалить некоторые из этих строк (возможно, ни одну, или все) и переставить оставшиеся, чтобы их конкатенация была палиндромом. Он также хочет, чтобы палиндром был как можно длиннее. Помогите ему решить эту задачу!

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 100\), \(1 \le m \le 50\)) — количество строк и длина каждой строки.

В следующих \(n\) строках записаны строки длины \(m\), состоящие только из строчных букв латинского алфавита. Все данные строки различны.

Выходные данные

В первую строку выведите длину наибольшего палиндрома.

Во вторую строку выведите искомый палиндром. Если есть несколько возможных ответов, выведите любой. Если палиндром пуст, то можете как вывести пустую строку, так и не выводить эту строку вообще.

Примечание

В первом примере «battab» также является корректным ответом.

Во втором примере есть 4 разных возможных корректных ответа, включая ответ из примера. Мы не будем давать никаких подсказок, какими являются остальные ответы.

В третьем примере единственная возможная строка — пустая.

A. Курони и подарки

жадные алгоритмы Конструктив Перебор сортировки *800

У Курони есть \(n\) дочерей. В качестве подарков им он купил \(n\) ожерелий и \(n\) браслетов:

  • \(i\)-е ожерелье имеет яркость \(a_i\), где все \(a_i\) попарно различны (то есть все \(a_i\) имеют различные значения);
  • \(i\)-й браслет имеет яркость \(b_i\), где все \(b_i\) попарно различны (то есть все \(b_i\) имеют различные значения).

Курони хочет дать ровно одно ожерелье и ровно один браслет каждой из своих дочерей. Чтобы все они выглядели уникально, общие яркости обоих подарков, вручаемых каждой дочери, должны быть попарно различными. Формально, если \(i\)-я дочь получает ожерелье с яркостью \(x_i\) и браслет с яркостью \(y_i\), то суммы \(x_i + y_i\) должны быть попарно различными. Помогите Курони раздать подарки.

Например, если яркости равны \(a = [1, 7, 5]\) и \(b = [6, 1, 2]\), то мы можем распределить подарки следующим образом:

  • Дать третье ожерелье и первый браслет первой дочери, чтобы получить общую яркость \(a_3 + b_1 = 11\).
  • Дать первое ожерелье и третий браслет второй дочери, чтобы получить общую яркость \(a_1 + b_3 = 3\).
  • Дать второе ожерелье и второй браслет третьей дочери, чтобы получить общую яркость \(a_2 + b_2 = 8\).

А вот пример неправильного распределения:

  • Дать первое ожерелье и первый браслет первой дочери, чтобы получить общую яркость \(a_1 + b_1 = 7\).
  • Дать второе ожерелье и второй браслет второй дочери, чтобы получить общую яркость \(a_2 + b_2 = 8\).
  • Дать третье ожерелье и третий браслет третьей дочери, чтобы получить общую яркость \(a_3 + b_3 = 7\).

Это распределение неправильное, так как общие яркости подарков, полученных первой и третьей дочерью равны. Не расстраивайте их так!

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\))  — количество дочерей, ожерелий, и браслетов.

Вторая строка каждого набора входных данных содержит \(n\) попарно различныx целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 1000\))  — яркости ожерелий.

Третья строка каждого набора входных данных содержит \(n\) попарно различныx целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 1000\))  — яркости браслетов.

Выходные данные

Для каждого набора входных данных в первой строке выведите \(n\) целых чисел \(x_1, x_2, \dots, x_n\), обозначающих, что \(i\)-я дочь получит ожерелье с яркостью \(x_i\). Во второй строке выведите \(n\) целых чисел \(y_1, y_2, \dots, y_n\), обозначающих, что \(i\)-я дочь получит браслет с яркостью \(y_i\).

Суммы \(x_1 + y_1, x_2 + y_2, \dots, x_n + y_n\) должны быть попарно различными. Числа \(x_1, \dots, x_n\) должны быть равны числам \(a_1, \dots, a_n\) в каком-то порядке, а числа \(y_1, \dots, y_n\) должны быть равны числам \(b_1, \dots, b_n\) в каком-то порядке.

Можно показать, что решение всегда существует. Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных достаточно дать \(i\)-е ожерелье и \(i\)-й браслет \(i\)-й дочери. Соответствующие суммы будут равняться \(1 + 8 = 9\), \(8 + 4 = 12\), и \(5 + 5 = 10\).

Второй набор входных данных описан в условии.

C. Невозможное вычисление

Комбинаторика математика Перебор теория чисел *1600

Чтобы стать королем Codeforces, Курони должен решить следующую задачу.

Ему даны \(n\) чисел \(a_1, a_2, \dots, a_n\). Помогите Курони посчитать \(\prod_{1\le i<j\le n} |a_i - a_j|\). Так как ответ может быть очень большим, посчитайте его по модулю \(m\).

Если вы не знакомы с короткой формой записи, \(\prod_{1\le i<j\le n} |a_i - a_j|\) равно \(|a_1 - a_2|\cdot|a_1 - a_3|\cdot\) \(\dots\) \(\cdot|a_1 - a_n|\cdot|a_2 - a_3|\cdot|a_2 - a_4|\cdot\) \(\dots\) \(\cdot|a_2 - a_n| \cdot\) \(\dots\) \(\cdot |a_{n-1} - a_n|\). Другими словами, это произведение \(|a_i - a_j|\) по всем \(1\le i < j \le n\).

Входные данные

Первая строка содержит два целых числа \(n\), \(m\) (\(2\le n \le 2\cdot 10^5\), \(1\le m \le 1000\)) — количество чисел и модуль.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)).

Выходные данные

Выведите единственное число — \(\prod_{1\le i<j\le n} |a_i - a_j| \bmod m\).

Примечание

В первом примере, \(|8 - 5| = 3 \equiv 3 \bmod 10\).

Во втором примере, \(|1 - 4|\cdot|1 - 5|\cdot|4 - 5| = 3\cdot 4 \cdot 1 = 12 \equiv 0 \bmod 12\).

В третьем примере, \(|1 - 4|\cdot|1 - 9|\cdot|4 - 9| = 3 \cdot 8 \cdot 5 = 120 \equiv 1 \bmod 7\).

G. Курони и Антихайп

битмаски графы дп Перебор снм *3500

Курони плохо разбирается в экономике. Поэтому он решил основать новую финансовую пирамиду под названием Антихайп. У него есть следующие правила:

  • Вы можете присоединиться к пирамиде бесплатно и получить \(0\) монет.
  • Если вы уже являетесь участником Антихайпа, вы можете пригласить своего друга, который в настоящее время не является участником Антихайпа, и получить количество монет, равное вашему возрасту (за каждого приглашенного друга).

\(n\) людей недавно услышали об Антихайпе, возраст \(i\)-го человека - \(a_i\). Некоторые из них являются друзьями, но дружба сегодня  — странная вещь: \(i\)-й человек является другом \(j\)-го человека тогда и только тогда, когда \(a_i \text{ AND } a_j = 0\), где \(\text{AND}\) обозначает операцию побитового И.

На данный момент никто из \(n\) людей не является членом Антихайпа. Они хотят сотрудничать, чтобы присоединяться и приглашать друг друга в Антихайп таким образом, чтобы максимизировать их суммарную прибыль. Не могли бы вы помочь им?

Входные данные

Первая строка содержит единственное целое число \(n\) (\(1\le n \le 2\cdot 10^5\))  — количество людей.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0\le a_i \le 2\cdot 10^5\))  — возраста людей.

Выходные данные

Выведите одно целое число  — максимальную возможную суммарную прибыль всех \(n\) людей.

Примечание

Только первый и второй человек дружат. Второй может присоединиться к Антихайпу и пригласить первого, получив за это \(2\) монеты.

C. Корова и сообщение

дп математика Перебор Строки *1500

Корова Бесси только что перехватила сообщение, которое Фермер Джон отправил Бургер Куин! Бесси уверена, что в нем скрыто секретное сообщение.

Сообщение представляет из себя строку \(s\), состоящую из строчных букв латинского алфавита. Бесси считает, что строка \(t\) скрыта в строке \(s\), если \(t\) является подпоследовательностью \(s\), индексы которой формируют арифметическую прогрессию. Например, строка aab скрыта в строке aaabb, потому что она получена в индексах \(1\), \(3\) и \(5\), которые формируют арифметическую прогрессию с шагом \(2\). Бесси считает, что любая скрытая строка, которая имеет наибольшее количество вхождений и является скрытым сообщением. Два вхождения подпоследовательности \(S\) различны, если различаются их множества индексов. Помогите Бесси узнать количество вхождений скрытого сообщения!

Например, в строке aaabb, a скрыта \(3\) раза, b скрыта \(2\) раза, ab скрыта \(6\) раз, aa скрыта \(3\) раза, bb скрыта \(1\) раз, aab скрыта \(2\) раза, aaa скрыта \(1\) раз, abb скрыта \(1\) раз, aaab скрыта \(1\) раз, aabb скрыта \(1\) раз и aaabb скрыта \(1\) раз. Количество вхождений скрытого сообщения равно \(6\).

Входные данные

В первой строке задана строка \(s\), состоящая из строчных букв латинского алфавита (\(1 \le |s| \le 10^5\)) — текст, который перехватила Бесси.

Выходные данные

Выведите единственное число  — количество вхождений секретного сообщения.

Примечание

В первом примере скрыты следующие строки (с соответствующими множествами индексов):

  • a встречается как \((1)\), \((2)\), \((3)\);
  • b встречается как \((4)\), \((5)\);
  • ab встречается как \((1,4)\), \((1,5)\), \((2,4)\), \((2,5)\), \((3,4)\), \((3,5)\);
  • aa встречается как \((1,2)\), \((1,3)\), \((2,3)\);
  • bb встречается как \((4,5)\);
  • aab встречается как \((1,3,5)\), \((2,3,4)\);
  • aaa встречается как at \((1,2,3)\)
  • abb встречается как \((3,4,5)\)
  • aaab встречается как \((1,2,3,4)\);
  • aabb встречается как \((2,3,4,5)\);
  • aaabb встречается как \((1,2,3,4,5)\);
Заметим, что все множества индексов являются арифметическими прогрессиями.

Во втором примере, ни одна скрытая строка не встречается более одного раза.

В третьем примере, скрытым сообщением является одна буква l.

C. Выполни комбо

Перебор *1300

Вы хотите выполнить комбо против своего соперника в одном популярном файтинге. Комбо — это строка \(s\), состоящая из \(n\) строчных букв латинского алфавита. Чтобы выполнить комбо, вам нужно нажать все кнопки в том порядке, в котором они появляются в \(s\). То есть, если \(s=\)«abca», то вам нужно нажать 'a', затем 'b', 'c' и снова 'a'.

Вы знаете, что вы потратите \(m\) неверных попыток, чтобы выполнить комбо, и во время \(i\)-й попытки вы ошибетесь ровно после \(p_i\)-й кнопки (\(1 \le p_i < n\)) (то есть, вы нажмете сначала \(p_i\) кнопок правильно, а затем начнете выполнять комбо сначала). Гарантируется, что во время \(m+1\)-й попытки вы нажмете все кнопки правильно и наконец-то выполните комбо.

То есть, если \(s=\)«abca», \(m=2\) и \(p = [1, 3]\), то последовательность нажатых кнопок будет равна 'a' (здесь вы допускаете ошибку и начинаете выполнять комбо сначала), 'a', 'b', 'c', (здесь вы допускаете ошибку и начинаете выполнять комбо сначала), 'a' (заметьте, что в этот момент вы не выполните комбо из-за ошибки), 'b', 'c', 'a'.

Ваша задача — для каждой кнопки (буквы) посчитать, сколько раз вы ее нажмете.

Вам требуется ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Затем следуют \(t\) наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le m \le 2 \cdot 10^5\)) — длина строки \(s\) и количество попыток соответственно.

Вторая строка каждого набора содержит строку \(s\), состоящую из \(n\) строчных букв латинского алфавита.

Третья строка каждого набора содержит \(m\) целых чисел \(p_1, p_2, \dots, p_m\) (\(1 \le p_i < n\)) — количество символов, нажатых правильно во время \(i\)-й попытки.

Гарантируется, что сумма всех \(n\) и сумма всех \(m\) не превосходят \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\), \(\sum m \le 2 \cdot 10^5\)).

Гарантируется, что ответ для каждой буквы не превосходит \(2 \cdot 10^9\).

Выходные данные

Для каждого набора входных данных выведите ответ на него — \(26\) целых чисел: количество раз, которое вы нажмете кнопку 'a', количество раз, которое вы нажмете кнопку 'b', \(\dots\), количество раз, которое вы нажмете кнопку 'z'.

Примечание

Первый набор входных данных разобран в условии задачи. Неверными попытками являются «a», «abc», а последней попыткой является «abca». Количество нажатий 'a' равно \(4\), 'b' равно \(2\) и 'c' равно \(2\).

Во втором наборе входных данных всего есть пять неверных попыток: «co», «codeforc», «cod», «co», «codeforce», а последней попыткой является «codeforces». Количество нажатий 'c' равно \(9\), 'd' равно \(4\), 'e' равно \(5\), 'f' равно \(3\), 'o' равно \(9\), 'r' равно \(3\) и 's' равно \(1\).

D. Три целых числа

математика Перебор *2000

Вам даны три целых числа \(a \le b \le c\).

За один ход вы можете прибавить \(+1\) или \(-1\) к любому из этих целых чисел (то есть увеличить или уменьшить любое число на единицу). Вы можете применить такую операцию любое (возможно, нулевое) число раз, кроме того, вы можете применить такую операцию несколько раз к одному и тому же числу. Обратите внимание, что с помощью таких операций вам запрещено получать неположительные числа.

Вы хотите применить минимальное число таких операций, чтобы получить три целых числа \(A \le B \le C\) таких, что \(B\) делится на \(A\) и \(C\) делится на \(B\).

Вам требуется ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Следующие \(t\) строк описывают наборы входных данных. Каждый набор задан на отдельной строке в виде трех разделенных пробелом целых чисел \(a, b\) и \(c\) (\(1 \le a \le b \le c \le 10^4\)).

Выходные данные

Для каждого набора входных данных выведите ответ на него. Первой строкой выведите \(res\) — минимальное количество операций, которое нужно применить, чтобы получить три целых числа \(A \le B \le C\) таких, что \(B\) делится на \(A\) и \(C\) делится на \(B\). Второй строкой выведите любую подходящую тройку \(A, B\) и \(C\).

E. Построить бинарное дерево

Деревья Конструктив Перебор *2200

Вам даны два целых числа \(n\) и \(d\). Нужно построить корневое бинарное дерево из \(n\) вершин с корнем в вершине \(1\) с суммой глубин всех вершин равной \(d\).

Дерево — это связный граф без циклов. Корневое дерево имеет специальную вершину — корень. Родитель вершины \(v\) — это последняя отличная от \(v\) вершина на пути от корня к вершине \(v\). Глубина вершины \(v\) — это длина пути от корня к вершине \(v\). Дети вершины \(v\) — все вершины, для которых \(v\) является родителем. Бинарное дерево — это такое дерево, в котором ни одна вершина не имеет более \(2\) детей.

Вам нужно ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Единственная строка каждого набора содержит два целых числа \(n\) и \(d\) (\(2 \le n, d \le 5000\)) — количество вершин в дереве и требуемую сумму глубин всех вершин.

Гарантируется, что сумма всех \(n\) и сумма всех \(d\) не превышают \(5000\) (\(\sum n \le 5000, \sum d \le 5000\)).

Выходные данные

Для каждого набора входных данных выведите ответ на него.

Если невозможно построить такое дерево, выведите «NO» (без кавычек) первой строкой. Иначе выведите «{YES}» первой строкой. Затем выведите \(n-1\) целое число \(p_2, p_3, \dots, p_n\) второй строкой, где \(p_i\) — родитель вершины \(i\). Обратите внимание: последовательность родителей, которую вы выведете, должна описывать некоторое бинарной дерево.

Примечание

Изображения, соответствующие первому и второму наборам входных данных из примера:

A. Ресторан быстрого питания

жадные алгоритмы Перебор реализация *900

Устав от скучной работы в офисе, Денис решил открыть ресторан быстрого питания.

В первый день день он приготовил \(a\) порций пельменей, \(b\) стаканов морса и \(c\) блинчиков со сгущённым молоком.

Особенностью ресторана Дениса является процедура заказа еды. Для каждого посетителя Денис сам выбирает набор блюд, который он получит. При выборе набора блюд Денис руководствуется следующими правилами:

  • каждый посетитель получит хотя бы одно блюдо (блюдами считаются пельмени, морс, блинчики со сгущёнкой);
  • каждый посетитель получит не более одной порции пельменей, не более одного стакана морса и не более одного блинчика со сгущённым молоком;
  • все посетители получат разные наборы блюд.

Какое максимальное количество посетителей сможет накормить Денис?

Входные данные

Первая строка содержит одно число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных в тесте.

Каждая из следующих \(t\) строк содержит целые числа \(a\), \(b\), \(c\) (\(0 \leq a, b, c \leq 10\)) — количество порций пельменей, стаканов морса и блинчиков со сгущённым молоком, которые приготовил Денис.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество посетителей, которых сможет накормить Денис.

Примечание

В первом наборе входных данных примера Денис может накормить первого посетителя пельменями, второму посетителю дать стакан морса, а третьему посетителю дать стакан морса и блинчик со сгущёнкой.

Во втором наборе входных данных примера ресторан Дениса не очень перспективен: он не сможет обслужить ни одного клиента.

В третьем наборе входных данных примера Денис сможет обслужить четырёх гостей. Первый гость получит полноценный обед из порции пельменей, стакана морса и блинчика со сгущёнкой. Второй посетитель пообедает пельменями. Третий гость получит блинчик со сгущёнкой, а четвёртый гость получит блинчик и порцию пельменей. Обратите внимание, что Денис использует не все приготовленные продукты, однако не сможет принять больше посетителей.

C1. Небоскрёбы (упрощённая версия)

дп жадные алгоритмы Перебор Структуры данных *1500

Это более простая версия задачи. В этой версии \(n \le 1000\)

В Берляндии активно застраивается окраина столицы. Компания «Kernel Panic» руководит постройкой жилого комплекса из небоскрёбов в Новой Берлскве. Все небоскрёбы строятся вдоль шоссе. Известно, что компания уже купила \(n\) участков возле шоссе и готовится возвести \(n\) небоскрёбов, по одному зданию на один участок.

Архитекторы при планировании зданий должны учитывать несколько требований. Во-первых, поскольку земля на каждом участке имеет разные свойства, для каждого небоскрёба есть свое ограничение по количеству этажей, которое он может иметь. Во-вторых, согласно дизайн-коду города, недопустима ситуация, когда для какого-то небоскрёба сразу по обе стороны от него есть небоскрёбы выше него.

Более формально, пронумеруем участки целыми числами от \(1\) до \(n\). Тогда у небоскрёба на участке с номером \(i\) количество этажей \(a_i\) не может быть больше \(m_i\) (\(1 \le a_i \le m_i\)) Также не может быть, что на плане существуют два участка с номерами \(j\) и \(k\), таких что \(j < i < k\) и \(a_j > a_i < a_k\). Участки \(j\) и \(k\) не обязаны быть соседними с \(i\).

Компания хочет, чтобы суммарное количество этажей в построенных небоскрёбах было как можно больше. Помогите ей выбрать количество этажей для каждого небоскрёба оптимальным образом, то есть так, чтобы выполнялись все ограничения, а среди всех таких вариантов выберите один из планов, в котором суммарное количество этажей максимально возможно.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 1000\)) — количество участков.

Вторая строка содержит целые числа \(m_1, m_2, \ldots, m_n\) (\(1 \leq m_i \leq 10^9\)) —максимально возможное количество этажей для небоскрёба на каждом участке.

Выходные данные

Выведите \(n\) чисел \(a_i\) — количества этажей в плане для каждого небоскрёба, такие, что выполняются все ограничения, а суммарное количество этажей во всех небоскрёбах максимально возможное.

Если возможно несколько ответов, выведите любой.

Примечание

В первом примере можно построить все небоскрёбы с максимально возможной высотой.

Во втором примере придать максимальную высоту всем небоскрёбам нельзя, так как это нарушает ограничение дизайн-кода. Ответ \([10, 6, 6]\) является оптимальным. Обратите внимание, что ответ \([6, 6, 8]\) также удовлетворяет всем ограничениям, но оптимальным не является.

B. Преобразование строки

Конструктив Перебор реализация сортировки Строки *1400

У Васи есть строка \(s\) длины \(n\). Он решает применить к ней следующее преобразование:

  1. Выберите целое \(k\), (\(1 \leq k \leq n\)).
  2. Для \(i\) от \(1\) до \(n-k+1\), переверните подстроку \(s[i:i+k-1]\) строки \(s\). К примеру, если строка \(s\) равна qwer и \(k = 2\), то строка пройдет следующую последовательность изменений:
    • qwer (начальная строка)
    • wqer (после переворачивания первой подстроки длины \(2\))
    • weqr (после переворачивания второй подстроки длины \(2\))
    • werq (после переворачивания последней подстроки длины \(2\))
    Следовательно, получившаяся строка после преобразования \(s\) с \(k = 2\) равна werq.

Вася хочет выбрать такое \(k\), чтобы строка, полученная в результате преобразования, была лексикографически минимальной возможной среди всех выборов \(k\). Среди всех таких \(k\) он хочет выбрать наименьшее. Так как он занят посещением Felicity 2020, он просит вашей помощи.

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Каждый тест содержит несколько наборов входных данных.

Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 5000\)). Далее следуют описания наборов входных данных.

Вторая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 5000\)) — длину строки \(s\).

Третья строка каждого набора входных данных содержит строку \(s\) из \(n\) строчных букв латинского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите две строки:

В первой строке выведите лексикографически минимально возможную строку \(s'\), получающуюся как результат преобразования.

Во второй строке выведите подходящее значение \(k\) (\(1 \leq k \leq n\)), которое вы выбрали для преобрразования. Если несколько значений \(k\) дают лексикографически минимальную строку, выведите минимальное \(k\) среди них.

Примечание

В первом наборе тестовых данных примера, преобразование строки abab даст следующие результаты:

  • для \(k = 1\) : abab
  • для \(k = 2\) : baba
  • для \(k = 3\) : abab
  • для \(k = 4\) : baba

    Лексикографически наименьшая строка, которую можно получить  — это abab для \(k = 1\) и \(3\). Следовательно, наименьшее значение \(k\) равно \(1\).

C. Удаление соседних

жадные алгоритмы Конструктив Перебор Строки *1600

Вам задана строка \(s\), состоящая из строчных букв латинского алфавита. Пусть длина \(s\) равна \(|s|\).

За один ход вы можете выбрать любой индекс \(i\) и удалить \(i\)-й символ \(s\) (\(s_i\)), если хотя бы один из его соседних символов является предыдущей буквой в латинском алфавите для \(s_i\). Например, для буквы b предыдущей буквой является a, для буквы s предыдущей букой является r, для буквы a предыдущей буквы не существует. Заметьте, что после каждого удаления длина строки уменьшается на единицу. Таким образом, индекс \(i\) должен удовлетворять условию \(1 \le i \le |s|\) в течение каждого хода.

Соседними символами для символа \(s_i\) являются символы \(s_{i-1}\) и \(s_{i+1}\). Первый и последний символы \(s\) имеют только один соседний символ (за исключением случая \(|s| = 1\)).

Рассмотрим следующий пример. Пусть \(s=\) bacabcab.

  1. В течение первого хода вы можете удалить первый символ \(s_1=\) b, так как \(s_2=\) a. Тогда строка станет равна \(s=\) acabcab.
  2. В течение второго хода вы можете удалить пятый символ \(s_5=\) c, так как \(s_4=\) b. Тогда строка станет равна \(s=\) acabab.
  3. В течение третьего хода вы можете удалить шестой символ \(s_6=\) b, так как \(s_5=\) a. Тогда строка станет равна \(s=\) acaba.
  4. В течение четвертого хода единственным символом, который вы можете удалить, является \(s_4=\) b, так как \(s_3=\) a (или \(s_5=\) a). Строка станет равна \(s=\) acaa, и вы больше не сможете ничего с ней сделать.

Ваша задача — найти максимальное количество символов, которые вы можете удалить, если вы выберете последовательность ходов оптимально.

Входные данные

Первая строка входных данных содержит одно целое число \(|s|\) (\(1 \le |s| \le 100\)) — длину \(s\).

Вторая строка входных данных содержит строку \(s\), состоящую из \(|s|\) строчных букв латинского алфавита.

Выходные данные

Выведите одно целое число — максимально возможное количество символов, которые вы можете удалить, если вы выберете последовательность ходов оптимально.

Примечание

Первый тестовый пример разобран в условии задачи. Заметьте, что последовательность ходов, представленная в условии, не является единственной, но можно показать, что максимально возможный ответ на этот тест равен \(4\).

Во втором тестовом примере вы можете удалить все символы \(s\), кроме одного. Единственный возможный ответ описан ниже.

  1. В течение первого хода следует удалить третий символ \(s_3=\) d, \(s\) станет равна bca.
  2. В течение второго хода следует удалить второй символ \(s_2=\) c, \(s\) станет равна ba.
  3. Наконец, в течение третьего хода следует удалить первый символ \(s_1=\) b, \(s\) станет равна a.

A. Задача о подмножестве чётной суммы

дп жадные алгоритмы Перебор реализация *800

Дан массив \(a\), состоящий из \(n\) положительных целых чисел. Найдите непустое подмножество его элементов с чётной (т.е. делящейся на \(2\)) суммой или определите, что такого подмножества нет.

И заданный массив и искомое подмножетсво могут содержать равные значения элементов.

Входные данные

В первой строке задано целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных, для которых требуется решить задачу. Затем следуют описания \(t\) наборов входных данных.

Описание каждого набора входных данных состоит из двух строк. В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 100\)) — количество элементов в массиве \(a\). Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 100\)) — элементы массива \(a\). Массив \(a\) может содержать одинаковые (равные) значения элементов.

Выходные данные

Для каждого набора входных данных выведите \(-1\), если не существует требуемого подмножества элементов. Иначе выведите целое число \(k\) — количество элементов в подмножестве. Затем выведите \(k\) различных чисел (\(1 \leq p_i \leq n\)) — индексы элементов найденного подмножества. Если есть несколько подходящих подмножеств, выведите любое из них.

Примечание

В примере описан тест, состоящий их трёх наборов входных данных.

В первом наборе входных данных можно выбрать подмножество, состоящее из второго элемента массива. Сумма в этом подмножестве равна \(4\), то есть чётна.

Во втором наборе входных данных существует только одно непустое подмножество элементов массива, состоящее из первого элемента. В этом подмножестве сумма нечётна, таким образом ответа не существует.

В третьем наборе входных данных подмножество, состоящее из всех элементов массива, имеет чётную сумму.

B. Еще одна задача про палиндромы

Перебор Строки *1100

Вам задан массив \(a\), состоящий из \(n\) целых чисел.

Ваша задача — определить, содержит ли \(a\) какую-то подпоследовательность длины хотя бы \(3\), которая является палиндромом.

Напомним, что массив \(b\) называется подпоследовательностью массива \(a\), если \(b\) может быть получен удалением некоторого (возможно, нулевого) количества элементов из \(a\) (не обязательно подряд идущих) без изменения порядка оставшихся элементов. Например, \([2]\), \([1, 2, 1, 3]\) и \([2, 3]\) являются подпоследовательностями \([1, 2, 1, 3]\), а \([1, 1, 2]\) и \([4]\) — нет.

Также напомним, что палиндром — это массив, который читается одинаково как слева направо, так и справа налево. Другими словами, массив \(a\) длины \(n\) является палиндромом, если \(a_i = a_{n - i - 1}\) для всех \(i\) от \(1\) до \(n\). Например, массивы \([1234]\), \([1, 2, 1]\), \([1, 3, 2, 2, 3, 1]\) и \([10, 100, 10]\) являются палиндромами, а массивы \([1, 2]\) и \([1, 2, 3, 1]\) — нет.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных.

Следующие \(2t\) строк описывают наборы тестовых данных. Первая строка набора тестовых данных содержит одно целое число \(n\) (\(3 \le n \le 5000\)) — длину \(a\). Вторая строка набора тестовых данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)), где \(a_i\) является \(i\)-м элементом \(a\).

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превосходит \(5000\) (\(\sum n \le 5000\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ — «YES» (без кавычек), если \(a\) содержит какую-то подпоследовательность длины хотя бы \(3\), которая является палиндромом, и «NO» в противном случае.

Примечание

В первом наборе тестовых данных из примера массив \(a\) содержит подпоследовательность \([1, 2, 1]\), которая является палиндромом.

Во втором наборе тестовых данных из примера массив \(a\) содержит две подпоследовательности длины \(3\), которые являются палиндромами: \([2, 3, 2]\) и \([2, 2, 2]\).

В третьем наборе тестовых данных из примера в массиве \(a\) нет подпоследовательностей длины хотя бы \(3\), которые являются палиндромами.

В четвертом наборе тестовых данных из примера массив \(a\) содержит одну последовательность длины \(4\), которая является палиндромом: \([1, 2, 2, 1]\) (и содержит две подпоследовательности длины \(3\), которые являются палиндромами: обе равны \([1, 2, 1]\)).

В пятом наборе тестовых данных из примера в массиве \(a\) нет подпоследовательностей длины хотя бы \(3\), которые являются палиндромами.

E. НАСТОЯЩАЯ Теория чисел от Ехаба

графы кратчайшие пути Перебор поиск в глубину и подобное теория чисел *2600

Вам дан массив \(a\) длины \(n\), который имеет специальное условие: каждый элемент в этом массиве имеет не более 7 делителей. Найдите длину кратчайшей непустой подпоследовательности этого массива, произведение элементов которой является полным квадратом.

Последовательность \(a\) является подпоследовательностью массива \(b\), если \(a\) можно получить из \(b\), удалив несколько (возможно, ноль или все) элементов.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — длину массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), \(\ldots\), \(a_{n}\) (\(1 \le a_i \le 10^6\)) — элементы массива \(a\).

Выходные данные

Выведите длину кратчайшей непустой подпоследовательности \(a\), произведение элементов которой является полным квадратом. Если существует несколько таких кратчайших подпоследовательностей, вы можете найти любую из них. Если такой подпоследовательности нет, выведите «-1».

Примечание

В первом примере, вы можете выбрать подпоследовательность \([1]\).

Во втором примере, вы можете выбрать подпоследовательность \([6, 6]\).

В третьем примере, вы можете выбрать подпоследовательность \([6, 15, 10]\).

В четвертом примере, такой подпоследовательности не существует.

F1. Мудрецы (упрощенная версия)

meet-in-the-middle битмаски дп Перебор *2600

Это упрощенная версия задачи. Две версии отличаются ограничением на число мудрецов и ограничением по времени. Вы можете взламывать по этой задаче только если обе версии решены.

\(n\) мудрецов живут в красивом городе. Некоторые из них знают друг друга.

Для всех возможных \(n!\) перестановок \(p_1, p_2, \ldots, p_n\) мудрецов, построим бинарную строку длины \(n-1\): для всех \(1 \leq i < n\) положим \(s_i=1\) если мудрецы \(p_i\) и \(p_{i+1}\) знают друг друга, и \(s_i=0\) иначе.

Для всех \(2^{n-1}\) возможных бинарных строк, найдите число перестановок, при которых получается такая бинарная строка.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \leq n \leq 14)\) — количество мудрецов в городе.

Следующие \(n\) строк содержат бинарные строки, по \(n\) символов в каждой, \(j\)-й символ в \(i\)-й строке равен «1» если мудрец \(i\) знает мудреца \(j\), и равен «0» иначе.

Гарантируется, что если \(i\)-й мудрец знает \(j\)-го мудреца, то \(j\)-й мудрец знает \(i\)-го мудреца, и никакой мудрец не знает сам себя.

Выходные данные

Выведите \(2^{n-1}\) целых чисел, разделенных пробелами. Для каждого \(0 \leq x < 2^{n-1}\):

  • Рассмотрим такую строку \(s\) длины \(n-1\), что \(s_i = \lfloor \frac{x}{2^{i-1}} \rfloor \bmod 2\) для \(1 \leq i \leq n - 1\).
  • \((x+1)\)-е число должно быть необходимому ответу для \(s\).
Примечание

В первом тесте все мудрецы знакомы, соответственно для всех перестановок получается строка \(11\).

Во втором тесте

  • Если \(p = \{1, 2, 3, 4\}\), строка будет равна \(101\), потому что мудрецы \(1\) и \(2\) знакомы, \(2\) и \(3\) не знакомы, \(3\) и \(4\) знакомы;
  • Если \(p = \{4, 1, 2, 3\}\), строка будет равна \(110\), потому что мудрецы \(1\) и \(4\) не знакомы, \(1\) и \(2\) не знакомы, \(2\) и \(3\) не знакомы;
  • Если \(p = \{1, 3, 2, 4\}\), строка будет равна \(000\), потому что мудрецы \(1\) и \(3\) не знакомы, \(3\) и \(2\) не знакомы, \(2\) и \(4\) не знакомы.

B. Принцессы и принцы

графы жадные алгоритмы Перебор *1200

У короля Берляндии Поликарпа LXXXIV есть \(n\) дочерей. Чтобы показать свою власть соседним королевствам, он хочет выдать своих дочерей замуж за принцев этих королевств. По счастливой случайности других королевств так же \(n\).

Поликарп LXXXIV занумеровал своих дочерей от \(1\) до \(n\) и королевства от \(1\) до \(n\). Дальше для каждой дочери он собрал списки королевств, за принцев которых она хочет выйти замуж.

Поликарп LXXXIV — очень занятой правитель, поэтому он просто жадно находит пару своим дочерям одну за другой.

Для первой дочери он выбирает королевство с наименьшим номером из ее списка и выдает дочь за их принца. Для второй дочери он выбирает королевство с наименьшим номером из ее списка, принц которой еще не женат. Если нет неженатых принцев в списке, то дочь не выходит замуж ни за кого, а Поликарп LXXXIV переходит к следующей дочери. Процесс заканчивается после \(n\)-й дочери.

Например, пусть будет \(4\) дочери и королевства, списки дочерей: \([2, 3]\), \([1, 2]\), \([3, 4]\), \([3]\), соответственно.

В данном случае дочь \(1\) выходит замуж за принца королевства \(2\), дочь \(2\) выходит замуж за принца королевства \(1\), дочь \(3\) выходит замуж за принца королевства \(3\), оставляя дочь \(4\) без возможности выйти замуж за кого-либо.

На самом деле, до начала всех женитьб у Поликарпа LXXXIV есть время убедить одну из своих дочерей, что за принца какого-либо королевства тоже можно выйти замуж. Фактически, это значит, что он может добавить ровно одно королевство в список ровно одной из своих дочерей. Обратите внимание, что данное королевство не должно содержаться в списке данной дочери.

Поликарп LXXXIV хочет увеличить количество женатых пар.

К сожалению, на что у него нет времени, так это на нахождение записи, которую стоит добавить. Если не существует способа увеличить количество женатых пар, то сообщите, что женитьбы уже оптимальны. Иначе найдите такую запись, после добавления которой итоговое количество женатых пар увеличится.

Если существует несколько способов добавить одну запись так, что количество женатых пар увеличится, то выведите любой из них.

Для вашего и нашего удобства мы просим вас ответить на \(t\) независимых наборов тестовых данных.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов тестовых данных.

Затем следуют \(t\) наборов тестовых данных.

В первой строке каждого набора записано одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество дочерей и количество королевств.

В каждой из следующих \(n\) строк дано описание списка каждой дочери. Первое целое число \(k\) (\(0 \le k \le n\)) — это количество записей в списке \(i\)-й дочери. Затем следуют \(k\) различных чисел \(g_i[1], g_i[2], \dots, g_i[k]\) (\(1 \le g_i[j] \le n\)) — номера королевств в списке в возрастающем порядке (\(g_i[1] < g_i[2] < \dots < g_i[k]\)).

Гарантируется, что суммарное количество дочерей по всем наборам тестовых данных не превосходит \(10^5\).

Также гарантируется, что суммарное количество королевств в списках по всем наборам тестовых данных не превосходит \(10^5\).

Выходные данные

Выведите ответ на каждый тест.

Выведите «IMPROVE» в первой строке, если Поликарп LXXXIV может добавить одно королевство в список одной из его дочерей так, чтобы итоговое количество женатых пар увеличилось. Во второй строке выведите два целых числа — номер дочери и номер королевства, которое Поликарп LXXXIV должен добавить в список данной дочери.

Если существует несколько способов добавить одну запись так, что количество женатых пар увеличится, то выведите любой из них.

В противном случае выведите одно слово «OPTIMAL».

Примечание

Первый набор входных данных изображен на картинке в условии. Добавление четвертого королевства в список четвертой дочери позволит ей выйти замуж за принца четвертого королевства.

Во втором наборе входных данных любая новая запись увеличит количество женатых пар с \(0\) до \(1\).

В третьем и четвертом наборах входных данных не существует способа добавить запись.

В пятом наборе входных данных не существует способа изменить количество женитьб добавлением новой записи.

D. Бесконечный путь

графы математика Перебор поиск в глубину и подобное теория чисел *2200

Вам задана цветная перестановка \(p_1, p_2, \dots, p_n\), то есть \(i\)-й элемент перестановки имеет цвет \(c_i\).

Назовем бесконечным путем последовательность \(i, p[i], p[p[i]], p[p[p[i]]] \dots\), в которой все элементы одного цвета (\(c[i] = c[p[i]] = c[p[p[i]]] = \dots\)).

Мы также можем определить умножение перестановок \(a\) и \(b\), как перестановку \(c = a \times b\), в которой \(c[i] = b[a[i]]\). Более того, можно определить степень \(k\) перестановки \(p\), как \(p^k=\underbrace{p \times p \times \dots \times p}_{k \text{ times}}\).

Найдите такое минимальное \(k > 0\), что \(p^k\) содержит хотя бы один бесконечный путь (т.е. существует позиция \(i\) в \(p^k\), такая, что последовательность, начинающаяся с \(i\) является бесконечным путем).

Можно доказать, что ответ всегда существует.

Входные данные

В первой строке задано единственное число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных.

Следующие \(3T\) строк содержат сами наборы — по одному на три строки. В первой строке задано единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер перестановки.

Во второй строке задано \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), \(p_i \neq p_j\) при \(i \neq j\)) — перестановка \(p\).

В третьей строке задано \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le n\)) — цвета соответствующих элементов перестановки.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(T\) целых чисел — по одному на набор входных данных. Для каждого набора выведите минимальное \(k > 0\) такое, что \(p^k\) содержит хотя бы один бесконечный путь.

Примечание

В первом наборе, \(p^1 = p = [1, 3, 4, 2]\) и последовательность, стартующая с \(1\): \(1, p[1] = 1, \dots\) — бесконечный путь.

Во втором наборе, \(p^5 = [1, 2, 3, 4, 5]\) и, очевидно, она содержит несколько бесконечных путей.

В третьем наборе, \(p^2 = [3, 6, 1, 8, 7, 2, 5, 4]\) и последовательность, стартующая с \(4\): \(4, p^2[4]=8, p^2[8]=4, \dots\) — бесконечный путь, так как \(c_4 = c_8 = 4\).

B. K-я красивая строка

Бинарный поиск Комбинаторика математика Перебор реализация *1300

Для заданного целого числа \(n\) (\(n > 2\)) выпишем все строки длины \(n\), которые содержат в себе \(n-2\) буквы 'a' и две буквы 'b', в лексикографическом (алфавитном) порядке.

Напомним, что строка \(s\) длины \(n\) лексикографически меньше строки \(t\) длины \(n\), если существует такое \(i\) (\(1 \le i \le n\)), что \(s_i < t_i\), а для всех \(j\) (\(1 \le j < i\)) \(s_j = t_j\). Лексикографическое сравнение строк реализовано при помощи оператора < в современных языках программирования.

Например, если \(n=5\), то получатся следующие строки (их порядок важен):

  1. aaabb
  2. aabab
  3. aabba
  4. abaab
  5. ababa
  6. abbaa
  7. baaab
  8. baaba
  9. babaa
  10. bbaaa

Легко показать, что такой список строк будет содержать ровно \(\frac{n \cdot (n-1)}{2}\) строк.

Вам задано \(n\) (\(n > 2\)) и \(k\) (\(1 \le k \le \frac{n \cdot (n-1)}{2}\)). Выведите \(k\)-ю строку из списка.

Входные данные

Входные данные содержат один или несколько наборов тестовых данных.

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных в тесте. Затем следуют \(t\) наборов тестовых данных.

Каждый набор тестовых данных содержится на отдельной строке, содержащей два целых числа \(n\) и \(k\) (\(3 \le n \le 10^5, 1 \le k \le \min(2\cdot10^9, \frac{n \cdot (n-1)}{2})\).

Сумма значений \(n\) по всем наборам тестовых данных не превосходит \(10^5\).

Выходные данные

Для каждого набора тестовых данных выведите \(k\)-ю строку из списка всех описанных выше строк длины \(n\). Строки в списке отсортированы лексикографически (в алфавитном порядке).

F. Элементарно!

*особая задача дп Перебор Строки

Входные данные

Входные данные состоят из одной строки символов английского алфавита в верхнем регистре A-Z. Длина строки - от 1 до 10 символов, включительно.

Выходные данные

Выведите «YES» или «NO».

B. Непростая покраска

жадные алгоритмы Конструктив математика Перебор теория чисел *1400

Положительное целое число называется составным, если оно представимо в виде произведения двух положительных целых чисел, каждое из которых больше \(1\). Например, следующие числа составные: \(6\), \(4\), \(120\), \(27\). Следующие числа составными не являются: \(1\), \(2\), \(3\), \(17\), \(97\).

Задана последовательность из \(n\) составных чисел \(a_1,a_2,\ldots,a_n\).

Алиса хочет выбрать любое целое число \(m \le 11\) и покрасить каждый элемент в один из \(m\) цветов от \(1\) до \(m\) так, что:

  • для каждого цвета от \(1\) до \(m\) существует хотя бы один элемент этого цвета;
  • каждый элемент покрашен и притом ровно в один цвет;
  • наибольший общий делитель любых двух одноцветных элементов больше \(1\), то есть \(\gcd(a_i, a_j)>1\) для любой пары индексов \(i, j\), если эти элементы покрашены в одинаковый цвет.

Обратите внимание, что одинаковые элементы могут быть покрашены в разные цвета — просто для каждого индекса от \(1\) до \(n\) надо выбрать один из \(m\) цветов.

Алиса уже показала, что если все \(a_i \le 1000\), то она всегда может решить эту задачу, выбрав некоторое \(m \le 11\).

Помогите Алисе найти требуемую покраску элементов. Обратите внимание, что вам не нужно минимизировать или максимизировать количество цветов, достаточно найти решения с любым \(m\) от \(1\) до \(11\).

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Далее содержатся сами описания наборов.

В первой строке набора записано целое число \(n\) (\(1 \le n \le 1000\)) — количество чисел в последовательности \(a\).

Вторая строка набора входных данных содержит \(n\) составных целых чисел \(a_1,a_2,\ldots,a_n\) (\(4 \le a_i \le 1000\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите \(2\) строки. В первую выведите \(m\) (\(1 \le m \le 11\)) — количество использованных цветов. Считайте, что цвета пронумерованы от \(1\) до \(m\). Во вторую строку выведите любую раскраску элементов, которая удовлетворяет условиям выше. Выведите \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le m\)), где \(c_i\) — цвет \(i\)-го элемента. Если решений несколько, то выведите любое из них. Обратите внимание, что вам не нужно минимизировать или максимизировать количество цветов, достаточно найти решения с любым \(m\) от \(1\) до \(11\).

Помните, что каждый цвет от \(1\) до \(m\) должен быть использован хотя бы раз. Любые два одноцветных элемента должны не быть взаимно просты (то есть их НОД должен быть больше \(1\)).

Примечание

В первом наборе входных данных \(\gcd(6,10)=2\), \(\gcd(6,15)=3\) и \(\gcd(10,15)=5\). Таким образом, допустимо раскрасить все три элемента в один цвет. Обратите внимание, что для данного набора входных данных существуют и другие раскраски, которые удовлетворяют требованиям Алисы.

Во втором наборе входных данных в каждый цвет покрашен только один элемент, так что раскраска точно походит под все требования Алисы.

D. Досуг в школе №41

графы жадные алгоритмы игры Конструктив Перебор реализация сортировки *2100

В средней школе №41 учатся \(n\) детей. Всем известно, что они хорошие математики. Однажды на перемене ребята решили провести исследование. Они выстроились в один ряд и повернули головы налево или направо.

Дети проделывали следующую операцию: каждую секунду несколько пар соседних в ряду детей, смотрящих друг на друга, могли одновременно развернуться в противоположную сторону. Таким образом, ребенок, смотрящий на правого соседа, повернется налево, и наоборот для второго ребенка. Более того, каждую секунду хотя бы одна пара соседних детей проделывала подобную операцию. Процесс заканчивается, когда нет пары соседних детей смотрящих друг на друга.

Дано число детей \(n\), изначальная расстановка детей в ряду и целое положительное число \(k\). Необходимо найти последовательность действий детей, завершающий процесс ровно за \(k\) секунд. Более формально, на каждый из \(k\) ходов нужно вывести номера детей, которые повернутся налево во время хода.

Для примера, дети могут действовать с конфигурацией приведенной ниже и \(k = 2\) следующим образом:

На первом ходу развернутся две пары: \((1, 2)\) и \((3, 4)\). После этого получается такая конфигурация:
На втором ходу развернется только пара \((2, 3)\). В итоговой конфигурации никакая пара детей не смотрит друг на друга. Хорошая работа.

Если решение существует, то гарантируется что дети совершат не более чем \(n^2\) разворотов.

Входные данные

Первая строка входных данных содержит два целых числа \(n\), \(k\) (\(2 \le n \le 3000\), \(1 \le k \le 3000000\))  — количество детей и количество ходов через которые нужно закончить.

Вторая строка входных данных содержит строку длины \(n\), которая состоит только из символов L и R. L значит, что ребенок смотрит налево, а R  — направо.

Выходные данные

Если решения не существует, выведите \(-1\).

Иначе, вывод должен состоять из \(k\) строк. Каждая строка должна начинаться с положительного целого числа \(n_i\) (\(1\le n_i \le \frac{n}{2}\))  — количества пар детей, которые развернутся на этом ходу. Далее в этой же строке должно следовать \(n_i\) попарно различных чисел  — номера детей, которые повернут голову налево во время этого хода.

После проведения всех разворотов, не должно быть пары соседних детей, смотрящих друг на друга.

Если существует более одного решения, выведите любое из них.

Примечание

Первый тест описывает пару детей смотрящих друг на друга. За один ход они развернутся.

Во втором тесте дети не могут сделать ни одного хода. В итоге они не смогут закончить за \(k>0\) ходов.

Третий тест описан в условии.

E. Путь к 1600

Конструктив Перебор *2400

Егор стремится набрать 1600 баллов на известном шахматном портале ChessForces и ему нужна ваша помощь!

Прежде чем приступить к решению проблемы, Егор хочет напомнить вам, как ходят шахматные фигуры. Шахматная ладья движется по прямым линиям вверх и вниз, влево и вправо на столько квадратов, сколько захочет. И когда она хочет, может остановиться. Ферзь ходит во всех направлениях по вертикали, горизонтали и по диагоналям на любом расстоянии. Вы можете увидеть примеры ниже.

Для достижения цели Егор должен исследовать следующую проблему:

Дана доска \(N \times N\). Каждая ячейка доски имеет число от \(1\) до \(N ^ 2\), и все числа в клетках попарно различны.

В начале некоторая фигура ставится в ячейку с номером \(1\). Заметьте, что эта ячейка уже считается посещенной. После этого каждый ход определяется следующим образом:

  1. Среди всех пока непосещенных клеток, которые могут быть достигнуты одним движением фигуры, фигура движется в ячейку с минимальным номером.
  2. Если все доступные ячейки уже посещены и на доске остались непосещенные клетки, то шахматная фигура телепортируется в непосещенную клетку с минимальным номером. В конце этого шага фигура вынуждена заплатить \(1\) vun.
  3. Если все ячейки уже посещены, тогда процесс останавливается.

Егор должен найти такую нумерацию доски размера \(N \times N\), что ладья, обойдя всю доску, заплатит строго меньше vun–ов, чем ферзь на этой доске. Помогите Егору найти подходящую доску размера \(N \times N\), или скажите, что ее не существует.

Входные данные

Единственная строка содержит число \(N\)  — размер доски, \(1\le N \le 500\).

Выходные данные

Вывод должен содержать \(N\) строк.

В \(i\)–ой строке выведите \(N\) чисел  — числа в \(i\)-м горизонтальном ряду доски. Все числа от \(1\) до \(N \times N\) должны быть использованы ровно один раз.

На вашей доске ладья должна платить строго меньше vun–ов, чем ферзь.

Если решения не существует, выведите \(-1\).

Если существует более одного решения, выведите любое из них.

Примечание

В случае с доской размера \(1 \times 1\), и ладья, и ферзь не платят ничего.

Во втором примере ладья проходит через клетки \(1 \to 3 \to 4 \to 6 \to 9 \to 5 \to 7 \to 13 \to 2 \to 8 \to 16 \to 11 \to 10 \to 12 \to 15 \to \textbf{(1 vun)} \to 14\).

Ферзь проходит через \(1 \to 3 \to 4 \to 2 \to 5 \to 6 \to 9 \to 7 \to 13 \to 8 \to 11 \to 10 \to 12 \to 15 \to \textbf{(1 vun)} \to 14 \to \textbf{(1 vun)} \to 16\).

В результате ладья платит 1 vun, а ферзь платит 2 vun.

C. Круг монстров

жадные алгоритмы Конструктив математика Перебор *1600

Вы играете в очередную компьютерную игру, и теперь вам предстоит убить \(n\) монстров. Эти монстры стоят в круге, пронумерованном по часовой стрелке от \(1\) до \(n\). Изначально \(i\)-й монстр имеет \(a_i\) единиц здоровья.

Вы можете стрелять в монстров, чтобы убить их. Каждый выстрел требует ровно одной пули и уменьшает здоровье монстра на \(1\) (наносит ему \(1\) единицу урона). Кроме того, когда здоровье некоторого монстра \(i\) становится \(0\) или меньше \(0\), он умирает и взрывается, нанося \(b_i\) урон следующему монстру (монстру под номером \(i + 1\), если \(i < n\), или монстру под номером \(1\), если \(i = n\)). Если следующий монстр уже мертв, то ничего не происходит. Если взрыв убивает следующего монстра, он тоже взрывается, повреждая монстра после него и, возможно, вызывая еще один взрыв, и так далее.

Вы должны посчитать минимальное количество пуль, которое нужно выстрелить, чтобы убить всех \(n\) монстров в кругу.

Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 150000\)) — количество наборов входных данных.

Затем следуют наборы входных данных, каждый из них начинается со строки, содержащей одно целое число \(n\) (\(2 \le n \le 300000\)) — количество монстров. Затем следуют \(n\) строк, каждая из которых содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^{12}\)) — параметры \(i\)-го монстра в круге.

Гарантируется, что общее количество монстров во всех тестовых случаях не превышает \(300000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество пуль, которые нужно выстрелить, чтобы убить всех монстров.

G. Поиск подстроки

битмаски бпф Перебор *2900

Дана перестановка \(p\), состоящая из \(26\) целых чисел от \(1\) до \(26\) (так как это перестановка, каждое число от \(1\) до \(26\) встречается в \(p\) ровно один раз), а также две строки \(s\) и \(t\), состоящие из строчных букв латинского алфавита.

Подстрока \(t'\) строки \(t\) является вхождением строки \(s\), если выполняются следующие условия:

  1. \(|t'| = |s|\);
  2. для каждого \(i \in [1, |s|]\) либо \(s_i = t'_i\), либо \(p_{idx(s_i)} = idx(t'_i)\), где \(idx(c)\) — номер символа \(c\) в латинском алфавите (\(idx(\text{a}) = 1\), \(idx(\text{b}) = 2\), \(idx(\text{z}) = 26\)).

Например, если \(p_1 = 2\), \(p_2 = 3\), \(p_3 = 1\), \(s = \text{abc}\), \(t = \text{abcaaba}\), три подстроки \(t\) являются вхождениями \(s\) (\(t' = \text{abc}\), \(t' = \text{bca}\) и \(t' = \text{aba}\)).

Для каждой подстроки \(t\) с длиной, равной \(|s|\), проверьте, является ли она вхождением строки \(s\).

Входные данные

В первой строке заданы \(26\) целых чисел \(p_1\), \(p_2\), ..., \(p_{26}\) (\(1 \le p_i \le 26\), все эти числа попарно различны).

Во второй строке задана строка \(s\), а в третьей — строка \(t\) (\(2 \le |s| \le |t| \le 2 \cdot 10^5\)), обе они состоят из строчных латинских букв.

Выходные данные

Выведите строку из \(|t| - |s| + 1\) символов, каждый из которых должен быть либо 0, либо 1. \(i\)-й символ должен быть 1 тогда и только тогда, когда подстрока \(t\), начинающаяся с \(i\)-го символа и заканчивающаяся \((i + |s| - 1)\)-м символом (включительно), является вхождением строки \(s\).

E1. Палиндром из трех блоков (простая версия)

Бинарный поиск дп Перебор Структуры данных *1700

Единственное отличие между простой и сложной версиями — ограничения.

Вам дана последовательность \(a\), состоящая из \(n\) положительных чисел.

Определим палиндром из трех блоков как последовательность, которая состоит из не более, чем двух различных элементов (назовем эти элементы \(a\) и \(b\), \(a\) может быть равно \(b\)) и выглядит следующим образом \([\underbrace{a, a, \dots, a}_{x}, \underbrace{b, b, \dots, b}_{y}, \underbrace{a, a, \dots, a}_{x}]\). Здесь \(x, y\) — числа, большие или равные \(0\). Например, последовательности \([]\), \([2]\), \([1, 1]\), \([1, 2, 1]\), \([1, 2, 2, 1]\) и \([1, 1, 2, 1, 1]\)палиндромы из трех блоков, но \([1, 2, 3, 2, 1]\), \([1, 2, 1, 2, 1]\) и \([1, 2]\) — нет.

Ваша задача — выбрать максимальную по длине подпоследовательность \(a\), которая является палиндромом из трех блоков.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Напомним, что последовательность \(t\) является подпоследовательностью последовательности \(s\), если \(t\) может быть получена из \(s\) после удаления нуля или более элементов без изменения порядка оставшихся элементов. Например, если \(s=[1, 2, 1, 3, 1, 2, 1]\), то возможные подпоследовательности: \([1, 1, 1, 1]\), \([3]\) и \([1, 2, 1, 3, 1, 2, 1]\), но не \([3, 2, 3]\) and \([1, 1, 1, 1, 2]\).

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2000\)) — длину \(a\). Вторая строка набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 26\)), где \(a_i\) — это \(i\)-й элемент в \(a\). Заметьте, что максимальное значение \(a_i\) может быть до \(26\).

Гарантируется, что сумма чисел \(n\) по всем наборам тестовых данных не превосходит \(2000\) (\(\sum n \le 2000\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — максимально возможную длину некоторой подпоследовательности \(a\), которая является палиндромом из трех блоков.

E2. Палиндром из трех блоков (сложная версия)

дп Перебор Структуры данных *1800

Единственное отличие между простой и сложной версиями — ограничения.

Вам дана последовательность \(a\), состоящая из \(n\) положительных чисел.

Определим палиндром из трех блоков как последовательность, которая состоит из не более, чем двух различных элементов (назовем эти элементы \(a\) и \(b\), \(a\) может быть равно \(b\)) и выглядит следующим образом \([\underbrace{a, a, \dots, a}_{x}, \underbrace{b, b, \dots, b}_{y}, \underbrace{a, a, \dots, a}_{x}]\). Здесь \(x, y\) — числа, большие или равные \(0\). Например, последовательности \([]\), \([2]\), \([1, 1]\), \([1, 2, 1]\), \([1, 2, 2, 1]\) and \([1, 1, 2, 1, 1]\)палиндромы из трех блоков, но \([1, 2, 3, 2, 1]\), \([1, 2, 1, 2, 1]\) и \([1, 2]\) — нет.

Ваша задача — выбрать максимальную по длине подпоследовательность \(a\), которая является палиндромом из трех блоков.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Напомним, что последовательность \(t\) является подпоследовательностью последовательности \(s\), если \(t\) может быть получена из \(s\) после удаления нуля или более элементов без изменения порядка оставшихся элементов. Например, если \(s=[1, 2, 1, 3, 1, 2, 1]\), то возможные подпоследовательности: \([1, 1, 1, 1]\), \([3]\) и \([1, 2, 1, 3, 1, 2, 1]\), но не \([3, 2, 3]\) and \([1, 1, 1, 1, 2]\).

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину \(a\). Вторая строка набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 200\)), где \(a_i\) — это \(i\)-й элемент в \(a\). Заметьте, что максимальное значение \(a_i\) может быть до \(200\).

Гарантируется, что сумма чисел \(n\) по всем наборам тестовых данных не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — максимально возможную длину некоторой подпоследовательности \(a\), которая является палиндромом из трех блоков.

E1. Chiori и выбор кукол (простая версия)

битмаски Комбинаторика математика Перебор *2700

Это простая версия этой задачи. Единственное различие между простой и сложной версиями заключается в ограничениях на \(m\). Вы можете делать взломы, только если обе версии задачи сданы.

Chiori очень любит куклы и сейчас она собирается украсить свою спальню!

 

Так как Chiori коллекционирует куклы, всего у нее \(n\) кукол, \(i\)-я из этих кукол имеет неотрицательное целое число \(a_i\) (\(a_i < 2^m\), \(m\) дано). Chiori хочет выбрать некоторых кукол (возможно ноль) для украшения. Таким образом, всего существует \(2^n\) способов.

Обозначим за \(x\) побитовую xor сумму значений у кукол, выбранных Chiori (в случае, если Chiori не выбрала ни одной куклы, \(x = 0\)). Значением способа выбора кукол назовем количество битов равных \(1\) в двоичном представлении \(x\). Более формально, это число также равно количеству индексов \(0 \leq i < m\), таких что \(\left\lfloor \frac{x}{2^i} \right\rfloor\) нечетно.

Посчитайте для Chiori количество способов выбрать куклы со значением \(i\) для всех целых \(i\) от \(0\) до \(m\). Поскольку эти числа могут быть очень большими, вы должны посчитать их по модулю \(998\,244\,353\).

Входные данные

В первой строке находится два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le m \le 35\))  — количество кукол и максимальное возможное значение выбора нескольких кукол.

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^m\))  — числа у кукол.

Выходные данные

Выведите \(m+1\) целое число \(p_0, p_1, \ldots, p_m\)  — \(p_i\) равно количеству способов выбрать несколько кукол, так чтобы полученное значение выбора кукол оказалось равным \(i\) по модулю \(998\,244\,353\).

E2. Chiori и выбор кукол (сложная версия)

битмаски Комбинаторика математика Перебор *3500

Это сложная версия этой задачи. Единственное различие между простой и сложной версиями заключается в ограничениях на \(m\). Вы можете делать взломы, только если обе версии задачи сданы.

Chiori очень любит куклы и сейчас она собирается украсить свою спальню!

 

Так как Chiori коллекционирует куклы, всего у нее \(n\) кукол, \(i\)-я из этих кукол имеет неотрицательное целое число \(a_i\) (\(a_i < 2^m\), \(m\) дано). Chiori хочет выбрать некоторых кукол (возможно ноль) для украшения. Таким образом, всего существует \(2^n\) способов.

Обозначим за \(x\) побитовую xor сумму значений у кукол, выбранных Chiori (в случае, если Chiori не выбрала ни одной куклы, \(x = 0\)). Значением способа выбора кукол назовем количество битов равных \(1\) в двоичном представлении \(x\). Более формально, это число также равно количеству индексов \(0 \leq i < m\), таких что \(\left\lfloor \frac{x}{2^i} \right\rfloor\) нечетно.

Посчитайте для Chiori количество способов выбрать куклы со значением \(i\) для всех целых \(i\) от \(0\) до \(m\). Поскольку эти числа могут быть очень большими, вы должны посчитать их по модулю \(998\,244\,353\).

Входные данные

В первой строке находится два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le m \le 53\))  — количество кукол и максимальное возможное значение выбора нескольких кукол.

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^m\))  — числа у кукол.

Выходные данные

Выведите \(m+1\) целое число \(p_0, p_1, \ldots, p_m\)  — \(p_i\) равно количеству способов выбрать несколько кукол, так чтобы полученное значение выбора кукол оказалось равным \(i\) по модулю \(998\,244\,353\).

C. Прекрасные тройки

битмаски Конструктив математика Перебор разделяй и властвуй *2200

Рассмотрим бесконечную последовательность \(s\) натуральных чисел, построенную повторением следующих шагов:

  1. Найдите лексикографически наименьшую тройку натуральных чисел \((a, b, c)\) такую, ​​что Здесь тройка целых чисел \((a_1, b_1, c_1)\) считается лексикографически меньше тройки \((a_2, b_2, c_2)\), если последовательность \([a_1, b_1, c_1]\) лексикографически меньше последовательности \([a_2, b_2, c_2]\)
  2. Добавьте \(a\), \(b\), \(c\) в конец \(s\) в этом порядке.
  3. Вернитесь к первому шагу.

У вас есть целое число \(n\). Найдите \(n\)-й элемент \(s\).

Вы должны ответить на \(t\) независимых тестовых случаев.

Последовательность \(a\) лексикографически меньше последовательности \(b\), если в первой позиции, где \(a\) и \(b\) различны, в последовательности \(a\) элемент меньше, чем соответствующий элемент в \(b\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\))  — количество тестовых случаев.

Каждая из следующих \(t\) строк содержит одно целое число \(n\) (\(1\le n \le 10^{16}\))  — позицию элемента, который вы хотите узнать.

Выходные данные

В каждой из строк \(t\) выведите ответ на соответствующий тестовый случай.

Примечание

Первые несколько элементов \(s\) это \(1, 2, 3, 4, 8, 12, 5, 10, 15, \dots \)

A. Заполнение ромбами

дп математика Перебор реализация *900

У вас есть целое число \(n\). Сколькими способами можно полностью покрыть поясоподобную область, состоящую из \(4n-2\) треугольников, ромбами?

Ромб состоит из двух треугольников. Вы можете перемещать, вращать или переворачивать ромб, но вы не можете масштабировать его.

\(2\) покрытия называются различными, если некоторые \(2\) треугольника покрыты одним и тем же ромбом в одном из них, и различными в другом.

Пожалуйста, посмотрите на иллюстрации ниже для лучшего понимания.

Слева изображен ромб, которым вы будете заполнять область, а справа  — область, которую вы хотите заполнить.

Выше приведены области, для \(n = 1, 2, 3, 4\).

Вы должны ответить на \(t\) независимых тестовых случаев.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^{4}\))  — количество тестовых случаев.

Каждая из следующих \(t\) строк содержит одно целое число \(n\) (\(1 \le n \le 10^{9}\)).

Выходные данные

Для каждого теста выведите количество способов полностью покрыть поясоподобную область, состоящую из \(4n-2\) треугольников, ромбами. Можно показать, что при данных ограничениях это количество не превышает \(10^{18}\).

Примечание

В первом тестовом примере, есть следующие \(2\) способа заполнить область:

Во втором тестовом примере, существует единственный способ заполнить область:

A. Среднестатистические элементы

Перебор реализация *1200

Задана последовательность положительных целых чисел a1, a2, ..., an. Найдите все такие индексы i, что i-ый элемент равен среднему арифметическому всех остальных элементов (то есть всех элементов, кроме него).

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 2·105). Вторая строка содержит элементы последовательности a1, a2, ..., an (1 ≤ ai ≤ 1000). Все элементы — положительные целые числа.

Выходные данные

В первую строку выведите количество искомых индексов. Во вторую строку — искомые индексы в порядке возрастания. Все индексы — это целые числа от 1 до n.

Если искомых элементов не существует, то первая строка выходных данных должна содержать число 0. В этом случае вторую строку можно не выводить или вывести пустую строку.

B. Пары чисел

математика Перебор поиск в глубину и подобное теория чисел *1900

Допустим, мы имеем пару чисел (a, b). Мы можем получить новую пару чисел вида (a + b, b) или (a, a + b) из данной. Назовем такое действие шагом.

Пусть начальная пара чисел — (1,1). Ваша задача — найти число k, наименьшее количество шагов, необходимых чтобы получить из (1,1) пару, в которой хотя бы одно число равно n.

Входные данные

Входные данные содержат единственное целое число n (1 ≤ n ≤ 106).

Выходные данные

Выведите единственное число k.

Примечание

Из пары (1,1) можно за три хода получить пару, содержащую 5: (1,1)  →  (1,2)  →  (3,2)  →  (5,2).

A. Настя и странный генератор

жадные алгоритмы Перебор реализация Структуры данных *1500

Расстроившись после такого отношения Насти, Денис был очень грустным. Ничего не могло развеселить отвергнутого парня. Чтобы хоть как-то развеселиться он решил побродить по подворотням. И, как ни странно, ему улыбнулась удача! Зайдя в первый двор, он встретил странного человека, который чем-то торговал.

Оглядевшись вокруг, Денис подошел к незнакомцу и купил загадочный товар. Им оказался... Генератор случайных перестановок! Именно это мальчик так давно искал!

Придя домой он стал изучать, как работает его генератор и узнал алгоритм. Процесс генерации перестановки состоит из \(n\) шагов. На \(i\)-м шаге выбирается позиция (индекс) для значения \(i\) \((1 \leq i \leq n)\). Позиция для значения \(i\) определяется следующим образом:

  • Для всех \(j\) от \(1\) до \(n\) посчитаем \(r_j\)  — минимальный такой индекс, что \(j \leq r_j \leq n\), a позиция \(r_j\) еще не занята в перестановке. Если таких позиций нет, то будем считать, что значение \(r_j\) не определено.
  • Для всех \(t\) от \(1\) до \(n\) посчитаем \(count_t\)  — количество таких позиций \(1 \leq j \leq n\), что значение \(r_j\) определено и \(r_j = t\).
  • Рассмотрим все еще не занятые позиции перестановки и среди таких рассмотрим позиции, для которых значение в массиве \(count\) максимально.
  • Генератор выбирает одну из таких позиций для значения \(i\). Генератор может выбрать любую позицию.

Рассмотрим работу алгоритма на следующем примере:

Пусть \(n = 5\) и алгоритм уже расставил значения \(1, 2, 3\) в перестановке. Рассмотрим, как генератор будет выбирать позицию для значения \(4\):

  • Значения \(r\) будут \(r = [3, 3, 3, 4, \times]\), где \(\times\) означает неопределенное значение.
  • Тогда значения \(count\) будут \(count = [0, 0, 3, 1, 0]\).
  • Есть только две не занятые позиции в перестановке: \(3\) и \(4\). Значение в массиве \(count\) для позиции \(3\) равно \(3\), для позиции \(4\) равно \(1\).
  • Максимальное значение достигается только для позиции \(3\), поэтому алгоритм однозначно выберет эту позицию для значения \(4\).

Довольный своим приобретением Денис пошел домой. Несколько дней без перерыва он генерировал перестановки и решил, что преисполнился в осознании процесса генерации. Он считает, что может придумывать случайные перестановки не хуже генератора.

После этого он выписал первую пришедшую на ум перестановку \(p_1, p_2, \ldots, p_n\) и решил узнать, могла ли она получится в результате работы генератора.

К сожалению, эта задача оказалась слишком сложна для него, и он обратился за помощью к вам. Нужно определить, могла ли получиться выписанная перестановка применением описанного алгоритма, если генератор всегда выбирает нужную Денису позицию.

Входные данные

В первой строке записано целое число \(t\) \((1 \leq t \leq 10^5)\)  — количество наборов входных данных в тесте. Далее содержатся сами описания наборов.

В первой строке каждого набора находится единственное целое число \(n\) \((1 \leq n \leq 10^5)\)  — длина перестановки.

Во второй строке набора находится \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\))  — выписанная Денисом перестановка.

Гарантируется, что сумма значений \(n\) по всем входным данным не превосходит \(10^5\).

Выходные данные

Выведите «Yes», если эта перестановка могла быть получена в результате работы генератора. В противном случае выведите «No».

Все буквы можно выводить в любом регистре.

Примечание

Промоделируем работу генератора на первом тесте.

На \(1\) шаге \(r = [1, 2, 3, 4, 5], count = [1, 1, 1, 1, 1]\). Максимальное значение достигается в любой свободной позиции, поэтому генератор может выбрать случайную позицию от \(1\) до \(5\). В нашем примере он выбрал \(5\).

На \(2\) шаге \(r = [1, 2, 3, 4, \times], count = [1, 1, 1, 1, 0]\). Максимальное значение достигается в позициях от \(1\) до \(4\), поэтому генератор может выбрать случайную позицию среди них. В нашем примере он выбрал \(1\).

На \(3\) шаге \(r = [2, 2, 3, 4, \times], count = [0, 2, 1, 1, 0]\). Максимальное значение равно \(2\) и достигается только в позиции \(2\), поэтому генератор выберет эту позицию.

На \(4\) шаге \(r = [3, 3, 3, 4, \times], count = [0, 0, 3, 1, 0]\). Максимальное значение равно \(3\) и достигается только в позиции \(3\), поэтому генератор выберет эту позицию.

На \(5\) шаге \(r = [4, 4, 4, 4, \times], count = [0, 0, 0, 4, 0]\). Максимальное значение равно \(4\) и достигается только в позиции \(4\), поэтому генератор выберет эту позицию.

Итого мы получили перестановку \(2, 3, 4, 5, 1\), то есть генератор мог её сгенерировать.

F. Настя и ПСП

Перебор Структуры данных хэши *3300

  Настя, как и вы  — олимпиадный программист, но она только учится. Недавно Денис ей рассказал о способе проверки строки на то, что она является правильной скобочной последовательностью. После этого неожиданно Настя придумала более сложную задачу, которую Денис не смог решить, а сможете ли Вы?

Дана строка \(s\), состоящая из \(k\) видов пар скобок. Каждая скобка имеет вид \(t\) — целое число, такое что \(1 \leq |t| \leq k\). Если скобка имеет вид \(t\), то:

  • Если \(t > 0\), то это открывающая скобка типа \(t\).
  • Если \(t < 0\), то это закрывающая скобка типа \(-t\).

Таким образом, всего существует \(k\) типов пар скобок.

Требуется отвечать на следующие запросы:

  1. Заменить скобку на позиции \(i\) на скобку вида \(t\).
  2. Проверить, является ли подстрока с \(l\)-й по \(r\)-ю позиции, включительно, правильной скобочной последовательностью.

Напомним определение правильной скобочной последовательности:

  • Пустая последовательность является правильной.
  • Если \(A\) и \(B\) - две правильные скобочные последовательности, то их конкатенация «\(A\) \(B\)» тоже является правильной скобочной последовательностью.
  • Если \(A\) - правильная скобочная последовательность, \(c\) \((1 \leq c \leq k)\)  — некоторый тип скобок, то последовательность «\(c\) \(A\) \(-c\)» тоже является правильной.
Входные данные

В первой строке дано \(n\) \((1 \leq n \leq 10^5)\)  — длина строки и число \(k\) \((1 \leq k \leq n)\)  — количество типов скобок.

Во второй строке дана строка \(s\) длиной \(n\) символов  — \(n\) целых чисел \(s_1, s_2, \ldots, s_n\) \((1 \leq |s_i| \leq k)\).

В третьей строке дано число \(q\) \((1 \leq q \leq 10^5)\)  — количество запросов.

Каждая из следующих \(q\) строк описывает запросы:

  • \(1\) \(i\) \(t\) - запрос \(1\)-го типа \((1 \leq i \leq n, 1 \leq |t| \leq k)\).
  • \(2\) \(l\) \(r\) - запрос \(2\)-го типа \((1 \leq l \leq r \leq n)\).
Выходные данные

Для каждого запроса \(2\) типа выведите «Yes», если подстрока из запроса является правильной скобочной последовательностью и «No», иначе.

Вы можете выводить буквы в любом регистре.

Примечание

В четвёртом тесте изначально строка не является правильной скобочной последовательностью, значит ответ на первый вопрос «No». После двух изменений она имеет вид «\(1\) \(-1\)», значит она стала правильной скобочной последовательностью и ответ на четвёртый запрос «Yes».

F. Сделай возрастающим

битмаски дп Перебор *3000

Дан массив \(a\), состоящий из \(n\) целых чисел. Вы можете применить несколько операций к этому массиву (возможно, ни одной).

Во время каждой операции вы выбираете два индекса \(i\) и \(j\) (\(1 \le i, j \le n\); \(i \ne j\)), увеличиваете \(a_j\) на \(a_i\), а затем удаляете \(i\)-й элемент из массива (при этом индексы всех элементов правее удаляемого уменьшаются на \(1\), и размер массива \(n\) также уменьшается на \(1\)).

Ваша цель — сделать массив \(a\) строго возрастающим, то есть должно выполняться условие \(a_1 < a_2 < \dots < a_n\) (где \(n\) — итоговый размер массива).

Посчитайте минимальное количество операций, которое требуется, чтобы массив стал возрастающим.

Входные данные

В первой строке задано одно целое число \(T\) (\(1 \le T \le 10000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит одно целое число \(n\) (\(1 \le n \le 15\)) — количество элементов в исходном массиве \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^6\)).

Гарантируется, что:

  • количество наборов тестовых данных, в которых \(n \ge 5\), не превосходит \(5000\);
  • количество наборов тестовых данных, в которых \(n \ge 8\), не превосходит \(500\);
  • количество наборов тестовых данных, в которых \(n \ge 10\), не превосходит \(100\);
  • количество наборов тестовых данных, в которых \(n \ge 11\), не превосходит \(50\);
  • количество наборов тестовых данных, в которых \(n \ge 12\), не превосходит \(25\);
  • количество наборов тестовых данных, в которых \(n \ge 13\), не превосходит \(10\);
  • количество наборов тестовых данных, в которых \(n \ge 14\), не превосходит \(3\);
  • количество наборов тестовых данных, в которых \(n \ge 15\), не превосходит \(1\).
Выходные данные

На каждый набор тестовых данных выведите ответ следующим образом:

Сначала выведите \(k\) — минимальное количество операций, которые вы должны сделать. Затем выведите \(k\) строк, каждая из которых содержит два индекса \(i\) и \(j\) для соответствующей операции. Обратите внимание, что нумерация элементов меняется после удаления элемента из массива. Если существует несколько оптимальных последовательностей операций, выведите любую из них.

Примечание

В первом наборе тестовых данных \(a\) меняется следующим образом:

\([2, 1, 3, 5, 1, 2, 4, 5] \rightarrow [2, 1, 3, 5, 1, 4, 7] \rightarrow [1, 3, 5, 1, 6, 7] \rightarrow [2, 3, 5, 6, 7]\).

A. Конфеты

математика Перебор *900

Недавно Вова нашел \(n\) фантиков от конфет. Он помнит, что он покупал \(x\) конфет в первый день, \(2x\) конфет во второй день, \(4x\) конфет в третий день, \(\dots\), \(2^{k-1} x\) конфет в \(k\)-й день. Но есть проблема: Вова не помнит ни \(x\), ни \(k\), но он уверен, что \(x\) и \(k\) — положительные целые числа и \(k > 1\).

Вова будет удовлетворен, если вы назовете ему любое положительное целое число \(x\) такое, что существует целое число \(k>1\), при котором \(x + 2x + 4x + \dots + 2^{k-1} x = n\). Гарантируется, что существует как минимум одно решение. Обратите внимание: \(k > 1\).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит одно целое число \(n\) (\(3 \le n \le 10^9\)) — количество конфетных фантиков, которые нашел Вова. Гарантируется, что существуют некоторые положительные целые числа \(x\) и \(k>1\) такие, что \(x + 2x + 4x + \dots + 2^{k-1} x = n\).

Выходные данные

Выведите одно целое число — любое положительное целое значение \(x\) такое, что существует целое число \(k>1\), при котором \(x + 2x + 4x + \dots + 2^{k-1} x = n\).

Примечание

В первом наборе тестовых данных примера одним из возможных ответов является \(x=1, k=2\). Тогда \(1 \cdot 1 + 2 \cdot 1\) равняется \(n=3\).

Во втором наборе тестовых данных примера одним из возможных ответов является \(x=2, k=2\). Тогда \(1 \cdot 2 + 2 \cdot 2\) равняется \(n=6\).

В третьем наборе тестовых данных примера одним из возможных ответов является \(x=1, k=3\). Тогда \(1 \cdot 1 + 2 \cdot 1 + 4 \cdot 1\) равняется \(n=7\).

В четвертом наборе тестовых данных примера одним из возможных ответов является \(x=7, k=2\). Тогда \(1 \cdot 7 + 2 \cdot 7\) равняется \(n=21\).

В пятом наборе тестовых данных примера одним из возможных ответов является \(x=4, k=3\). Тогда \(1 \cdot 4 + 2 \cdot 4 + 4 \cdot 4\) равняется \(n=28\).

D. Одинаковая палиндромная сумма

жадные алгоритмы Перебор Структуры данных *1700

Вам задан массив \(a\), состоящий из \(n\) целых чисел (гарантируется, что \(n\) четное, то есть делится на \(2\)). Все \(a_i\) не превосходят некоторое число \(k\).

Ваша задача — заменить минимальное количество элементов (под заменой понимается следующая операция: выбрать некоторый индекс \(i\) от \(1\) до \(n\) и заменить \(a_i\) на некоторое целое число в отрезке \([1; k]\)) так, чтобы удовлетворялись следующие условия:

  • после всех замен все \(a_i\) — положительные целые числа, не превосходящие \(k\);
  • для всех \(i\) от \(1\) до \(\frac{n}{2}\) верно следующее равенство: \(a_i + a_{n - i + 1} = x\), где \(x\) должен быть одинаковым для всех \(\frac{n}{2}\) пар элементов.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5, 1 \le k \le 2 \cdot 10^5\)) — длину \(a\) и максимально возможное значение \(a_i\) соответственно. Гарантируется, что \(n\) четное (то есть делится на \(2\)). Вторая строка набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le k\)), где \(a_i\)\(i\)-й элемент в \(a\).

Гарантируется, что сумма чисел \(n\) (так же, как и сумма чисел \(k\)) по всем наборам тестовых данных не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\), \(\sum k \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите в ответ на него — минимальное количество элементов, которое нужно заменить в \(a\), чтобы удовлетворить все условия задачи.

E. Распределение весов

графы жадные алгоритмы кратчайшие пути Перебор сортировки *2100

Вам задан неориентированный невзвешенный граф, состоящий из \(n\) вершин и \(m\) ребер (который представляет карту Бертауна), а также массив цен \(p\) длины \(m\). Гарантируется, что между каждой парой вершин (районов) существует путь.

Майк планирует совершить путешествие из вершины (района) \(a\) в вершину (район) \(b\), а затем из вершины (района) \(b\) в вершину (район) \(c\). Он может посещать один и тот же район дважды или даже большее число раз. Но есть небольшая проблема: власти города хотят ввести цену за использование дорог, таким образом, что если кто-то проходит по ней, то он должен заплатить цену, соответствующую этой дороге (он платит каждый раз, когда проходит по дороге). Список используемых цен \(p\) готов и они просто хотят распределить его между всеми дорогами в городе таким образом, что каждая цена из массива соответствует ровно одной дороге.

Вы являетесь хорошим другом Майка (и, внезапно, мэром Бертауна) и хотите помочь сделать его путешествие настолько дешевым, насколько это возможно. Таким образом, ваша задача заключается в том, чтобы распределить цены между дорогами таким образом, что если Майк выберет оптимальный путь, то цена его путешествия будет минимально возможной. Заметьте, что вы не можете перераспределять цены после после начала путешествия.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит пять целых чисел \(n, m, a, b\) и \(c\) (\(2 \le n \le 2 \cdot 10^5\), \(n-1 \le m \le min(\frac{n(n-1)}{2}, 2 \cdot 10^5)\), \(1 \le a, b, c \le n\)) — количество вершин, количество ребер и районы в путешествии Майка.

Вторая строка набора тестовых данных содержит \(m\) целых чисел \(p_1, p_2, \dots, p_m\) (\(1 \le p_i \le 10^9\)), где \(p_i\) равно \(i\)-й цене из массива.

Следующие \(m\) строк набора тестовых данных описывают ребра: ребро \(i\) предствалено парой целых чисел \(v_i\), \(u_i\) (\(1 \le v_i, u_i \le n\), \(u_i \ne v_i\)), которые означают индексы вершин, соединенных ребром. Гарантируется, что в графе не существует петель и кратных ребер, то есть для каждой пары (\(v_i, u_i\)) в списке ребер не существует других пар (\(v_i, u_i\)) или (\(u_i, v_i\)), а также для каждой пары \((v_i, u_i)\) выполняется условие \(v_i \ne u_i\). Гарантируется, что заданный граф является связным.

Гарантируется, что сумма \(n\) (также как и сумма \(m\)) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\), \(\sum m \le 2 \cdot 10^5\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных — минимально возможную цену путешествия Майка, если вы распределите цены между ребрами оптимально.

Примечание

Одно из возможных решение первого набора тестовых данных из примера:

Одно из возможных решение второго набора тестовых данных из примера:

F. Восстановить перестановку по отсортированным отрезкам

жадные алгоритмы Конструктив Перебор реализация Структуры данных *2400

Мы загадали перестановку \(p\), состоящую из \(n\) целых чисел. Перестановкой длины \(n\) называется массив длины \(n\), где каждый элемент от \(1\) до \(n\) встречается ровно один раз. Эта перестановка вам неизвестна.

Для каждой позиции \(r\) от \(2\) до \(n\) мы выбрали некоторый другой индекс \(l\) (\(l < r\)) и дали вам отрезок \(p_l, p_{l + 1}, \dots, p_r\) в отсортированном порядке (то есть мы переставили элементы на этом отрезке так, что элементы на этом отрезке оказались отсортированными). Таким образом, вам задан ровно \(n-1\) отрезок первоначальной перестановки, но элементы внутри каждого отрезка отсортированы. Отрезки даны вам в случайном порядке.

Например, если загаданная перестановка — \(p=[3, 1, 4, 6, 2, 5]\), то возможное заданное множество отрезков:

  • \([2, 5, 6]\)
  • \([4, 6]\)
  • \([1, 3, 4]\)
  • \([1, 3]\)
  • \([1, 2, 4, 6]\)

Ваша задача — найти любую подходящую перестановку (то есть любую перестановку, соответствующую входным данным). Гарантируется, что входные данные соответствуют некоторой перестановке (то есть перестановка существует).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(2 \le n \le 200\)) — длину перестановки.

Следующая \(n-1\) строка описывает заданные отрезки.

\(i\)-я строка содержит описание \(i\)-го отрезка. Строка начинается с числа \(k_i\) (\(2 \le k_i \le n\)) — длины \(i\)-го отрезка. Затем следуют \(k_i\) целых чисел. Все числа в строке различны, отсортированы по возрастанию, между \(1\) и \(n\), включительно.

Гарантируется, что искомая перестановка \(p\) существует для каждого набора тестовых данных.

Также гарантируется, что сумма чисел \(n\) по всем наборам тестовых данных не превосходит \(200\) (\(\sum n \le 200\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ: \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) должны быть различны) — любую подходящую перестановку (то есть любую перестановку, удовлетворяющую входным данным набора тестовых данных).

B. Карточные пирамиды

Бинарный поиск дп математика Перебор *1100

Карточная пирамида высоты \(1\) может быть построена с помощью двух карт, приставленных друг к другу. Для \(h>1\) карточная пирамида высоты \(h\) может быть построена расположением карточной пирамиды высоты \(h-1\) на базе. База состоит из \(h\) пирамидок высоты \(1\), поставленных в ряд, и \(h-1\) карты, лежащей сверху на них. Например, карточные пирамиды с высотами \(1\), \(2\) и \(3\) выглядят следующим образом:

Изначально у вас есть \(n\) карт и вы строите как можно более высокую пирамиду из этих карт. Если остались лишние карты, вы снова строите как можно более высокую пирамиду из оставшихся карт. Вы продолжаете этот процесс до тих пор, пока не станет невозможно построить какую-нибудь пирамиду. Сколько карточных пирамид вы построите?

Входные данные

Каждый тест состоит из нескольких тестовых случаев. Первая строка содержит единственное целое число \(t\) (\(1\le t\le 1000\)) — количество тестовых случаев. Следующие \(t\) строк содержат описания тестовых случаев.

Единственная строка описания каждого тестового случая содержит единственное целое число \(n\) (\(1\le n\le 10^9\)) — количество карт.

Гарантируется, что сумма значений \(n\) по всем тестовым случаям не превосходит \(10^9\).

Выходные данные

Для каждого тестового случая выведите единственное целое число — количество карточных пирамид, которое вы построите в конце процесса.

Примечание

В первом тестовом случае вы построите карточную пирамиду высоты \(1\) из \(2\)-x карт. Останется \(1\) карта, которой недостаточно, чтобы построить какую-нибудь пирамиду.

Во втором тестовом случае вы построите две пирамиды, каждая высоты \(2\), и в конце процесса не останется карт.

В третьем тестовом случае вы построите одну пирамиду высоты \(3\), и ни одной карты не останется.

В четвертом тестовом случае вы сначала построите одну пирамиду высоты \(3\), и \(9\) карт останется. Затем вы построите пирамиду высоты \(2\), и \(2\) карты останется. Наконец, вы построите последнюю пирамиду высоты \(1\), и не останется ни одной карты.

В пятом тестовом случае одной карты недостаточно, чтобы построить какую-нибудь пирамиду.

E. Феникс и ягода

дп жадные алгоритмы математика Перебор *2400

Феникс собирает ягоды у себя на заднем дворе. Там растет \(n\) кустов, и на каждом кусте созрело \(a_i\) красных ягод и \(b_i\) синих ягод.

Каждая корзина вмещает \(k\) ягод. Но Феникс решил, что в каждой корзине могут лежать ягоды с одного куста, или же ягоды одного цвета (красные или синие). Другими словами все ягоды в одной корзине должны быть с одного куста и/или одного цвета.

Например, если у Феникса растет два куста с \(5\) красными и \(2\) синими ягодами на первом кусте и \(2\) красными и \(1\) синей на втором, то он сможет полностью заполнить \(2\) корзины объемом \(4\):

  • в первую корзину он положит \(3\) красные и \(1\) синюю ягоду с первого куста;
  • во вторую корзину — \(2\) оставшиеся красные ягоды с первого куста и \(2\) красные ягоды со второго.

Помогите Фениксу определить максимальное количество корзин, которые он сможет заполнить полностью!

Входные данные

В первой строке заданы два целых числа \(n\) и \(k\) (\( 1\le n, k \le 500\))  — количество кустов и вместимость корзин, соответственно.

В \(i\)-й из следующих \(n\) сток задано два целых числа \(a_i\) и \(b_i\) (\(0 \le a_i, b_i \le 10^9\))  — количество красных и синих ягод на \(i\)-м кусте, соответственно.

Выходные данные

Выведите единственное число  — максимальное количество корзин, которые Феникс сможет заполнить полностью.

Примечание

Первый пример описан выше.

Во втором примере, Феникс может полностью заполнить одну корзину, используя все ягоды с первого (и единственного) куста.

В третьем примере, Феникс не сможет полностью заполнить ни одной корзины, потому что на каждом кусте меньше \(5\) ягод, всего красных ягод менее \(5\) и всего синих ягод менее \(5\).

В четвертом примере, Феникс может положить все красные ягоды в корзины, оставив синюю ягоду нетронутой.

B. Прямоугольник и квадрат

геометрия математика Перебор *1600

Маленький Петя очень любит прямоугольники, а особенно квадраты. Недавно мама подарила ему 8 попарно не совпадающих точек на плоскости. Он решил разбить их на два множества по 4 точки так, чтобы точки из первого множества лежали в вершинах некоего квадрата, а из второго — в вершинах прямоугольника. Каждая из заданных 8 точек должна принадлежать ровно одному множеству. Допускается, чтобы прямоугольник из второго множества также был квадратом. Если разбиений несколько, Петю удовлетворит любое. Помогите ему найти одно такое разбиение. Обратите внимание, что и прямоугольник, и квадрат из разбиения должны иметь ненулевую площадь. Стороны фигур не обязательно должны быть параллельны осям координат.

Входные данные

Задано 8 пар целых чисел, по одной паре в каждой строке — координаты точек, которые есть у Пети. Все координаты по модулю не превышают 104. Гарантируется, что никакие две точки не совпадают.

Выходные данные

В первой строке выведите «YES» (без кавычек), если искомое разбиение существует. Во второй строке выведите 4 числа через пробел — номера точек из исходного множества, которые лежат в вершинах квадрата. Точки нумеруются начиная с 1. Номера можно выводить в любом порядке. В третьей строке выведите номера точек, лежащих в вершинах прямоугольника в аналогичном формате. Все выведенные числа должны быть попарно различны.

Если искомого разбиения не существует, первая строка должна содержать слово «NO» (без кавычек), после которого ничего выводить не нужно.

Примечание

Обратите внимание на третий пример: стороны фигур не обязательно должны быть параллельны осям координат.

D. Цикл

Перебор поиск в глубину и подобное реализация *2500

Маленький Петя очень любит прямоугольные таблицы, состоящие из символов «0» и «1». Недавно он получил в подарок от мамы одну такую таблицу с n строками и m столбцами. Строки нумеруются сверху вниз от 1 до n, столбцы нумеруются слева направо от 1 до m. Петя сразу же решил во что бы то ни стало найти в таблице самый длинный крутой цикл.

Циклом называется последовательность попарно различных клеток, в которой каждые две последовательно идущие клетки имеют общую сторону, а также первая клетка имеет общую сторону с последней. Цикл называется крутым, если для него одновременно выполняются все следующие условия:

  • Цикл целиком состоит из клеток, содержащих «1».
  • Каждая клетка, принадлежащая циклу, имеет общую сторону ровно с двумя другими клетками, принадлежащими этому циклу.
  • Каждая клетка таблицы, содержащая «1» либо принадлежит циклу, либо находятся снаружи него (см. определение ниже).

Для формального определения понятия «снаружи», нарисуем цикл на плоскости. Каждой клетке цикла (i, j) (i — номер строки, j — номер столбца) поставим в соответствие точку на плоскости с координатами (i, j). Соединим отрезком прямой каждую пару точек, для которых соответствующие им клетки принадлежат циклу и имеют общую сторону. Таким образом, на плоскости мы получим замкнутую ломаную без самопересечений и самокасаний. Эта ломаная делит плоскость на две связные области: конечной и бесконечной площади. Считается, что клетка (r, c) лежит снаружи цикла, если она не принадлежит циклу и соответствующая ей точка на плоскости с координатами (r, c) лежит в области бесконечной площади.

Помогите Пете найти длину самого длинного крутого цикла в таблице. Длиной цикла называется количество клеток, принадлежащих ему.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 1000) — количество строк и столбцов в таблице, соответственно. Каждая из следующих n строк содержит по m символов. Каждый символ может быть либо «0», либо «1».

Выходные данные

Выведите одно число — длину самого длинного крутого цикла в таблице. Если таких циклов не существует, выведите 0.

Примечание

В первом примере есть всего один цикл, он же является крутым.

Во втором примере вообще не существует ни одного цикла.

В третьем примере есть два крутых цикла: один длины 12, другой длины 24.

В четвертом примере также есть всего один цикл, но он не является крутым, поскольку существует клетка, содержащая «1», которая находится внутри этого цикла.

E. Особые элементы

Перебор реализация *1500

Обратите внимание на нестандартное ограничение по памяти в этой задаче.

С целью отсечения эффективных решений от неэффективных в этой задаче ограничение времени довольно строгое. Предпочтите использование компилируемых статически типизированных языков (например, C++). Если используете Python, то отсылайте решения на PyPy. Постарайтесь написать в самом деле эффективное решение.

Задан массив \(a=[a_1, a_2, \ldots, a_n]\) (\(1 \le a_i \le n\)). Его элемент \(a_i\) называется особым, если существует такая пара индексов \(l\) и \(r\) (\(1 \le l < r \le n\)), что \(a_i = a_l + a_{l+1} + \ldots + a_r\). Иными словами, элемент называется особым, если он представим в виде суммы двух или более подряд идущих элементов массива (не важно, особых или нет).

Выведите количество особых элементов заданного массива \(a\).

Например, если \(n=9\) и \(a=[3,1,4,1,5,9,2,6,5]\), то ответ равен \(5\):

  • \(a_3=4\) — особый элемент, так как \(a_3=4=a_1+a_2=3+1\);
  • \(a_5=5\) — особый элемент, так как \(a_5=5=a_2+a_3=1+4\);
  • \(a_6=9\) — особый элемент, так как \(a_6=9=a_1+a_2+a_3+a_4=3+1+4+1\);
  • \(a_8=6\) — особый элемент, так как \(a_8=6=a_2+a_3+a_4=1+4+1\);
  • \(a_9=5\) — особый элемент, так как \(a_9=5=a_2+a_3=1+4\).

Обратите внимание, что среди элементов массива \(a\) могут быть равные — если несколько элементов равны и являются особыми, то все они должны быть посчитаны в ответе.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

Каждый набор задается двумя строками. В первой строке записано целое число \(n\) (\(1 \le n \le 8000\)) — длина массива \(a\). Во второй строке записаны целые числа \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(8000\).

Выходные данные

Выведите \(t\) чисел — количества особых элементов для каждого из заданных массивов.

E. К-периодичная гирлянда

дп жадные алгоритмы Перебор *1900

Вам задана гирлянда, состоящая из \(n\) ламп. Состояния ламп описываются строкой \(s\) длины \(n\). \(i\)-й символ строки \(s_i\) равен '0', если \(i\)-я лампа выключена, или '1', если \(i\)-я лампа включена. Вам также задано положительное целое число \(k\).

За один ход вы можете выбрать одну лампу и изменить ее состояние (то есть включить ее, если она выключена, и наоборот).

Гирлянда называется \(k\)-периодичной, если расстояние между каждой парой соседних включенных ламп равно в точности \(k\). Рассмотрим случай \(k=3\). Тогда гирлянды «00010010», «1001001», «00010» и «0» являются хорошими, а гирлянды «00101001», «1000001» и «01001100» не являются хорошими. Заметьте, что гирлянда не является цикличной, то есть первая включенная лампа не идет после последней включенной лампы и наоборот.

Ваша задача — найти минимальное количество ходов, необходимое для того, чтобы получить \(k\)-периодичную гирлянду из заданной.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 25~ 000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 10^6; 1 \le k \le n\)) — длину \(s\) и необходимый период. Вторая строка набора тестовых данных содержит строку \(s\), состоящую из \(n\) символов '0' и '1'.

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превосходит \(10^6\) (\(\sum n \le 10^6\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ — минимальное количество ходов, необходимое для того, чтобы получить \(k\)-периодичную гирлянду из заданной.

F. Уменьшение высот

дп Перебор *2200

Вы играете в одну популярную sandbox-игру с трехмерным миром. Карта мира может быть представлена в виде матрицы размера \(n \times m\), где высота клетки \((i, j)\) равна \(a_{i, j}\).

Сейчас вы находитесь в клетке \((1, 1)\) и хотите попасть в клетку \((n, m)\). Вы можете перемещаться только вниз (из клетки \((i, j)\) в клетку \((i + 1, j)\)) или вправо (из клетки \((i, j)\) в клетку \((i, j + 1)\)). Также есть дополнительное ограничение: если высота текущей клетки равна \(x\), то вы можете переместиться только в клетку с высотой \(x+1\).

Перед первым перемещением вы можете выполнить несколько операций. В течение одной операции вы можете уменьшить высоту любой клетки на единицу. То есть вы выбираете какую-то клетку \((i, j)\) и присваиваете \(a_{i, j} := a_{i, j} - 1\). Заметьте, что вы можете делать высоты меньшими или равными нулю. Также заметьте, что вы можете уменьшать высоту клетки \((1, 1)\).

Ваша задача — найти минимальное количество операций, которое необходимо выполнить, чтобы получить хотя бы один подходящий путь из клетки \((1, 1)\) в клетку \((n, m)\). Гарантируется, что ответ существует.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\)) — Количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 100\)) — количество строк и количество столбцов в карте мира. Следующие \(n\) строк содержат по \(m\) целых чисел каждая, где \(j\)-е число в \(i\)-й строке равно \(a_{i, j}\) (\(1 \le a_{i, j} \le 10^{15}\)) — высоте клетки \((i, j)\).

Гарантируется, что сумма \(n\) (также как сумма \(m\)) по всем наборам тестовых данных не превосходит \(100\) (\(\sum n \le 100; \sum m \le 100\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ — минимальное количество операций, которое необходимо выполнить, чтобы получить хотя бы один подходящий путь из клетки \((1, 1)\) в клетку \((n, m)\). Гарантируется, что ответ существует.

C2. Не так просто вписываем многоугольник

Бинарный поиск геометрия математика Перебор *2000

Условие этой задачи почти полностью совпадает с условием задачи C1. Единственное отличие в следующем: в задаче C1 \(n\) всегда четно, а в задаче C2 \(n\) всегда нечетно.

Вам задан правильный многоугольник из \(2 \cdot n\) вершин (то есть он выпуклый и имеет равные стороны и углы) и все его стороны имеют длину \(1\). Назовем этот многоугольник \(2n\)-угольником.

Ваша задача — найти квадрат минимального размера, такой что в него можно вписать \(2n\)-угольник. \(2n\)-угольник можно вписать в квадрат, если \(2n\)-угольник можно разместить таким образом, что каждая точка, лежащая внутри или на границе \(2n\)-угольника также будет лежать внутри или на границе квадрата.

Вы можете вращать \(2n\)-угольник и/или квадрат.

Входные данные

В первой строке задано целое число \(T\) (\(1 \le T \le 200\)) — количество наборов входных данных.

В следующих \(T\) строках заданы описания наборов — по одной строке на набор. В каждой строке задано единственное нечетное целое число \(n\) (\(3 \le n \le 199\)). Не забывайте, что вам нужно вписать \(2n\)-угольник, а не \(n\)-угольник.

Выходные данные

Выведите \(T\) действительных чисел — по одному на набор входных данных. Для каждого набора, выведите минимальную длину стороны квадрата, в который можно вписать \(2n\)-угольник. Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит \(10^{-6}\).

A. Последовательность с цифрами

математика Перебор реализация *1200

Определим рекуррентную последовательность следующим образом: \(\)a_{n+1} = a_{n} + minDigit(a_{n}) \cdot maxDigit(a_{n}).\(\)

Здесь \(minDigit(x)\) и \(maxDigit(x)\) — минимальная и максимальная цифры в десятичной записи числа \(x\) без ведущих нулей соответственно. Для примеров обратитесь к примечаниям.

Ваша задача — по заданным \(a_{1}\) и \(K\) вычислить \(a_{K}\).

Входные данные

В первой строке записано единственное число \(t\) (\(1 \le t \le 1000\)) — количество независимых наборов входных данных.

Каждый набор входных данных состоит из двух целых чисел \(a_{1}\) и \(K\) (\(1 \le a_{1} \le 10^{18}\), \(1 \le K \le 10^{16}\)), записанных через пробел на отдельной строке.

Выходные данные

Для каждого набора входных данных выведите одно число \(a_{K}\) на отдельной строке.

Примечание

\(a_{1} = 487\)

\(a_{2} = a_{1} + minDigit(a_{1}) \cdot maxDigit(a_{1}) = 487 + \min (4, 8, 7) \cdot \max (4, 8, 7) = 487 + 4 \cdot 8 = 519\)

\(a_{3} = a_{2} + minDigit(a_{2}) \cdot maxDigit(a_{2}) = 519 + \min (5, 1, 9) \cdot \max (5, 1, 9) = 519 + 1 \cdot 9 = 528\)

\(a_{4} = a_{3} + minDigit(a_{3}) \cdot maxDigit(a_{3}) = 528 + \min (5, 2, 8) \cdot \max (5, 2, 8) = 528 + 2 \cdot 8 = 544\)

\(a_{5} = a_{4} + minDigit(a_{4}) \cdot maxDigit(a_{4}) = 544 + \min (5, 4, 4) \cdot \max (5, 4, 4) = 544 + 4 \cdot 5 = 564\)

\(a_{6} = a_{5} + minDigit(a_{5}) \cdot maxDigit(a_{5}) = 564 + \min (5, 6, 4) \cdot \max (5, 6, 4) = 564 + 4 \cdot 6 = 588\)

\(a_{7} = a_{6} + minDigit(a_{6}) \cdot maxDigit(a_{6}) = 588 + \min (5, 8, 8) \cdot \max (5, 8, 8) = 588 + 5 \cdot 8 = 628\)

D. Лучший отпуск

Бинарный поиск жадные алгоритмы Перебор реализация *1900

Вы давно влюблены в Коронавирус-тян, но до сих пор не знали, где она живёт. И буквально сейчас выяснили, что она живёт в далёком местечке под названием Ньаху.

Вы немедленно решили взять отпуск на своей скучной работы и навестить Коронавирус-тян. Ваш отпуск длится ровно \(x\) дней, и ровно столько дней вы проведёте в гостях у подруги. В гостях вы проведёте ровно \(x\) подряд идущих дней.

В Ньаху используется очень необычный календарь: всего в году \(n\) месяцев, \(i\)-й месяц длится ровно \(d_i\) дней. Дни в \(i\)-м месяце пронумерованы от \(1\) до \(d_i\). В Ньаху нет високосных годов.

Настроение Коронавирус-тян (и, соответственно, её желание вас обнять) зависит от номера дня в месяце. А именно, в \(j\)-й день месяца вы получаете \(j\) объятий, если вы находитесь в гостях у Коронавирус-тян.

Вы знаете об этой особенности своей подруги и хотите спланировать свою поездку так, чтобы суммарно получить наибольшее возможное количество объятий (и тогда, быть может, вы сможете завоевать сердечко Коронавирус-тян).

Обратите внимание, ваша поездка не обязательно должна начаться и закончиться в одном и том же году.

Входные данные

В первой строке входных данных даны два натуральных числа \(n\) и \(x\) (\(1 \le n \le 2 \cdot 10^5\)) — количество месяцев в году и количество дней, которые вы можете провести в гостях у подруги.

Во второй строке даны \(n\) целых чисел \(d_1, d_2, \ldots, d_n\), где \(d_i\) — количество дней в \(i\)-м месяце (\(1 \le d_i \le 10^6\)).

Гарантируется, что \(1 \le x \le d_1 + d_2 + \ldots + d_n\).

Выходные данные

Выведите единственное число — максимальное число объятий, которое вы можете получить от Коронавирус-тян за время лучшего отпуска в своей жизни.

Примечание

В первом примере номера дней года (номера в соответствующих месяцах) имеет вид: \(\{1,1,2,3,1\}\). Коронавирус-тян обнимет вас больше всего раз, если вы приедете в третий день года: \(2+3=5\) объятий.

Во втором примере номера дней года (номера в соответствующих месяцах) имеет вид: \(\{1,2,3,1,2,3,1,2,3\}\). Больше всего объятий вы получите если приедете в третий день года: \(3+1+2+3+1+2=12\) объятий.

В третьем примере номера дней имеют вид: \(\{1,2,3,4,1,2, 1,2,3, 1, 1,2,3\}\). Больше всего объятий вы получите если приедете в двенадцатый день года: подруга обнимет вас \(2+3+1+2+3+4=15\) раз.

A. Берляндский покер

жадные алгоритмы математика Перебор *1000

В берляндский покер играют с колодой из \(n\) карт, \(m\) из которых являются джокерами. В игре участвует \(k\) игроков (\(n\) делится на \(k\)).

В начале игры каждый игрок берет \(\frac{n}{k}\) карт из колоды (таким образом, каждая карта берется ровно одним игроком). Игрок, у которого максимальное количество джокеров в руке, является победителем, и он получает количество очков, равное \(x - y\), где \(x\) — количество джокеров в руке победителя, а \(y\) — максимальное количество джокеров среди всех других игроков. Если есть два или более игроков с максимальным количеством джокеров, все они являются победителями, и они получают \(0\) очков.

Вот несколько примеров:

  • \(n = 8\), \(m = 3\), \(k = 2\). Если один игрок получает \(3\) джокера и \(1\) простую карту, а другой игрок получает \(0\) джокеров и \(4\) простые карты, то первый игрок является победителем и получает \(3 - 0 = 3\) очка;
  • \(n = 4\), \(m = 2\), \(k = 4\). Два игрока получают простые карты, а два других игрока получают джокеры, так что оба они являются победителями и получают \(0\) очков;
  • \(n = 9\), \(m = 6\), \(k = 3\). Если первый игрок получает \(3\) джокера, второй игрок получает \(1\) джокера и \(2\) простые карты, а третий игрок получает \(2\) джокера и \(1\) простую карту, то первый игрок является победителем, и он получает \(3 - 2 = 1\) очко;
  • \(n = 42\), \(m = 0\), \(k = 7\). Поскольку джокеров нет, каждый получает \(0\) джокеров, каждый является победителем, и каждый получает \(0\) очков.

Для заданных \(n\), \(m\) и \(k\) вычислите максимальное количество очков, которое игрок может получить за победу в игре.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Каждый набор входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 50\), \(0 \le m \le n\), \(2 \le k \le n\), \(k\) делит \(n\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество очков, которое игрок может получить за победу в игре.

Примечание

Тесты из примера разобраны в условии.

B. Новая Театральная площадь

дп жадные алгоритмы Перебор реализация *1000

Возможно, вы помните Театральную площадь из задачи 1A. Сегодня ее покрытие наконец-то заменят.

Площадь все еще является прямоугольником \(n \times m\) метров. Однако, рисунок на ней будет более сложным в этот раз. Пусть \(a_{i,j}\) будет \(j\)-й ячейкой в \(i\)-м ряду покрытия плитками.

Вам задан рисунок покрытия:

  • если \(a_{i,j} = \) «*», то \(j\)-я ячейка в \(i\)-м ряду должна быть черной;
  • если \(a_{i,j} = \) «.», то \(j\)-я ячейка в \(i\)-м ряду должна быть белой.

Черные ячейки уже покрыты. Вам же необходимо покрыть белые ячейки. Существует две опции плиток:

  • \(1 \times 1\) плитки — каждая плитка стоит \(x\) бурлей и покрывает ровно \(1\) ячейку;
  • \(1 \times 2\) плитки — каждая плитка стоит \(y\) бурлей и покрывает ровно \(2\) соседние ячейки в одном ряду. Обратите внимание, что нельзя вращать эти плитки или резать их на плитки \(1 \times 1\).

Вам необходимо покрыть все белые ячейки, никакие две плитки не должны накладываться друг на друга и никакие черные ячейки не должны быть накрыты плитками.

Чему равна наименьшая суммарная цена плиток, которые могут покрыть все белые клетки?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Затем следует описание \(t\) наборов.

В первой строке каждого набора входных данных записаны четыре целых числа \(n\), \(m\), \(x\) и \(y\) (\(1 \le n \le 100\); \(1 \le m \le 1000\); \(1 \le x, y \le 1000\)) — размеры Театральной площади, цена плитки \(1 \times 1\) и цена плитки \(1 \times 2\).

В каждой из следующих \(n\) строк записаны по \(m\) символов. \(j\)-й символ в \(i\)-й строке — это \(a_{i,j}\). Если \(a_{i,j} = \) «*», то \(j\)-я ячейка в \(i\)-м ряду должна быть черной, а если \(a_{i,j} = \) «.», то \(j\)-я ячейка в \(i\)-м ряду должна быть белой.

Гарантируется, что сумма \(n \times m\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наименьшая суммарная цена плиток, которые могут покрыть все белые клетки, в бурлях.

Примечание

В первом наборе входных данных необходимо использовать одну плитку \(1 \times 1\), несмотря на то, что плитка \(1 \times 2\) дешевле. Поэтому суммарная цена равна \(10\) бурлей.

Во втором наборе можно использовать либо две плитки \(1 \times 1\) и потратить \(20\) бурлей, либо одну плитку \(1 \times 2\) плитку и потратить \(1\) бурль. Второй вариант дешевле, поэтому ответ равен \(1\).

Третий набор показывает, что нельзя поворачивать плитки \(1 \times 2\). Приходится использовать две плитки \(1 \times 1\) с суммарной ценой \(20\).

В четвертом наборе самый дешевый способ — это использовать \(1 \times 1\) плитки повсюду. Итоговая цена — \(6 \cdot 3 = 18\).

F. Шоу взрывов на радиоуправлении

Бинарный поиск геометрия математика Перебор Структуры данных *2900

Знаете, в наше время довольно сложно организовать шоу с большим количеством участников и зрителей в одном месте. Тем не менее, вы не отказываетесь от своей мечты провести шоу со взрывами машин! Вы решили заменить настоящие машины радиоуправляемыми, назвать мероприятия «Шоу взрывов на радиоуправлении» и транслировать все онлайн.

Для подготовки вы нашли арену — бесконечную 2D-сетку. Вы также закупили \(n\) радиоуправляемых машинок и расставили их по арене. К сожалению, эти машинки могут ехать только вперед, без возможности поворотов налево, направо или разворотов. Более того, вы направили машинки туда, куда хотите, чтобы они поехали.

Формально, для каждой машинки \(i\) (\(1 \le i \le n\)) вы зафиксировали ее начальную позицию (\(x_i, y_i\)) и вектор направление (\(dx_i, dy_i\)). Более того, у каждой машинки есть константная скорость \(s_i\) единиц в секунду. То есть после запуска машинка \(i\) двигается из (\(x_i, y_i\)) в направлении (\(dx_i, dy_i\)) с константной скоростью \(s_i\).

Цель вашего шоу — столкнуть две машинки как можно скорее! Вы обратили внимание, что если запускать все машинки в самом начале шоу, то довольно часто столкновений не происходит вообще. Поэтому вы решили запустить \(i\)-ю машинку в некоторый момент \(t_i\). Вы еще не выбрали \(t_i\), это еще надо решить. Обратите внимание, что \(t_i\) не обязательно должно быть целым, и допустимо, чтобы \(t_i\) совпадало с \(t_j\) для любых \(i, j\).

Шоу начинается в момент времени \(0\). Шоу заканчивается, когда какие-нибудь две машинки \(i\) и \(j\) (\(i \ne j\)) сталкиваются (то есть оказываются в одной точке в одно и то же время). Длительность шоу равна времени между началом и концом.

Какое самое быстрое столкновение вы можете организовать, выбрав все \(t_i\)? Если возможно организовать столкновение, тогда выведите минимальную возможную длительность шоу. Иначе сообщите, что это невозможно.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 25000\)) — количество машинок.

В каждой из следующих \(n\) строк записаны по пять целых чисел \(x_i\), \(y_i\), \(dx_i\), \(dy_i\), \(s_i\) (\(-10^3 \le x_i, y_i \le 10^3\); \(1 \le |dx_i| \le 10^3\); \(1 \le |dy_i| \le 10^3\); \(1 \le s_i \le 10^3\)) — начальная позиция \(i\)-й машинки, ее вектор направления и ее скорость, соответственно.

Гарантируется, что все машинки начинают в различных позициях (то есть \((x_i, y_i) \neq (x_j, y_j)\) для \(i \neq j\)).

Выходные данные

Выведите наименьшую возможную длительность шоу, если возможно организовать столкновение, выбрав все \(t_i\). Иначе, выведите «No show :(».

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

Картинка для первого примера:

Самое раннее возможное столкновение произойдет с машинками \(2\) и \(4\). Запустим машинку \(2\) в \(0\), машинку \(4\) примерно в \(0.096762\) и машинки \(1\) и \(3\) когда угодно. Тогда машинки \(2\) и \(4\) столкнутся примерно в \(0.585902\). Тогда вот как поле будет выглядеть в момент столкновения:

Вот картинка для второго примера:

F. Строка-шпион

битмаски дп Конструктив Перебор Строки хэши *1700

Вам даны \(n\) строк \(a_1, a_2, \ldots, a_n\), все они имеют одинаковую длину \(m\). Строки состоят из строчных букв латинского алфавита.

Найдите любую такую строку \(s\) длины \(m\), что каждая из заданных \(n\) строк отличается от \(s\) не более чем в одной позиции. Формально, для каждой заданной строки \(a_i\) должно существовать не более одной позиции \(j\), в которой \(a_i[j] \ne s[j]\).

Заметим, что искомая строка \(s\) может как совпадать с одной из заданных строк \(a_i\), так и отличаться от всех заданных строк.

Например, если вам даны строки abac и zbab, тогда ответом на задачу может быть строка abab, которая отличается от первой только последним символом, а от второй только первым.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных в тесте. Далее записаны \(t\) наборов тестовых данных.

Каждый набор начинается со строки, в которой записаны целые числа \(n\) (\(1 \le n \le 10\)) и \(m\) (\(1 \le m \le 10\)) — количество заданных строк и их длина.

Далее следуют \(n\) строк \(a_i\). Каждая имеет длину \(m\) и состоит из строчных латинских букв.

Выходные данные

Выведите \(t\) ответов на наборы тестовых данных. Каждый ответ (если он существует) — это строка длины \(m\), состоящая из строчных латинских букв. Если существует несколько ответов, то выведите любой из них. Если ответа не существует, выведите «-1» («минус один», без кавычек).

Примечание

Первый набор тестовых данных примера разобран в условии.

Во втором наборе ответа не существует.

H. Двоичная медиана

Бинарный поиск битмаски Конструктив Перебор *2100

Рассмотрим все двоичные строки длины \(m\) (\(1 \le m \le 60\)), то есть строки, состоящие из символов 0 и 1. Например, 0110 является двоичной строкой, а 012aba — нет. Очевидно, что всего таких строк ровно \(2^m\).

Строка \(s\) лексикографически меньше строки \(t\) (обе имеют одинаковую длину \(m\)), если в первой слева позиции \(i\), в которой они отличаются, верно \(s[i] < t[i]\). Именно такой способ сравнения строк используется в словарях и в большинстве современных языков программирования при их сравнении стандартным способом. Например, строка 01011 лексикографически меньше строки 01100, потому что первые два символа совпадают, а третий символ в первой строке меньше, чем во второй.

Удалим из этого множества \(n\) (\(1 \le n \le \min(2^m-1, 100)\)) различных двоичных строк \(a_1, a_2, \ldots, a_n\), каждая длины \(m\). Таким образом, в множестве останется \(k=2^m-n\) строк. Отсортируем все строки полученного множества в порядке лексикографического возрастания (как в словаре).

Пронумеруем все строки после сортировки от \(0\) до \(k-1\). Выведите строку, номер которой равен \(\lfloor \frac{k-1}{2} \rfloor\) (такой элемент называется медианой), где \(\lfloor x \rfloor\) является округлением числа вниз к ближайшему целому.

Например, если \(n=3\), \(m=3\) и \(a=[\)010, 111, 001\(]\), то после удаления строк \(a_i\) и сортировки результат примет вид: \([\)000, 011, 100, 101, 110\(]\). Таким образом, искомая медиана равна 100.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

В первой строке каждого набора записаны целые числа \(n\) (\(1 \le n \le \min(2^m-1, 100)\)) и \(m\) (\(1 \le m \le 60\)), где \(n\) — количество удаляемых строк, \(m\) — длина двоичных строк. Следующие \(n\) строк содержат \(a_1, a_2, \ldots, a_n\) — различные двоичные строки длины \(m\).

Суммарная длина всех заданных двоичных строк во всех наборах тестовых данных в одном тесте не превосходит \(10^5\).

Выходные данные

Выведите \(t\) ответов на наборы тестовых данных. Ответом является строка длины \(m\) — медиана оставшихся строк.

Примечание

Первый набор тестовых данных примера разобран в условии.

Во втором наборе результат после удаления строк и сортировки равен \([\)001, 010, 101, 110\(]\). Следовательно, искомая медиана равна 010.

B. Джонни и его хобби

битмаски Перебор *1200

Среди многочисленных хобби Джонни, есть два, казалось бы, безвредных: применение побитовых операций и прокрадывание в офис его отца. Как это обычно и бывает у маленьких детей, Джонни не подозревает, что комбинирование этих двух занятий может доставить ему много неприятностей.

На столе его отца хранится множество \(S\), содержащее очень важные числа. В момент, когда Джонни узнал об этом, он решил, что это хорошая идея выбрать положительное целое число \(k\) и заменить все элементы \(s\) из множества \(S\) на \(s \oplus k\) (\(\oplus\) обозначает операцию исключающего или).

Помогите Джонни выбрать такое \(k\), что его отец не заметит никакой разницы после того, как Джонни закончит играть (т.е. Джонни должен получить такое же множество, какое было изначально). Возможно, что ни одного такого числа не существует. Также, возможно, что существует несколько подходящих чисел. В таком случае, выведите минимальное из них. Обратите внимание, что порядок элементов в множестве не имеет значения, т.е. множество \(\{1, 2, 3\}\) равно множеству \(\{2, 1, 3\}\).

Формально, требуется найти минимальное положительное целое число \(k\), такое что \(\{s \oplus k | s \in S\} = S\) или сообщить, что ни одного подходящего числа не существует.

Например, если \(S = \{1, 3, 4\}\) и \(k = 2\), новое множество будет равно \(\{3, 1, 6\}\). Если \(S = \{0, 1, 2, 3\}\) и \(k = 1\), после игры множество останется таким же.

Входные данные

В первой строке дано одно целое число \(t\) (\(1 \leq t \leq 1024\)) — количество наборов входных данных. В следующих строках даны \(t\) наборов входных данных, каждый из них занимает две строки.

В первой строке набора входных данных дано одно целое число \(n\) (\(1 \leq n \leq 1024\)), обозначающее количество элементов в множестве \(S\). Вторая строка содержит \(n\) различных целых чисел \(s_i\) (\(0 \leq s_i < 1024\)) — элементы \(S\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1024\).

Выходные данные

Выведите \(t\) строк, \(i\)-я из них должна содержать ответ на \(i\)-й набор входных данных — минимальное положительное целое число \(k\), удовлетворяющее условиям, или \(-1\), если ни одного подходящего \(k\) не существует.

Примечание

В первом наборе входных данных, ответ \(1\), потому что это минимальное положительное целое число и оно удовлетворяет всем условиям.

A. Выбор нечетных

математика Перебор реализация *1200

У Shubham есть массив \(a\) размера \(n\), и он хочет выбрать из него ровно \(x\) элементов так, чтобы их сумма была нечетной. Эти элементы не обязаны быть последовательными. Элементы массива не обязательно различны.

Скажите ему, может ли он сделать это.

Входные данные

В первой строке входных данных содержится одно целое число \(t\) \((1\le t \le 100)\) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) \((1 \le x \le n \le 1000)\) — длину массива и количество элементов, которые нужно выбрать соответственно.

Следующая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 1000)\) — элементы массива.

Выходные данные

Для каждого набора входных данных выведите «Yes» или «No» в зависимости от того, можно ли выбрать ровно \(x\) элементов, чтобы их сумма была нечетной.

Вы можете выводить буквы в любом регистре.

Примечание

В \(1\)-м наборе входных данных: мы должны выбрать элемент \(999\), и сумма будет нечетной.

В \(2\)-м наборе входных данных: мы должны выбрать элемент \(1000\), поэтому сумма не будет нечетной.

В \(3\)-м наборе входных данных: мы можем выбрать элемент \(51\).

В \(4\)-м наборе входных данных: мы должны выбрать оба элемента \(50\) и \(51\) — так что общая сумма нечетна.

В \(5\)-м наборе входных данных: мы должны выбрать все элементы — но общая сумма не является нечетной.

A. XXXXX

Перебор Структуры данных теория чисел *1200

Ехаб любит теорию чисел, но по какой-то причине он ненавидит число \(x\). Для данного массива \(a\) найдите длину самого длинного его подмассива, сумма элементов которого не делится на \(x\), или определите, что такого подмассива не существует.

Массив \(a\) является подмассивом массива \(b\), если \(a\) может быть получен из \(b\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Первая строка содержит целое число \(t\) \((1 \le t \le 5)\) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 10^5\), \(1 \le x \le 10^4\)) — количество элементов в массиве \(a\), и число, которое Ехаб ненавидит.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1\), \(a_2\), \(\ldots\), \(a_{n}\) (\(0 \le a_i \le 10^4\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите длину самого длинного подмассива, сумма элементов которого не делится на \(x\). Если такого подмассива не существует, выведите \(-1\).

Примечание

В первом наборе входных данных подмассив \([2,3]\) имеет сумму элементов \(5\), которая не делится на \(3\).

Во втором наборе входных данных сумма всего элементов всего массива равна \(6\), и не делится на \(4\).

В третьем наборе входных данных все подмассивы имеют четную сумму, поэтому ответ равен \(-1\).

C. Ехаб и префиксные MEXы

жадные алгоритмы Конструктив Перебор *1600

Для данного массива \(a\) длины \(n\) найдите другой массив \(b\) длины \(n\) такой, что:

  • для каждого \(i\) \((1 \le i \le n)\) \(MEX(\{b_1\), \(b_2\), \(\ldots\), \(b_i\})=a_i\).

\(MEX\) множества целых чисел равен наименьшему неотрицательному целому числу, которое не принадлежит этому множеству.

Если такого массива не существует, определите это.

Входные данные

В первой строке записано целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), \(\ldots\), \(a_n\) (\(0 \le a_i \le i\)) — элементы массива \(a\). Гарантируется, что \(a_i \le a_{i+1}\) для \(1\le i < n\).

Выходные данные

Если такого массива нет, выведите одну строку, содержащую \(-1\).

В противном случае выведите одну строку, содержащую \(n\) целых чисел \(b_1\), \(b_2\), \(\ldots\), \(b_n\) (\(0 \le b_i \le 10^6\)).

Если есть несколько ответов, выведите любой.

Примечание

Во втором примере допустимы другие ответы, например, \([1,1,1,0]\).

E. Максимальное значение подпоследовательности

Конструктив Перебор *1900

У Ashish есть массив \(a\) длины \(n\) состоящий из положительных целых чисел.

Определим значение непустой подпоследовательности массива \(a\), состоящией из \(k\) чисел, как \(\sum 2^i\) по всем целым \(i \ge 0\) таким, что хотя бы \(\max(1, k - 2)\) чисел в этом подмножестве имеют \(i\)-й бит в своей двоичной записи (число \(x\) имеет \(i\)-й бит в двоичной записи если \(\lfloor \frac{x}{2^i} \rfloor \mod 2\) равно \(1\)).

Напомним, что \(b\) является подпоследовательностью \(a\), если \(b\) может быть получена удалением нескольких (возможно, нуля) элементов из \(a\).

Помогите ему найти наибольшее значение, которое он может получить, выбрав некоторую подпоследовательность \(a\).

Входные данные

В первой строке записано одно целое число \(n\) \((1 \le n \le 500)\) — размер массива \(a\).

Во второй строке записаны \(n\) целых чисел  — элементы массива \((1 \le a_i \le 10^{18})\).

Выходные данные

Выведите одно целое число  — наибольшее значение, которое Ashish может получить, выбрав некоторую подпоследовательность \(a\).

Примечание

В первом примере Ashish может выбрать подпоследовательность \(\{{2, 3}\}\) размера \(2\). Двоичная запись \(2\) это 10 а двоичная запись \(3\) это 11. Так как \(\max(k - 2, 1)\) равно \(1\), значение подпоследовательности равно \(2^0 + 2^1\) (и у \(2\) и у \(3\) есть \(1\)-й бит в двоичной записи, а у \(3\) также есть \(0\)-й бит в двоичной записи). Обратите внимание, что он также мог выбрать подпоследовательность \(\{{3\}}\) или \(\{{1, 2, 3\}}\).

Во втором примере Ashish может выбрать подпоследовательность \(\{{3, 4\}}\) со значением \(7\).

В третьем примере Ashish может выбрать подпоследовательность \(\{{1\}}\) со значением \(1\).

В четвертом примере Ashish может выбрать подпоследовательность \(\{{7, 7\}}\) со значением \(7\).

E. Два массива

Бинарный поиск дп Комбинаторика Конструктив Перебор *2100

Вам даны два массива \(a_1, a_2, \dots , a_n\) и \(b_1, b_2, \dots , b_m\). Массив \(b\) отсортирован в порядке возрастания (\(b_i < b_{i + 1}\) верно для любого \(i\) от \(1\) до \(m - 1\)).

Вам нужно разбить массив \(a\) на \(m\) непрерывных подмассивов так, чтобы для всех \(i\) от \(1\) до \(m\) минимум в \(i\)-м подмассиве был равен \(b_i\). Обратите внимание, что каждый элемент должен принадлежать ровно одному подмассиву, и они формируются следующим образом: первые несколько элементов массива \(a\) принадлежат первому подмассиву, следующие несколько элементов массива \(a\) принадлежат второму подмассиву, и так далее.

Например, если \(a = [12, 10, 20, 20, 25, 30]\), а \(b = [10, 20, 30]\), то существует два подходящих разбиения массива \(a\):

  1. \([12, 10, 20], [20, 25], [30]\);
  2. \([12, 10], [20, 20, 25], [30]\).

Вам нужно посчитать количество хороших разбиений массива \(a\). Так как это значение может быть слишком велико — выведите его по модулю 998244353.

Входные данные

Первая строка содержит два числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — длины массивов \(a\) и \(b\) соответственно.

Вторая строка содержит \(n\) чисел \(a_1, a_2, \dots , a_n\) (\(1 \le a_i \le 10^9\)) — массив \(a\).

Третья строка содержит \(m\) чисел \(b_1, b_2, \dots , b_m\) (\(1 \le b_i \le 10^9; b_i < b_{i+1}\)) — массив \(b\).

Выходные данные

В единственной строке выведите число — количество хороших разбиений массива \(a\) по модулю 998244353.

E. Сборка ожерелья

графы дп жадные алгоритмы Перебор поиск в глубину и подобное теория чисел *1900

В магазине продаются \(n\) бусинок. Цвет каждой бусинки описывается строчной буквой латинского алфавита («a»–«z»). Вы хотите купить какие-то бусинки, чтобы собрать из них ожерелье.

Ожерелье — набор бусинок, соединенных по кругу.

Например, если в магазине продаются бусинки «a», «b», «c», «a», «c», «c», то вы можете собрать следующие ожерелья (это не все возможные варианты):

А следующие ожерелья нельзя собрать из бусинок, которые продаются в магазине:

Первое ожерелье собрать не получится, потому что в нем есть три бусинки «a» (из двух доступных). Второе ожерелье собрать не получится, потому что в нем есть бусинка «d», которой нет в магазине.

Назовем ожерелье \(k\)-красивым, если при его повороте по часовой стрелке на \(k\) бусинок ожерелье остается неизменным. Например, вот последовательность из трех поворотов некоторого ожерелья.

Так как после трех поворотов по часовой стрелке ожерелье не изменилось, то оно является \(3\)-красивым. Как можно заметить, это ожерелье также является \(6\)-красивым, \(9\)-красивым и так далее, но не является \(1\)-красивым или \(2\)-красивым.

В частности, ожерелье длины \(1\) является \(k\)-красивым для любого целого \(k\). Ожерелье, которое состоит из бусинок одинакового цвета, тоже является красивым для любого \(k\).

Вам даны числа \(n\) и \(k\), а также строка \(s\), содержащая \(n\) строчных букв латинского алфавита — каждая буква задает бусинку в магазине. Вы можете купить любое подмножество бусинок и соединить их в произвольном порядке. Найдите максимальную длину \(k\)-красивого ожерелья, которое вы можете собрать.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 2000\)).

Вторая строка каждого набора содержит строку \(s\), содержащую \(n\) строчных букв латинского алфавита — набор бусинок в магазине.

Гарантируется, что сумма \(n\) по всем наборам тестовых данных в тесте не превосходит \(2000\).

Выходные данные

Выведите \(t\) ответов на наборы тестовых данных. Каждый ответ является целым положительным числом — максимальной длиной \(k\)-красивого ожерелья, которое вы можете собрать.

Примечание

Первый набор тестовых данных разобран в условии.

Во втором наборе тестовых данных \(6\)-красивое ожерелье можно собрать из всех букв.

В третьем наборе тестовых данных \(1000\)-красивое ожерельем можно собрать, например, из бусинок «abzyo».

A. C+=

жадные алгоритмы математика Перебор реализация *800

Лео создал новый язык программирования C+=. В C+= целочисленные переменные можно изменять только операцией «+=», которая прибавляет значение справа к переменной слева. Например, если выполнить «a += b», когда a = \(2\), b = \(3\), значение a станет равно \(5\) (значение b при этом не изменится).

Лео создал программу-прототип с двумя целочисленными переменными a и b, исходно содержащими некоторые положительные значения. Он может выполнить некоторое количество операций «a += b» или «b += a». Лео хочет протестировать обработку больших целых чисел, поэтому ему нужно сделать значение a либо b строго больше, чем некоторое данное число \(n\). Какое наименьшее количество операций ему необходимо выполнить?

Входные данные

В первой строке записано одно целое число \(T\) (\(1 \leq T \leq 100\)) — количество наборов входных данных.

Каждая из следующих \(T\) строк описывает один набор входных данных и содержит три целых числа \(a, b, n\) (\(1 \leq a, b \leq n \leq 10^9\)) — исходные значения a и b, и значение, которое одна из переменных должна превысить, соответственно.

Выходные данные

Для каждого набора входных данных выведите наименьшее необходимое количество операций. Разделяйте ответы переводами строк.

Примечание

В первом наборе входных данных мы не сможем за одну операцию записать значение, большее \(3\), ни в какую переменную. Один из способов сделать это за две операции — выполнить «b += a» дважды.

B. Подпоследовательности Codeforces

жадные алгоритмы Конструктив математика Перебор Строки *1500

Карл любит Codeforces и подпоследовательности. Он хочет составить строку из маленьких английских букв, которая содержит как минимум \(k\) подпоследовательностей codeforces. Из всех таких строк Карл хочет выбрать самую короткую.

Формально, подпоследовательность codeforces строки \(s\) — это подмножество из десяти символов \(s\), которые образуют codeforces, если читать их в строке слева направо. Например, строка codeforces содержит одну подпоследовательность codeforces, а codeforcesisawesome содержит четыре подпоследовательности codeforces: codeforcesisawesome, codeforcesisawesome, codeforcesisawesome, codeforcesisawesome.

Помогите Карлу найти любую кратчайшую строку, которая содержит как минимум \(k\) подпоследовательностей codeforces.

Входные данные

В единственной строке записано одно целое число \(k\) (\(1 \leq k \leq 10^{16})\).

Выходные данные

Выведите кратчайшую строку из маленьких английских букв, которая содержит не менее \(k\) подпоследовательностей codeforces. Если таких строк несколько, выведите любую из них.

E1. Астеризм (простая версия)

Бинарный поиск Комбинаторика математика Перебор сортировки теория чисел *1900

Это простая версия задачи. Различие между версиями заключается в ограничениях на \(n\) и \(a_i\). Вы можете делать взломы, только если обе версии этой задачи сданы.

Сначала Aoi придумал следующую идею для задачи по программированию:

Yuzu девочка, которая коллекционирует конфеты. Изначально, у нее есть \(x\) конфет. Также есть \(n\) врагов, пронумерованных целыми числами от \(1\) до \(n\). Враг \(i\) имеет \(a_i\) конфет.

Yuzu хочет получить перестановку \(P\). Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\), расположенных в некотором порядке. Например, \(\{2,3,1,5,4\}\) это перестановка, а \(\{1,2,2\}\) это не перестановка (число \(2\) встречается в массиве дважды) и \(\{1,3,4\}\) тоже не является перестановкой (потому что \(n=3\), но в массиве есть число \(4\)).

После этого, она проведет \(n\) дуэлей с врагами по следующим правилам:

  • Если Yuzu сейчас имеет не меньше конфет, чем враг \(P_i\), она побеждает в дуэли и получает \(1\) конфету. Иначе, она проигрывает дуэль и ничего не получает.
  • Конфета, которую получает Yuzu в случае победы, будет использоваться в следующих дуэлях.

Yuzu хочет победить во всех дуэлях. Сколько существует возможных перестановок \(P\), для которых это произойдет?

Эта задача была простой и неинтересной для Akari, друга Aoi. И Akari придумал следующую задачу, на основе описанной идеи:

Давайте определим \(f(x)\) как количество возможных перестановок для целого числа \(x\).

Вам дано число \(n\), массив \(a\) и простое число \(p \le n\). Назовем целое положительное число \(x\) хорошим, если значение \(f(x)\) не делится на \(p\). Найдите все хорошие числа \(x\).

Решите задачу, предложенную Akari.

Входные данные

В первой строке находится два целых числа \(n\), \(p\) \((2 \le p \le n \le 2000)\). Гарантируется, что число \(p\) является простым (оно имеет ровно два делителя \(1\) и \(p\)).

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \le a_i \le 2000)\).

Выходные данные

В первой строке выведите количество хороших чисел \(x\).

Во второй строке выведите все хорошие числа \(x\) в возрастающем порядке.

Гарантируется, что количество хороших чисел \(x\) не превосходит \(10^5\).

Примечание

В первом тесте \(p=2\).

  • Если \(x \le 2\) тогда нет ни одной перестановки, подходящей для Yuzu. Поэтому \(f(x)=0\) для \(x \le 2\). Заметим, что \(0\) делится на \(2\), поэтому ни одно число \(x \leq 2\) не хорошее.
  • Если \(x = 3\), то \(\{1,2,3\}\) единственная подходящая для Yuzu перестановка. Тогда, \(f(3)=1\), а значит число \(3\) хорошее.
  • Если \(x = 4\), то \(\{1,2,3\} , \{1,3,2\} , \{2,1,3\} , \{2,3,1\}\) это все перестановки, подходящие для Yuzu. Тогда, \(f(4)=4\), значит число \(4\) не хорошее.
  • Если \(x \ge 5\) , все \(6\) перестановок подходят Yuzu. Тогда, \(f(x)=6\) для всех \(x \ge 5\). Значит ни одно число \(x \ge 5\) не хорошее.

Значит единственное хорошее число это \(3\).

В третьем тесте для всех целых положительных \(x\) значение \(f(x)\) делится на \(p = 3\).

D. Омкар и круг

дп жадные алгоритмы игры Перебор *2100

Дэнни, местный математик-маньяк, очарован кругами, самым последним творением Омкара. Помогите ему решить эту задачу о круге!

Вам даны \(n\) неотрицательных целых чисел \(a_1, a_2, \dots, a_n\), расположенных по кругу, где \(n\) гарантированно будет нечетным (т.е. \(n-1\) делится на \(2\)). Формально для всех \(i\) таких, что \(2 \leq i \leq n\), элементы \(a_{i - 1}\) и \(a_i\) считаются соседними, а \(a_n\) и \(a_1\) также рассматриваются как соседние. За одну операцию вы выбираете число в круге, заменяете его суммой двух соседних элементов, а затем удаляете два соседних элемента из круга. Это повторяется до тех пор, пока в круге не останется только одно число, которое мы называем круговым значением.

Помогите Дэнни найти максимально возможное круговое значение после некоторой последовательности операций.

Входные данные

Первая строка содержит одно нечетное целое число \(n\) (\(1 \leq n < 2 \cdot 10^5\), \(n\) нечетно)  — начальный размер круга.

Вторая строка содержит \(n\) целых чисел \(a_{1},a_{2},\dots,a_{n}\) (\(0 \leq a_{i} \leq 10^9\))  — начальные числа в круге.

Выходные данные

Выведите максимально возможное круговое значение после применения некоторой последовательности операций к данному кругу.

Примечание

Для первого примера круговое значение \(17\) получается так:

Выберите число с индексом \(3\). Сумма соседних элементов равна \(17\). Удалите \(7\) и \(10\) из круга и замените \(2\) на \(17\).

Обратите внимание, что ответ может выйти за пределы \(32\)-разрядного целого числа.

E. Сумма цифр

дп жадные алгоритмы Конструктив Перебор *2200

Пусть \(f(x)\) — сумма цифр числа \(x\).

Найдите минимальное неотрицательное целое \(x\), для которого \(f(x) + f(x + 1) + \dots + f(x + k) = n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 150\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух чисел \(n\) и \(k\) (\(1 \le n \le 150\), \(0 \le k \le 9\)).

Выходные данные

Для каждого набора тестовых данных выведите одно число без ведущих нулей. Если такого \(x\), что \(f(x) + f(x + 1) + \dots + f(x + k) = n\), не существует, выведите \(-1\); иначе выведите минимальное \(x\), соответствующее этому условию.

F. Сортировка циклическими сдвигами

Конструктив Перебор реализация сортировки *2400

Вам задан массив \(a\), состоящий из \(n\) целых чисел.

За один ход вы можете выбрать некоторый индекс \(i\) (\(1 \le i \le n - 2\)) и сдвинуть отрезок \([a_i, a_{i + 1}, a_{i + 2}]\) циклически вправо (т.е. заменить отрезок \([a_i, a_{i + 1}, a_{i + 2}]\) на \([a_{i + 2}, a_i, a_{i + 1}]\)).

Ваша задача — отсортировать заданный массив за не более чем \(n^2\) таких операций или сказать, что это невозможно.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(3 \le n \le 500\)) — длину массива \(a\). Вторая строка набора тестовых данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 500\)), где \(a_i\)\(i\)-й элемент \(a\).

Гарантируется, что сумма всех \(n\) не превосходит \(500\).

Выходные данные

Для каждого набора тестовых данных выведите ответ: -1 единственной строкой, если невозможно отсортировать заданный массив, используя операции, описанные в условии задачи, или количество операций \(ans\) первой строкой и \(ans\) целых чисел \(idx_1, idx_2, \dots, idx_{ans}\) (\(1 \le idx_i \le n - 2\)), где \(idx_i\) — индекс левой границы отрезка для \(i\)-й операции. Вы должны вывести индексы в порядке применения операций.

D. Заменить на MEX

Конструктив Перебор сортировки *1900

Вам дан массив из \(n\) целых чисел от \(0\) до \(n\) включительно.

За одну операцию вы можете выбрать любой элемент массива и заменить его на MEX всех элементов массива (этот MEX может измениться после операции).

Например, если текущий массив равен \([0, 2, 2, 1, 4]\), то вы можете выбрать второй элемент и заменить его на MEX существующих элементов  — \(3\). Массив станет равным \([0, 3, 2, 1, 4]\).

Вы должны сделать массив неубывающим, используя не более \(2n\) операций.

Можно показать, что это всегда возможно. Обратите внимание, что вы не должны минимизировать количество операций. Если есть много решений, вы можете найти любое из них.

 –

Напомним, что массив \(b[1 \ldots n]\) является неубывающим тогда и только тогда, когда \(b_1 \le b_2 \le \ldots \le b_n\).

Напомним, что MEX массива равен наименьшему неотрицательному целому числу, которое не принадлежит массиву. Например:

  • MEX для \([2, 2, 1]\) равен \(0\), поскольку \(0\) не принадлежит массиву.
  • MEX для \([3, 1, 0, 1]\) равен \(2\), поскольку \(0\) и \(1\) принадлежат массиву, а \(2\)  — нет.
  • MEX для \([0, 3, 1, 2]\) равен \(4\), поскольку \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, а \(4\) — нет.

Стоит отметить, что MEX массива длины \(n\) всегда находится между \(0\) и \(n\) включительно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 1000\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, \ldots, a_n\) (\(0 \le a_i \le n\))  — элементы массива. Заметим, что они не обязательно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Выходные данные

Для каждого набора входных данных вы должны вывести две строки:

Первая строка должна содержать одно целое число \(k\) (\(0 \le k \le 2n\))  — количество операций, которые вы выполняете.

Вторая строка должна содержать \(k\) целых чисел \(x_1, \ldots, x_k\) (\(1 \le x_i \le n\)), где \(x_i\)  — индекс элемента, с котором вы выполняете операцию \(i\).

Если есть много решений, вы можете найти любое из них. Пожалуйста, помните, что минимизировать \(k\) не требуется.

Примечание

В первом наборе входных данных массив уже не убывает (\(2 \le 2 \le 3\)).

Объяснение второго набора входных данных (элемент, изменяемый каждой операцией, окрашен красным):

  • \(a = [2, 1, 0]\) ; начальный MEX равен \(3\).
  • \(a = [2, 1, \color{red}{3}]\) ; новый MEX равен \(0\).
  • \(a = [\color{red}{0}, 1, 3]\) ; новый MEX равен \(2\).
  • Итоговый массив неубывающий: \(0 \le 1 \le 3\).

Объяснение третьего набора входных данных:

  • \(a = [0, 7, 3, 1, 3, 7, 7]\) ; начальный MEX равен \(2\).
  • \(a = [0, \color{red}{2}, 3, 1, 3, 7, 7]\) ; новый MEX равен \(4\).
  • \(a = [0, 2, 3, 1, \color{red}{4}, 7, 7]\) ; новый MEX равен \(5\).
  • \(a = [0, 2, 3, 1, \color{red}{5}, 7, 7]\) ; новый MEX равен \(4\).
  • \(a = [0, 2, 3, \color{red}{4}, 5, 7, 7]\) ; новый MEX равен \(1\).
  • Итоговый массив неубывающий: \(0 \le 2 \le 3 \le 4 \le 5 \le 7 \le 7\).

G. Изменение дерева

графы Деревья Конструктив Паросочетания Перебор поиск в глубину и подобное *2800

Вам дано дерево с \(n\) вершинами. Вы можете изменить строение дерева с помощью следующей многошаговой операции:

  1. Выберите три вершины \(a\), \(b\) и \(c\) такие, чтобы \(b\) соединена ребром и с \(a\) и с \(c\).
  2. Для каждой вершины \(d\) кроме \(b\), которая соединена ребром с \(a\), удалите ребро, соединяющее \(d\) и \(a\), и добавьте ребро, соединяющее \(d\) и \(c\).
  3. Удалите ребро, соединяющее \(a\) и \(b\), и добавьте ребро, соединяющее \(a\) и \(c\).

В качестве примера рассмотрим следующее дерево:

Следующая диаграмма иллюстрирует последовательность шагов, которые происходят, когда мы применяем операцию к вершинам \(2\), \(4\) и \(5\):

Можно доказать, что после каждой операции полученный граф все еще является деревом.

Найдите минимальное количество операций, которые необходимо выполнить, чтобы превратить дерево в звезду. Звезда  — это дерево с одной вершиной степени \(n - 1\), называемой его центром, и \(n - 1\) вершинами степени \(1\).

Входные данные

Первая строка содержит целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\))  — количество вершин в дереве.

\(i\)-я из следующих \(n - 1\) строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\), \(u_i \neq v_i\)), обозначающих существование ребра, соединяющего вершины \(u_i\) и \(v_i\). Гарантируется, что данные ребра образуют дерево.

Выходные данные

Выведите единственное целое число  — минимальное количество операций, необходимое для преобразования дерева в звезду.

Можно доказать, что при данных ограничениях всегда можно превратить дерево в звезду, используя не более \(10^{18}\) операций.

Примечание

Первый пример соответствует дереву из условия. Как мы уже видели, мы можем превратить дерево в звезду с центром в вершине \(5\), применив одну операцию к вершинам \(2\), \(4\) и \(5\).

Во втором тестовом примере данное дерево уже является звездой с центром в вершине \(4\), поэтому никаких операций выполнять не нужно.

A. Акакий и строка

Перебор реализация Строки *1500

Акакий Владиславович изучает строки. Сегодня он столкнулся со следующей задачей.

Дана строка \(s\) длины \(n\), состоящая из строчных букв английского алфавита и знаков вопроса. Можно ли заменить знаки вопроса на строчные буквы английского алфавита так, чтобы в полученную строку строка «abacaba» входила как подстрока ровно один раз?

Каждый знак вопроса должен быть заменён ровно на одну букву. Например, строка «a?b?c» может быть преобразована в строки «aabbc» или «azbzc», но не может быть преобразована в строки «aabc», «a?bbc» или «babbc».

Вхождением строки \(t\) длины \(m\) в строку \(s\) длины \(n\) называется такой индекс \(i\) (\(1 \leq i \leq n - m + 1\)), что строка \(s[i..i+m-1]\), образованная последовательными \(m\) символами строки \(s\), начиная с \(i\)-го, совпадает со строкой \(t\). Например, в строке «ababa» есть два вхождения строки «aba» как подстроки: \(i = 1\) и \(i = 3\), а в строке «acba» вхождения строки «aba» как подстроки нет.

Помогите Акакию Владиславовичу проверить можно ли заменить все знаки вопроса на строчные буквы английского алфавита так, чтобы в полученную строку строка «abacaba» входила как подстрока ровно один раз.

Входные данные

В первой строке задано число \(T\) (\(1 \leq T \leq 5000\)) — количество наборов входных данных. Следующие \(T\) пар строк содержат описания наборов входных данных.

В первой строке описания содержится целое число \(n\) (\(7 \leq n \leq 50\)) — длина строки \(s\).

Вторая строка содержит строку \(s\) длины \(n\), состоящую из строчных букв английского алфавита и знаков вопроса.

Выходные данные

Для каждого набора входных данных выведите ответ на него.

В случае, если невозможно заменить знаки вопроса в строке \(s\) на строчные буквы английского алфавита так, чтобы в получившейся строке было ровно одно вхождение строки «abacaba» как подстроки, выведите «No».

В противном случае, выведите «Yes», а во второй строке выведите строку, состоящую из \(n\) строчный букв английского алфавита, — полученную строку. Если существует несколько подходящий строк, выведите любую.

Вы можете выводить «Yes» и «No» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом примере в строке «abacaba» есть ровно одно вхождение строки «abacaba» как подстроки, совпадающее со всей строкой.

Во втором примере строка из семи знаков вопроса может быть преобразована в любую строку из семи строчных букв английского алфавита, в том числе и в «abacaba».

В шестом примере в строке есть два вхождения строки «abacaba» как подстроки.

A. Акакий и строка

Перебор реализация Строки *1500

Акакий Владиславович изучает строки. Сегодня он столкнулся со следующей задачей.

Дана строка \(s\) длины \(n\), состоящая из строчных букв английского алфавита и знаков вопроса. Можно ли заменить знаки вопроса на строчные буквы английского алфавита так, чтобы в полученную строку строка «abacaba» входила как подстрока ровно один раз?

Каждый знак вопроса должен быть заменён ровно на одну букву. Например, строка «a?b?c» может быть преобразована в строки «aabbc» или «azbzc», но не может быть преобразована в строки «aabc», «a?bbc» или «babbc».

Вхождением строки \(t\) длины \(m\) в строку \(s\) длины \(n\) называется такой индекс \(i\) (\(1 \leq i \leq n - m + 1\)), что строка \(s[i..i+m-1]\), образованная последовательными \(m\) символами строки \(s\), начиная с \(i\)-го, совпадает со строкой \(t\). Например, в строке «ababa» есть два вхождения строки «aba» как подстроки: \(i = 1\) и \(i = 3\), а в строке «acba» вхождения строки «aba» как подстроки нет.

Помогите Акакию Владиславовичу проверить можно ли заменить все знаки вопроса на строчные буквы английского алфавита так, чтобы в полученную строку строка «abacaba» входила как подстрока ровно один раз.

Входные данные

В первой строке задано число \(T\) (\(1 \leq T \leq 5000\)) — количество наборов входных данных. Следующие \(T\) пар строк содержат описания наборов входных данных.

В первой строке описания содержится целое число \(n\) (\(7 \leq n \leq 50\)) — длина строки \(s\).

Вторая строка содержит строку \(s\) длины \(n\), состоящую из строчных букв английского алфавита и знаков вопроса.

Выходные данные

Для каждого набора входных данных выведите ответ на него.

В случае, если невозможно заменить знаки вопроса в строке \(s\) на строчные буквы английского алфавита так, чтобы в получившейся строке было ровно одно вхождение строки «abacaba» как подстроки, выведите «No».

В противном случае, выведите «Yes», а во второй строке выведите строку, состоящую из \(n\) строчный букв английского алфавита, — полученную строку. Если существует несколько подходящий строк, выведите любую.

Вы можете выводить «Yes» и «No» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом примере в строке «abacaba» есть ровно одно вхождение строки «abacaba» как подстроки, совпадающее со всей строкой.

Во втором примере строка из семи знаков вопроса может быть преобразована в любую строку из семи строчных букв английского алфавита, в том числе и в «abacaba».

В шестом примере в строке есть два вхождения строки «abacaba» как подстроки.

A. Акакий и строка

Перебор реализация Строки *1500

Акакий Владиславович изучает строки. Сегодня он столкнулся со следующей задачей.

Дана строка \(s\) длины \(n\), состоящая из строчных букв английского алфавита и знаков вопроса. Можно ли заменить знаки вопроса на строчные буквы английского алфавита так, чтобы в полученную строку строка «abacaba» входила как подстрока ровно один раз?

Каждый знак вопроса должен быть заменён ровно на одну букву. Например, строка «a?b?c» может быть преобразована в строки «aabbc» или «azbzc», но не может быть преобразована в строки «aabc», «a?bbc» или «babbc».

Вхождением строки \(t\) длины \(m\) в строку \(s\) длины \(n\) называется такой индекс \(i\) (\(1 \leq i \leq n - m + 1\)), что строка \(s[i..i+m-1]\), образованная последовательными \(m\) символами строки \(s\), начиная с \(i\)-го, совпадает со строкой \(t\). Например, в строке «ababa» есть два вхождения строки «aba» как подстроки: \(i = 1\) и \(i = 3\), а в строке «acba» вхождения строки «aba» как подстроки нет.

Помогите Акакию Владиславовичу проверить можно ли заменить все знаки вопроса на строчные буквы английского алфавита так, чтобы в полученную строку строка «abacaba» входила как подстрока ровно один раз.

Входные данные

В первой строке задано число \(T\) (\(1 \leq T \leq 5000\)) — количество наборов входных данных. Следующие \(T\) пар строк содержат описания наборов входных данных.

В первой строке описания содержится целое число \(n\) (\(7 \leq n \leq 50\)) — длина строки \(s\).

Вторая строка содержит строку \(s\) длины \(n\), состоящую из строчных букв английского алфавита и знаков вопроса.

Выходные данные

Для каждого набора входных данных выведите ответ на него.

В случае, если невозможно заменить знаки вопроса в строке \(s\) на строчные буквы английского алфавита так, чтобы в получившейся строке было ровно одно вхождение строки «abacaba» как подстроки, выведите «No».

В противном случае, выведите «Yes», а во второй строке выведите строку, состоящую из \(n\) строчный букв английского алфавита, — полученную строку. Если существует несколько подходящий строк, выведите любую.

Вы можете выводить «Yes» и «No» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом примере в строке «abacaba» есть ровно одно вхождение строки «abacaba» как подстроки, совпадающее со всей строкой.

Во втором примере строка из семи знаков вопроса может быть преобразована в любую строку из семи строчных букв английского алфавита, в том числе и в «abacaba».

В шестом примере в строке есть два вхождения строки «abacaba» как подстроки.

A. Акакий и строка

Перебор реализация Строки *1500

Акакий Владиславович изучает строки. Сегодня он столкнулся со следующей задачей.

Дана строка \(s\) длины \(n\), состоящая из строчных букв английского алфавита и знаков вопроса. Можно ли заменить знаки вопроса на строчные буквы английского алфавита так, чтобы в полученную строку строка «abacaba» входила как подстрока ровно один раз?

Каждый знак вопроса должен быть заменён ровно на одну букву. Например, строка «a?b?c» может быть преобразована в строки «aabbc» или «azbzc», но не может быть преобразована в строки «aabc», «a?bbc» или «babbc».

Вхождением строки \(t\) длины \(m\) в строку \(s\) длины \(n\) называется такой индекс \(i\) (\(1 \leq i \leq n - m + 1\)), что строка \(s[i..i+m-1]\), образованная последовательными \(m\) символами строки \(s\), начиная с \(i\)-го, совпадает со строкой \(t\). Например, в строке «ababa» есть два вхождения строки «aba» как подстроки: \(i = 1\) и \(i = 3\), а в строке «acba» вхождения строки «aba» как подстроки нет.

Помогите Акакию Владиславовичу проверить можно ли заменить все знаки вопроса на строчные буквы английского алфавита так, чтобы в полученную строку строка «abacaba» входила как подстрока ровно один раз.

Входные данные

В первой строке задано число \(T\) (\(1 \leq T \leq 5000\)) — количество наборов входных данных. Следующие \(T\) пар строк содержат описания наборов входных данных.

В первой строке описания содержится целое число \(n\) (\(7 \leq n \leq 50\)) — длина строки \(s\).

Вторая строка содержит строку \(s\) длины \(n\), состоящую из строчных букв английского алфавита и знаков вопроса.

Выходные данные

Для каждого набора входных данных выведите ответ на него.

В случае, если невозможно заменить знаки вопроса в строке \(s\) на строчные буквы английского алфавита так, чтобы в получившейся строке было ровно одно вхождение строки «abacaba» как подстроки, выведите «No».

В противном случае, выведите «Yes», а во второй строке выведите строку, состоящую из \(n\) строчный букв английского алфавита, — полученную строку. Если существует несколько подходящий строк, выведите любую.

Вы можете выводить «Yes» и «No» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом примере в строке «abacaba» есть ровно одно вхождение строки «abacaba» как подстроки, совпадающее со всей строкой.

Во втором примере строка из семи знаков вопроса может быть преобразована в любую строку из семи строчных букв английского алфавита, в том числе и в «abacaba».

В шестом примере в строке есть два вхождения строки «abacaba» как подстроки.

B. Сомнительная криптография

Бинарный поиск математика Перебор теория чисел *1500

Паша любит обмениваться со своим другом положительными целыми числами. Паша заботится о своей безопасности, поэтому он шифрует каждое загаданное натуральное число \(n\) следующим образом. Он заранее выбрал какие-то три целых числа \(a\), \(b\) и \(c\), что \(l \leq a,b,c \leq r\). После этого он вычисляет число \(m = n \cdot a + b - c\) и пересылает его своему другу.

В руки злоумышленника попали три значения: \(l\), \(r\) и \(m\). Может ли злоумышленник «восстановить» параметры \(a\), \(b\) и \(c\)? Какие это могут быть значения?

Иными словами, найдите любую такую тройку чисел \(a\), \(b\) и \(c\), что:

  • \(a\), \(b\) и \(c\) — целые числа,
  • \(l \leq a, b, c \leq r\),
  • существует такое целое положительное \(n\), что \(n \cdot a + b - c = m\).
Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \leq t \leq 20\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Единственная строка набора входных данных содержит три целых числа \(l\), \(r\) и \(m\) (\(1 \leq l \leq r \leq 500\,000\), \(1 \leq m \leq 10^{10}\)). Эти числа таковы, что ответ на задачу существуют.

Выходные данные

Для каждого набора входных данных в единственной строке выведите три целых числа \(a\), \(b\) и \(c\) такие, что \(l \leq a, b, c \leq r\) и существует такое натуральное число \(n\), что \(n \cdot a + b - c = m\). Гарантируется, что такие числа существуют. Если подходящих решений несколько, выведите любое из них.

Примечание

В первом примере было загадано число \(n = 3\), тогда \(n \cdot 4 + 6 - 5 = 13 = m\). Так же возможны такие ответы: \(a = 4\), \(b = 5\), \(c = 4\) (при этом \(n = 3\)); \(a = 5\), \(b = 4\), \(c = 6\) (при этом \(n = 3\)); \(a = 6\), \(b = 6\), \(c = 5\) (при этом \(n = 2\)); \(a = 6\), \(b = 5\), \(c = 4\) (при этом \(n = 2\)).

Во втором примере было загадано число \(n = 1\), тогда \(n \cdot 2 + 2 - 3 = 1 = m\). Число \(n = 0\) не могло быть загадано, так как число \(n\) обязательно должно быть натуральным.

C. Выбор цветов для букета

Бинарный поиск дп жадные алгоритмы Перебор поиск в глубину и подобное сортировки Структуры данных *2000

Володя хочет красиво поздравить свою жену с годовщиной их свадьбы и собирается подарить ей букет из ровно \(n\) цветов.

Придя в цветочный магазин, Володя обнаружил, что букет можно составлять из цветов \(m\) различных видов, причём количество цветов каждого вида не ограничено. Володя знает, что от первого цветка \(i\)-го вида в букете его супруга становится счастливее на \(a_i\), а от каждого следующего цветка такого вида она становится счастливее на \(b_i\). То есть, если в букете \(x_i > 0\) цветов вида \(i\), то за цветы этого вида жена Володи становится счастливее на \(a_i + (x_i - 1) \cdot b_i\) (а в случае, если цветов типа \(i\) в букете не будет, счастье жены Володи из-за цветов этого типа не изменится).

Как любой любящий муж, Володя хочет как можно сильнее порадовать свою супругу. Поэтому ему хочется знать, на какую максимальную величину может увеличиться её счастье от букета из \(n\) цветов, набранного из доступных в магазине цветов.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных. Затем следует описание \(t\) наборов входных данных, каждый из которых задан следующим образом.

В первой строке набора записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 10^9\), \(1 \le m \le 100\,000\)) — требуемое количество цветов в букете и количество доступных видов цветов.

Каждая из следующих \(m\) строк описывает вид цветов и содержит два целых числа \(a_i\) и \(b_i\) (\(0 \le a_i, b_i \le 10^9\)) — увеличение счастья от первого цветка \(i\)-го вида и увеличение счастья от каждого последующего цветка этого вида.

Наборы разделены одной пустой строкой.

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(100\,000\).

Выходные данные

Для каждого набора входных данных в единственной строке выведите одно число — максимальное увеличение счастья, которое может получить жена Володи от букета из \(n\) цветов.

Примечание

В первом примере если взять 1 цветок первого типа и 3 цветка второго типа, то итоговое увеличение счастья от букета будет равно \(5 + (1 + 2 \cdot 4) = 14\).

В втором примере если взять 2 цветка первого типа, 2 цветка второго типа и 1 цветок третьего типа, то итоговое увеличение счастья от букета будет равно \((5 + 1 \cdot 2) + (4 + 1 \cdot 2) + 3 = 16\).

D. Новые электрички

Бинарный поиск Перебор сортировки Структуры данных *2300

Каждый день на планете Кирнес курсирует множество поездов. День на этой планете состоит из \(h\) часов. Каждый час состоит из \(m\) минут, причём \(m\) обязательно чётное. Известно, что на данный момент \(n\) товарных поездов ежедневно отправляются с вокзала: \(i\)-й товарный поезд отправляется каждый день в \(h_i\) часов и \(m_i\) минут.

Правительство планеты решило запустить пассажирское сообщение. Было решено пустить ровно по две электрички каждый час. Это означает, что первая за день электричка отправится с вокзала в \(0\) часов и \(t\) минут, причем \(0 \le t < {m \over 2}\), вторая электричка отправится через \(m \over 2\) минут после этого и так далее.

Для безопасной посадки пассажиров электричка должна прибыть на вокзал за \(k\) минут до отправления. В то время, как пассажиры садятся в электричку, никакой товарный поезд не должен отправляться с вокзала, однако товарный поезд может отправиться в момент начала посадки на электричку и в момент её отправления. Обратите внимание, что если электричка отправляется в \(0\) часов \(t\) минут и \(t < k\), то платформа вокзала будет занята последние \(k - t\) минут предыдущего дня.

Схематичный пример корректного способа запустить электрички. Здесь \(h=2\) (следовательно, количество электричек равно \(2h=4\)), количество поездов \(n=6\). Электрички обозначены красным цветом (обратите внимание, что промежутки между ними одинаковы). Поезда обозначены синим цветом. Отрезки времени длины \(k\) до каждой электрички выделены красным. Обратите внимание, что внутри этих отрезков нет поездов.

Разумеется, не всегда можно составить корректное расписание электричек вместе со всеми товарными поездами. Тогда необходимо отменить некоторые товарные поезда, чтобы появилась возможность пустить электрички с соблюдением всех транспортных норм. Найдите такое время \(t\) для запуска первой электрички, чтобы количество товарных поездов, которые потребуется отменить, было минимальным.

Входные данные

Первая строка содержит четыре целых числа \(n\), \(h\), \(m\), \(k\) (\(1 \le n \le 100\,000\), \(1 \le h \le 10^9\), \(2 \le m \le 10^9\), \(1 \le k \le {m \over 2}\)) — число товарных поездов, количество часов и минут на планете Кирнес, а также время, которое электричка стоит у платформы. Гарантируется, что число минут \(m\) четное.

В следующих \(n\) строках вводится по два целых числа \(h_i\) и \(m_i\) (\(0 \le h_i < h\), \(0 \le m_i < m\)) — время отправления \(i\)-го поезда, часы и минуты соответственно. Гарантируется, что все товарные поезда отправляются в разное время.

Выходные данные

Выведите два числа: минимальное количество отменённых товарных поездов и \(t\) — время запуска первой за день электрички в минутах.

Во второй строке через пробел выведите номера отменяемых товарных поездов.

Примечание

В первом примере первую электричку надо отправить в 0:00. Тогда поезд в 16:00 отправится сразу после электрички, а электричку в 17:30 надо будет подать на платформу сразу после отправления товарного поезда в 17:15.

Во втором примере подать электричку на платформу надо за 16 минут до отправления. Сделать это без отмены какого-то товарного поезда не получится: если отправлять электричку в \(t \in [1, 15]\), то в 16:00 электричка уже должна быть на платформе, а с нее в это время отправляется первый товарный поезд. Если \(t = 0\) или \(t \in [16, 29]\), то второй товарный поезд в 17:15 не сможет уехать с платформы, потому что на ней уже будет стоять следующая электричка.

Если отменить второй поезд, то можно выбрать \(t = 0\), тогда поезда будут отправляться в 0 и 30 минут каждый час, а столкновения с первым товарным поездом не будет. Также можно отменить только первый поезд и выбрать, например, \(t = 13\).

E. Адские ограничения

дп Перебор *2900

Катя совсем недавно начала придумывать задачи по программированию и делать свои контесты. Что ей не нравится — так это скучные и простые ограничения. «N не больше тысячи» и «сумма ai не больше миллиона» наскучили Кате, и она решила придумать что-нибудь посложнее.

В последней задаче на строки, придуманной Катей, входные данные — одна строка из маленьких латинских букв. Чтобы сделать условие подлиннее и вселить ужас в людей, решающих контест, Катя придумала следующий набор из k однотипных ограничений (символы в ограничениях могут повторяться, а некоторые ограничения могут и противоречить друг другу):

  • Количество символов c1 в строке не меньше l1 и не больше r1.
  • ...
  • Количество символов ci в строке не меньше li и не больше ri.
  • ...
  • Количество символов ck в строке не меньше lk и не больше rk.

Однако, решив, что и это слишком просто и наглядно, Катя дописала следующее условие: из вышеуказанного списка строка удовлетворяет не менее, чем L, и не более, чем R ограничениям.

Составлять сложные и подлые тесты Катя не любит, поэтому она просто взяла большую строку s и хочет добавить в тесты все ее подстроки, которые удовлетворяют ограничениям. Однако, запутавшись в собственных условиях, Катя попросила Вас посчитать, сколько подстрок строки s удовлетворяет этим условиям (каждое вхождение подстроки считается отдельно).

Входные данные

В первой строке записана непустая строка s, состоящая из маленьких латинских букв. Длина строки s не превышает 105.

Во второй строке записаны три целых числа, разделенных пробелами — k, L и R (0 ≤ L ≤ R ≤ k ≤ 500).

В следующих k строках в формате «ci li ri» записаны ограничения, придуманные Катей. Все буквы ci — маленькие латинские буквы, li и ri — целые числа (0 ≤ li ≤ ri ≤ |s|, где |s| — длина строки s). Буквы ci не обязательно различны.

Выходные данные

Выведите одно число — количество подстрок, удовлетворяющих ограничениям.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать поток cout или спецификатор %I64d.

Примечание

В первом тесте требуется посчитать количество строк, не содержащих символов «e» и «o». Вот все такие строки (в порядке вхождения в исходную строку слева направо): «c», «d», «f», «r», «rc», «c», «s».

Во втором тесте нельзя добиться того, чтобы из двух одинаковых ограничений выполнялось ровно одно, поэтому ответ — 0.

A. Три индекса

Перебор Структуры данных *900

Вам задана перестановка \(p_1, p_2, \dots, p_n\). Напомним, что последовательность из \(n\) целых чисел называется перестановкой, если она содержит все целые числа от \(1\) до \(n\) ровно один раз.

Вам необходимо найти три индекса \(i\), \(j\) и \(k\) такие, что:

  • \(1 \le i < j < k \le n\);
  • \(p_i < p_j\) и \(p_j > p_k\).

Или сообщить, что таких трех индексов нет.

Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 200\)) — количество наборов входных данных.

Следующие \(2T\) содержат описание наборов входных данных  — две строки на каждый набор. Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(3 \le n \le 1000\)) — длина перестановки \(p\).

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\); \(p_i \neq p_j\) если \(i \neq j\)) — перестановка \(p\).

Выходные данные

Для каждого набора входных данных:

  • если есть такие индексы \(i\), \(j\) и \(k\), выведите YES (без учета регистра) и сами индексы;
  • если таких трех индексов нет, выведите NO (без учета регистра).

Если допустимых наборов индексов несколько, выведите любой из них.

C. Собери команды

дп жадные алгоритмы Перебор реализация сортировки *1400

У вас есть \(n\) программистов, которых вы хотите распределить по командам. Навык \(i\)-го программиста равен \(a_i\). Вы хотите собрать из них максимальное количество команд. Для команд есть одно ограничение: количество программистов в команде, умноженное на минимальный навык среди всех программистов этой команды, должно быть как минимум \(x\).

Каждый программист может находиться максимум в одной команде. Некоторые программисты могут остаться без команды.

Посчитайте максимальное количество команд, которое вы можете собрать.

Входные данные

Первая строка содержит одно число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два числа \(n\) и \(x\) (\(1 \le n \le 10^5; 1 \le x \le 10^9\)) — количество программистов и ограничение на навык команды соответственно.

Вторая строка каждого набора входных данных содержит \(n\) чисел \(a_1, a_2, \dots , a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) равно навыку \(i\)-го программиста.

Сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите одно число — максимальное количество команд, которое вы можете собрать.

A. Общая подпоследовательность

Перебор *800

У вас есть два массива целых чисел \(a_1,\ldots,a_n\) и \(b_1,\ldots,b_m\).

Ваша задача найти любой непустой массив \(c_1,\ldots,c_k\), который является подпоследовательностью \(a_1,\ldots,a_n\) и подпоследовательностью \(b_1,\ldots,b_m\). Если есть несколько возможных ответов, найдите массив минимальной возможной длины. Если по-прежнему есть несколько массивов минимальной длины, вы можете найти любой такой массив. Если ни одного такого массива не существует вы должны сообщить об этом.

Последовательность \(a\) является подпоследовательностью последовательности \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно нуля) элементов. Например, \([3,1]\) это подпоследовательность \([3,2,1]\) и \([4,3,1]\), но не подпоследовательность \([1,3,3,7]\) и \([3,10,4]\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\le t\le 1000\))  — количество наборов входных данных. Следующие \(3t\) строк содержат описания наборов входных данных.

В первой строке каждого набора входных данных содержится два целых числа \(n\) и \(m\) (\(1\le n,m\le 1000\))  — длины массивов.

Во второй строке каждого набора входных данных находится \(n\) целых чисел \(a_1,\ldots,a_n\) (\(1\le a_i\le 1000\))  — элементы первого массива.

В третьей строке каждого набора входных данных находится \(m\) целых чисел \(b_1,\ldots,b_m\) (\(1\le b_i\le 1000\))  — элементы второго массива.

Гарантируется, что сумма всех \(n\) и сумма всех \(m\) по всем наборам входных данных не превосходит \(1000\) (\(\sum\limits_{i=1}^t n_i, \sum\limits_{i=1}^t m_i\le 1000\)).

Выходные данные

Для каждого набора входных данных выведите «YES», если решение существует и «NO», иначе.

Если ответ «YES», на следующей строке выведите целое число \(k\) (\(1\le k\le 1000\))  — длину массива и затем \(k\) целых чисел \(c_1,\ldots,c_k\) (\(1\le c_i\le 1000\))  — элементы массива.

Если существует несколько возможных решений с минимальным \(k\), выведите любое.

Примечание

В первом наборе входных данных \([4]\) является подпоследовательностью \([10, 8, 6, 4]\) и \([1, 2, 3, 4, 5]\). Этот массив имеет длину \(1\), это наименьшая возможная длина подпоследовательности массивов \(a\) и \(b\).

В третьем наборе входных данных не существует ни одной непустой подпоследовательности у \([3]\) и \([2]\), поэтому ответ «NO».

D. Переставьте

графы жадные алгоритмы Конструктив Перебор сортировки *2800

Коала Коа имеет матрицу \(A\) из \(n\) строк и \(m\) столбцов. Элементы этой матрицы — различные целые числа от \(1\) до \(n \cdot m\) (каждое число от \(1\) до \(n \cdot m\) встречается в матрице ровно один раз).

Для любой матрицы \(M\) из \(n\) строк и \(m\) столбцов определим следующее:

  • \(i\)-я строка \(M\) определяется как \(R_i(M) = [ M_{i1}, M_{i2}, \ldots, M_{im} ]\) для всех \(i\) (\(1 \le i \le n\)).
  • \(j\)-й столбец \(M\) определяется как \(C_j(M) = [ M_{1j}, M_{2j}, \ldots, M_{nj} ]\) для всех \(j\) (\(1 \le j \le m\)).

Коа определяет \(S(A) = (X, Y)\) как спектр \(A\), где \(X\)  — множество максимумов в строках \(A\), а \(Y\) — множество максимумов в столбцах \(A\) соответственно.

Более формально:

  • \(X = \{ \max(R_1(A)), \max(R_2(A)), \ldots, \max(R_n(A)) \}\)
  • \(Y = \{ \max(C_1(A)), \max(C_2(A)), \ldots, \max(C_m(A)) \}\)

Коа просит вас найти некоторую матрицу \(A'\) из \(n\) строк и \(m\) столбцов такую, чтобы каждое число от \(1\) до \(n \cdot m\) встречалось в матрице ровно один раз, и выполнялись следующие условия:

  • \(S(A') = S(A)\)
  • \(R_i(A')\) является битоническим для всех \(i\) (\(1 \le i \le n\))
  • \(C_j(A')\) является битоническим для всех \(j\) (\(1 \le j \le m\)).
Массив \(t\) (\(t_1, t_2, \ldots, t_k\)) называется битоническим, если он сначала возрастает, а затем спадает.

Более формально: \(t\) является битоническим, если существует некоторая позиция \(p\) (\(1 \le p \le k\)) такая, что: \(t_1 < t_2 < \ldots < t_p > t_{p+1} > \ldots > t_k\).

Помогите Коа найти такую матрицу, или определить, что ее не существует.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 250\))  — количества строк и столбцов в \(A\).

Каждая из следующих \(n\) строк содержит \(m\) целых чисел. \(j\)-е целое число в \(i\)-й строке обозначает элемент \(A_{ij}\) (\(1 \le A_{ij} \le n \cdot m\)) матрицы \(A\). Гарантируется, что каждое число от \(1\) до \(n \cdot m\) встречается ровно один раз среди элементов матрицы.

Выходные данные

Если такой матрицы не существует, в отдельной строке выведите \(-1\).

В противном случае вы должны вывести \(n\) строк, каждая из которых должная состоять из \(m\) целых чисел, разделенных пробелом  — описание \(A'\).

\(j\)-е число в \(i\)-й строке обозначает элемент \(A'_{ij}\).

Каждое число от \(1\) до \(n \cdot m\) должно встречаться в \(A'\) ровно один раз, каждая строка и столбец в \(A'\) должны быть битоническими и должно выполняться \(S(A) = S(A')\).

Если ответов несколько, выведите любой.

Примечание

Проанализируем первый пример:

Для матрицы \(A\):

    • Строки:
      • \(R_1(A) = [3, 5, 6]; \max(R_1(A)) = 6\)
      • \(R_2(A) = [1, 7, 9]; \max(R_2(A)) = 9\)
      • \(R_3(A) = [4, 8, 2]; \max(R_3(A)) = 8\)

    • Столбцы:
      • \(C_1(A) = [3, 1, 4]; \max(C_1(A)) = 4\)
      • \(C_2(A) = [5, 7, 8]; \max(C_2(A)) = 8\)
      • \(C_3(A) = [6, 9, 2]; \max(C_3(A)) = 9\)

  • \(X = \{ \max(R_1(A)), \max(R_2(A)), \max(R_3(A)) \} = \{ 6, 9, 8 \}\)
  • \(Y = \{ \max(C_1(A)), \max(C_2(A)), \max(C_3(A)) \} = \{ 4, 8, 9 \}\)
  • Поэтому \(S(A) = (X, Y) = (\{ 6, 9, 8 \}, \{ 4, 8, 9 \})\)

Для матрицы \(A'\):

    • Строки:
      • \(R_1(A') = [9, 5, 1]; \max(R_1(A')) = 9\)
      • \(R_2(A') = [7, 8, 2]; \max(R_2(A')) = 8\)
      • \(R_3(A') = [3, 6, 4]; \max(R_3(A')) = 6\)

    • Столбцы:
      • \(C_1(A') = [9, 7, 3]; \max(C_1(A')) = 9\)
      • \(C_2(A') = [5, 8, 6]; \max(C_2(A')) = 8\)
      • \(C_3(A') = [1, 2, 4]; \max(C_3(A')) = 4\)

  • Заметим, что каждый из этих массивов является битоническим.
  • \(X = \{ \max(R_1(A')), \max(R_2(A')), \max(R_3(A')) \} = \{ 9, 8, 6 \}\)
  • \(Y = \{ \max(C_1(A')), \max(C_2(A')), \max(C_3(A')) \} = \{ 9, 8, 4 \}\)
  • Поэтому \(S(A') = (X, Y) = (\{ 9, 8, 6 \}, \{ 9, 8, 4 \})\)

B1. Коа и пляж (простая версия)

дп жадные алгоритмы Перебор *1900

Единственная разница между простой и сложной версиями заключается в ограничениях. В этой версии ограничения ниже. Вы можете делать взломы только если обе версии задачи сданы.

Коала Коа на пляже!

Пляж состоит из (слева направо) берега, \(n+1\) метров моря, и острова в \(n+1\) метрах от берега.

Она измерила глубину моря на расстоянии \(1, 2, \dots, n\) метров от берега и сохранила эту информацию в массиве \(d\). \(d_i\) обозначает глубину моря в \(i\) метрах от берега для \(1 \le i \le n\).

Как и на любом пляже, на этом есть прилив, интенсивность прилива измеряется параметром \(k\) и влияет на все глубины с начала в момент времени \(t=0\) следующим образом:

  • На протяжении \(k\) секунд каждую секунду прилив увеличивает все глубины на \(1\).

  • На протяжении следующих \(k\) секунд каждую секунду прилив уменьшает все глубины на \(1\).

  • Этот процесс повторяется снова и снова (т.е. глубина увеличивается на протяжении \(k\) секунд, затем уменьшается на протяжении \(k\) секунд и так далее ...).

    Формально, давайте определим \(0\)-индексированный массив \(p = [0, 1, 2, \ldots, k - 2, k - 1, k, k - 1, k - 2, \ldots, 2, 1]\) длины \(2k\). В момент времени \(t\) (\(0 \le t\)) глубина на расстоянии \(i\) метров от берега равна \(d_i + p[t \bmod 2k]\) (\(t \bmod 2k\) обозначает остаток от деления \(t\) на \(2k\)). Обратите внимание, что изменения происходят мгновенно каждую секунду, см. примеры для лучшего понимания.

В момент времени \(t=0\) Коа стоит на берегу, и хочет добраться до острова. Пусть во время \(t\) (\(0 \le t\)) она находится в \(x\) (\(0 \le x \le n\)) метрах от берега:

  • За одну секунду Коа может проплыть на \(1\) метр дальше от берега (\(x\) меняется на \(x+1\)) или вообще не плыть (\(x\) остается неизменным), в обоих случаях \(t\) меняется на \(t+1\).

  • Поскольку Коа  — плохой пловец, глубина моря в точке, где она находится, не может превышать \(l\) во все целые точки времени (или она утонет). Более формально, если Коа находится в \(x\) (\(1 \le x \le n\)) метрах от берега в момент \(t\) (для некоторого целого \(t\ge 0\)), то глубина моря в этой точке  — \(d_x + p[t \bmod 2k]\) — не может превышать \(l\). Другими словами, \(d_x + p[t \bmod 2k] \le l\) должно выполняться всегда.

  • Когда Коа достигает острова в \(n+1\) метров от берега, она останавливается и может отдохнуть.

    Обратите внимание, что пока Коа плывет, прилив не влияет на нее (то есть она не может утонуть во время плавания). Обратите внимание, что Коа может оставаться на берегу, сколько ей нужно, и ни берег, ни остров не подвержены влиянию прилива (это твердая земля, и она там не утонет).

Коа хочет знать, сможет ли она добраться с берега на остров. Помогите ей!

Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 100\))  — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит три целых числа: \(n\), \(k\) and \(l\) (\(1 \le n \le 100; 1 \le k \le 100; 1 \le l \le 100\)) — количество метров моря и параметры \(k\) и \(l\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(d_1, d_2, \ldots, d_n\) (\(0 \le d_i \le 100\)) — глубины каждого метра моря.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(100\).

Выходные данные

Для каждого набора входных данных:

Выведите Yes, если Коа сможет добраться от берега до острова, и No в обратном случае.

Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

Ниже \(s\) обозначает берег, \(i\) обозначает остров, \(x\) обозначает расстояние от Коа до берега, нижнее подчеркивание обозначает позицию Коа, а значения в массиве ниже обозначают текущие глубины, измененные под влиянием прилива, на расстояниях \(1, 2, \dots, n\) от берега.

В наборе входных данных \(1\) мы имеем \(n = 2, k = 1, l = 1, p = [ 0, 1 ]\).

Коа хочет добраться с берега (c \(x = 0\)) на остров (c \(x = 3\)). Опишем возможное решение:

  • Первоначально в \(t = 0\) пляж выглядит так: \([\underline{s}, 1, 0, i]\).
  • В \(t = 0\), если бы Коа решила доплыть до \(x = 1\), пляж выглядел бы так: \([s, \underline{2}, 1, i]\) в \(t = 1\), и так как \(2 > 1\) она бы утонула. Таким образом, Коа вместо этого ждет \(1\) секунду, а пляж выглядит как \([\underline{s}, 2, 1, i]\) в \(t = 1\).
  • В \(t = 1\) Коа плывет до \(x = 1\), пляж выглядит как \([s, \underline{1}, 0, i]\) в \(t = 2\). Коа не тонет, потому что \(1 \le 1\).
  • В \(t = 2\) Коа плывет до \(x = 2\), пляж выглядит как \([s, 2, \underline{1}, i]\) в \(t = 3\). Коа не тонет, потому что \(1 \le 1\).
  • В \(t = 3\) Коа плывет до \(x = 3\), пляж выглядит как \([s, 1, 0, \underline{i}]\) в \(t = 4\).
  • В \(t = 4\) Коа находится в \(x = 3\), и она сделала это!

Можно показать, что наборе входных данных \(2\) Коа не сможет доплыть до острова.

D. а-хорошая строка

битмаски дп Перебор разделяй и властвуй реализация *1500

Вам дана строка \(s[1 \dots n]\), состоящая из строчных латинских букв. Гарантируется, что \(n = 2^k\) для некоторого целого числа \(k \ge 0\).

Строка \(s[1 \dots n]\) называется \(c\)-хорошей, если выполняется как минимум одно из следующих условий:

  • Длина строки \(s\) равна \(1\) и она состоит из единственного символа \(c\) (то есть \(s_1=c\));
  • Длина строки \(s\) больше \(1\), первая половина строки состоит только из символа \(c\) (то есть \(s_1=s_2=\dots=s_{\frac{n}{2}}=c\)), а вторая половина строки (то есть строка \(s_{\frac{n}{2} + 1}s_{\frac{n}{2} + 2} \dots s_n\)) является \((c+1)\)-хорошей строкой;
  • Длина строки \(s\) больше \(1\), вторая половина строки состоит только из символа \(c\) (то есть \(s_{\frac{n}{2} + 1}=s_{\frac{n}{2} + 2}=\dots=s_n=c\)), а первая половина строки (то есть строка \(s_1s_2 \dots s_{\frac{n}{2}}\)) является \((c+1)\)-хорошей строкой.

Например: «aabc» является 'a'-хорошей, «ffgheeee» является 'e'-хорошей.

За один ход вы можете выбрать один индекс \(i\) от \(1\) до \(n\) и заменить \(s_i\) на любую строчную латинскую букву (любой символ от 'a' до 'z').

Ваша задача — найти минимальное количество ходов, необходимое, чтобы получить 'a'-хорошую строку из \(s\) (т.е. \(c\)-хорошую строку для \(c=\) 'a'). Гарантируется, что ответ всегда существует.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Еще один пример 'a'-хорошей строки является следующим. Например, рассмотрим строку \(s = \)«cdbbaaaa». Это 'a'-хорошая строка, потому что:

  • вторая половина строки («aaaa») состоит только из символов 'a';
  • первая половина строки («cdbb») — 'b'-хорошая строка, потому что:
    • вторая половина строки («bb») состоит только из символов 'b';
    • первая половина строки («cd») — 'c'-хорошая строка, потому что:
      • первая половина строки («c») состоит из единственного символа 'c';
      • вторая половина строки («d») — 'd'-хорошая строка.
Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 131~072\)) — длину \(s\). Гарантируется, что \(n = 2^k\) для некоторого целого числа \(k \ge 0\). Вторая строка набора тестовых данных содержит строку \(s\), состоящую из \(n\) строчных латинских букв.

Гарантируется, что сумма всех \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — наименьшее количество ходов, необходимое, чтобы получить 'a'-хорошую строку \(s\) (т.е. \(c\)-хорошую строку для \(c =\) 'a'). Гарантируется, что ответ существует.

A. Капитан Флинт и набор матросов

жадные алгоритмы математика Перебор теория чисел *800

Несмотря на грозную репутацию, Капитан Флинт всегда был миролюбив (по крайней мере это проявлялось в любви к животным). Сегодня Джон Флинт в поисках новой команды (исключительно для мирного плаванья) и ищет достойных матросов. Достойным считается тот матрос, кто успешно справится с задачей Капитана.

Недавно Флинт, неожиданно для себя, увлекся математикой и ввел ранее неизвестное понятие почти простого числа. Число \(x\) называется почти простым, если его можно представить в виде \(p \cdot q\), где \(1 < p < q\), а \(p\) и \(q\) — простые числа. Например, числа \(6\) и \(10\) — почти простые (так как \(2 \cdot 3 = 6\) и \(2 \cdot 5 = 10\)), a числа \(1\), \(3\), \(4\), \(16\), \(17\) и \(44\) таковыми не являются.

Флинт загадал Вам некоторое целое число \(n\), которое нужно представить в виде суммы \(4\) различных положительных целых чисел так, чтобы хотя бы \(3\) из них были почти простыми или сказать, что это невозможно.

Дядя Богдан с легкостью справился с задачей и попал в команду капитана Флинта. Удастся ли это Вам?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Далее в \(t\) строках заданы сами наборы — по одному в строке. Единственная строка каждого набора содержит одно целое число \(n\) \((1 \le n \le 2 \cdot 10^5)\) — число загаданное Флинтом.

Выходные данные

Для каждого набора входных данных выведите:

  • YES и \(4\) различных целых положительных числа таких, что хотя бы \(3\) из них почти простые и их сумма в точности равна \(n\) (если ответов несколько, то выведите любой из них);
  • NO если невозможно представить \(n\) в виде суммы \(4\) различных положительных целых чисел так, чтобы хотя бы \(3\) из них были почти простыми.
Буквы в словах YES и NO можно выводить в любом регистре.
Примечание

В первом и втором наборах входных данных, можно показать, что не существует четырех различных целых положительных чисел таких, что хотя бы три из них почти простые.

В третьем наборе, \(n=31=2 \cdot 7 + 2 \cdot 5 + 2 \cdot 3 + 1\): числа \(14\), \(10\), \(6\) — почти простые.

В четвертом наборе, \(n=36=5 + 2 \cdot 3 + 2 \cdot 5 + 3 \cdot 5\): числа \(6\), \(10\), \(15\) — почти простые.

В пятом наборе, \(n=44=2 \cdot 3 + 7 + 2 \cdot 5 + 3 \cdot 7\): числа \(6\), \(10\), \(21\) — почти простые.

В шестом наборе, \(n=100=2 + 2 \cdot 5 + 3 \cdot 11 + 5 \cdot 11\): числа \(10\), \(33\), \(55\) — почти простые.

В седьмом наборе, \(n=258=2 \cdot 5 + 3 \cdot 7 + 13 \cdot 17 + 2 \cdot 3\): числа \(10\), \(21\), \(221\), \(6\) — почти простые.

B. Прогулка по массиву

дп жадные алгоритмы Перебор *1600

Задан массив \(a_1, a_2, \dots, a_n\), состоящий из \(n\) положительных целых чисел.

Изначально вы находитесь в позиции \(1\), и ваше количество очков равно \(a_1\). Можно совершать два типа шагов:

  1. шаг вправо — перейти из текущей позиции \(x\) в \(x+1\) и получить \(a_{x+1}\) очков. Этот шаг можно делать только если \(x<n\).
  2. шаг влево — перейти из текущей позиции \(x\) в \(x-1\) и получить \(a_{x-1}\) очков. Этот шаг можно делать только если \(x>1\). Также нельзя совершать два или более шагов влево подряд.

Вам требуется совершить ровно \(k\) шагов. Не более \(z\) из них могут быть шагами влево.

Какое наибольшее количество очков можно получить?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны три целых числа \(n, k\) и \(z\) (\(2 \le n \le 10^5\), \(1 \le k \le n - 1\), \(0 \le z \le min(5, k)\)) — количество элементов в массиве, суммарное количество шагов, которое вы должны сделать, и максимальное количество шагов влево, которое вы можете сделать.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^4\)) — данный массив.

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Выведите \(t\) целых чисел — для каждого набора входных данных выведите наибольшее количество очков, которое можно получить, если требуется сделать ровно \(k\) шагов, не более \(z\) из них могут быть шагами влево и не должно быть двух шагов влево подряд.

Примечание

В первом наборе входных данных не разрешается ходить влево вообще. Поэтому делаем четыре шага вправо и получаем \(a_1 + a_2 + a_3 + a_4 + a_5\) очков.

Во втором наборе входных данных можно сделать один ход влево. Тогда сделаем такие шаги: вправо, вправо, влево, вправо. Получится \(a_1 + a_2 + a_3 + a_2 + a_3\) очков.

В третьем наборе входных данных можно ходить влево до четырех раз, но это все равно не оптимально, можем просто сделать четыре шага вправо и получить \(a_1 + a_2 + a_3 + a_4 + a_5\) очков.

C. Хорошая строка

дп жадные алгоритмы Перебор *1500

Назовем левым циклическим сдвигом некоторой строки \(t_1 t_2 t_3 \dots t_{n - 1} t_n\) следующую строку: \(t_2 t_3 \dots t_{n - 1} t_n t_1\).

Аналогично, назовем правым циклическим сдвигом строки \(t\) строку \(t_n t_1 t_2 t_3 \dots t_{n - 1}\).

Скажем, что строка \(t\) является хорошей, если ее левый циклический сдвиг равен правому циклическому сдвигу.

Вам дана строка \(s\), состоящая из цифр 09.

Какое минимальное количество символов необходимо удалить из строки \(s\), чтобы она стала хорошей?

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Следующие \(t\) строк содержат описание наборов входных данных. Первая и единственная строка каждого набора содержит строку \(s\) (\(2 \le |s| \le 2 \cdot 10^5\)). Каждый символ \(s_i\) является цифрой 09.

Гарантируется, что суммарная длина строк не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество символов, которое необходимо удалить из строки \(s\), чтобы она стала хорошей.

Примечание

В первом примере можно стереть любые \(3\) символа, например \(1\)-й, \(3\)-й и \(4\)-й. Вы получите строку 51, и это хорошая строка.

Во втором примере можно стереть все символы, кроме 0: оставшаяся строка 0000 — хорошая.

В третьем примере заданная строка \(s\) уже является хорошей.

D. Пересечения отрезков

жадные алгоритмы математика Перебор реализация *2100

Вам заданы два списка отрезков \([al_1, ar_1], [al_2, ar_2], \dots, [al_n, ar_n]\) и \([bl_1, br_1], [bl_2, br_2], \dots, [bl_n, br_n]\).

Первоначально, все отрезки \([al_i, ar_i]\) равны \([l_1, r_1]\) и все отрезки \([bl_i, br_i]\) равны \([l_2, r_2]\).

За один шаг вы можете выбрать один отрезок (либо из первого списка, либо из второго) и удлинить его на \(1\). Другими словами, предположим, вы выбрали отрезок \([x, y]\), тогда вы можете его превратить либо в \([x - 1, y]\), либо в \([x, y + 1]\).

Объявим суммарное пересечение \(I\) как сумму длин пересечений соответствующих пар отрезков, то есть \(\sum\limits_{i=1}^{n}{\text{intersection_length}([al_i, ar_i], [bl_i, br_i])}\). Пустое пересечение имеет длину \(0\), а длина отрезка \([x, y]\) равна \(y - x\).

Какое минимальное количество шагов необходимо выполнить, чтобы сделать \(I\) большим или равным \(k\)?

Входные данные

В первой строке задано единственное число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le k \le 10^9\)) — длина каждого из списков и минимально необходимое суммарное пересечение.

Во второй строке каждого набора заданы два целых числа \(l_1\) и \(r_1\) (\(1 \le l_1 \le r_1 \le 10^9\)) — отрезок, которому первоначально равны все \([al_i, ar_i]\).

В третьей строке каждого набора заданы два целых числа \(l_2\) и \(r_2\) (\(1 \le l_2 \le r_2 \le 10^9\)) — отрезок, которому первоначально равны все \([bl_i, br_i]\).

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) чисел — по одному на набор входных данных. Для каждого набора, выведите минимальное количество необходимых шагов, чтобы сделать \(I\) больше или равным \(k\).

Примечание

В первом наборе входных данных, мы можем достигнуть суммарного пересечения \(5\), используя, например, следующую стратегию:

  • превратим \([al_1, ar_1]\) из \([1, 2]\) в \([1, 4]\) за \(2\) шага;
  • превратим \([al_2, ar_2]\) из \([1, 2]\) в \([1, 3]\) за \(1\) шаг;
  • превратим \([bl_1, br_1]\) из \([3, 4]\) в \([1, 4]\) за \(2\) шага;
  • превратим \([bl_2, br_2]\) из \([3, 4]\) в \([1, 4]\) за \(2\) шага.
В результате, \(I = \text{intersection_length}([al_1, ar_1], [bl_1, br_1]) + \text{intersection_length}([al_2, ar_2], [bl_2, br_2]) + \\ + \text{intersection_length}([al_3, ar_3], [bl_3, br_3]) = 3 + 2 + 0 = 5\).

Во втором наборе, мы можем сделать \([al_1, ar_1] = [0, 1000000000]\) за \(1000000000\) шагов и \([bl_1, br_1] = [0, 1000000000]\) за \(1000000000\) шагов.

В третьем наборе, суммарное пересечение \(I\) уже равно \(10 > 3\), а потому, не нужно делать ни одного шага.

B. Начни с себя

жадные алгоритмы Перебор реализация *800

Рассмотрим конвейер, представляющий собой сетку, состоящую из \(n\) строк и \(m\) столбцов. Ячейка в \(i\)-й строке сверху и в \(j\)-м слева столбце обозначается как \((i,j)\).

Каждой ячейке, кроме \((n,m)\), назначено направление R (вправо) или D (вниз). Если ячейке \((i,j)\) назначено направление R, любой багаж в ней переместится в ячейку \((i,j+1)\). Аналогично, если ячейке \((i,j)\) назначено D, любой багаж в ней переместится в ячейку \((i+1,j)\). Если в любой момент времени багаж выходит за пределы сетки, он считается утерянным.

В ячейке \((n,m)\) есть стойка, где подбирается весь багаж. Конвейер называется работоспособным тогда и только тогда, когда любой багаж достигнет стойки, независимо от того, в какую ячейку он изначально помещен. Более формально, для каждой ячейки \((i,j)\) любой багаж, помещенный в эту ячейку, должен в итоге оказаться в ячейке \((n,m)\).

Может случиться такое, что это условие изначально не выполняется; вам, однако, разрешено изменять направления некоторых ячеек для обеспечения работоспособности конвейера. Пожалуйста, определите минимальное количество ячеек, направления в которых вы должны изменить.

Обратите внимание, что всегда можно сделать любой конвейер работоспособным, изменив направления набора ячеек.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит два целых числа \(n, m\) (\(1 \le n \le 100\), \(1 \le m \le 100\)) — количество строк и столбцов соответственно.

Каждая из следующих \(n\) строк содержит \(m\) символов. \(j\)-й символ в строке \(i\), \(a_{i,j}\), является начальным направлением ячейки \((i, j)\). Обратите внимание, что \(a_{n,m}=\) C.

Выходные данные

Для каждого случая выведите в новой строке минимальное количество ячеек, которое необходимо изменить, чтобы обеспечить работоспособность конвейера.

Примечание

В первом случае достаточно просто изменить направление \((2,3)\) на D.

Вы можете проверить работоспособность полученного конвейера. Например, если мы поместим багаж в \((2,2)\), он сначала переместится в \((3,2)\), а затем в \((3,3)\).

Во втором случае у нас нет другого выбора, кроме как изменить первые \(3\) ячейки с D на R, сделав сетку равной RRRC.

D. 505

битмаски дп жадные алгоритмы Конструктив Перебор реализация *2000

Бинарная матрица называется хорошей, если каждая квадратная подматрица c четной длиной стороны содержит нечетное число единиц.

Для данной бинарной матрицы \(a\), состоящей из \(n\) строк и \(m\) столбцов, определите минимальное количество ячеек, которые нужно изменить, чтобы сделать ее хорошей, или сообщите, что ее вообще нельзя сделать хорошей.

Все вышеприведенные термины имеют свои обычные значения  — обратитесь к разделу Примечания для их формальных определений.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq m \leq 10^6\) и \(n\cdot m \leq 10^6\)) — число строк и столбцов в \(a\) соответственно.

Каждая из следующих \(n\) строк содержит \(m\) символов, каждый из которых равен 0 или 1. Если \(j\)-й символ в \(i\)-й строке равен 1, то \(a_{i,j} = 1\). Аналогично, если \(j\)-й символ в \(i\)-й строке равен 0, то \(a_{i,j} = 0\)

Выходные данные

Выведите минимальное количество ячеек, которое нужно изменить, чтобы сделать \(a\) хорошей, или выведите \(-1\), если это вообще невозможно.

Примечание

В первом случае достаточно заменить \(a_{1,1}\) на \(0\) и \(a_{2,2}\) на \(1\).

Вы можете проверить, что нет никакой возможности сделать матрицу во втором случае хорошей.

Некоторые определения  —

  • Бинарная матрица  — это матрица, в которой каждый элемент равен \(1\) или \(0\).
  • Подматрица описывается \(4\) параметрами  — \(r_1\), \(r_2\), \(c_1\) и \(c_2\); здесь \(1 \leq r_1 \leq r_2 \leq n\) и \(1 \leq c_1 \leq c_2 \leq m\).
  • Эта подматрица содержит все элементы \(a_{i,j}\), которые удовлетворяют как \(r_1 \leq i \leq r_2\) так и \(c_1 \leq j \leq c_2\).
  • Подматрица называется квадратом четной длины, если\(r_2-r_1 = c_2-c_1\) и \(r_2-r_1+1\) делится на \(2\).

B. Boboniu ходит по графу

графы Перебор поиск в глубину и подобное хэши *2300

У Boboniu есть ориентированный граф с \(n\) вершинами и \(m\) ребрами.

Исходящая степень каждой вершины не превосходит \(k\).

У каждого ребра есть целочисленный вес от \(1\) до \(m\). Никакие два ребра не имеют одинаковый вес.

Boboniu любит ходить по графу придерживаясь определенных правил, которые задаются последовательностью \((c_1,c_2,\ldots,c_k)\). Если в текущий момент он стоит в вершине \(u\) с исходящей степени \(i\), тогда после этого он перейдет в вершину по ребру с \(c_i\)\((1\le c_i\le i)\) номером в отсортированном по весу порядке среди всех ребер исходящих из \(u\).

Boboniu попросил вас посчитать число таких последовательностей \((c_1,c_2,\ldots,c_k)\), что:

  • \(1\le c_i\le i\) для всех \(i\) (\(1\le i\le k\)).
  • Начав с любой вершины \(u\), возможно вернуться обратно в \(u\) за конечное время передвигаясь по графу по описанным правилам.
Входные данные

В первой строке записаны три целых числа \(n\), \(m\) и \(k\) (\(2\le n\le 2\cdot 10^5\), \(2\le m\le \min(2\cdot 10^5,n(n-1) )\), \(1\le k\le 9\)).

Каждая из следующих \(m\) строк содержит три целых числа \(u\), \(v\) и \(w\) \((1\le u,v\le n,u\ne v,1\le w\le m)\), описывающих ребро из \(u\) в \(v\) с весом \(w\). Гарантируется, что в графе нет петель и кратных ребер, и из каждой вершины исходит хотя бы одно ребро.

Гарантируется, что исходящая степень каждой вершины не превышает \(k\) и никакие два ребра не имеют одинаковый вес.

Выходные данные

Выведите одно целое число: количество последовательностей.

Примечание

В первом примере есть две последовательности: \((1,1,3)\) и \((1,2,3)\). Синие ребра обозначают \(c_i\)-е по весу ребра, по которым решил ходить Boboniu.

Для третьего примера есть только одна последовательность: \((1,2,2,2)\).

Исходящая степень вершины \(u\) это количество ребер исходящих из \(u\).

A. Boboniu нравится раскрашивать шары

математика Перебор *1000

Boboniu дал вам

  • \(r\) красных шаров,
  • \(g\) зеленых шаров,
  • \(b\) синих шаров,
  • \(w\) белых шаров.

Он разрешил вам применять следующую операцию сколько угодно раз:

  • Взять один красный шар, один зеленый шар и один синий шар и заменить цвет каждого из них на белый.

Вам нужно ответить, возможно ли расположить в ряд все шары, чтобы получить палиндром, после применения описанной операции несколько (возможно ноль) раз.

Входные данные

В первой строке записано одно целое число \(T\) (\(1\le T\le 100\)), описывающее количество наборов входных данных.

Для каждого из \(T\) наборов входных данных, в первой строке записаны четыре целых числа \(r\), \(g\), \(b\) и \(w\) (\(0\le r,g,b,w\le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите «Yes», если возможно расположить в ряд все шары, чтобы получить палиндром, после применения описанной операции несколько (возможно ноль) раз. Иначе, выведите «No».

Примечание

В первом примере вы не можете применить ни одной операции, и соответственно расположить все шары в палиндром тоже нельзя.

Во втором примере после применения одной операции количества шаров поменяются с \((8,1,9,3)\) на \((7,0,8,6)\), а далее один из возможных палиндромов может быть таким: «rrrwwwbbbbrbbbbwwwrrr».

Палиндром это слово, фраза, или последовательность которая читается одинаково. Например, «rggbwbggr», «b», «gg» — палиндромы, а «rgbb», «gbbgr» — нет.

C. Boboniu и битовые операции

битмаски дп жадные алгоритмы Перебор *1600

Boboniu нравятся битовые операции, он решил поиграть с вами в игру.

Boboniu дает вам две последовательности неотрицателных целых чисел \(a_1,a_2,\ldots,a_n\) and \(b_1,b_2,\ldots,b_m\).

Для каждого \(i\) (\(1\le i\le n\)), вам нужно выбрать \(j\) (\(1\le j\le m\)) и определить \(c_i=a_i\& b_j\), где \(\&\) обозначает операцию побитовое И. Обратите внимание, что вы можете выбрать одинаковые \(j\) для разных \(i\).

Найдите минимальное возможное \(c_1 | c_2 | \ldots | c_n\), где \(|\) обозначает операцию побитовое ИЛИ.

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1\le n,m\le 200\)).

Во второй строке записаны \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0\le a_i < 2^9\)).

В третьей строке записаны \(m\) целых чисел \(b_1,b_2,\ldots,b_m\) (\(0\le b_i < 2^9\)).

Выходные данные

Выведите одно целое число: минимальное возможное значение \(c_1 | c_2 | \ldots | c_n\).

Примечание

Для первого примера, рассмотрим \(c_1=a_1\& b_2=0\), \(c_2=a_2\& b_1=2\), \(c_3=a_3\& b_1=0\), \(c_4 = a_4\& b_1=0\). Следовательно, \(c_1 | c_2 | c_3 |c_4 =2\), и это минимальный возможный ответ.

B. Каменная игра

жадные алгоритмы игры Конструктив Перебор *1800

T играет в игру со своим другом HL.

Есть \(n\) кучек с камнями, в \(i\)-й из них исходно содержится \(a_i\) камней.

T и HL будут ходить чередуясь, и T ходит первым. В каждом ходу, игрок выбирает непустую кучу и удаляет из нее один камень. Однако, нельзя выбирать кучку, которая была выбрана на прошлом ходу (кучку которая была выбрана другим игроком, или если текущий ход это первый ход первого игрока, то можно выбрать любую кучу). Игрок, который не может выбрать кучу на своем ходу, проигрывает.

Считая, что оба игрока играют оптимально, для заданных стартовых конфигураций \(t\) игр, определите победителя.

Входные данные

В первой строке записано одно целое число \(t\) \((1 \le t \le 100)\) — количество игр. Далее следуют описания игр, описание каждой игры состоит из двух строк:

В первой строке записано одно целое число \(n\) \((1 \le n \le 100)\) — количество куч.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 100)\).

Выходные данные

Для каждой игры, выведите в отдельной строке имя победителя, «T» или «HL» (без кавычек).

Примечание

В первой игре, T убирает один камень из единственной кучи. После этого, несмотря на то, что в куче еще остался \(1\) камень, HL не можем сходить, из-за того что T использовал эту кучу на прошлом ходу. Таким образом, T побеждает.

B. Степенная последовательность

математика Перебор сортировки теория чисел *1500

Назовем последовательность положительных чисел \(a_0, a_1, ..., a_{n-1}\) степенной последовательностью, если найдется такое положительное целое число \(c\), что для всех \(0 \le i \le n-1\), \(a_i = c^i\).

Вам дана последовательность из \(n\) положительных чисел \(a_0, a_1, ..., a_{n-1}\), вам разрешается:

  • Переупорядочить последовательность (иначе говоря, выбрать перестановку \(p\) из \(\{0,1,...,n - 1\}\) и заменить \(a_i\) на \(a_{p_i}\)), и затем
  • Выполнить следующую операцию любое количество раз: выбрать индекс \(i\) и заменить \(a_i\) на \(a_i - 1\) или \(a_i + 1\) (иначе говоря, уменьшить или увеличить \(a_i\) на \(1\)) за стоимость \(1\).

Найдите минимальную стоимость, необходимую для превращения \(a_0, a_1, ..., a_{n-1}\) в степенную последовательность.

Входные данные

В первой строке записано одно целое число \(n\) (\(3 \le n \le 10^5\)).

Во второй строке записаны \(n\) целых чисел \(a_0, a_1, ..., a_{n-1}\) (\(1 \le a_i \le 10^9\)).

Выходные данные

Выведите минимальную стоимость, необходимую для превращения \(a_0, a_1, ..., a_{n-1}\) в степенную последовательность.

Примечание

В первом примере сначала можно переупорядочить \(\{1, 3, 2\}\) в \(\{1, 2, 3\}\), затем увеличить \(a_2\) до \(4\) за стоимость \(1\), чтобы получить степенную последовательность \(\{1, 2, 4\}\).

C. Лодочное соревнование

жадные алгоритмы Перебор *1200

Есть \(n\) людей, желающих принять участие в лодочном соревновании. Вес \(i\)-го участника равен \(w_i\). Принять участие могут только команды, состоящие из двух человек. Как организатор вы считаете честным допустить к соревнованию только команды с одинаковым суммарным весом.

Таким образом, для \(k\) команд \((a_1, b_1)\), \((a_2, b_2)\), \(\dots\), \((a_k, b_k)\), где \(a_i\) — вес первого участника \(i\)-й команды, а \(b_i\) — вес второго участника \(i\)-й команды, должно выполняться условие \(a_1 + b_1 = a_2 + b_2 = \dots = a_k + b_k = s\), где \(s\) — суммарный вес для каждой команды.

Ваша задача — выбрать такое число \(s\), что количество команд, которые могут быть созданы, максимально возможное. Обратите внимание: каждый участник может состоять не более чем в одной команде.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — количество участников. Вторая строка набора тестовых данных содержит \(n\) целых чисел \(w_1, w_2, \dots, w_n\) (\(1 \le w_i \le n\)), где \(w_i\) — вес \(i\)-го участника.

Выходные данные

Для каждого набора тестовых данных выведите одно целое число \(k\): максимальное число команд, которые могут быть составлены при суммарном весе участников в команде, равном \(s\), если выбирать \(s\) оптимально.

Примечание

В первом наборе тестовых данных примера мы можем достичь оптимального ответа для \(s=6\). Тогда первая лодка будет использоваться участниками \(1\) и \(5\), а вторая лодка — участниками \(2\) и \(4\) (индексы совпадают с весами).

Во втором наборе тестовых данных примера мы можем достичь оптимального ответа для \(s=12\). Тогда первые \(6\) участников смогут образовать \(3\) пары.

В третьем наборе тестовых данных примера мы можем достичь оптимального ответа для \(s=3\). Ответ равен \(4\), потому что у нас есть \(4\) участника с весом \(1\) и \(4\) участника с весом \(2\).

В четвертом наборе тестовых данных примера мы можем достичь оптимального ответа для \(s=4\) или \(s=6\).

В пятом наборе тестовых данных примера мы можем достичь оптимального ответа для \(s=3\). Заметьте, что участник с весом \(3\) не может использовать лодку, потому что для него в списке нет подходящей пары.

C. Четыре отрезка

геометрия Конструктив математика Перебор реализация *1700

Несколько месяцев спустя Лёня всё-таки получил творение брата Вани по почте. И теперь Лёня решил сам похвастаться чем-нибудь перед братом. Немного подумав он понял, что у него нет готовых творений и решил написать программу распознавания прямоугольников. По его замыслу программа по четырём заданным отрезкам определяет образуют ли эти отрезки прямоугольник положительной площади со сторонами параллельными осям координат. Так как Лёня плохо учится в школе и сам не может написать такую программу, он попросил вас помочь ему в этом.

Входные данные

Входные данные состоят из четырёх строк. Каждая строка состоит из четырёх целых чисел x1, y1, x2, y2 ( - 109 ≤ x1, y1, x2, y2 ≤ 109) координаты начала и конца отрезка. Заданные отрезки могут вырождаться в точки.

Выходные данные

Выведите слово «YES» если данные четыре отрезка образуют искомый прямоугольник и «NO» в противном случае.

B. Новогодние открытки

жадные алгоритмы Перебор реализация *1800

В то время как хозяйственный Геральд накрывает стол, Александр закончил очередной пост на Codeforces и начинает отвечать на новогодние поздравления друзей. У Александра n друзей, и каждый из них отправляет Александру ровно одну электронную открытку. Будем нумеровать друзей числами от 1 до n в том порядке, в котором они отправляют открытки. Для открыток введем ту же самую нумерацию, то есть получается, что i-ый друг отправил Александру открытку с номером i.

Александр тоже отправляет друзьям открытки, причем чтобы не искать открытки в Интернете, он просто использует ранее присланные ему (иногда, правда, дорисовывая необходимые элементы). Изначально у Александра нет открыток. Александр всегда придерживается двух правил:

  1. Он никогда не отправляет другу открытку, присланную этим же другом.
  2. Среди остальных открыток, имеющихся у него в данный момент, Александр всегда выбирает ту, которая больше всех нравится ему самому.

Каждому другу Александр планирует отправить ровно по одной открытке. Разумеется, Александр может отправлять одну и ту же открытку несколько раз.

У Александра и у каждого из друзей есть список предпочтений, представляющий собой перестановку чисел от 1 до n. Первое число в списке — это номер самой любимой открытки, второе — следующей за ней, и так далее, последний номер — наименее предпочтительная открытка.

Ваша задача — определить, в какие моменты времени Александр должен отправлять открытки своим друзьям, чтобы порадовать каждого из них как можно больше. Иначе говоря, чтобы в результате применения двух Сашиных правил, каждый друг получил как можно более предпочтительную для него открытку.

Обратите внимание, что Александр не обладает свободой выбора в том, какую открытку отправить, а всегда строго придерживается двух правил.

Входные данные

В первой строке задано целое число n (2 ≤ n ≤ 300) — количество друзей Александра, равное количеству открыток. Следующие n строк содержат списки предпочтений друзей. Каждый список состоит из n различных целых чисел от 1 до n. Последняя строка содержит список предпочтений самого Александра в том же формате.

Выходные данные

Выведите n чисел, разделенных пробелами: i-ое число должно являться номером друга, после получения открытки от которого Александр должен отправить открытку i-ому другу. Если решений несколько, выведите любое.

Примечание

В примере алгоритм действий Александра и его друзей таков:

  1. Александр получает открытку 1 от первого друга.
  2. Александр отправляет полученную открытку (на данный момент она у него одна, а значит, самая предпочтительная для него) друзьям с номерами 2 и 3.
  3. Александр получает открытку 2 от второго друга, теперь у него две открытки — 1 и 2.
  4. Александр отправляет открытку первому другу. Несмотря на то, что открытка 1 Александру нравится больше, он отправляет открытку 2, потому что не может отправлять другу открытку, присланную им же.
  5. Александр получает открытку 3 от третьего друга.
  6. Александр получает открытку 4 от четвертого друга.
  7. Среди имеющихся у Александра открыток 1, 2, 3, 4 самая любимая его открытка — 3, и он отправляет ее четвертому другу.

Заметим, что можно делать отправку открытки сразу нескольким друзьям (в данном случае второму и третьему). Четвертому другу можно отправить открытку номер 3 как после получения третьей открытки, так и после получения четвертой открытки (оба варианта являются правильными).

B. Главный герой RPG

жадные алгоритмы математика Перебор *1700

Вы играете в одну RPG из 2010-х. Вы планируете поднять свой уровень кузнечного дела, а потому вам нужно как можно больше ресурсов. Как же получить эти ресурсы? Конечно, украсть.

Вы решили ограбить городского кузнеца и взяли собой напарника. Вы можете переносить не более \(p\) единиц, а ваш напарник — не более \(f\) единиц.

В кузнечной лавке вы нашли \(cnt_s\) мечей и \(cnt_w\) боевых топоров. Каждый меч весит \(s\) единиц, а каждый топор — \(w\) единиц. Вам не важно, что брать, потому что и меч и топор переплавляются в один стальной слиток.

Какое максимальное количество оружия (мечей и топоров) вы со своим напарником сможете унести из лавки?

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора данных заданы два целых числа \(p\) и \(f\) (\(1 \le p, f \le 10^9\)) — ваша грузоподъемность и грузоподъемность вашего напарника.

Во второй строке каждого набора заданы два целых числа \(cnt_s\) и \(cnt_w\) (\(1 \le cnt_s, cnt_w \le 2 \cdot 10^5\)) — количество мечей и боевых топоров в кузнечной лавке.

В третьей строке каждого набора заданы два целых числа \(s\) и \(w\) (\(1 \le s, w \le 10^9\)) — веса каждого меча и каждого топора.

Гарантируется, что суммарное количество мечей и суммарное количество топоров во всех наборах входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное количество оружия (мечей и топоров), которое вы со своим напарником сможете унести.

Примечание

В первом наборе входных данных:

  • вы можете взять \(3\) меча и \(3\) боевых топора: \(3 \cdot 5 + 3 \cdot 6 = 33 \le 33\),
  • а ваш напарник — \(3\) меча и \(2\) топора: \(3 \cdot 5 + 2 \cdot 6 = 27 \le 27\).
\(3 + 3 + 3 + 2 = 11\) единиц оружия в сумме.

Во втором наборе, вы можете взять все доступное оружие даже без помощи напарника, так как \(5 \cdot 10 + 5 \cdot 10 \le 100\).

В третьем наборе, вы не можете взять ничего, но ваш напарник может взять \(3\) топора: \(3 \cdot 5 \le 19\).

C. Восстановление бинарной строки

2-sat жадные алгоритмы Конструктив Перебор *1500

Рассмотрим следующий процесс. У вас есть бинарная строка (строка, состоящая только из символов 0 и 1) \(w\) длины \(n\) и число \(x\). Вы создаете новую бинарную строку \(s\) длины \(n\); \(i\)-й символ новой строки \(s\) выбирается следующим образом:

  • если символ \(w_{i-x}\) существует и равен 1, то \(s_i\) равно 1 (более формально, если \(i > x\) и \(w_{i-x} = \) 1, то \(s_i = \) 1);
  • если символ \(w_{i+x}\) существует и равен 1, то \(s_i\) равно 1 (более формально, если \(i + x \le n\) и \(w_{i+x} = \) 1, то \(s_i = \) 1);
  • если оба описанных выше условия неверны, то \(s_i\) равно 0.

Вам заданы число \(x\) и строка \(s\). Восстановите изначальную строку \(w\).

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных содержит две строки. Первая строка содержит строку \(s\) (\(2 \le |s| \le 10^5\), каждый символ строки \(s\) равен либо 0, либо 1). Вторая строка содержит целое число \(x\) (\(1 \le x \le |s| - 1\)).

Суммарная длина всех длин строк \(s\) во входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите ответ:

  • если не существует строки \(w\), которая может породить строку \(s\), то выведите \(-1\);
  • иначе, выведите бинарную строку \(w\) состоящую из \(|s|\) символов. Если возможных ответов несколько — вы можете вывести любой из них.

D. Зигзаги

Комбинаторика математика Перебор Структуры данных *1900

Вам задан массив \(a_1, a_2 \dots a_n\). Посчитайте количество таких четверок \((i, j, k, l)\), что:

  • \(1 \le i < j < k < l \le n\);
  • \(a_i = a_k\) и \(a_j = a_l\);
Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано единственное целое число \(n\) (\(4 \le n \le 3000\)) — размер массива \(a\).

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — сам массив \(a\).

Гарантируется, что сумма \(n\) в одном тесте не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных, выведите количество описанных четверок.

Примечание

В первом наборе входных данных, каждая четверка индексов \(i < j < k < l\) подходит, а потому ответ — это количество четверок.

Во втором наборе, есть только \(2\) подходящих четверки:

  • \((1, 2, 4, 6)\): \(a_1 = a_4\) и \(a_2 = a_6\);
  • \((1, 3, 4, 6)\): \(a_1 = a_4\) и \(a_3 = a_6\).

F. x-простые подстроки

дп Перебор поиск в глубину и подобное Строки строковые суфф. структуры *2800

Дано целое число \(x\) и строка \(s\), состоящая из цифр от \(1\) до \(9\) включительно.

Подстрокой строки называется последовательная подпоследовательность этой строки.

Пусть \(f(l, r)\) будет равно сумме цифр в подстроке \(s[l..r]\).

Назовем подстроку \(s[l_1..r_1]\) \(x\)-простой, если

  • \(f(l_1, r_1) = x\);
  • не существует таких значений \(l_2, r_2\), что
    • \(l_1 \le l_2 \le r_2 \le r_1\);
    • \(f(l_2, r_2) \neq x\);
    • \(x\) делится на \(f(l_2, r_2)\).

Разрешено удалять любые символы из строки. Если вы удаляете символ, то две полученные части строки склеиваются, не меняя порядок.

Какое минимальное количество символов надо удалить из строки, чтобы она не содержала \(x\)-простых подстрок? Если \(x\)-простых подстрок нет в данной строке \(s\), то выведите \(0\).

Входные данные

В первой строке записана строка \(s\) (\(1 \le |s| \le 1000\)). \(s\) содержит только цифры от \(1\) до \(9\) включительно.

Во второй строке записано одно целое число \(x\) (\(1 \le x \le 20\)).

Выходные данные

Выведите одно целое число — минимальное количество символов, которые надо удалить из строки, чтобы она не содержала \(x\)-простых подстрок? Если \(x\)-простых подстрок нет в данной строке \(s\), то выведите \(0\).

Примечание

В первом примере в строке две \(8\)-простых подстроки «8» и «53». Можно удалить данные символы, чтобы избавиться от обеих: «116285317». Полученная строка «1162317» не содержит \(8\)-простых подстрок. Также можно удалить такие символы: «116285317».

Во втором примере необходимо просто удалить обе единицы.

В третьем примере нет \(13\)-простых подстрок. В нем вообще нет подстрок с суммой цифр равной \(13\).

В четвертом примере в строке не должно быть ни «34», ни «43». Поэтому необходимо удалить либо все тройки, либо все четверки. Их по \(5\) штук, поэтому можно удалить любые из них.

G. Наемники

битмаски дп Комбинаторика математика Перебор снм *2600

Поликарп играет в (очередную) стратегическую компьютерную игру. В этой игре он управляет армией наемников.

Поликарп хочет собрать свою армию для выполнения задания. Для найма доступны \(n\) наемников, и армия Поликарпа должна состоять из некоторого подмножества множества доступных наемников.

\(i\)-го наемника можно выбрать только в том случае, если итоговое количество выбранных наемников не менее \(l_i\) (иначе этот наемник считает задание слишком опасным) и не более \(r_i\) (он не хочет делить добычу со слишком большим количеством других наемников). Кроме того, \(m\) пар наемников ненавидят друг друга, и из каждой такой пары можно взять на задание не более одного наемника.

Сколько непустых подмножеств наемников Поликарп должен рассмотреть? Другими словами, посчитайте количество подмножеств наемников, которые не содержат пар наемников, ненавидящих друг друга, и размер которых принадлежит отрезку \([l_i, r_i]\) для каждого наемника из подмножества.

Ответ может быть очень большим, поэтому посчитайте его по модулю \(998244353\).

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n \le 3 \cdot 10^5\), \(0 \le m \le \min(20, \dfrac{n(n-1)}{2})\)) — количество наемников и количество пар наемников, ненавидящих друг друга, соответственно.

Далее следуют \(n\) строк, в \(i\)-й из которых заданы два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)).

Далее следуют \(m\) строк, в \(i\)-й из которых заданы два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i < b_i \le n\)), обозначающих, что наемники \(a_i\) и \(b_i\) ненавидят друг друга. Все заданные пары различны.

Выходные данные

Выведите одно целое число — количество подмножеств, удовлетворяющих условию задачи, взятое по модулю \(998244353\).

B. Максимальное произведение

дп жадные алгоритмы Перебор реализация сортировки *1200

Вам дан массив целых чисел \(a_1,a_2,\ldots,a_n\). Найдите максимум \(a_ia_ja_ka_la_t\) по всем пятеркам индексов \((i, j, k, l, t)\) (\(i<j<k<l<t\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1\le t\le 2 \cdot 10^4\)) — количество наборов входных данных. Описание наборов входных данных следует.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(5\le n\le 10^5\)) — размер массива.

Во второй строке описания каждого набора входных данных находится \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-3\times 10^3\le a_i\le 3\times 10^3\)) — данный массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — ответ на задачу.

Примечание

В первом наборе входных данных выбор \(a_1,a_2,a_3,a_4,a_5\) является наилучшим: \((-1)\cdot (-2) \cdot (-3)\cdot (-4)\cdot (-5)=-120\).

Во втором наборе входных данных выбор \(a_1,a_2,a_3,a_5,a_6\) является наилучшим: \((-1)\cdot (-2) \cdot (-3)\cdot 2\cdot (-1)=12\).

В третьем наборе входных данных выбор \(a_1,a_2,a_3,a_4,a_5\) является наилучшим: \((-1)\cdot 0\cdot 0\cdot 0\cdot (-1)=0\).

В четвертом наборе входных данных выбор \(a_1,a_2,a_3,a_4,a_6\) является наилучшим: \((-9)\cdot (-7) \cdot (-5)\cdot (-3)\cdot 1=945\).

B. Большой Вова

жадные алгоритмы математика Перебор теория чисел *1300

Александр — известный в узких кругах программист. Однажды он решил наконец-то выйти на улицу и активно провести время с мячом, но первым же ударом он оставил вмятину на новом Rolls-Royce богатого и влиятельного предпринимателя Большого Вовы. Бизнесмен недавно открыл интернет-магазин на популярной торговой площадке «Змей-Горыныч», и предлагает Саше устроиться на работу: если он продемонстрирует свои способности, решив задачу, то получит должность специалиста по безопасности, а в противном случае — должность курьера.

Вам даны \(n\) целых положительных чисел \(a_1, a_2, \dots, a_n\). Используя каждое из данных чисел ровно 1 раз, Вы должны составить такую последовательность \(b_1, b_2, \dots, b_n\), что последовательность \(c_1, c_2, \dots, c_n\) лексикографически максимальна, где \(c_i=GCD(b_1,\dots,b_i)\) — наибольший общий делитель первых \(i\) чисел последовательности \(b\).

Александр сильно испугался условия этой несложной задачи, и поэтому он просит у Вас помощи.

Последовательность \(a\) лексикографически меньше последовательности \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в последовательности \(a\) элемент меньше, чем соответствующий элемент в \(b\).
Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^3\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора данных содержит одно целое число \(n\) (\(1 \le n \le 10^3\)) — длину последовательности \(a\).

Вторая строка каждого набора данных содержит \(n\) целых чисел \(a_1,\dots,a_n\) (\(1 \le a_i \le 10^3\)) — последовательность \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^3\).

Выходные данные

На каждый набор входных данных выведите ответ в отдельной строке — искомую последовательность \(b\). Если существует несколько подходящих последовательностей, выведите любую из них.

Примечание

В первом наборе тестовых данных примера есть всего две возможные перестановки \(b\): \([2, 5]\) и \([5, 2]\). В первом случае \(c=[2, 1]\), во втором \(c=[5, 1]\).

В третьем наборе тестовых данных примера число \(9\) должно идти первым в \(b\), а \(GCD(9, 3)=3\), \(GCD(9, 8)=1\), поэтому вторым в \(b\) идёт число \(3\).

В седьмом наборе тестовых данных примера первые четыре числа попарно имеют общий делитель (степень двойки), однако ни одно из них не может идти первым в оптимальной перестановке \(b\).

D. Прожекторы

Бинарный поиск дп Перебор реализация сортировки Структуры данных *2000

Есть \(n\) грабителей в координатах \((a_1, b_1)\), \((a_2, b_2)\), ..., \((a_n, b_n)\) и \(m\) прожекторов в координатах \((c_1, d_1)\), \((c_2, d_2)\), ..., \((c_m, d_m)\).

За один ход вы можете подвинуть всех грабителей направо (увеличить \(a_i\) всех грабителей на единицу) или подвинуть всех грабителей вверх (увеличить \(b_i\) всех грабителей на единицу). Обратите внимание, что вы должны либо увеличить все \(a_i\), либо все \(b_i\), вы не можете увеличить \(a_i\) некоторых грабителей и \(b_i\) некоторых других грабителей за одну операцию.

Прожектор \(j\) освещает грабителя \(i\), если \(a_i \leq c_j\) и \(b_i \leq d_j\).

Конфигурация грабителей называется безопасной, если ни один прожектор не освещает ни одного грабителя (то есть нет такой пары \(i,j\), что прожектор \(j\) освещает грабителя \(i\)).

Какое минимальное количество ходов нужно сделать, чтобы грабители оказались в безопасной конфигурации?

Входные данные

В первой строке находится два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 2000\)): количество грабителей и количество прожекторов.

Каждая из следующих \(n\) строк содержит два целых числа \(a_i\), \(b_i\) (\(0 \leq a_i, b_i \leq 10^6\)), координаты грабителей.

Каждая из следующих \(m\) строк содержит два целых числа \(c_i\), \(d_i\) (\(0 \leq c_i, d_i \leq 10^6\)), координаты прожекторов.

Выходные данные

Выведите единственное целое число: минимальное количество ходов, необходимое, чтобы грабители оказались в безопасной конфигурации.

Примечание

В первом тесте вы можете подвинуть всех грабителей направо три раза. После этого будет один грабитель в координатах \((3, 0)\).

Конфигурация грабителей будет безопасной, потому что единственный прожектор не освещает грабителя, так как он в координатах \((2, 3)\), а \(3 > 2\).

Во втором тесте вы можете подвинуть всех грабителей направо два раза и вверх два раза. После этого грабители будут в координатах \((3, 8)\), \((8, 3)\).

Легко увидеть, что такая конфигурация безопасна.

Можно доказать, что невозможно получить безопасную конфигурацию, используя не больше, чем \(3\) хода.

B. Минимальное произведение

жадные алгоритмы математика Перебор *1100

Вам даны четыре целых числа \(a\), \(b\), \(x\) и \(y\). Изначально \(a \ge x\) и \(b \ge y\). Вы можете применить следующую операцию не более \(n\) раз:

  • Выбрать \(a\) или \(b\) и уменьшить это число на единицу. Однако в результате этой операции значение \(a\) не может стать меньше \(x\), а значение \(b\) не может стать меньше \(y\).

Ваша задача — найти минимальное возможное произведение \(a\) и \(b\) (\(a \cdot b\)), которое можно получить, применив данную операцию не более \(n\) раз.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит пять целых чисел \(a\), \(b\), \(x\), \(y\) и \(n\) (\(1 \le a, b, x, y, n \le 10^9\)). Дополнительное ограничение на входные данные: всегда справедливы неравенства \(a \ge x\) и \(b \ge y\).

Выходные данные

Для каждого набора тестовых данных выведите число: минимальное возможное произведение \(a\) и \(b\) (\(a \cdot b\)), которое можно получить, применив данную операцию не более \(n\) раз.

Примечание

В первом наборе тестовых данных примера нужно уменьшить \(b\) три раза и получить \(10 \cdot 7 = 70\).

Во втором наборе тестовых данных примера нужно уменьшить \(a\) один раз, \(b\) один раз и получить \(11 \cdot 7 = 77\).

В шестом наборе тестовых данных примера нужно уменьшить \(a\) пять раз и получить \(5 \cdot 11 = 55\).

В седьмом наборе тестовых данных примера нужно уменьшить \(b\) десять раз и получить \(10 \cdot 1 = 10\).

C. Ещё одно восстановление массива

математика Перебор теория чисел *1200

У нас есть секретный массив. Вы не знаете этот массив, и вам нужно его восстановить. Однако, вам известны некоторые факты об этом массиве:

  • Массив состоит из \(n\) различных положительных (больше \(0\)) целых чисел.
  • Массив содержит два элемента \(x\) и \(y\) (вам известны эти элементы) такие, что \(x < y\).
  • Если отсортировать массив по возрастанию (таким образом, что \(a_1 < a_2 < \ldots < a_n\)), то разности между всеми соседними (последовательными) элементами равны (то есть \(a_2 - a_1 = a_3 - a_2 = \ldots = a_n - a_{n-1})\).

Можно доказать, что такой массив всегда существует при ограничениях, заданных ниже.

Среди всех возможных массивов, удовлетворяющих данным условиям, мы просим восстановить массив, имеющий минимально возможный максимальный элемент. Другими словами, необходимо минимизировать \(\max(a_1, a_2, \dots, a_n)\).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит три целых числа \(n\), \(x\) и \(y\) (\(2 \le n \le 50\); \(1 \le x < y \le 50\)) — длину массива и два элемента, которые представлены в массиве, соответственно.

Выходные данные

Для каждого набора тестовых данных выведите ответ на него: \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\)\(i\)-й элемент загаданного массива. Если существует несколько подходящих ответов, вы можете выбрать любой (это также означает, что порядок элементов не имеет значения).

Можно доказать, что такой массив всегда существует при заданных ограничениях.

B. Справедливые числа

Перебор теория чисел *1000

Назовём натуральное число справедливым, если оно делится на каждую из своих ненулевых цифр. Например, число \(102\) справедливое (так как оно делится и на \(1\), и на \(2\)), а число \(282\) — нет, потому что не делится на \(8\). По данному \(n\) найдите минимальное \(x\), такое что \(n \leq x\) и \(x\) — справедливое.

Входные данные

В первой строке содержится \(t\) — количество тестовых случаев (\(1 \leq t \leq 10^3\)). В каждой из следующих \(t\) строк по одному целому числу \(n\) (\(1 \leq n \leq 10^{18}\)).

Выходные данные

Для каждого из \(t\) тестовых случаев в новой строке выведите наименьшее справедливое число, не меньшее \(n\).

Примечание

Пояснения к некоторым тестовым случаям:

  • В первом тестовом случае число \(1\) само по себе является справедливым.
  • Во втором тестовом случае число \(288\) — справедливое (делится и на \(2\), и на \(8\)). Ни одно число из отрезка \([282, 287]\) не является справедливым, потому что, например, не делится на \(8\).

D. Грайм Зоопарк

жадные алгоритмы Перебор реализация Строки *2100

Сейчас рэп ХХОСа представляет из себя строку из нулей, единиц и знаков вопроса. К сожалению, хейтеры не дремлют. За каждое вхождение подпоследовательности 01 в рэп ХХОСа хейтеры напишут \(x\) гневных комментариев, а за каждое вхождение подпоследовательности 10 будет написано \(y\) гневных комментариев. Вы должны заменить каждый знак вопроса на 0 либо 1, чтобы минимизировать число гневных комментариев, которые получит ХХОС.

Подпоследовательностью строки \(a\) называется строка \(b\), которая может получиться в результате удаления нескольких символов из строки \(a\). Два вхождения подпоследовательности считаются разными, если различаются множества позиций оставленных символов.

Входные данные

В первой строке записан рэп ХХОСа — строка \(s\) (\(1 \le |s| \leq 10^5\)). Во второй строке даны два целых числа \(x\) и \(y\) — количество гневных комментариев, которые ХХОС получит за каждую подпоследовательность 01 и 10, соответственно (\(0 \leq x, y \leq 10^6\)).

Выходные данные

В единственной строке выведите минимальное число гневных комментариев, которые может получить ХХОС.

Примечание

В первом примере одним из оптимальных вариантов замены является 001. Тогда в строке будет \(2\) подпоследовательности 01 и \(0\) подпоследовательностей 10. Суммарное количество гневных комментариев равно \(2 \cdot 2 + 0 \cdot 3 = 4\).

Во втором примере одним из оптимальных вариантов замены является 11111. Тогда в строке будет \(0\) подпоследовательностей 01 и \(0\) подпоследовательностей 10. Суммарное количество гневных комментариев равно \(0 \cdot 13 + 0 \cdot 37 = 0\).

В третьем примере одним из оптимальных вариантов замены является 1100. Тогда в строке будет \(0\) подпоследовательностей 01 и \(4\) подпоследовательности 10. Суммарное количество гневных комментариев равно \(0 \cdot 239 + 4 \cdot 7 = 28\).

В четвёртом примере одним из оптимальных вариантов замены является 01101001. Тогда в строке будет \(8\) подпоследовательностей 01 и \(8\) подпоследовательностей 10. Суммарное количество гневных комментариев равно \(8 \cdot 5 + 8 \cdot 7 = 96\).

C. Простота исполнения

Бинарный поиск дп Перебор реализация сортировки *1900

После боя с Шикамару Таюя решила, что ее флейта слишком предсказуемая, и поменяла ее на гитару. У гитары Таюи \(6\) струн и бесконечное количество ладов, пронумерованных с \(1\). Если зажать лад номер \(j\) на \(i\)-й струне, то получится нота \(a_{i} + j\).

Таюя хочет сыграть мелодию из \(n\) нот. Ноты можно сыграть, используя различные комбинации струны и лада. Простота исполнения зависит от разности максимального и минимального номера используемых ладов. Чем эта величина меньше, тем проще исполнить технику. Требуется определить минимальную возможную разность.

Например, если \(a = [1, 1, 2, 2, 3, 3]\), а последовательность нот — \(4, 11, 11, 12, 12, 13, 13\) (что соответствует второму примеру), то можно сыграть первую ноту на первой струне, а все остальные ноты на шестой струне. Тогда максимальный лад будет \(10\), минимальный \(3\), и разница составит \(10 - 3 = 7\), как показано на рисунке.

Входные данные

В первой строке через пробел заданы \(6\) чисел \(a_{1}\), \(a_{2}\), ..., \(a_{6}\) (\(1 \leq a_{i} \leq 10^{9}\)) — описания струн гитары Таюи.

Во второй строке задано число \(n\) (\(1 \leq n \leq 100\,000\)) — количество нот, которое хочет сыграть Таюя.

В следующей строке через пробел заданы \(n\) чисел \(b_{1}\), \(b_{2}\), ..., \(b_{n}\) (\(1 \leq b_{i} \leq 10^{9}\)) — описание нот. Гарантируется, что \(b_i > a_j\) для всех \(1\leq i\leq n\) и \(1\leq j\leq 6\). Иными словами, каждую ноту можно сыграть на любой струне.

Выходные данные

Необходимо вывести минимальную возможную разность номеров используемых ладов.

Примечание

В первом примере оптимальным будет сыграть первую ноту на первой струне, вторую ноту на второй струне, третью ноту на шестой струне, четвертую ноту на четвертой струне, пятую ноту на пятой струне, шестую ноту на третьей струне. Тогда для исполнения каждой ноты будет использоваться лад \(100\), а разница составит \(100 - 100 = 0\).

Во втором примере оптимальным будет, например, сыграть вторую ноту на первой струне, а все остальные ноты на шестой струне. Тогда максимальный лад будет \(10\), минимальный \(3\), и разница составит \(10 - 3 = 7\).

A. Побег из тюрьмы

математика Перебор *800

Некоторая тюрьма может быть представлена в виде прямоугольной таблицы с \(n\) строками и \(m\) столбцами, каждая клетка которой — камера. Таким образом, всего есть \(n \cdot m\) камер. В тюрьме \(n \cdot m\) заключенных, по одному в каждой камере. Обозначим клетку-камеру в \(i\)-й строке и в \(j\)-м столбце как \((i, j)\).

В клетке \((r, c)\) заключенные прорыли тоннель, который можно использовать для побега! Чтобы не попасться, они будут убегать ночью.

В начале ночи каждый заключенный находится в своей клетке. Когда наступает ночь, они могут начать двигаться в соседние клетки. Формально, за одну секунду заключенный, находящийся в клетке \((i, j)\), может переместиться в любую из клеток \(( i - 1 , j )\) , \(( i + 1 , j )\) , \(( i , j - 1 )\) или \(( i , j + 1 )\), если они находятся на территории тюрьмы. Он также может остаться в клетке \((i, j)\).

Заключенные хотят знать минимальное необходимое время для того, чтобы все они смогли собраться в клетке \(( r , c )\). Обратите внимание, что в любой клетке одновременно могут находиться сколько угодно заключенных.

Входные данные

Первая строка содержит одно целое число \(t\) \((1 \le t \le 10^4)\) — количество тестовых случаев.

Каждая из следующих \(t\) строк содержит четыре целых числа \(n\), \(m\), \(r\), \(c\) (\(1 \le r \le n \le 10^9\), \(1 \le c \le m \le 10^9\)).

Выходные данные

Выведите \(t\) строк — ответы для каждого тестового случая.

B. Перекраска улицы

жадные алгоритмы Перебор Перебор *1100

На некоторой улице построены \(n\) домов, по порядку пронумерованных от \(1\) до \(n\). Дом номер \(i\) изначально покрашен в цвет \(c_i\). Улица называется красивой, если все дома на ней покрашены в один и тот же цвет. Маляр Том — ответственный за перекраску улицы так, чтобы она стала красивой. Скорость работы Тома определяется целым числом \(k\).

За один день Том может перекрасить некоторое количество домов, выполнив два следующих шага:

  1. Сначала он выбирает два целых числа \(l\) и \(r\) так, что \( 1 \le l \le r \le n \) и \( r - l + 1 = k \).
  2. Затем для всех домов \(i\) таких, что \(l \le i \le r\), он может либо перекрасить этот дом в любой цвет на свой выбор, либо пропустить и не перекрашивать этот дом.

Обратите внимание, что в один и тот же день Том может перекрашивать дома в разные цвета.

Том хочет знать минимальное количество дней, необходимое для того, чтобы сделать улицу красивой.

Входные данные

Первая строка содержит целое число \(t\) (\( 1 \le t \le 10^4\)) — количество тестовых случаев. Далее следуют описания тестовых случаев.

Первая строка каждого тестового случая содержит одно целое число \(n\) и \(k\) (\(1 \le k \le n \le 10^5\)).

Вторая строка содержит \(n\) целых чисел. \(i\)-е из этих чисел равно \(c_i\) (\(1 \le c_i \le 100\)) — цвету, в который покрашен дом номе \(i\) изначально.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит одно целое число: для каждого тестового случая минимальное количество дней, необходимое Тому, чтобы сделать улицу красивой.

Примечание

В первом тестовом случае Том может покрасить дома 1 и 2 в первый день в цвет 2, дома 5 и 6 во второй день в цвет 2, и последний дом в цвет 2 в третий день.

Во втором тестовом случае Том может, например, потратить 6 дней на покраску домов 1, 2, 4, 5, 6, 7 в цвет 3.

В третьем тестовом случае Том может покрасить первый дом в первый день, а дома 6, 7 и 8 во второй день в цвет 3.

B. Перекраска улицы

жадные алгоритмы Перебор Перебор *1100

На некоторой улице построены \(n\) домов, по порядку пронумерованных от \(1\) до \(n\). Дом номер \(i\) изначально покрашен в цвет \(c_i\). Улица называется красивой, если все дома на ней покрашены в один и тот же цвет. Маляр Том — ответственный за перекраску улицы так, чтобы она стала красивой. Скорость работы Тома определяется целым числом \(k\).

За один день Том может перекрасить некоторое количество домов, выполнив два следующих шага:

  1. Сначала он выбирает два целых числа \(l\) и \(r\) так, что \( 1 \le l \le r \le n \) и \( r - l + 1 = k \).
  2. Затем для всех домов \(i\) таких, что \(l \le i \le r\), он может либо перекрасить этот дом в любой цвет на свой выбор, либо пропустить и не перекрашивать этот дом.

Обратите внимание, что в один и тот же день Том может перекрашивать дома в разные цвета.

Том хочет знать минимальное количество дней, необходимое для того, чтобы сделать улицу красивой.

Входные данные

Первая строка содержит целое число \(t\) (\( 1 \le t \le 10^4\)) — количество тестовых случаев. Далее следуют описания тестовых случаев.

Первая строка каждого тестового случая содержит одно целое число \(n\) и \(k\) (\(1 \le k \le n \le 10^5\)).

Вторая строка содержит \(n\) целых чисел. \(i\)-е из этих чисел равно \(c_i\) (\(1 \le c_i \le 100\)) — цвету, в который покрашен дом номе \(i\) изначально.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит одно целое число: для каждого тестового случая минимальное количество дней, необходимое Тому, чтобы сделать улицу красивой.

Примечание

В первом тестовом случае Том может покрасить дома 1 и 2 в первый день в цвет 2, дома 5 и 6 во второй день в цвет 2, и последний дом в цвет 2 в третий день.

Во втором тестовом случае Том может, например, потратить 6 дней на покраску домов 1, 2, 4, 5, 6, 7 в цвет 3.

В третьем тестовом случае Том может покрасить первый дом в первый день, а дома 6, 7 и 8 во второй день в цвет 3.

C. Попрыгунчик

дп Перебор реализация *1400

Вы создаете уровень для некоторой мобильной игры. Уровень состоит из нескольких клеточек, выстроенных в ряд слева направо и пронумерованных последовательными натуральными числами, начиная с \(1\). Каждую клеточку вы можете оставить пустой или расположить там платформу.

Чтобы пройти уровень, игрок должен бросить мяч слева так, чтобы он сначала упал на платформу в некоторой клеточке \(p\), отскочил от нее, затем отскочил от платформы в клеточке \((p + k)\), затем от платформы в клеточке \((p + 2k)\), и так далее от платформы в каждой \(k\)-й клеточке до тех пор, пока он не перепрыгнет правее последней клеточки. Если хотя бы одна из этих клеточек не содержит платформы, то уровень с такими значениями \(p\) и \(k\) пройти нельзя.

У вас уже есть некоторый шаблон уровня, описываемый числами \(a_1\), \(a_2\), \(a_3\), ..., \(a_n\), где \(a_i = 0\) означает, что в клеточке \(i\) нет платформы, а \(a_i = 1\) означает, что платформа там есть. Вы хотите модифицировать этот шаблон так, чтобы уровень можно было пройти с заданными \(p\) и \(k\). За \(x\) секунд вы можете добавить платформу в любую пустую клеточку. За \(y\) секунд вы можете полностью убрать первую клеточку, при этом количество клеточек уменьшится на один, а оставшиеся клетки пронумеруются заново, сохраняя порядок. Других изменений вы вносить не можете. Вы не можете уменьшить число клеток до меньше \(p\).

Иллюстрация к третьему тестовому случаю. Крестами отмечены удаленные клеточки. Синим показана добавленная платформа.

Какое минимальное количество секунд вам требуется, чтобы сделать возможным прохождение уровня с заданными значениями \(p\) и \(k\)?

Входные данные

Первая строка содержит количество тестовых случаев \(t\) (\(1 \le t \le 100\)). Далее следуют описания тестовых случаев.

Первая строка каждого тестового случая содержит три целых числа \(n\), \(p\) и \(k\) (\(1 \le p \le n \le 10^5\), \(1 \le k \le n\)) — начальное количество клеточек, номер первой клеточки, которая должна содержать платформу, и требуемый период прыжков мяча.

Вторая строка каждого тестового случая содержит строку \(a_1 a_2 a_3 \ldots a_n\) (\(a_i = 0\) или \(a_i = 1\)) — начальный шаблон уровня, записанный без пробелов.

Последняя строка каждого тестового случая содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le 10^4\)) — время, необходимое для добавления платформы и время, необходимое для удаления первой клеточки, соответственно.

Сумма \(n\) по всем тестовым случаям не превосходит \(10^5\).

Выходные данные

Для каждого тестового случая выведите одно целое число — минимальное количество секунд, необходимое вам, чтобы изменить уровень соответствующим образом.

Можно показать, что всегда возможно изменить уровень так, чтобы его можно было пройти.

Примечание

В первом тестовом случае лучше всего просто убрать первую клеточку, после чего все необходимые платформы будут на своих местах: 0101010101. Зачеркнутая цифра удалена, цифры, выделенные жирным — места, где должны быть платформы. Необходимое время равно \(y = 2\).

Во втором тестовом случае лучше всего добавить платформы в клетки \(4\) и \(5\): 00000 \(\to\) 00011. Необходимое время равно \(x \cdot 2 = 4\).

В третьем тестовом случае лучше всего удалить первую клеточку дважды и затем добавить платформу в клеточку, которая изначально была \(10\)-й: 10110011000 \(\to\) 10110011010. Необходимое время равно \(y \cdot 2 + x = 10\).

D. XOR-пушка

битмаски Конструктив Перебор *2000

У Аркадия есть неубывающий массив натуральных чисел \(a_1, a_2, \ldots, a_n\). Вы завидуете ему и хотите уничтожить это свойство. У вас есть так называемая XOR-пушка, которую вы можете использовать один или несколько раз.

За один шаг вы можете выбрать два последовательных элемента в массиве, обозначим их за \(x\) и \(y\), удалить их из массива и на их место вставить число \(x \oplus y\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ. Обратите внимание, что длина массива уменьшается на один в результате этой операции. Вы не можете выполнить эту операцию, если длина массива стала единицей.

Например, если массив равен \([2, 5, 6, 8]\), то вы можете выбрать \(5\) и \(6\) и заменить их на \(5 \oplus 6 = 3\). Массив становится равен \([2, 3, 8]\).

Вы хотите, чтобы массив перестал быть неубывающим. Какое минимальное количество шагов вам для этого потребуется? Если массив остается неубывающим независимо от того, какие операции вы делаете, выведите \(-1\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — начальную длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива. Гарантируется, что \(a_i \le a_{i + 1}\) для всех \(1 \le i < n\).

Выходные данные

Выведите одно целое число — минимальное необходимое число шагов. Если решения не существует, выведите \(-1\).

Примечание

В первом примере можно выбрать \(2\) и \(5\), и массив станет равным \([7, 6, 8]\).

Во втором примере можно получить только массивы \([1, 1]\), \([3, 3]\) и \([0]\), которые все являются неубывающими.

В третьем примере можно выбрать \(1\) и \(2\) и массив станет равным \([3, 4, 6, 20]\). Затем вы можете, например, выбрать \(3\) и \(4\) и массив станет равным \([7, 6, 20]\). Этот массив не является неубывающим.

B. Лесенки

жадные алгоритмы Конструктив математика Перебор реализация *1200

Джет устала после уничтожения города и хочет отдохнуть. Она любит высоты, поэтому для отдыха ей надо забраться повыше, и для этого она решила делать лесенки.

Лесенка является клетчатой фигурой, состоящей из одинаковых квадратных клеточек. Если лесенка состоит из \(n\) ступенек, то это означает, что такая лесенка состоит из \(n\) столбиков, первый имеет высоту \(1\) клетку, второй имеет высоту \(2\) клетки, \(\ldots\), \(n\)-й имеет высоту \(n\) клеток. Нижние клетки всех столбиков должны находятся в одной строке.

Лесенка, имеющая \(n\) ступенек, называется красивой, если ее можно покрыть \(n\) непересекающимися квадратами. Все квадраты должны состоять целиком из клеточек лесенки.

Покрытая квадратами красивая лесенка с \(7\) ступеньками:

Скажите Джет, какое максимальное количество различных красивых лесенок она может построить, используя суммарно не больше \(x\) клеточек. Ни одна клеточка не может быть использована больше одного раза.

Входные данные

В первой строке входных данных содержится одно целое число \(t\) \((1 \le t \le 1000)\)  — количество наборов входных данных.

Единственная строка описания каждого набора входных данных содержит единственное целое число \(x\) \((1 \le x \le 10^{18})\)  — количество клеточек для постройки лесенок.

Выходные данные

Для каждого набора входных данных выведите единственное число  — максимальное количество различных красивых лесенок, которые можно построить, используя суммарно не больше \(x\) клеточек.

Примечание

В первом наборе входных данных можно построить только одну лесенку, состоящую из \(1\) ступеньки. Она является красивой. Поэтому ответ равен \(1\).

Во втором наборе входных данных можно построить две различные красивые лесенки: из \(1\) ступеньки и из \(3\) ступенек. На это уйдёт \(7\) клеточек. В таком случае останется еще одна клеточка, но из нее уже нельзя сделать ни одной красивой лесенки такого размера, которого еще нет. Поэтому ответ равен \(2\).

В третьем наборе входных данных можно построить только одну из двух красивых лесенок: с \(1\) ступенькой или с \(3\) ступеньками. В первом случае останется \(5\) клеточек, из которых можно сделать только лесенку из \(2\) ступенек. Она не является красивой, а Джет строит только красивые лесенки. Поэтому в данном случае ответ \(1\). Если же Джет построит лесенку с \(3\) ступеньками, то у неё не останется ни одной клеточки. В этом случае ответ тоже \(1\).

D2. День рождения Сажи (сложная версия)

Бинарный поиск жадные алгоритмы Конструктив Перебор сортировки *1500

Это сложная версия задачи. Различие между версиями заключается в том, что в простой версии все \(a_i\) различны. Вы можете делать взломы, только если обе версии задачи сданы.

Сегодня у Сажи день рождения, и она пойдёт в магазин покупать ледяные сферы. Все \(n\) ледяных сфер стоят в магазине в ряд на одной полке и пронумерованы целыми числами от \(1\) до \(n\) слева направо. У каждой ледяной сферы есть цена — положительное целое число. Некоторые сферы могут иметь одинаковую цену.

Ледяная сфера считается дешёвой, если она стоит строго меньше, чем две соседние: ближайшая справа и ближайшая слева. Крайняя слева и крайняя справа ледяные сферы не считаются дешёвыми. Сажа сначала выберет все дешёвые ледяные сферы, а потом купит только их.

Вы можете прийти в магазин до Сажи и переставить ледяные сферы так, как хотите. Узнайте, какое максимальное количество ледяных сфер Сажа может купить, и покажите, как для этого переставить сферы.

Входные данные

В первой строке находится единственное целое число \(n\) \((1 \le n \le 10^5)\) — количество ледяных сфер в магазине.

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 10^9)\) — цены ледяных сфер.

Выходные данные

В первой строке выведите максимальное количество ледяных сфер, которое может купить Сажа.

Во второй строке выведите цены ледяных сфер в том порядке, в котором их нужно поставить на полку. Если возможных ответов несколько, выведите любой из них.

Примечание

В тесте из условия невозможно расставить ледяные сферы так, чтобы Сажа купила \(4\) из них. Если расставить сферы в порядке \((3, 1, 4, 2, 4, 2, 5)\), то Сажа купит одну сферу за \(1\) и две сферы по \(2\).

A. Помогите крестьянину

математика Перебор *1600

Жил да был в Тридевятом царстве крестьянин Семеныч, и была у него любимая корова Зорька. Все лето он заготавливал для нее корма на зиму — косил траву, сушил ее, складывал в стога. Будучи продвинутым крестьянином, для удобства хранения Семеныч собирал сено в одинаковые соломенные блоки кубической формы и складывал их у себя в амбаре. За лето упорного труда он заготовил целых A·B·C соломенных блоков, и сложил их в амбаре в виде прямоугольного параллелепипеда в A слоев в высоту, B рядов в слое по C блоков в каждом ряду.

В конце осени Семеныч еще раз зашел в амбар полюбоваться заготовленным за лето кропотливого труда сеном и с ужасом обнаружил, что соломенные блоки валялись в амбаре в полном беспорядке. Оказывается, в амбар тайком пробрались воры и полностью разобрали и унесли один слой блоков на передней, задней, верхней и боковых стенках, в результате чего в амбаре остался параллелепипед из (A - 1) × (B - 2) × (C - 2) соломенных блоков. Чтобы скрыть следы преступления, воры разобрали его на отдельные блоки размером 1 × 1 × 1 и разбросали их по всему амбару. Семеныч насчитал в амбаре после ограбления n соломенных блоков, но забыл числа A, B и C.

Зная число n, найдите минимально возможное и максимально возможное количество соломенных блоков, которое было украдено.

Входные данные

В единственной строке записано целое число n из условия задачи (1 ≤ n ≤ 109).

Выходные данные

Выведите через пробел минимальное и максимальное количество соломенных блоков, которые могли быть похищены ворами.

Учтите, что ответ на задачу может быть довольно большим, поэтому необходимо использовать 64-битный целый тип для вычислений. Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

Рассмотрим первый тест из примера. Если первоначально в амбаре у Семеныча находился параллелепипед из 32 = 2 × 4 × 4 соломенных блоков, после ограбления в амбаре осталось как раз 4 = (2 - 1) × (4 - 2) × (4 - 2) соломенных блоков. Так воры могли украсть 32 - 4 = 28 соломенных блоков. Если первоначально в амбаре у Семеныча находился параллелепипед из 45 = 5 × 3 × 3 соломенных блоков, после ограбления в амбаре осталось 4 = (5 - 1) × (3 - 2) × (3 - 2) соломенных блоков. Так воры могли украсть 45 - 4 = 41 соломенных блоков. Ни при каких других вариантах первоначального размещения блоков (таких, что после ограбления в амбаре остается ровно 4 блока) из амбара не могло быть похищено менее 28 или более 41 блока.

C. Помогите складовщику

дп Перебор *2300

В Тридевятом царстве наступила поздняя осень, убран небывалый урожай, и настало время готовиться к зиме. В то время как большинство жителей отмечает праздник урожая, складовщик Семен пытается решить довольно нетривиальную задачу размещения на складах сельскохозяйственного оборудования.

Проблемы у него возникли с самой крупной техникой, которой, разумеется, являются турбоплуги. Проблема в том, что турбоплуг при хранении занимает на складе не обычную прямоугольную форму, а T-образную, как на одной из четырех картинок ниже (где символом «#» обозначено место, занимаемое турбоплугом, символом «.» — свободное пространство):

###      ..#      .#.      #..
.#. ### .#. ###
.#. ..# ### #..

Перед Семеном встала довольно естественная задача: разместить на заданном складе размерами n × m максимальное количество турбоплугов. При хранении турбоплуги можно поворачивать как угодно (так чтобы они занимали область как на одной из четырех картинок выше), однако нельзя, чтобы два турбоплуга «накладывались», то есть занимали общую область склада.

Семен чувствует, что один не сможет найти оптимальное размещение турбоплугов на складе, максимизирующее их общее количество. Поможете ему?

Входные данные

В единственной строке записаны через пробел два целых числа n и m — размеры склада (1 ≤ n, m ≤ 9).

Выходные данные

В первой строке выведите максимальное количество турбоплугов, которое можно разместить на складе. В следующих n строках выведите по m символов. Символом «.» (точка) обозначайте пустое место, последовательными заглавными буквами латинского алфавита («A» — для первого турбоплуга, «B» — для второго, и так далее до количества турбоплугов в вашей схеме) — места для соответствующих турбоплугов при их оптимальном расположении на складе. Порядок нумерации мест для турбоплугов на складе значения не имеет. Если существует несколько оптимальных решений для склада данных размеров — выведите любое.

D. Шестиугольники

жадные алгоритмы Конструктив кратчайшие пути математика Перебор реализация *1900

Линдси Букингем сказала Стиви Никс «идти своим путем». Никс сейчас грустит и хочет уйти как можно быстрее, но она живет в двухмерном шестиугольном мире.

Рассмотрим шестиугольное покрытие плоскости, как на картинке ниже.

Ники хочет добраться от ячейки с координатами \((0, 0)\) к определенной ячейке, заданной координатами. Она может перейти от шестиугольника к любому из шести своих соседей, но у каждого из переходов есть своя стоимость. Стоимость зависит от направления, в котором вы путешествуете. Таким образом, переход от \((0, 0)\) до \((1, 1)\) будет стоить ровно столько же, как и переход от \((-2, -1)\) до \((-1, 0)\). Стоимости приведены во входных данных в порядке \(c_1\), \(c_2\), \(c_3\), \(c_4\), \(c_5\), \(c_6\), как на рисунке ниже.

Выведите наименьшую стоимость пути от начала координат, который имеет координаты \((0, 0)\), к данной ячейке.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 10^{4}\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит два целых числа \(x\) и \(y\) (\(-10^{9} \le x, y \le 10^{9}\)) — координаты конечного шестиугольника.

Вторая строка каждого набора входных данных содержит шесть целых чисел \(c_1\), \(c_2\), \(c_3\), \(c_4\), \(c_5\), \(c_6\) (\(1 \le c_1, c_2, c_3, c_4, c_5, c_6 \le 10^{9}\)) — стоимости совершения одного шага в определенном направлении (см. рисунок выше).

Выходные данные

Для каждого набора входных данных выведите наименьшую стоимость пути от начала координат до данной клетки.

Примечание

На рисунке ниже показано решение для первого примера. Стоимость \(18\) достигается путем трехкратного взятия \(c_3\) и \(c_2\) один раз, что составляет \(5+5+5+3=18\).

E. Шведские герои

дп Перебор реализация *2700

Играя в очередную стратегическую игру, Мэнс набрал \(n\) Шведских героев, силы которых можно представить в виде массива \(a\).

К сожалению, не все эти могущественные герои были созданы настолько способными, насколько он хотел, так что он решил что-то с этим сделать. Для достижения своей цели он может выбрать двух последовательных героев, с силами \(a_i\) и \(a_{i+1}\), удалить их и вставить обратно в ту же позицию героя с силой \(-(a_i+a_{i+1})\).

Например, если элементы нашего массива — \([5, 6, 7, 8]\), то мы можем выбрать \(6\) и \(7\) и получить \([5, -(6+7), 8] = [5, -13, 8]\).

После того, как он выполнит эту операцию \(n-1\) раз, у него останется только один герой. Мэнс хочет, чтобы его сила была как можно больше. Какой наибольшей силы этого героя он может достичь?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 200000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива.

Выходные данные

Выведите наибольшую возможную силу, которую он может получить после \(n-1\) операций.

Примечание

Оптимальный список операций для первого примера:

\([5, 6, 7, 8] \rightarrow [-11, 7, 8] \rightarrow [-11, -15] \rightarrow [26]\).

E. Камень, ножницы, бумага

жадные алгоритмы Конструктив математика Перебор Потоки *1800

Аня и Боря решили сыграть в игру «Камень, ножницы, бумага».

Игра состоит из раундов, каждый из раундов проводится независимо от остальных. В каждом раунде оба игрока одновременно показывают один из трех предметов: камень, ножницы или бумагу. При этом, если оба игрока показали одинаковые предметы, то в раунде объявляется ничья. В противном случае, действуют следующие правила:

  • если один игрок показал камень, а другой ножницы, то игрок, показавший камень, объявляется победителем раунда, а другой игрок — проигравшим;
  • если один игрок показал ножницы, а другой бумагу, то игрок, показавший ножницы, объявляется победителем раунда, а другой игрок — проигравшим;
  • если один игрок показал бумагу, а другой камень, то игрок, показавший бумагу, объявляется победителем раунда, а другой игрок — проигравшим.

Аня и Боря решили, что они сыграют ровно \(n\) раундов описанной игры. Аня решила, что она \(a_1\) раз покажет камень, \(a_2\) раз покажет ножницы и \(a_3\) раз покажет бумагу. Боря решил, что он \(b_1\) раз покажет камень, \(b_2\) раз покажет ножницы и \(b_3\) раз покажет бумагу. При этом ни Аня, ни Боря еще не выбрали последовательность, в которой будут показывать предметы. Гарантируется, что \(a_1 + a_2 + a_3 = n\) и \(b_1 + b_2 + b_3 = n\).

Перед вами стоит задача определить два числа:

  1. минимальное количество раундов, которое может выиграть Аня;
  2. максимальное количество раундов, которое может выиграть Аня.
Входные данные

В первой строке следует целое число \(n\) (\(1 \le n \le 10^{9}\)) — количество раундов.

Во второй строке следуют три целых числа \(a_1, a_2, a_3\) (\(0 \le a_i \le n\)) — количество раз, которое Аня покажет камень, ножницы и бумагу, соответственно. Гарантируется, что \(a_1 + a_2 + a_3 = n\).

В третьей строке следуют три целых числа \(b_1, b_2, b_3\) (\(0 \le b_j \le n\)) — количество раз, которое Боря покажет камень, ножницы и бумагу, соответственно. Гарантируется, что \(b_1 + b_2 + b_3 = n\).

Выходные данные

Выведите два целых числа — минимальное и максимальное количество раундов, которое может выиграть Аня.

Примечание

В первом примере Аня может не выиграть ни одного раунда, если покажет, например, сначала ножницы, а потом бумагу, а Боря покажет камень, а потом ножницы. В лучшем случае Аня выиграет один раунд, если, например, сначала покажет бумагу, а потом ножницы, а Боря покажет камень, а потом ножницы.

Во втором примере Аня может не выиграть ни одного раунда, если, например, Боря в каждом раунде будет показывать те же предметы, что и Аня.

В третьем примере Аня всегда показывает бумагу, а Боря всегда показывает камень, поэтому Аня в любом случае выиграет все три раунда.

C. ABBB

жадные алгоритмы Перебор Строки Структуры данных *1100

Смотритель зоопарка играет в игру. В этой игре он должен использовать бомбы, чтобы взрывать строку, состоящую из символов «A» и «B». Он может использовать бомбы, чтобы взорвать подстроку, которая равна либо «AB», либо «BB». Когда он взрывает такую подстроку, она удаляется из строки, а оставшиеся части строки объединяются вместе в новую строку.

Например, смотритель зоопарка может сделать следующие две операции: AABABBA \(\to\) AABBA \(\to\) AAA.

Смотритель зоопарка интересуется, какую наименьшую длину строки он может получить после нескольких взрывов. Можете ли вы ему помочь найти эту наименьшую длину строки?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) \((1 \leq t \leq 20000)\)  — количество наборов входных данных. Описание наборов входных данных следует.

Каждая из следующих \(t\) строк содержит описание одного набора входных данных — непустую строку \(s\), которую смотритель зоопарка будет взрывать. Гарантируется, что все символы \(s\) это либо «A», либо «B».

Гарантируется, что сумма \(|s|\) (длин строки \(s\)) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число: наименьшую длину строки, которую смотритель зоопарка может получить.

Примечание

В первом наборе входных данных вы не можете сделать ни одну операцию, поэтому ответ \(3\).

Во втором наборе входных данных одна из оптимальных последовательностей операций BABA \(\to\) BA. Поэтому ответ \(2\).

В третьем наборе входных данных одна из оптимальных последовательностей операций AABBBABBBB \(\to\) AABBBABB \(\to\) AABBBB \(\to\) ABBB \(\to\) AB \(\to\) (пустая строка). Поэтому ответ \(0\).

A. Помогите Василисе Премудрой 2

математика Перебор *1000

Василисе Премудрой из Тридевятого царства, Тридесятого государства ее подруга Хелависа Премудрая из Тридесятого царства, Тридевятого государства в очередной раз прислала чудесный ларчик с секретом. Однако в чем секрет ларчика Василиса Премудрая пока не знает, потому что в очередной раз не может его открыть. Она надеется, что вы в очередной раз поможете ей в этом.

Замок ларчика устроен следующим образом: в нем в виде квадрата 2 × 2 расположено 4 одинаковых углубления для самоцветов, а по краям замка возле углублений написаны некоторые числа. Пример замка изображен на рисунке ниже.

К ларчику прилагаются 9 самоцветов той же формы, что и углубления, на каждом из которых написано одно из чисел от 1 до 9 (каждое из чисел написано ровно на одном из самоцветов). Открыть ларчик можно только после того, как его правильно инкрустировать самоцветами — то есть вставить в каждое углубление на замке ровно по одному самоцвету. При этом суммы чисел по строкам, столбцам, и двум диагоналям квадрата должны совпасть с числами, записанными по краям замка. Например, замок выше откроется, если вставить в углубления самоцветы с числами как на рисунке ниже.

Теперь Василиса Премудрая хочет по числам на замке ларчика определить, какие самоцветы ей нужно вставить в углубления для открытия ларчика. Помогите Василисе решить эту нелегкую задачу.

Входные данные

На входе заданы числа, записанные по краям замка ларчика. В первой строке записаны через пробел целые числа r1 и r2, задающие требуемые суммы чисел по строкам квадрата, во второй строке записаны через пробел целые числа c1 и c2, задающие требуемые суммы чисел по столбцам квадрата, в третьей строке записаны через пробел целые числа d1 и d2, задающие требуемые суммы чисел на главной и побочной диагоналях искомого квадрата-замка (1  ≤ r1, r2, c1, c2, d1, d2 ≤ 20). Соответствие переменных и мест, на которых они записаны, см. на рисунке ниже. Также см. второй тест из примеров, демонстрирующий пример из условия задачи.

Выходные данные

Выведите схему инкрустации ларчика: две строки по два разделенных пробелами целых числа от 1 до 9. Числа должны быть попарно различными. Если для заданного замка решения задачи не существует, выведите единственное число «-1» (без кавычек).

Если решений несколько, выведите любое.

Примечание

Обратите внимание на последний тест из условия: ларчик нельзя открыть, поскольку для этого Василисе Премудрой потребовалось бы 4 одинаковых самоцвета с числом «5» на каждом из них, однако, у нее имеется лишь по одному самоцвету с каждым из чисел от 1 до 9.

A. Количество квартир

Конструктив математика Перебор *900

Недавно в городе, где живет Монокарп, построили дом с новой планировкой. Согласно данной планировке в доме есть три типа квартир: трехкомнатные, пятикомнатные и семикомнатные. Известно, что в каждой комнате есть ровно по одному окну. Таким образом, в трехкомнатной квартире три окна, в пятикомнатной — пять, в семикомнатной — семь.

Монокарп обошел дом со всех сторон и насчитал в нем \(n\) окон. Монокарпу стало интересно, сколько квартир каждого типа может быть в этом доме.

К сожалению, Монокарп только научился считать, поэтому попросил вас помочь ему найти возможное количество трехкомнатных, пятикомнатных и семикомнатных квартир в доме, если известно, что во всех квартирах этого дома ровно \(n\) окон. Так как ответов может быть несколько, разрешается вывести любой подходящий.

Например:

  • если Монокарп насчитал \(30\) окон, в доме могло быть \(2\) трехкомнатных, \(2\) пятикомнатных и \(2\) семикомнатных квартиры, так как \(2 \cdot 3 + 2 \cdot 5 + 2 \cdot 7 = 30\);
  • если Монокарп насчитал \(67\) окон, в доме могло быть \(7\) трехкомнатных, \(5\) пятикомнатных и \(3\) семикомнатных квартиры, так как \(7 \cdot 3 + 5 \cdot 5 + 3 \cdot 7 = 67\);
  • если Монокарп насчитал \(4\) окна, он, скорее всего, ошибся, так как ни один дом с такой планировкой не может иметь \(4\) окна.
Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В единственной строке каждого набора задано целое число \(n\) (\(1 \le n \le 1000\)) — количество окон в доме.

Выходные данные

Для каждого набора входных данных, если дома с новой планировкой и заданным количеством окном просто не может быть, выведите \(-1\).

В противном случае, выведите три целых неотрицательных числа — количество трехкомнатных, пятикомнатных и семикомнатных квартир в доме. Если подходящих ответов несколько, выведите любой из них.

H. Rogue-like игра

*особая задача жадные алгоритмы Перебор *2600

Марина играет в новую rogue-like игру. В этой игре есть \(n\) различных рас персонажей и \(m\) различных классов. Игра состоит из вылазок; для каждой вылазки Марина должна выбрать расу и класс для своего персонажа. Если она выберет \(i\)-ю расу и \(j\)-й класс, она получит \(c_{i, j}\) очков за эту сессию.

Изначально некоторые расы и классы разблокированы, все остальные заблокированы. Чтобы разблокировать \(i\)-ю расу, Марина должна получить в общей сложности не менее \(a_i\) очков за предыдущие вылазки, то есть, как только ее общее количество очков за сыгранные вылазки составит не менее \(a_i\), эта раса будет разблокирована. Аналогично, чтобы разблокировать \(j\)-й класс, она должна получить не менее \(b_j\) очков в общей сложности за предыдущие вылазки. Если \(a_i = 0\) для некоторого \(i\), то эта раса разблокирована изначально (то же самое относится и к классам с \(b_j = 0\)).

Марина хочет разблокировать все расы и классы за минимальное количество вылазок. Прежде чем начать играть, она может прочитать ровно одно руководство по некоторой комбинации расы и класса, и чтение руководства увеличит количество очков, которое она получает за каждую вылазку с этой комбинацией на \(k\) (формально, прежде чем начать играть, она может увеличить ровно одно значение \(c_{i, j}\) на \(k\)).

Каково минимальное количество вылазок, которые она должна сделать, чтобы разблокировать все расы и классы, если она оптимальным образом выберет комбинацию для которой прочитает руководство?

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m \le 1500\); \(0 \le k \le 10^9\)).

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0 = a_1 \le a_2 \le \dots \le a_n \le 10^{12}\)), где \(a_i\) — количество очков, необходимое для разблокировки \(i\)-й расы (или \(0\), если она разблокирована изначально). Обратите внимание, что \(a_1 = 0\), и эти значения неубывающие.

Третья строка содержит \(m\) целых чисел \(b_1\), \(b_2\), ..., \(b_m\) (\(0 = b_1 \le b_2 \le \dots \le b_m \le 10^{12}\)), где \(b_i\) — количество очков, необходимое для разблокировки \(i\)-го класса (или \(0\), если он разблокирован изначально). Обратите внимание, что \(b_1 = 0\), и эти значения неубывающие.

Далее следуют \(n\) строк, каждая из которых содержит \(m\) целых чисел. \(j\)-е целое число в \(i\)-й строке равно \(c_{i, j}\) (\(1 \le c_{i, j} \le 10^9\)) — количество очков, которое Марина получает за вылазку с \(i\)-й расой и \(j\)-м классом.

Выходные данные

Выведите одно целое число — минимальное количество вылазок, которые Марина должна сделать, чтобы разблокировать все расы и все классы, если она может прочитать ровно одно руководство перед игрой.

Примечание

В первом примере из условия Марина может действовать следующим образом:

  1. Марина читает руководство по комбинации \(1\)-й расы и \(2\)-го класса. Таким образом, \(c_{1, 2}\) становится равно \(7\). Первоначально разблокированы только \(1\)-я раса и \(1\)-й класс.
  2. Марина делает вылазку с \(1\)-й расой и \(1\)-м классом. Количество очков становится \(2\), и она открывает \(2\)-й класс.
  3. Марина делает вылазку с \(1\)-й расой и \(2\)-м классом. Количество очков становится \(9\), и она открывает все, кроме \(4\)-го класса.
  4. Марина делает вылазку с \(3\)-й расой и \(3\)-м классом. Количество очков становится \(11\), и она открывает \(4\)-й класс. Она разблокировала все расы и классы за \(3\) вылазки.

Обратите внимание, что этот способ разблокировать все расы и классы не является единственным.

Во втором примере из условия Марина может действовать следующим образом:

  1. Марина читает руководство по комбинации \(2\)-й расы и \(1\)-го класса. Таким образом, \(c_{2, 1}\) становится равно \(6\). Первоначально разблокированы только \(1\)-я раса и \(1\)-й класс.
  2. Марина делает вылазку с \(1\)-й расой и \(1\)-м классом. Количество очков становится \(3\), и она открывает \(2\)-ю расу и \(2\)-й класс.
  3. Марина делает вылазку со \(2\)-й расой и \(1\)-м классом. Количество очков становится \(9\), и она открывает \(3\)-ю и \(4\)-ю расу. Она разблокировала все за \(2\) вылазки.

Как и в \(1\)-м примере, это не единственный способ разблокировать все за \(2\) вылазки.

G. Уменьшение стоимости доставки

графы кратчайшие пути Перебор *2100

Вы являетесь мэром Берлятова. Всего в городе \(n\) районов и \(m\) двусторонних дорог между ними. \(i\)-я дорога соединяет районы с индексами \(x_i\) и \(y_i\). Стоимость путешествия по этой дороге равна \(w_i\). Между каждой парой районов существует какой-то путь, поэтому город является связным.

Всего в Берлятове есть \(k\) курьерских маршрутов. \(i\)-й маршрут идет из района \(a_i\) в район \(b_i\). На каждом маршруте находится один курьер и он всегда будет выбирать самый дешевый (минимальный по суммарной стоимости) путь из района \(a_i\) в район \(b_i\) для доставки продуктов.

Маршрут может идти из района в него же, также некоторые курьерские маршруты могут совпадать (и вам необходимо учитывать их независимо).

Вы можете уменьшить стоимость не более чем одной дороги до нуля (то есть вы выбираете не более одной дороги и заменяете ее стоимость на \(0\)).

Пусть \(d(x, y)\) равно самой дешевой стоимости путешествия между районами \(x\) и \(y\).

Ваша задача — найти минимальную суммарную стоимость курьерских маршрутов, которую вы можете достичь, если вы оптимально выберете какую-то дорогу и замените ее стоимость на \(0\). Другими словами, вам необходимо найти минимально возможное значение \(\sum\limits_{i = 1}^{k} d(a_i, b_i)\) после оптимального применения операции, описанной выше.

Входные данные

Первая строка входных данных содержит три целых числа \(n\), \(m\) and \(k\) (\(2 \le n \le 1000\); \(n - 1 \le m \le min(1000, \frac{n(n-1)}{2})\); \(1 \le k \le 1000\)) — количество районов, количество дорог и количество курьерских маршрутов.

Следующие \(m\) строк описывают дороги. \(i\)-я дорога задана тремя целыми числами \(x_i\), \(y_i\) и \(w_i\) (\(1 \le x_i, y_i \le n\); \(x_i \ne y_i\); \(1 \le w_i \le 1000\)), где \(x_i\) и \(y_i\) — районы, которые соединены \(i\)-й дорогой, а \(w_i\) — ее стоимость. Гарантируется, что между каждой парой районов существует какой-то путь, поэтому город является связным. Также гарантируется, что между каждой парой районов существует не более одной дороги.

Следующие \(k\) строк описывают курьерские маршруты. \(i\)-й маршрут задан двумя целыми числами \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\)) — районами \(i\)-го маршрута. Маршрут может идти из района в него же, также некоторые курьерские маршруты могут совпадать (и вам необходимо учитывать их независимо).

Выходные данные

Выведите одно целое число — минимальную суммарную стоимость курьерских маршрутов, которой вы можете достичь (то есть минимальное значение \(\sum\limits_{i=1}^{k} d(a_i, b_i)\), где \(d(x, y)\) равно стоимости самого дешевого пути между районами \(x\) и \(y\)), если вы можете сделать стоимость какой-то (не более, чем одной) дороги равной нулю.

Примечание

Картинка, соответствующая первому примеру:

Здесь вы можете выбрать либо дорогу \((2, 4)\), либо дорогу \((4, 6)\). Оба варианта приведут к суммарной стоимости \(22\).

Картинка, соответствующая второму примеру:

Здесь вы можете выбрать дорогу \((3, 4)\). Это приведет к суммарной стоимости \(13\).

A. Маркетинговая схема

жадные алгоритмы Конструктив математика Перебор *800

Вы устроились на работу в качестве маркетолога в зоомагазин и ваша текущая задача — увеличить продажи кошачьего корма. Одна из стратегий — это продавать банки с кормом упаковками со скидкой.

Предположим, вы решили продавать упаковки с \(a\) банками со скидкой и, предположим, покупатель хочет купить \(x\) банок корма. Тогда он воспользуется следующей жадной стратегией:

  • он купит \(\left\lfloor \frac{x}{a} \right\rfloor\) упаковок со скидкой;
  • а также докупит оставшиеся \((x \bmod a)\) банок поштучно.

\(\left\lfloor \frac{x}{a} \right\rfloor\) — это \(x\), деленное на \(a\) и округленное вниз, \(x \bmod a\) — это остаток от деления \(x\) на \(a\).

Однако покупатели в общем случае жадные, а потому, если покупатель хочет купить \((x \bmod a)\) банок поштучно и так случилось, что \((x \bmod a) \ge \frac{a}{2}\), то он решит купить всю упаковку из \(a\) банок (вместо того, чтобы купить \((x \bmod a)\) банок). Своими действиями он обрадует вас как маркетолога, потому что в итоге купит больше, чем хотел изначально.

Вы знаете, что каждый покупатель, который приходит к вам в магазин, может купить любое количество банок от \(l\) по \(r\) включительно. Можете ли вы выбрать такой размер упаковки \(a\), что любой покупатель купит больше банок, чем он планировал изначально?

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой и единственной строке каждого набора заданы два целых числа \(l\) и \(r\) (\(1 \le l \le r \le 10^9\)) — отрезок возможного количества банок, которое захочет приобрести покупатель.

Выходные данные

Для каждого набора входных данных, выведите YES, если вы можете выбрать такой размер упаковки \(a\), что любой покупатель приобретет больше банок корма, что он расcчитывал. В противном случае выведите NO.

Вы можете выводить каждую букву в любом регистре.

Примечание

В первом наборе входных данных вы можете взять, например, \(a = 5\) как размер упаковки. Тогда, если покупатель хочет купить \(3\) банки, то он купит вместо этого \(5\) банок (\(3 \bmod 5 = 3\), \(\frac{5}{2} = 2.5\)). Тот, кто захочет купить \(4\) банки, также купит \(5\).

Во втором наборе невозможно выбрать такое \(a\).

В третьем наборе вы можете, например, выбрать \(a = 80\).

E. Юра может все

Бинарный поиск битмаски Конструктив Перебор разделяй и властвуй *2500

Юра уверен, что он может все. Но сможет ли он решить эту задачу?

У него есть массив \(a\), состоящий из \(n\) положительных целых чисел. Назовем подмассив \(a[l...r]\) хорошим, если одновременно соблюдены следующие условия:

  • \(l+1 \leq r-1\), т. е. подмассив имеет длину не менее \(3\);
  • \((a_l \oplus a_r) = (a_{l+1}+a_{l+2}+\ldots+a_{r-2}+a_{r-1})\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Другими словами, подмассив хороший, если побитовое исключающее ИЛИ (XOR) элементов в его концах равен сумме остальных элементов.

Юрий хочет посчитать общее количество хороших подмассивов. Чему оно равно?

Массив \(c\) является подмассивом массива \(d\), если \(c\) может быть получен из \(d\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Первая строка содержит одно целое \(n\) (\(3 \leq n \leq 2\cdot 10^5\)) — длину \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \lt 2^{30}\)) — элементы \(a\).

Выходные данные

Выведите единственное целое число — количество хороших подмассивов.

Примечание

В примере есть \(6\) хороших подмассивов:

  • \([3,1,2]\) (дважды), потому что \((3 \oplus 2) = 1\);
  • \([1,2,3]\) (дважды) потому что \((1 \oplus 3) = 2\);
  • \([2,3,1]\), потому что \((2 \oplus 1) = 3\);
  • \([3,1,2,3,1,2,3,15]\), потому что \((3 \oplus 15) = (1+2+3+1+2+3)\).

E. Длинная перестановка

математика Перебор *2400

Перестановка — это последовательность длины \(n\) целых чисел от \(1\) до \(n\), в которой все числа встречаются ровно по одному разу. Например, \([1]\), \([4, 3, 5, 1, 2]\), \([3, 2, 1]\) — перестановки, а \([1, 1]\), \([4, 3, 1]\), \([2, 3, 4]\) — нет.

Перестановка \(a\) лексикографически меньше перестановки \(b\) (обе имеют одинаковую длину \(n\)), если в первой слева позиции \(i\), в которой они отличаются, верно \(a[i] < b[i]\). Например, перестановка \([1, 3, 2, 4]\) лексикографически меньше перестановки \([1, 3, 4, 2]\), потому что первые два элемента совпадают, а третий элемент в первой перестановке меньше, чем во второй.

Следующая перестановка для перестановки \(a\) длины \(n\) — это лексикографически наименьшая перестановка \(b\) длины \(n\) лексикографически большая \(a\). Например:

  • для перестановки \([2, 1, 4, 3]\) следующей является перестановка \([2, 3, 1, 4]\);
  • для перестановки \([1, 2, 3]\) следующей является перестановка \([1, 3, 2]\);
  • для перестановки \([2, 1]\) следующей не существует.

Вам дано число \(n\) — длина изначальной перестановки. Изначальная перестановка имеет вид \(a = [1, 2, \ldots, n]\). Другими словами \(a[i] = i\) (\(1 \le i \le n\)).

Вам требуется обработать \(q\) запросов двух типов.

  • \(1\) \(l\) \(r\): запрос на сумму всех элементов на отрезке \([l, r]\), то есть необходимо найти \(a[l] + a[l + 1] + \ldots + a[r]\).
  • \(2\) \(x\): \(x\) раз заменить текущую перестановку на следующую. Например, если \(x=2\) и текущая перестановка имеет вид \([1, 3, 4, 2]\), то мы должны выполнить такую цепочку замен \([1, 3, 4, 2] \rightarrow [1, 4, 2, 3] \rightarrow [1, 4, 3, 2]\).

Для каждого запроса \(1\)-го типа выведите искомую сумму.

Входные данные

В первой строке находится два целых числа \(n\) (\(2 \le n \le 2 \cdot 10^5\)) и \(q\) (\(1 \le q \le 2 \cdot 10^5\)), где \(n\) — длина исходной перестановки, а \(q\) — количество запросов.

В следующих \(q\) строках находится по одному запросу \(1\) или \(2\) типа. Запрос \(1\) типа состоит из трёх целых чисел \(1\), \(l\) и \(r\) \((1 \le l \le r \le n)\), запрос \(2\) типа состоит из двух целых чисел \(2\) и \(x\) \((1 \le x \le 10^5)\).

Гарантируется, что все запросы \(2\)-го типа выполнить возможно.

Выходные данные

Для каждого запроса \(1\) типа выведите в отдельной строке одно целое число — искомую сумму.

Примечание

Изначально перестановка имеет вид \([1, 2, 3, 4]\). Обработка запросов происходит следующим образом:

  1. \(2 + 3 + 4 = 9\);
  2. \([1, 2, 3, 4] \rightarrow [1, 2, 4, 3] \rightarrow [1, 3, 2, 4] \rightarrow [1, 3, 4, 2]\);
  3. \(1 + 3 = 4\);
  4. \(4 + 2 = 6\)

A. Деление

математика Перебор теория чисел *1500

Из предметов в школе Олегу больше всего нравятся история и математика, а его любимый раздел математики — деление.

Чтобы улучшить свои навыки в делении, Олег загадал \(t\) пар целых чисел \(p_i\) и \(q_i\) и решил для каждой пары найти максимальное число \(x_i\), такое что

  • \(p_i\) делится нацело на \(x_i\),
  • \(x_i\) не делится нацело на \(q_i\).
Так как Олег очень хорош в делении, то он быстро нашёл нужный числа. Теперь ему интересно, сможете ли вы тоже справиться с этой задачей.
Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 50\)) — количество пар чисел.

В следующих \(t\) строках задано по два целых числа \(p_i\) и \(q_i\) (\(1 \le p_i \le 10^{18}\); \(2 \le q_i \le 10^{9}\)) — \(i\)-я пара загаданых чисел.

Выходные данные

Выведите \(t\) целых чисел, где \(i\)-е число — это максимальное число \(x_i\), такое что \(p_i\) делится нацело на \(x_i\), а \(x_i\) не делится нацело на \(q_i\).

Можно показать, что при заданных ограничениях всегда существует хотя бы один подходящий \(x_i\).

Примечание

Для \(p_1 = 10\), \(q_1 = 4\) число \(x_1 = 10\) подходит, так как это максимальный делитель \(10\), и \(10\) не делится на \(4\).

Для \(p_2 = 12\), \(q_2 = 6\) заметим, что:

  • \(12\) не подходит в качестве \(x_2\), так как \(12\) делится на \(q_2 = 6\),
  • \(6\) не подходит в качестве \(x_2\), так как \(6\) делится на \(q_2 = 6\).
Следующий по величине делитель \(p_2 = 12\) — это \(4\), и он нам подходит, так как \(4\) не делится нацело на \(6\).

E. Найти вершину

Деревья дп интерактив Перебор поиск в глубину и подобное *3500

Это интерактивная задача.

Вам задано дерево — связный неориентированный граф без циклов. В нём загадали одну из вершин. Вы можете задавать вопросы интерактору: за один вопрос вы можете выбрать ребро и узнать, какой из двух концов ребра находится ближе к загаданной вершине, то есть, до какого из двух концов меньше кратчайшее расстояние от загаданной вершины. Вам требуется определить загаданную вершину за минимальное для данного дерева число запросов в худшем случае.

Обратите внимание, что загаданная вершина может быть не фиксирована интерактором заранее: в зависимости от ваших запросов он может менять её на любую другую, с условием, что это не противоречит ответам на предыдущие запросы.

Входные данные

В первой строке входных данных содержится целое число \(n\) (\(2 \le n \le 100\)) — количество вершин в дереве.

В каждой из следующих \(n-1\) строк записаны два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\)), обозначающих ребро между вершинами \(u\) и \(v\). Гарантируется, что данные ребра образуют дерево.

Протокол взаимодействия

После считывания выходных данных вы можете отправлять интерактору запросы двух типов:

  1. «\(u\) \(v\)» — узнать для ребра дерева \((u, v)\) (\(1 \le u, v \le n\)), какой из его концов ближе к загаданной вершине. В ответ вы получите одно число: номер одной из двух вершин. Обратите внимание, что \(u\) и \(v\) должны быть соединены ребром в дереве, поэтому они не могут находиться на равном расстоянии от загаданной вершины.
  2. «\(u\)» — сообщить интерактору о том, что вы выяснили номер загаданной вершины. После вывода этой команды ваша программа должна немедленно завершиться.

После каждого вопроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Idleness Limit Exceeded или Превышено реальное время работы. Для сброса буфера вы можете использовать:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • sys.stdout.flush() в Python;
  • смотрите документацию для других языков.

В случае, если вы сделаете большее число запросов, чем может быть необходимо для данного дерева в худшем случае, вы получите вердикт Неправильный ответ.

Примечание

Взломы в данной задаче запрещены.

B. Стальные шарики

геометрия жадные алгоритмы Перебор *1000

У вас есть \(n\) различных точек \((x_1, y_1),\ldots,(x_n,y_n)\) на плоскости и неотрицательное целое число \(k\). Каждая точка представляет собой микроскопический стальной шарик, а \(k\)  — это его сила притяжения, когда он заряжен. Сила притяжения одинакова для всех шариков.

За одну операцию вы можете выбрать шарик \(i\) и зарядить его. После этого все шарики на манхеттенском расстоянии не более \(k\) от шарика \(i\) перемещаются в позицию шарика \(i\). После этой операции несколько различных шариков могут оказаться в одной точке.

Более формально, для всех шариков \(j\) таких, что \(|x_i - x_j| + |y_i - y_j| \le k\), мы присваиваем \(x_j:=x_i\) и \(y_j:=y_i\).

Пример операции. После зарядки шарика в центре два других шарика перемещаются в его позицию. На правой картинке красная точка в центре  — это общее положение этих шариков после операции.

Ваша задача  — найти минимальное количество операций, нужное для того, чтобы переместить все шарики в одну точку, или сообщить, что это сделать невозможно.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(k\) (\(2 \le n \le 100\), \(0 \le k \le 10^6\))  — количество шариков и сила притяжения каждого шарика, соответственно.

Следующие \(n\) строк описывают координаты шариков. В \(i\)-й из этих строк находится два целых числа \(x_i\), \(y_i\) (\(0 \le x_i, y_i \le 10^5\)) — координаты \(i\)-о шарика.

Гарантируется, что все точки различны.

Выходные данные

Для каждого набора входных данных выведите единственное целое число  — минимальное количество операций, нужное для того, чтобы переместить все шарики в одну точку, или \(-1\), если это сделать невозможно.

Примечание

В первом наборе входных данных три шарика находятся в \((0, 0)\), \((3, 3)\), и \((1, 1)\) и сила притяжения равна \(2\). Можно переместить два шарика в одну точку за одну операцию, но невозможно переместить все три шарика в одну точку за любое количество операций.

Во втором наборе входных данных три шарика находятся шарика в \((6, 7)\), \((8, 8)\), и \((6, 9)\) и сила притяжения равна \(3\). Если мы зарядим любой шарик, другие два переместятся в его позицию, поэтому нам достаточно одной операции.

В третьем наборе входных данных четыре шарика находятся в \((0, 0)\), \((0, 1)\), \((0, 2)\) и \((0, 3)\) и сила притяжения равна \(1\). Можно показать, что невозможно переместить все шарики в одну и ту же точку какой-то последовательностью операций.

E. Два разбора

дп жадные алгоритмы Перебор сортировки *2500

Только что завершился Берляндский региональный отбор к ICPC. Было \(m\) участников, пронумерованных от \(1\) до \(m\), которые решали \(n\) задач, пронумерованных от \(1\) до \(n\).

Сейчас будет проходить разбор. Два автора задач готовы разобрать по \(k\) последовательных задач каждый. Авторы выбирают отрезки из \(k\) последовательных задач независимо друг от друга. Отрезки могут совпадать, пересекаться или не пересекаться вообще.

\(i\)-й участник хочет послушать разбор всех последовательных задач с \(l_i\) по \(r_i\). Каждый участник всегда выбирает слушать разбор только того автора, который расскажет большее количество интересных ему задач. Пусть это количество будет равно \(a_i\). Никто не может слушать разбор обоих авторов, даже если их отрезки не пересекаются.

Авторы задач хотят выбрать отрезки из \(k\) последовательных задач для себя так, чтобы сумма \(a_i\) по всем участникам была как можно больше.

Входные данные

В первой строке записаны три целых числа \(n, m\) и \(k\) (\(1 \le n, m \le 2000\), \(1 \le k \le n\)) — количество задач, количество участников и длина отрезка задач, разбор на которые планирует рассказать каждый из авторов.

В \(i\)-й из следующих \(m\) строк записаны по два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — отрезок задач, разбор на которые хочет послушать \(i\)-й участник.

Выходные данные

Выведите одно целое число — наибольшую возможную сумму \(a_i\) по всем участникам.

Примечание

В первом примере первый автор может рассказать разбор по задачам с \(1\) по \(3\), а второй — с \(6\) по \(8\). Тогда последовательность \(a_i\) будет \([3, 2, 3, 3, 3]\). Обратите внимание, что последний участник не может послушать обоих авторов, он выбирает только того, кто расскажет ему больше интересующих его задач.

Во втором примере первый может рассказать задачи с \(2\) по \(4\), а второй — с \(4\) по \(6\).

В третьем примере первый может рассказать задачи с \(1\) по \(1\), а второй — с \(2\) по \(2\). Или с \(4\) по \(4\) и с \(3\) по \(3\). Любая пара различных задач даст одинаковую сумму \(2\).

В четвертом примере первый может рассказать задачи с \(1\) по \(5\) и второй тоже с \(1\) по \(5\).

D. Контрольные точки

жадные алгоритмы Конструктив математика Перебор Теория вероятностей *1900

Gildong разрабатывает игру, состоящую из \(n\) уровней, пронумерованных от \(1\) до \(n\). Игрок начинает игру на \(1\)-м уровне и должен проходить их в порядке возрастания номера. Игрок выигрывает, когда он проходит \(n\)-й уровень.

На каждом уровне есть не более одной контрольной точки, но она всегда есть на \(1\)-м уровне. В начале игры, только контрольная точка на \(1\)-м уровне активирована, а все остальные деактивированы. Когда игрок доходит до \(i\)-го уровня, на котором есть контрольная точка, эта контрольная точка активируется.

Для каждой попытки прохождения уровня, игрок может либо пройти уровень, либо проиграть. Если он проходит \(i\)-й уровень, игрок следует на \(i+1\)-й уровень. Если он проигрывает на \(i\)-м уровне, игрок отправляется на самую последнюю активированную контрольную точку, и ему требуется снова проходить уровни начиная с этой контрольной точки.

Например, если \(n = 4\) и контрольные точки расположены на \(1\)-м и \(3\)-м уровнях. Игрок начинает на \(1\)-м уровне. Если он проигрывает на \(1\)-м уровне, ему требуется снова проходить \(1\)-й уровень, потому что контрольная точка на \(1\)-м уровне это последняя активированная контрольная точка. Если игрок проходит \(1\)-й уровень, он двигается на \(2\)-й уровень. Если он проигрывает на нем, он отправляется обратно на \(1\)-й уровень. Если он проходит \(1\)-й уровень и \(2\)-й уровень, он отправляется на \(3\)-й уровень и активирует контрольную точку на \(3\)-м уровне. Теперь если он проиграет на \(3\)-м уровне, или на \(4\)-м уровне после прохождения \(3\)-го, он отправится обратно на \(3\)-й уровень. Если он пройдет и \(3\)-й уровень, и \(4\)-й, он выиграет игру.

Gildong хочет, чтобы сложности уровней были одинаковы. Он просит вас найти любую систему уровней и контрольных точек используя не больше чем \(2000\) уровней, чтобы математическое ожидание количества попыток на всех уровней (до прохождения игры) было равно \(k\), для игрока, который проходит каждой уровень с вероятностью \(\cfrac{1}{2}\).

Входные данные

Каждый тест состоит из одного или нескольких наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 50\)).

Каждый набор входных данных состоит из ровно одной строки. В строке записано одно целое число \(k\) (\(1 \le k \le 10^{18}\)) — математическое ожидание суммарного числа попыток по всем уровням, которое Gildong хочет получить для игрока, который проходит каждый уровень с вероятностью \(\cfrac{1}{2}\).

Выходные данные

Для каждого набора входных данных, выведите \(-1\), если невозможно построить такую систему уровней и контрольных точек с не более чем \(2000\) уровней.

Иначе, выведите две строки. В первой строке должно быть записано одно целое число \(n\) (\(1 \le n \le 2000\)) — количество уровней. Во второй строке должны быть записаны \(n\) целых чисел, \(i\)-е из них описывает, установлена ли контрольная точка в \(i\)-м уровне. \(i\)-е число должно быть \(0\), если \(i\)-й уровень не содержит контрольную точку, и \(1\), если содержит. Обратите внимание, что первое число должно быть равно \(1\), согласно условию.

Примечание

В первом и втором наборе входных данных, можно видеть, что самая простая конструкция имеет только \(1\) уровень с контрольной точкой. Это требует \(2\) попытки прохождения, поэтому невозможно построить конструкцию с \(1\) попыткой.

В третьем наборе входных данных, это занимает \(2\) попытки в среднем чтобы пройти каждый уровень, и игрок всегда может повторить уровень без откатывания не прошлые уровни. Таким образом, математическое ожидание равно \(8\). Обратите внимание, что есть решения с меньшим количеством уровней, но вам не требуется минимизировать их количество.

E. Четыре точки

геометрия жадные алгоритмы Конструктив математика Перебор Потоки реализация Тернарный поиск *2400

Вам заданы четыре различные целые точки \(p_1\), \(p_2\), \(p_3\) и \(p_4\) на коодинатной плоскости \(\mathit{XY}\).

За один шаг вы можете выбрать одну из точек \(p_i\) и сдвинуть ее в одном из четырех направлений на единицу. Другими словами, если вы выбрали точку \(p_i = (x, y)\), вы можете передвинуть ее в \((x, y + 1)\), \((x, y - 1)\), \((x + 1, y)\) или \((x - 1, y)\).

Ваша задача — сдвинуть точки таким образом, чтобы они образовали квадрат со сторонами параллельными осям \(\mathit{OX}\) и \(\mathit{OY}\) (квадрат со стороной \(0\) разрешен).

Какое минимальное количество шагов вам нужно, чтобы получить такой квадрат?

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор состоит из четырех строк. В каждой строке заданы два целых числа \(x\) и \(y\) (\(0 \le x, y \le 10^9\)) — координаты одной из точек \(p_i = (x, y)\).

Все точки в одном наборе различные.

Выходные данные

Для каждого набора входных данных, выведите единственное число — минимальное количество шагов, необходимых для получения квадрата.

Примечание

В первом наборе входных данных, один из оптимальных ответов изображен ниже:

Каждая точка будет сдвинута два раза, поэтому ответ \(2 + 2 + 2 + 2 = 8\).

Во втором наборе, один из оптимальных ответов изображен ниже:

Ответ равен \(3 + 1 + 0 + 3 = 7\).

В третьем наборе, один из оптимальных ответов изображен ниже:

Ответ равен \(1 + 1 + 2 + 1 = 5\).

B. Счастливая маска

Перебор реализация *1300

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

Маской натурального числа n Петя называет число, полученное последовательной записью всех счастливых цифр числа n слева направо. Например, маской числа 72174994 есть число 7744, 77, 999904747. Очевидно, что маска любого числа всегда является счастливым числом.

У Пети есть два числа — произвольное целое число a и счастливое число b. Помогите ему найти минимальное число c (c > a) такое, что маска числа c равна b.

Входные данные

В единственной строке задано два целых числа a и b (1 ≤ a, b ≤ 105). Гарантируется, что число b — счастливое.

Выходные данные

В единственной строке выведите одно число — искомое Петей c.

B. Найди ель

дп Перебор реализация *1400

Вот-вот наступит новый год. Рик понял, что ему пора задуматься о покупке традиционных новогодних елок. Но Рику жалко покупать настоящие елки, поэтому он решил найти их в матрице размером \(n \times m\), состоящей из символов «*» и «.».

Для того, чтобы найти все ели, сперва дадим определение ели в матрице. Набор ячеек из матрицы называется елью с высотой \(k\) и вершиной в точке \((x, y)\), если:

  • Все ячейки из набора являются символами «*».
  • Для всех \(1 \le i \le k\) все ячейки с номером строки \(x+i-1\) и с номерами столбцов в диапазоне \([y - i + 1, y + i - 1]\) должны принадлежать набору. Все остальные ячейки не могут принадлежать набору.

Примеры корректных и некорректных елок:

Теперь Рику стало интересно, сколько елей существует в его матрице \(n \times m\). Помогите ему ответить на этот вопрос.

Входные данные

Каждый тест содержит один или несколько наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 10\)).

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 500\)) — размер матрицы.

Следующие \(n\) строк каждого из наборов содержат по \(m\) символов \(c_{i, j}\) — описание матрицы. Гарантируется, что \(c_{i, j}\) является либо символом «.», либо символом «*».

Гарантируется, что сумма \(n \cdot m\) по всем тестовым наборам не превосходит \(500^2\) (\(\sum n \cdot m \le 500^2\)).

Выходные данные

Выведите единственное целое число — количество елок в матрице.

Примечание

В первом тестовом примере первая ель имеет вершину в точке \((1, 2)\) и высоту \(2\), вторая ель имеет вершину в точке \((1, 2)\) и высоту \(1\), третья ель имеет вершину в точке \((2, 1)\) и высоту \(1\), четвертая ель имеет вершину в точке \((2, 2)\) и высоту \(1\), пятая ель имеет вершину в точке \((2, 3)\) и высоту \(1\).

Во втором тестовом примере первая ель имеет вершину в точке \((1, 2)\) и высоту \(1\), вторая ель имеет вершину в точке \((2, 1)\) и высоту \(1\), третья ель имеет вершину в точке \((2, 2)\) и высоту \(1\).

D. Разделяй и суммируй

Бинарный поиск Перебор разделяй и властвуй реализация сортировки Структуры данных *1600

Майк получил в подарок на день рождения массив \(a\) длины \(n\) и решил протестировать, насколько он красивый.

Массив пройдет \(i\)-й тест на красоту, если существует способ из изначального массива путем некоторого (возможно, нулевого) количества операций разреза получить массив с суммой элементов, равной \(s_i\).

Операция разреза массива происходит следующим образом:

  • Вычисляется \(mid = \lfloor\frac{max(array) + min(array)}{2}\rfloor\), где \(max\) и \(min\) — это функции нахождения максимального и минимального элемента массива. Иными словами, \(mid\) равно сумме максимального и минимального элементов \(array\), деленной на \(2\) с округлением вниз.
  • Далее массив разделяется на две части \(\mathit{left}\) и \(right\). В \(\mathit{left}\) попадают все элементы массива, которые имеют значение меньшее либо равное \(mid\), а в массив \(right\) попадают все элементы, которые больше \(mid\). Элементы в \(\mathit{left}\) и \(right\) сохраняют свой относительный порядок, который был в \(array\).
  • Третьим шагом выбирается, какой из массивов \(\mathit{left}\) или \(right\) мы хотим оставить. Выбранный массив заменит собой текущий, а другой навсегда удалится.

Вам требуется помочь Майку определить результаты \(q\) тестов на красоту.

Заметьте, что вы тестируете красоту массива \(a\), поэтому вы начинаете каждый тест на красоту с изначальным (заданным) массивом \(a\). Таким образом, первый разрез (если он необходим) всегда совершается над массивом \(a\).

Входные данные

Каждый тест содержит один или несколько наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 100\)).

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) \((1 \le n, q \le 10^5)\) — длину массива \(a\) и количество тестов на красоту соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, ..., a_n\) \((1 \le a_i \le 10^6)\) — описание массива \(a\).

Следующие \(q\) строк каждого набора входных данных содержат по одному целому числу \(s_i\) \((1 \le s_i \le 10^9)\) — сумму элементов, которую хочет добиться Майк в \(i\)-м тесте на красоту.

Гарантируется, что сумма \(n\) и сумма \(q\) не превосходят \(10^5\) (\(\sum n, \sum q \le 10^5\)).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк, каждая из которых должна содержать «Yes», если соответствующий тест на красоту пройден, и «No» в противном случае.

Примечание

Объяснение первого набора входных данных:

  1. Получить массив с суммой \(s_1 = 1\) мы можем следующим способом:

    1.1 \(a = [1, 2, 3, 4, 5]\), \(mid = \frac{1+5}{2} = 3\), \(\mathit{left} = [1, 2, 3]\), \(right = [4, 5]\). Мы выбираем оставить массив \(\mathit{left}\).

    1.2 \(a = [1, 2, 3]\), \(mid = \frac{1+3}{2} = 2\), \(\mathit{left} = [1, 2]\), \(right = [3]\). Мы выбираем оставить массив \(\mathit{left}\).

    1.3 \(a = [1, 2]\), \(mid = \frac{1+2}{2} = 1\), \(\mathit{left} = [1]\), \(right = [2]\). Мы выбираем оставить массив \(\mathit{left}\) с суммой, равной \(1\).

  2. Массив с суммой \(s_2 = 8\) можно показать, что получить невозможно.
  3. Получить массив с суммой \(s_3 = 9\) мы можем следующим способом:

    3.1 \(a = [1, 2, 3, 4, 5]\), \(mid = \frac{1+5}{2} = 3\), \(\mathit{left} = [1, 2, 3]\), \(right = [4, 5]\). Мы выбираем оставить массив \(right\) с суммой, равной \(9\).

  4. Массив с суммой \(s_4 = 12\) можно показать, что получить невозможно.
  5. Получить массив с суммой \(s_5 = 6\) мы можем следующим способом:

    5.1 \(a = [1, 2, 3, 4, 5]\), \(mid = \frac{1+5}{2} = 3\), \(\mathit{left} = [1, 2, 3]\), \(right = [4, 5]\). Мы выбираем оставить массив \(\mathit{left}\) с суммой, равной \(6\).

Объяснение второго набора входных данных:

  1. Массив с суммой \(s_1 = 1\) можно показать, что получить невозможно.
  2. Получить массив с суммой \(s_2 = 2\) мы можем следующим способом:

    2.1 \(a = [3, 1, 3, 1, 3]\), \(mid = \frac{1+3}{2} = 2\), \(\mathit{left} = [1, 1]\), \(right = [3, 3, 3]\). Мы выбираем оставить массив \(\mathit{left}\) с суммой \(2\).

  3. Массив с суммой \(s_3 = 3\) можно показать, что получить невозможно.
  4. Получить массив с суммой \(s_4 = 9\) мы можем следующим способом:

    4.1 \(a = [3, 1, 3, 1, 3]\), \(mid = \frac{1+3}{2} = 2\), \(\mathit{left} = [1, 1]\), \(right = [3, 3, 3]\). Мы выбираем оставить массив \(right\) с суммой \(9\).

  5. Мы можем получить \(s_5 = 11\) без операций разреза, потому что изначальная сумма уже была равна \(11\).

E. Уровень воды

графы жадные алгоритмы математика Перебор реализация *2200

Джон очень успешно обосновался на своей новой работе в офисе. Но Джон не любит сидеть без дела, пока его код компилируется, поэтому он сразу же нашел себе достаточно интересное занятие, которое заключается в поддержании уровня воды в кулере, который используют другие зебры.

Изначально в кулере находится ровно \(k\) литров воды. Джон решил, что уровень воды всегда должен быть не менее \(l\) литров и не более \(r\) литров. Джон будет находиться в офисе ровно \(t\) дней. Он знает, что каждый день из кулера будут выпивать ровно \(x\) литров воды. Джон перед началом каждого дня может налить в кулер ровно \(y\) литров воды. При этом в любой момент времени количество воды в кулере должно находиться в диапазоне \([l, r]\).

Теперь Джону стало интересно, сможет ли он в течение \(t\) дней поддерживать количество воды в кулере. Помогите ему ответить на этот вопрос!

Входные данные

Первая строка ввода содержит шесть целых чисел \(k\), \(l\), \(r\), \(t\), \(x\) и \(y\) (\(1 \le l \le k \le r \le 10^{18}; 1 \le t \le 10^{18}; 1 \le x \le 10^6; 1 \le y \le 10^{18}\)) — изначальное количество воды, требуемый диапазон, количество дней, ежедневные потери воды и допустимое добавляемое количество воды соответственно.

Выходные данные

Выведите «Yes», если Джон сможет поддерживать уровень воды в течение \(t\) дней, и «No» в противном случае.

Примечание

В первом тестовом примере Джон не может увеличить запас воды в начале первого дня, так как он превысит лимит \(r\). Поэтому после первого дня в кулере будет \(2\) литра. Далее Джон увеличивает запас на \(4\) литра, однако теряет \(6\) литров. В итоге у Джона останется \(0\) литров воды, то есть объём не будет в диапазоне \([1, 10]\).

Во втором тестовом примере после первого дня у Джона останется \(2\) литра воды. Далее, в начале второго дня он добавит \(5\) литров, а потом объём воды уменьшится на \(6\) литров. В итоге у Джона останется \(1\) литр воды, что входит в диапазон \([1, 10]\).

В третьем тестовом примере после первого дня у Джона останется \(7\) литров воды, после второго — \(5\) литров, после четвёртого — \(1\) литр. Далее, в начале пятого дня Джон добавит \(9\) литров, а после потеряет \(2\) литра. Значит, после пятого дня у него останется \(8\) литров. Далее, каждый день уровень воды будет понижаться на \(2\) литра, в итоге после восьмого дня у Джона останется \(2\) литра воды, а после девятого — \(0\) литров. \(0\) не входит в диапазон \([1, 10]\), поэтому ответ «No».

В четвёртом тестовом примере после первого дня у Джона останется \(15\) литров воды. В начале второго дня он добавит \(7\) литров, а после потеряет \(5\), а значит после второго дня у него останется \(17\) литров воды. В начале третьего дня он добавит \(7\) литров воды, а после потеряет \(5\), значит после третьего дня у него останется \(19\) литров воды. \(19\) входит в диапазон \([15, 25]\), поэтому ответ «Yes».

C. Уникальное число

жадные алгоритмы математика Перебор *900

Вам задано натуральное число \(x\). Найдите наименьшее натуральное число, у которого сумма цифр равна \(x\) и все цифры различны.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одного натурального числа \(x\) (\(1 \le x \le 50\)).

Выходные данные

Выведите \(t\) ответов на наборы входных данных:

  • если натуральное число, у которого сумма цифр равна \(x\) и все цифры различны существует, то выведите наименьшее такое число;
  • В противном случае выведите -1.

A. Коровья дилемма

геометрия математика Перебор *800

Аргусу было поручено охранять Ио, которая является необычной коровой. Ио настоящий исследователь, и часто далеко уходит, что усложняет жизнь Аргуса. Поэтому, пастух решил построить огороженное пастбище для Ио.

Вдоль реки, около которой Аргус пасет Ио, растет \(n\) деревьев. Будем считать, что река это ось \(OX\) прямоугольной системы координат, а \(n\) деревьев это точки с \(y\) координатами равными \(0\). Также, есть еще одно дерево, растущее в точке \((0, 1)\).

Аргус натянет веревку вокруг трех из деревьев, получив треугольное пастбище. Ио не интересует его форма, но ей важна площадь. У Аргуса есть много способов построить забор, но для Ио важны только те, при которых получатся различные по площади пастбища. Вычислите количество различных площадей, которые может иметь получившееся пастбище. Обратите внимание, что пастбище должно иметь ненулевую площадь.

Входные данные

Во входных данных находятся несколько (не меньше одного) наборов входных данных. В первой строке дано одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее даны \(t\) наборов входных данных, описание каждого занимает две строки.

В первой строке каждого наборов входных данных дано одно целое число \(n\) (\(1 \leq n \leq 50\)), обозначающее количество деревьев, растущих вдоль реки. В следующей строке дано \(n\) различных целых чисел \(x_1 < x_2 < \ldots < x_{n - 1} < x_n\) (\(1 \leq x_i \leq 50\)) — \(x\) координаты деревьев, растущих вдоль реки.

Выходные данные

Для каждого наборов входных данных в отдельной строке выведите одно целое число — количество различных ненулевых площадей, которые могут иметь треугольники с деревьями в качестве вершин.

Примечание

В первом наборе входных данных есть \(6\) невырожденных треугольников со следующими площадями: \(0.5\), \(0.5\), \(1\), \(1.5\), \(1.5\) и \(2\). Пастбище может иметь \(4\) различных площади, поэтому \(4\) является ответом.

Во втором наборе входных данных есть \(3\) невырожденных треугольника со следующими площадями: \(1\), \(1\) и \(2\). Пастбище может иметь \(2\) различных площади, поэтому ответ \(2\).

Следующие иллюстрации показывают два возможных варианта площади во втором наборе входных данных. Синие треугольники на первой иллюстрации имеют площадь \(1\). Красный треугольник на второй иллюстрации имеет площадь \(2\).

E. Аполлон против Пана

битмаски математика Перебор *1800

Немногие знают, что Пан и Аполлон боролись не только за звание лучшего музыканта всех времен. Несколько тысячелетий спустя они также бросили друг другу вызов в математике (или скорее в быстрых вычислениях). Им предстояло решить следующую задачу:

Рассмотрим \(x_1, x_2, \ldots, x_n\) — последовательность из \(n\) неотрицательных целых чисел. Вычислите следующее значение: \(\)\sum_{i=1}^n \sum_{j=1}^n \sum_{k=1}^n (x_i \, \& \, x_j) \cdot (x_j \, | \, x_k)\(\)

Здесь \(\&\) обозначает побитовый И, а \(|\) обозначает побитовый ИЛИ.

Пан и Аполлон смогли решить эту задачу за несколько секунд. А вы сможете? Для удобства, вычислите ответ по модулю \(10^9 + 7\).

Входные данные

Во входных данных находятся несколько (не меньше одного) наборов входных данных. В первой строке дано одно целое число \(t\) (\(1 \leq t \leq 1\,000\)), обозначающее количество наборов входных данных. Затем дано \(t\) наборов входных данных.

В первой строке каждого набора входных данных дано одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)), длина последовательности. Во второй строке дано \(n\) неотрицательных целых чисел \(x_1, x_2, \ldots, x_n\) (\(0 \leq x_i < 2^{60}\)), элементы последовательности.

Сумма \(n\) по всем наборам входных данных не превышает \(5 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, \(i\)-я должна содержать ответ на \(i\)-й набор входных данных.

B. Холмы и долины

Перебор реализация *1700

Дана последовательность \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\). Назовем индекс \(j\) (\(2 \le j \le {{n-1}}\)) холмом, если \(a_j > a_{{j+1}}\) и \(a_j > a_{{j-1}}\); и назовем его долиной, если \(a_j < a_{{j+1}}\) и \(a_j < a_{{j-1}}\).

Определим страшность последовательности как сумму числа холмов и числа долин этой последовательности. Разрешается заменить ровно одно число в последовательности на любое другое, либо оставить последовательность без изменений. Какое минимальное значение страшности при этом можно достигнуть?

Входные данные

В первой строке входных данных содержится единственное целое число \(t\) (\(1 \le t \le 10000\)) — количество наборов входных данных. Затем следуют описания самих наборов.

Первая строка каждого набора содержит единственное целое число \(n\) (\(1 \le n \le 3\cdot10^5\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^9\)), разделенных пробелами.

Гарантируется, что сумма \(n\) во всех наборах входных данных не превышает \(3\cdot10^5\).

Выходные данные

Для каждого набора входных данных требуется вывести единственное целое число — минимальное значение страшности, которое может быть достигнуто при заданных входных данных.

Примечание

В первом наборе входных данных изменение значения \(a_2\) на \(2\) приведет к тому, что холмов и долин не будет.

Во втором наборе входных данных наилучшим решением будет оставить массив без изменений.

В третьем наборе входных данных изменение значения \(a_3\) на \(6\) приведет к тому, что будет только одна долина (с индексом \(5\)).

В четвертом наборе входных данных изменение значения \(a_3\) на \(6\) приведет к тому, что холмов и долин не будет.

K. The Robot

Перебор реализация *1600

There is a robot on a checkered field that is endless in all directions. Initially, the robot is located in the cell with coordinates \((0, 0)\). He will execute commands which are described by a string of capital Latin letters 'L', 'R', 'D', 'U'. When a command is executed, the robot simply moves in the corresponding direction:

  • 'L': one cell to the left (the \(x\)-coordinate of the current cell decreases by \(1\));
  • 'R': one cell to the right (the \(x\)-coordinate of the current cell is increased by \(1\));
  • 'D': one cell down (the \(y\)-coordinate of the current cell decreases by \(1\));
  • 'U': one cell up (the \(y\)-coordinate of the current cell is increased by \(1\)).

Your task is to put an obstacle in one cell of the field so that after executing the commands, the robot will return to the original cell of its path \((0, 0)\). Of course, an obstacle cannot be placed in the starting cell \((0, 0)\). It is guaranteed that if the obstacle is not placed, then the robot will not return to the starting cell.

An obstacle affects the movement of the robot in the following way: if it tries to go in a certain direction, and there is an obstacle, then it simply remains in place (the obstacle also remains, that is, it does not disappear).

Find any such cell of the field (other than \((0, 0)\)) that if you put an obstacle there, the robot will return to the cell \((0, 0)\) after the execution of all commands. If there is no solution, then report it.

Input

The first line contains one integer \(t\) (\(1 \le t \le 500\)) — the number of test cases.

Each test case consists of a single line containing \(s\) — the sequence of commands, which are uppercase Latin letters 'L', 'R', 'D', 'U' only. The length of \(s\) is between \(1\) and \(5000\), inclusive. Additional constraint on \(s\): executing this sequence of commands leads the robot to some cell other than \((0, 0)\), if there are no obstacles.

The sum of lengths of all \(s\) in a test doesn't exceed \(5000\).

Output

For each test case print a single line:

  • if there is a solution, print two integers \(x\) and \(y\) (\(-10^9 \le x,y \le 10^9\)) such that an obstacle in \((x, y)\) will force the robot to return back to the cell \((0, 0)\);
  • otherwise, print two zeroes (i. e. 0 0).

If there are multiple answers, you can print any of them.

D. Деление с округлением вверх

Конструктив математика Перебор теория чисел *1700

Вам задан массив \(a_1, a_2, \dots, a_n\), в котором \(a_i = i\).

За один шаг, вы можете выбрать две позиции \(x\) и \(y\) (\(x \neq y\)) и присвоить \(a_x = \left\lceil \frac{a_x}{a_y} \right\rceil\) (деление с округлением вверх).

Ваша задача: сделать так, чтобы массив \(a\) состоял из \(n - 1\) единиц и \(1\)-й двойки за не более чем \(n + 5\) шагов. Заметим, что не нужно минимизировать количество шагов.

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой и единственной строке каждого набора задано одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите список операций, который сделает так, что массив \(a\) станет состоять из \(n - 1\) единиц и \(1\)-й двойки, в следующем формате: сначала, выведите одно число \(m\) (\(m \le n + 5\)) — количество операций; далее выведите \(m\) пар чисел \(x\) и \(y\) (\(1 \le x, y \le n\); \(x \neq y\)) (\(x\) может быть как больше, так и меньше \(y\)) — выбранные позиции на соответствующем шаге.

Можно доказать, что для заданных ограничений всегда возможно найти некоторый список операций.

Примечание

В первом наборе входных данных, у вас есть массив \(a = [1, 2, 3]\). Вы можете сделать, например, следующее:

  1. выберем \(3\), \(2\): \(a_3 = \left\lceil \frac{a_3}{a_2} \right\rceil = 2\) и массив \(a = [1, 2, 2]\);
  2. выберем \(3\), \(2\): \(a_3 = \left\lceil \frac{2}{2} \right\rceil = 1\) и массив \(a = [1, 2, 1]\).
Вы получили массив с \(2\) единицами и \(1\) двойкой за \(2\) шага.

Во втором наборе, \(a = [1, 2, 3, 4]\). Вы можете, например, сделать следующее:

  1. выберем \(3\), \(4\): \(a_3 = \left\lceil \frac{3}{4} \right\rceil = 1\) и массив \(a = [1, 2, 1, 4]\);
  2. выберем \(4\), \(2\): \(a_4 = \left\lceil \frac{4}{2} \right\rceil = 2\) и массив \(a = [1, 2, 1, 2]\);
  3. выберем \(4\), \(2\): \(a_4 = \left\lceil \frac{2}{2} \right\rceil = 1\) и массив \(a = [1, 2, 1, 1]\).

E. Немного похожи

битмаски Перебор Строки строковые суфф. структуры хэши *2400

Назовем две строки \(a\) и \(b\) (обе длиной \(k\)) немного похожими, если они имеют один и тот же символ в некоторой позиции, то есть существует по крайней мере одно \(i \in [1, k]\) такое, что \(a_i = b_i\).

Задана двоичная строка \(s\) длины \(n\) (строка из \(n\) символов 0 и/или 1) и целое число \(k\). Обозначим строку \(s[i..j]\) как подстроку \(s\), начинающуюся с \(i\)-го символа и заканчивающуюся \(j\)-м символом (то есть \(s[i..j] = s_i s_{i + 1} s_{i + 2} \dots s_{j - 1} s_j\)).

Назовем двоичную строку \(t\) длины \(k\) красивой, если она немного похожа на все подстроки \(s\), имеющие длину ровно \(k\); то есть она немного похожа на \(s[1..k], s[2..k+1], \dots, s[n-k+1..n]\).

Ваша задача — найти лексикографически наименьшую строку \(t\), которая является красивой, или сообщить, что такой строки не существует. Строка \(x\) лексикографически меньше строки \(y\), если \(x\) является префиксом \(y\)\(x \ne y\)), либо существует такое \(i\) (\(1 \le i \le \min(|x|, |y|)\)), что \(x_i < y_i\), и для любого \(j\) (\(1 \le j < i\)) \(x_j = y_j\).

Входные данные

Первая строка содержит одно целое число \(q\) (\(1 \le q \le 10000\)) — количество наборов входных данных. Каждый набор состоит из двух строк.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^6\)). Вторая строка содержит строку \(s\), состоящую из \(n\) символов (каждый символ либо 0, либо 1).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

  • если невозможно построить красивую строку, выведите одну строку, содержащую слово NO (Примечание: именно в верхнем регистре, например, нельзя выводить No);
  • в противном случае выведите две строки. Первая строка должна содержать слово YES (именно в верхнем регистре); вторая строка — лексикографически наименьшая красивая строка, состоящая из \(k\) символов 0 и/или 1.

C. Странное перемешивание

Бинарный поиск интерактив Конструктив Перебор *2500

Это интерактивная задача.

Алиса, Витя, Сева и Антон решили перемешать колоду карт. Для этого они позвали \(n\) своих друзей, усадили их по кругу, пронумеровали от \(1\) до \(n\) против часовой стрелки (то есть друзья \(i\) и \(i+1\) являются соседями, друзья \(1\) и \(n\) тоже соседи) и раздали каждому по \(k\) карт, где \(k\) — четно. Соседом слева человека \(i\) является человек \(i - 1\), а соседом справа — человек \(i + 1\) (за исключением людей \(1\) и \(n\), которые являются соответствующими соседями друг друга).

Каждую секунду происходит следующее: если у человека находится \(x\) карт, то он передаёт \(\lfloor x / 2 \rfloor\) карт своему соседу слева и \(\lceil x / 2 \rceil\) карт соседу справа. Передача карт происходит одновременно для всех игроков.

Оказалось, что человек под номером \(p\) не понял, что он должен делать, и каждую секунду отдаёт все свои карты своему соседу справа. Вы знаете общее число друзей \(n\) и начальное количество карт у каждого из них \(k\), но не знаете \(p\). Ваша задача — узнать \(p\), задавая вопросы вида «сколько карт в данный момент находится у участника с номером \(q\)?», где \(q\) — некоторый выбранный вами индекс. После каждого из ваших вопросов участники произведут ровно один ход, передав карты своим соседям. Вам нужно угадать искомую позицию, задав не более \(1000\) вопросов.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(4 \le n \le 10^5\), \(2 \le k \le 10^9\), \(k\) четно) — количество людей и количество карт у каждого из них изначально.

Протокол взаимодействия

Для того, чтобы узнать количество карт в текущий момент у человека под номером \(q\) (\(1 \le q \le n\)), выведите в отдельной строке «? \(q\)». Процесс перемешивания начинается после вашего первого вопроса, таким образом, ответ на первый вопрос всегда в точности равен \(k\).

Когда вы определили человека, который не понял правила, выведите в отдельной строке «! \(p\)», где \(p\) — искомая позиция (\(1 \le p \le n\)), и после этого ваша программа должна немедленно завершиться.

Вам требуется найти искомого человека, задав не более, чем \(1000\) вопросов.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для того, чтобы сделать взлом, используйте следующий формат теста.

В единственной строке входных данных должны содержаться три числа \(n\), \(k\) и \(p\) (\(4 \le n \le 10^5\), \(2 \le k \le 10^9\), \(k\) четно, \(1 \le p \le n\)) — количество людей, количество карт у каждого из них и искомая позиция.

Примечание

В примере карты передаются следующим образом:

  • \(2\) \(2\) \(2\) \(2\) — у человека \(1\) количество карт равно \(2\).
  • \(1\) \(2\) \(3\) \(2\) — у человека \(1\) количество карт равно \(1\).

После этого количество карт у людей перестаёт меняться.

B. Странный список

жадные алгоритмы математика Перебор реализация *1100

На Новый Год Дима получил целых два подарка: массив \(a\) длины \(n\) и число \(x\). Оба подарка ему очень понравились, и он сразу же начал экспериментировать с ними. Для этого он отдал их своему новому роботу.

Робот обрабатывает элементы массива по очереди. Пусть текущий рассматриваемый элемент равен \(q\). Если \(q\) кратно \(x\), то робот дописывает в конец массива \(x\) копий числа \(\frac{q}{x}\), а после этого переходит к следующему элементу массива. Обратите внимание, что добавленные элементы могут быть рассмотрены роботом в будущем. Если же \(q\) не делится на \(x\), то робот немедленно прекращает работу.

Определите, чему будет равна сумма элементов массива после того, как робот закончит работу.

Входные данные

Первая строка содержит одно число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \leq n \leq 10^5\), \(2 \leq x \leq 10^9\)) — количество элементов массива и число, на которое робот делит элементы массива.

Следующая строка содержит целые числа \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \leq a_i \leq 10^9\)) — изначальные элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — сумму элементов после окончания процесса.

Примечание

В первом наборе входных данных массив изначально состоит лишь из одного числа: \([12]\), а \(x = 2\). После рассмотрения первого элемента массив превратится в \([12, 6, 6]\). После обработки второго элемента массив будет содержать элементы \([12, 6, 6, 3, 3]\). После обработки третьего элемента массив будет состоять из чисел \([12, 6, 6, 3, 3, 3, 3]\), а после этого робот рассмотрим следующий элемент, который не делится на \(x=2\), и завершит работу. Сумма чисел в итоговом массиве равна \(36\).

Во втором наборе входных данных массив изначально состоит из чисел \([4, 6, 8, 2]\), а \(x=2\). Итоговый массив выглядит как \( [4, 6, 8, 2, 2, 2, 3, 3, 4, 4, 1, 1, 1, 1, 1, 1]\).

F. Новогодняя головоломка

дп жадные алгоритмы Паросочетания Перебор сортировки *2100

Каждый год Дед Мороз дарит подарки всем детям. Однако в каждой стране есть свои традиции, и этот процесс происходит по разному. Например в Берляндии нужно решить новогоднюю головоломку.

Поликарпу досталась следующая задача: дана клетчатая полоска размером \(2 \times n\), некоторые клетки на ней заблокированы. Нужно проверить, можно ли замостить все незаблокированные клетки с помощью дощечек \(2 \times 1\) и \(1 \times 2\).

Например, если \(n = 5\) и полоска имеет следующий вид (черные клетки заблокированы):

То ее можно замостить, например, используя две вертикальных и две горизонтальных, как на картинке ниже (разные дощечки обозначаются разным цветом).

А если \(n = 3\) и полоска имеет следующий вид:

То замостить свободные клетки невозможно.

Поликарп легко справился с этой задачей и получил свой новогодний подарок. А сможете ли вы решить ее?

Входные данные

В первой строке находится целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Перед каждым набором входных данных расположена пустая строка.

В первой строке каждого набора содержится два целых числа \(n\) и \(m\) (\(1 \le n \le 10^9\), \(1 \le m \le 2 \cdot 10^5\)) — длина полоски и количество заблокированных клеток на ней.

В следующих \(m\) строках находится по два целых числа \(r_i, c_i\) (\(1 \le r_i \le 2, 1 \le c_i \le n\)) — номера строк и столбцов заблокированных клеток. Гарантируется, что все заблокированные клетки различные, т.е. \((r_i, c_i) \ne (r_j, c_j), i \ne j\).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если можно ли замостить все незаблокированные клетки с помощью дощечек \(2 \times 1\) и \(1 \times 2\);
  • «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Первые два набора входных данных разобраны в условии.

В третьем наборе входных данных полоска выглядит следующим образом

Несложно убедиться, что свободные клетки на ней нельзя замостить

B. LCM строк

математика Перебор Строки теория чисел *1000

Давайте определим операцию умножения между строкой \(a\) и положительным целым числом \(x\): \(a \cdot x\) — это строка, которая является результатом записи \(x\) копий \(a\) одна за другой. Например, «abc» \(\cdot~2~=\) «abcabc», «a» \(\cdot~5~=\) «aaaaa».

Строка \(a\) делится на другую строку \(b\), если существует целое число \(x\) такое, что \(b \cdot x = a\). Например, «abababab» делится на «ab», но не делится на «ababab» или «aa».

LCM из двух строк \(s\) и \(t\) (определяется как \(LCM(s, t)\)) — это самая короткая непустая строка, которая делится как на \(s\), так и на \(t\).

Вам даны две строки \(s\) и \(t\). Найдите \(LCM(s, t)\) или сообщите, что он не существует. Можно показать, что если \(LCM(s, t)\) существует, то он единственный.

Входные данные

Первая строка содержит одно целое число \(q\) (\(1 \le q \le 2000\)) — количество наборов входных данных.

Каждый набор состоит из двух строк, содержащих строки \(s\) и \(t\) (\(1 \le |s|, |t| \le 20\)). Каждый символ в каждой из этих строк является либо 'a', либо 'b'.

Выходные данные

Для каждого набора входных данных выведите \(LCM(s, t)\), если он существует; в противном случае выведите -1. Можно показать, что если \(LCM(s, t)\) существует, то он единственный.

Примечание

В первом примере «baba» = «baba» \(\cdot~1~=\) «ba» \(\cdot~2\).

Во втором примере, «aaaaaa» = «aa» \(\cdot~3~=\) «aaa» \(\cdot~2\).

C. Уничтожение массива

жадные алгоритмы Конструктив Перебор реализация сортировки Структуры данных *1700

Вы нашли бесполезный массив целых чисел \(a\) длины \(2n\). Так как он оказался Вам не нужен, Вы решили выкинуть все элементы \(a\).

Это было бы просто, но оказалось, что выкидывать числа надо, соблюдая следующие правила:

  1. Сначала Вы выбираете натуральное число \(x\).
  2. Затем Вы \(n\) раз повторите следующую операцию:
    • выбрать два числа с суммой \(x\)
    • выкинуть их из \(a\) и заменить \(x\) на максимальное из этих двух чисел.

Например, если изначально \(a = [3, 5, 1, 2]\), то Вы можете выбрать \(x = 6\) и выкинуть второе и третье число в \(a\), сумма которых равна \(5 + 1 = 6\). После этого \(x\) станет равно \(5\), а в массиве останутся числа \(3\) и \(2\), которые Вы можете выкинуть на следующей операции.

Обратите внимание, что Вы выбираете \(x\) только в начале и не можете изменить его между операциями.

Напишите программу, чтобы определить, как выбросить все элементы \(a\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют описания самих наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \leq n \leq 1000\)).

Во второй строке каждого набора задано \(2n\) натуральных чисел \(a_1, a_2, \dots, a_{2n}\) (\(1 \leq a_i \leq 10^6\)) — изначальный массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных в первой строке выведите YES если возможно выкинуть все элементы массива. Иначе выведите NO.

Если Вы вывели YES в следующей строке выведите значение \(x\), которое Вы выбираете в начале. В следующих \(n\) строках выведите по два числа — числа, которые Вы выбираете на очередной операции.

Примечание

Первый набор входных данных был описан в условии.

Во втором и третьем наборах входных данных можно показать, что нельзя выкинуть все элементы массива \(a\).

B. Новогоднее число

дп математика Перебор *900

Поликарпу запомнился \(2020\)-й год, и он рад приходу нового \(2021\)-го года. Чтобы запомнить такой замечательный момент, Поликарп хочет представить число \(n\) в виде суммы некоторого количества чисел \(2020\) и некоторого количества чисел \(2021\).

Например, если:

  • \(n=4041\), то число \(n\) представимо в виде суммы \(2020 + 2021\);
  • \(n=4042\), то число \(n\) представимо в виде суммы \(2021 + 2021\)
  • \(n=8081\), то число \(n\) представимо в виде суммы \(2020 + 2020 + 2020 + 2021\)
  • \(n=8079\), то число \(n\) нельзя представить в виде суммы чисел \(2020\) и \(2021\).

Помогите Поликарпу понять, может ли число \(n\) быть представлено в виде суммы некоторого количества чисел \(2020\) и некоторого количества чисел \(2021\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — число, которое Поликарп хочет представить в виде суммы чисел \(2020\) и \(2021\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если число \(n\) представимо в виде суммы некоторого количества чисел \(2020\) и некоторого количества чисел \(2021\);
  • «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

F. Необычная матрица

2-sat Конструктив Перебор *1900

Вам даны две бинарные квадратные матрицы \(a\) и \(b\) размера \(n \times n\). Матрица называется бинарной, если каждый её элемент равен \(0\) или \(1\). Вы можете делать следующие операции над матрицей \(a\) произвольное число раз (0 или более):

  • вертикальный xor. Вы выбираете число \(j\) (\(1 \le j \le n\)) и для всех \(i\) (\(1 \le i \le n\)) делаете следующее: \(a_{i, j} := a_{i, j} \oplus 1\) (\(\oplus\) — это операция xor (исключающее или)).
  • горизонтальный xor. Вы выбираете число \(i\) (\(1 \le i \le n\)) и для всех \(j\) (\(1 \le j \le n\)) делаете следующее: \(a_{i, j} := a_{i, j} \oplus 1\).

Заметьте, что элементы матрицы \(a\) изменяются после каждой операции.

Например, если \(n=3\) и матрица \(a\) равна: \(\) \begin{pmatrix} 1 & 1 & 0 \\ 0 & 0 & 1 \\ 1 & 1 & 0 \end{pmatrix} \(\) Тогда следующий набор операций показывает пример преобразований:

  • вертикальный xor, \(j=1\). \(\) a= \begin{pmatrix} 0 & 1 & 0 \\ 1 & 0 & 1 \\ 0 & 1 & 0 \end{pmatrix} \(\)
  • горизонтальный xor, \(i=2\). \(\) a= \begin{pmatrix} 0 & 1 & 0 \\ 0 & 1 & 0 \\ 0 & 1 & 0 \end{pmatrix} \(\)
  • вертикальный xor, \(j=2\). \(\) a= \begin{pmatrix} 0 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{pmatrix} \(\)

Проверьте, существует ли такая последовательность операций, что матрица \(a\) станет равна матрице \(b\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набор входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 1000\)) — размер матриц.

Следующие \(n\) строк содержат строки длины \(n\), состоящие из символов '0' и '1' — описание матрицы \(a\).

Далее следует пустая строка.

Следующие \(n\) строк содержат строки длины \(n\), состоящие из символов '0' и '1' — описание матрицы \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если существует такая последовательность операций, что матрица \(a\) станет равна матрице \(b\);
  • «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных подходит следующая последовательность операций:

  • горизонтальный xor, \(i=1\);
  • горизонтальный xor, \(i=2\);
  • горизонтальный xor, \(i=3\);

Можно доказать, что в третьем наборе входных данных не существует последовательности операций, так что матрица \(a\) становится равной матрице \(b\).

B. Инфляция

Бинарный поиск жадные алгоритмы математика Перебор *1300

У вас есть статистика роста цен некоторого товара в виде массива из \(n\) положительных целых чисел \(p_0, p_1, \dots, p_{n - 1}\), где \(p_0\) — это начальная цена товара, а \(p_i\) — это насколько подорожал товар за \(i\)-й месяц.

Используя эти данные вам нужно посчитать коэффициенты инфляции для каждого месяца как отношение текущего подорожания \(p_i\) к цене товара на начало месяца \((p_0 + p_1 + \dots + p_{i - 1})\).

Ваш босс вам ясно дал понять, что коэффициенты инфляции не должны превышать \(k\) %, поэтому вы решили увеличить некоторые значения \(p_i\) таким образом, что все \(p_i\) — все еще целые числа, а коэффициенты инфляции за каждый месяц не будут превосходить \(k\) %.

Вы знаете, что чем сильнее изменения — тем очевиднее обман. А потому вам нужно минимизировать сумму изменений.

Какую наименьшую сумму изменений вам нужно сделать, чтобы все коэффициенты инфляции не превосходили \(k\) %?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 100\); \(1 \le k \le 100\)) — длина массива \(p\) и коэффициент \(k\).

Во второй строке каждого набора заданы \(n\) целых чисел \(p_0, p_1, \dots, p_{n - 1}\) (\(1 \le p_i \le 10^9\)) — массив \(p\).

Выходные данные

Для каждого набора входных данных выведите наименьшую сумму изменений, которые сделают все коэффициенты инфляции не превосходящими \(k\) %.

Примечание

В первом наборе входных данных, вы можете, например, увеличить \(p_0\) на \(50\) и \(p_1\) на \(49\) и получить массив \([20150, 50, 202, 202]\). Тогда у вас получатся следующие коэффициенты инфляции:

  1. \(\frac{50}{20150} \le \frac{1}{100}\);
  2. \(\frac{202}{20150 + 50} \le \frac{1}{100}\);
  3. \(\frac{202}{20200 + 202} \le \frac{1}{100}\);

Во втором наборе, вам не нужно модифицировать массив \(p\), так как все коэффициенты инфляции уже подходят:

  1. \(\frac{1}{1} \le \frac{100}{100}\);
  2. \(\frac{1}{1 + 1} \le \frac{100}{100}\);

A. Nezzar и разноцветные шары

жадные алгоритмы Перебор *800

У Nezzar есть \(n\) шаров, пронумерованных числами \(1, 2, \ldots, n\). На них написаны числа \(a_1, a_2, \ldots, a_n\), соответственно. Числа на этих шарах образуют неубывающую последовательность, то есть \(a_i \leq a_{i+1}\) для всех \(1 \leq i < n\).

Nezzar хочет покрасить эти шары в минимальное количество цветов так, чтобы следующее условие было выполнено.

  • Для любого цвета числа будут образовывать строго возрастающую последовательность, если он оставит только шары этого цвета и уберет все остальные шары.

Обратите внимание, что последовательность длины не больше \(1\) считается строго возрастающей последовательностью.

Помогите Nezzar определить минимальное количество цветов.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1 \le n \le 100\)).

Во второй строке описания каждого набора входных данных находятся \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le n\)). Гарантируется, что \(a_1 \leq a_2 \leq \ldots \leq a_n\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество цветов, которое Nezzar может использовать.

Примечание

Будем каждому цвету сопоставлять свое число. Тогда:

В первом наборе входных данных одна из оптимальных раскрасок это \([1,2,3,3,2,1]\).

Во втором наборе входных данных одна из оптимальных раскрасок это \([1,2,1,2,1]\).

B. Nezzar и счастливые числа

дп жадные алгоритмы математика Перебор *1100

Любимая цифра Nezzar среди \(1,\ldots,9\) — это цифра \(d\). Он называет положительное целое число счастливым, если \(d\) встречается хотя бы раз в его десятичном представлении.

Дано \(q\) целых чисел \(a_1,a_2,\ldots,a_q\). Для каждого \(1 \le i \le q\) Nezzar хочет узнать, может ли \(a_i\) быть равно сумме (одного или более) счастливых чисел.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 9\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(q\) и \(d\) (\(1 \le q \le 10^4\), \(1 \le d \le 9\)).

Во второй строке описания каждого набора входных данных находится \(q\) целых чисел \(a_1,a_2,\ldots,a_q\) (\(1 \le a_i \le 10^9\)).

Выходные данные

Для каждого числа в каждом наборе входных данных выведите «YES», если \(a_i\) может быть равно сумме счастливых чисел. Иначе выведите «NO».

Вы можете выводить символы в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных \(24 = 17 + 7\), \(27\) само является счастливым числом, \(25\) не может быть равно сумме счастливых чисел.

D. Странный источник минералов

Бинарный поиск битмаски Деревья Перебор Структуры данных Теория вероятностей *2900

В стране Гомера есть \(n\) городов с номерами от \(1\) до \(n\), которые образуют дерево. Иначе говоря, между этими \(n\) городами есть \((n-1)\) неориентированных дорог, и с каждого города можно попасть в любой другой по этим дорогам.

Страна Гомера — индустриальная страна, и каждый из \(n\) городов в ней содержит некоторый минеральный ресурс. Минеральный ресурс города \(i\) обозначен как \(a_i\).

Гомеру даны планы страны на \(q\) следующих лет. План \(i\)-го года описывается четырьмя параметрами \(u_i, v_i, l_i\) и \(r_i\), и он должен найти любой такой минеральный ресурс \(c_i\) такой, что выполняются два условия:

  • минеральный ресурс \(c_i\) встречается нечетное количество раз между городами \(u_i\) и \(v_i\);
  • \(l_i \leq c_i \leq r_i\).

Так как вы лучший друг Гомера, он просит вас о помощи. Для каждого плана найдите любой такой минерал \(c_i\) или скажите, что его нет.

Входные данные

Первая строка содержит два целых числа \(n\) (\(1 \leq n \leq 3 \cdot 10^5\)) и \(q\) (\(1 \leq q \leq 3 \cdot 10^5\)) — количество городов и количество планов соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)).

\(i\)-я строка из следующих \((n-1)\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \leq x_i, y_i \leq n\)) с \(x_i \neq y_i\), обозначающие дорогу между городами \(x_i\) и \(y_i\). Гарантируется, что данные дороги образуют дерево.

\(i\)-я строка из следующих \(q\) строк содержит четыре целых числа \(u_i\), \(v_i\), \(l_i\), \(r_i\) (\(1 \leq u_i \leq n\), \(1 \leq v_i \leq n\), \(1 \leq l_i \leq r_i \leq n\)), указывающие на план города в \(i\)-й год.

Выходные данные

Выведите \(q\) строк, \(i\)-я из которых содержит целое число \(c_i\), такое, что

  • \(c_i = {-1}\), если нет такого минерального ресурса, который соответствовал бы требуемому условию; или
  • \(c_i\) — это номер выбранного минерального ресурса в \(i\)-м году. Выбранный минеральный ресурс \(c_i\) должен удовлетворять условиям \(i\)-го года, описанным выше в условии задачи. Если есть несколько подходящих \(c_i\), вы можете вывести любой из них.
Примечание

В первых трех запросах четыре города находятся между городом \(3\) и городом \(5\), а именно: город \(1\), город \(2\), город \(3\) и город \(5\). В них представлены минеральные ресурсы \(1\) (появляется в городах \(3\) и \(5\)), \(2\) (появляется в городе \(2\)) и \(3\) (появляется в городе \(1\)). Следует отметить, что

  • Первый запрос заключается только в том, чтобы проверить, появляется ли минеральный источник \(1\) нечетное количество раз между городом \(3\) и городом \(5\). Ответ — нет, потому что минеральный источник \(1\) появляется дважды (четное число раз) между городом \(3\) и городом \(5\).
  • Второй и третий запросы одинаковы, но они могут выбирать разные минеральные ресурсы. Вы можете выбрать любой из \(2\) и \(3\).

B. Новая колония

жадные алгоритмы Перебор реализация *1100

Достигнув нужной планеты вы решили основать здесь колонию. Так как на планете множество гор, а для колонии нужна ровная поверхность, вы решили выровнять горы, используя валуны (во сне эта идея показалась вам вполне логичной).

Вам задан массив \(h_1, h_2, \dots, h_n\), в котором \(h_i\) — это высота \(i\)-й горы, и \(k\) — количество валунов в вашем распоряжении.

Вы начинаете сбрасывать валуны над первой горой по одному, и каждый валун будет двигаться следующим образом (предположим, высота текущей горы равна \(h_i\)):

  • если \(h_i \ge h_{i + 1}\), валун перекатится на следующую гору;
  • если \(h_i < h_{i + 1}\), валун остановится и увеличит высоту текущей горы на \(1\) (\(h_i = h_i + 1\));
  • если валун достигает последней горы, то он упадет в специальную систему сбора остатков и исчезнет.

Ваша задача — определить финальную позицию \(k\)-го валуна или сказать, что он упадет в систему сбора.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 100\); \(1 \le k \le 10^9\)) — количество гор и валунов.

Во второй строке заданы \(n\) целых чисел \(h_1, h_2, \dots, h_n\) (\(1 \le h_i \le 100\)) — высоты гор.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(100\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если \(k\)-й валун упадет в систему сбора. В противном случае выведите позицию \(k\)-го валуна.

Примечание

Промоделируем первый набор входных данных:

  • Первый валун появляется в \(i = 1\); так как \(h_1 \ge h_2\), он перемещается в \(i = 2\), и остается там, так как \(h_2 < h_3\).
  • Новые высоты будут равны \([4,2,2,3]\).
  • Второй валун появляется в \(i = 1\); так как \(h_1 \ge h_2\), валун перемещается в \(i = 2\); так как \(h_2 \ge h_3\), валун перемещается в \(i = 3\), и остается там, как как \(h_3 < h_4\).
  • Новые высоты будут равны \([4,2,3,3]\).
  • Третий валун появляется в \(i = 1\); так как \(h_1 \ge h_2\), перемещается в \(i = 2\), и остается там, так как \(h_2 < h_3\).
  • Новые высоты будут равны \([4,3,3,3]\).

Позиции, в которых каждый валун остановится, следующие: \([2,3,2]\).

Во втором наборе все \(7\) валунов останутся прямо на первой горе, увеличивая ее высоту от \(1\) до \(8\).

Третий набор входных данных похож на первый, но в данном случае вы сбросите \(5\) валунов. Первые три будут вести себя аналогично первому набору входных данных. После этого высоты гор станут равны \([4, 3, 3, 3]\), а потому оставшиеся два валуна упадут в систему сбора.

В четвертом наборе первый и единственный валун упадет прямо в систему сбора.

C. Покраска забора

жадные алгоритмы Конструктив Перебор *1600

Вы наконец проснулись после такого невероятного сна и решили немного прогуляться на свежем воздухе. Снаружи вы увидели забор вашего дома — такой скучный, что вам захотелось его перекрасить.

У вас есть забор, состоящий из \(n\) досок, и \(i\)-я доска покрашена в цвет \(a_i\). Вы хотите перекрасить забор так, чтобы \(i\)-я доска стала цвета \(b_i\).

Для этого вы пригласили \(m\) маляров: \(j\)-й маляр придет в момент времени \(j\) и перекрасит ровно одну доску в цвет \(c_j\). Вы можете сказать каждому маляру, какую именно доску перекрасить, но вы не можете отказаться от его услуг, т. е. каждый маляр обязан покрасить ровно одну доску.

Можете ли вы получить желаемую раскраску \(b\)? Если это возможно, выведите для каждого маляра номер доски, которую он должен покрасить.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов.

В первой строке каждого набора заданы два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^5\)) — количество досок в заборе и количество маляров.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — первоначальные цвета досок забора.

В третьей строке каждого набора заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le n\)) — желаемые цвета досок забора.

В четвертой строке каждого набора заданы \(m\) целых чисел \(c_1, c_2, \dots, c_m\) (\(1 \le c_j \le n\)) — цвета, в которые перекрашивают маляры.

Гарантируется, что сумма \(n\) не превосходит \(10^5\), и сумма \(m\) не превосходит \(10^5\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных, выведите «NO», если невозможно получить раскраску \(b\).

В противном случае выведите «YES» и \(m\) целых чисел \(x_1, x_2, \dots, x_m\), где \(x_j\) — это номер доски, которую должен перекрасить \(j\)-й маляр.

Ответ можете выводить в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ на запрос).

D. AB граф

графы жадные алгоритмы Конструктив Перебор реализация *2000

Ваш друг Salem — брат Warawreh, и ему нравятся только математические и геометрические задачи. Он решил уже множество таких задач, но, по словам Warawreh, чтобы успешно окончить университет, ему нужно решать больше графовых задач. Так как Salem не очень хорош в графах, он попросил вас помочь ему с такой задачей.

Вам задан полный ориентированный граф из \(n\) вершин без петель. Другими словами, у вас есть \(n\) вершин, и для каждой пары вершин \(u\) и \(v\) (\(u \neq v\)) есть две направленных дуги \((u, v)\) и \((v, u)\).

На каждой направленной дуге графа написано по одной букве: либо «a», либо «b» (дуги \((u, v)\) и \((v, u)\) могут иметь различные метки).

Вам также задано целое число \(m > 0\). Вам нужно найти путь длины \(m\) такой, что строка, полученная выписыванием букв на дугах в порядке из обхода, будет являться палиндромом. Длина пути — это количество дуг в нем.

Вы можете посещать одни и те же вершины и дуги произвольное количество раз.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(m\) (\(2 \leq n \leq 1000\); \(1 \leq m \leq 10^{5}\)) — количество вершин в графе и желаемая длина палиндрома.

В следующих \(n\) строках задано по \(n\) символов. \(j\)-й символ \(i\)-й строки описывает символ, написанный на дуге из вершины \(i\) в вершину \(j\).

Каждый символ — это «a» или «b», если \(i \neq j\), либо же «*», если \(i = j\), так как граф не содержит петель.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\) и сумма \(m\) не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, если возможно найти такой путь, выведите «YES» и сам путь как последовательность из \(m + 1\) целых чисел: номера вершин в пути в порядке обхода. Если существует несколько возможных путей, выведите любой из них.

В противном случае (если ответа нет), выведите «NO».

Примечание

Граф для первых трех наборов входных данных изображен ниже:

В первом наборе ответ — это последовательность \([1,2]\), означающая следующий путь:

\(\)1 \xrightarrow{\text{b}} 2\(\)

Таким образом, полученная строка равна b.

Во втором наборе ответ — это последовательность \([2,1,3,2]\), означающая следующий путь:

\(\)2 \xrightarrow{\text{b}} 1 \xrightarrow{\text{a}} 3 \xrightarrow{\text{b}} 2\(\)

Таким образом, полученная строка равна bab.

В третьем наборе ответ — это последовательность \([1,3,1,3,1]\), означающая следующий путь:

\(\)1 \xrightarrow{\text{a}} 3 \xrightarrow{\text{a}} 1 \xrightarrow{\text{a}} 3 \xrightarrow{\text{a}} 1\(\)

Таким образом, полученная строка равна aaaa.

Строка, полученная в четвертом наборе, равна abaaba.

C. Базовая дипломатия

жадные алгоритмы Конструктив Перебор реализация *1600

У Алексея есть \(n\) друзей. А ещё Алексей сейчас в отпуске, поэтому у него есть целых \(m\) дней, чтобы поиграть в эту новую популярную кооперативную игру! Поскольку эта игра кооперативная, Алексею нужен один сокомандник в каждый из \(m\) дней.

Каждый день какие-то его друзья свободны и готовы играть в эту игру, а остальные заняты и не могут. Каждый день Алексей должен выбрать одного из свободных друзей и предложить ему поиграть (а тот, разумеется, согласится). Однако если какой-то из друзей будет играть с Алексеем суммарно строго больше \(\left\lceil\dfrac{m}{2}\right\rceil\) раз (округление вверх), то все остальные обидятся. Конечно же, Алексей не хочет никого обижать.

Помогите ему выбрать сокомандников таким образом, чтобы никто не играл с Алексеем суммарно строго больше \(\left\lceil\dfrac{m}{2}\right\rceil\) раз.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два натуральных числа \(n\) и \(m\) (\(1\leq n, m\leq 100\,000\)) — количество друзей и количество дней, соответственно.

В \(i\)-й из следующих \(m\) строк содержится натуральное число \(k_i\) (\(1\leq k_i\leq n\)), за которым следуют \(k_i\) попарно различных целых чисел \(f_{i1}\), ..., \(f_{ik_i}\) (\(1\leq f_{ij}\leq n\)), разделённых пробелами — свободные друзья в день \(i\).

Гарантируется, что сумма значений \(n\) и сумма значений \(m\) по всем наборам входных данных не превосходят \(100\,000\). Гарантируется, что сумма всех \(k_i\) по всем дням всех наборов входных данных не превосходит \(200\,000\).

Выходные данные

Выведите ответ для каждого набора входных данных. Если невозможно никого не обидеть, то выведите «NO».

В противном случае в первой строке выведите «YES», а во второй строке выведите \(m\) целых чисел \(c_1\), ..., \(c_m\), разделённых пробелами. Каждое \(c_i\) должно быть номером друга, взятого в команду в \(i\)-й день (соответственно, это должно быть одно из чисел \(f_{ij}\)).

Никакое значение не должно встречаться больше, чем \(\left\lceil\dfrac{m}{2}\right\rceil\) раз. Если есть несколько возможных ответов, выведите любой из них.

A. Прибавляй и дели

жадные алгоритмы математика Перебор теория чисел *1000

У вас есть два положительных целых числа \(a\) и \(b\).

Вы можете выполнять операции двух видов:

  • \(a = \lfloor \frac{a}{b} \rfloor\) (заменить \(a\) на целую часть от деления \(a\) на \(b\))
  • \(b=b+1\) (увеличить \(b\) на \(1\))

Найдите минимальное количество операций, которое нужно, чтобы сделать \(a=0\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В единственной строке описания каждого набора входных данных находится два целых числа \(a\), \(b\) (\(1 \le a,b \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число: минимальное количество операций, которое нужно, чтобы сделать \(a=0\).

Примечание

В первом наборе входных данных одно из оптимальных решений — следующее.

  1. Поделить \(a\) на \(b\). После этой операции \(a = 4\) и \(b = 2\).
  2. Поделить \(a\) на \(b\). После этой операции \(a = 2\) и \(b = 2\).
  3. Увеличить \(b\). После этой операции \(a = 2\) и \(b = 3\).
  4. Поделить \(a\) на \(b\). После этой операции \(a = 0\) и \(b = 3\).

C. Деление и остаток

Бинарный поиск математика Перебор теория чисел *1700

Пара положительных целых чисел \((a,b)\) называется специальной, если \(\lfloor \frac{a}{b} \rfloor = a \bmod b\). Здесь \(\lfloor \frac{a}{b} \rfloor\) — это результат целочисленного деления \(a\) на \(b\), а \(a \bmod b\) — это остаток от такого деления.

Вам даны два целых числа \(x\) и \(y\). Найдите количество специальных пар \((a,b)\) таких, что \(1\leq a \leq x\) и \(1 \leq b \leq y\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В единственной строке описания каждого набора входных данных находятся два целых числа \(x\), \(y\) (\(1 \le x,y \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите ответ в единственной строке.

Примечание

В первом наборе входных данных единственная специальная пара — это \((3, 2)\).

Во втором наборе входных данных нет ни одной специальной пары.

В третьем наборе входных данных есть две специальные пары: \((3, 2)\) и \((4, 3)\).

E. Парный платёж

Бинарный поиск графы дп Конструктив кратчайшие пути Перебор Потоки *2200

В стране \(n\) городов и \(m\) двунаправленных дорог. Дороги в стране формируют неориентированный взвешенный граф. Граф может быть несвязным. У каждой дороги есть свой параметр \(w\). Вы можете ездить по дорогам, но правительство издало новый закон: вы можете проезжать только по двум дорогам сразу (проехать из города \(a\) в город \(b\), и из города \(b\) в город \(c\)) и вы должны будете заплатить \((w_{ab} + w_{bc})^2\) денег, чтобы проехать по этим дорогам. Для каждого города \(t\) найдите, можно ли добраться до него из города \(1\), и какое наименьшее количество денег необходимо потратить, чтобы добраться из \(1\) в \(t\).

Входные данные

В первой строке находятся два целых числа \(n\), \(m\) (\(2 \leq n \leq 10^5\), \(1 \leq m \leq min(\frac{n \cdot (n - 1)}{2}, 2 \cdot 10^5)\)).

В следующих \(m\) строках находятся по три целых числа \(v_i\), \(u_i\), \(w_i\) (\(1 \leq v_i, u_i \leq n\), \(1 \leq w_i \leq 50\), \(u_i \neq v_i\)). Гарантируется, что в графе нет кратных рёбер, то есть для любого ребра \((u_i, v_i)\) не существует других рёбер \((u_i, v_i)\) или \((v_i, u_i)\).

Выходные данные

Для каждого города \(t\) выведите одно целое число. Если нет корректного пути из \(1\) в \(t\) выведите \(-1\). Иначе выведите минимальное необходимое количество денег, чтобы добраться из \(1\) в \(t\).

Примечание

Граф в первом примере выглядит так.

Во втором примере путь из \(1\) в \(3\) проходит через \(2\), так что результирующая стоимость поездки будет \((1 + 2)^2 = 9\).

C. Как можно меньше ничьих

графы жадные алгоритмы Конструктив математика Перебор поиск в глубину и подобное реализация *1500

Скоро состоится большой футбольный чемпионат! \(n\) команд будут участвовать в нем, и каждая пара различных команд сыграет ровно один матч друг с другом.

У матча может быть два различных исхода:

  • матч может закончиться вничью, тогда обе команды получат по \(1\) очку;
  • одна из команд может победить, тогда победившая команда получит \(3\) очка, а проигравшая — \(0\).

Счет команды — суммарное количество очков, полученное командой за все матчи, в которых она играла.

Вас интересует гипотетическая ситуация, в которой все команды будут в конце чемпионата иметь одинаковый счет. Простой пример такой ситуации — если все матчи закончатся вничью, но вас интересует подобная ситуация с минимально возможным количеством ничьих.

Ваша задача — найти ситуацию (выбрать результат каждой игры), в которой у всех команд одинаковый итоговый счет, а количество ничьих минимально возможно.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Затем следуют сами наборы входных данных. Каждый набор описывается одной строкой, содержащей целое число \(n\) (\(2 \le n \le 100\)) — количество команд.

Выходные данные

Для каждого набора входных данных выведите \(\frac{n(n - 1)}{2}\) целых чисел, описывающих результаты игр в следующем порядке: первое число соответствует результату матча между командой \(1\) и командой \(2\), второе — между командой \(1\) и командой \(3\), затем \(1\) и \(4\), ..., \(1\) и \(n\), \(2\) и \(3\), \(2\) и \(4\), ..., \(2\) и \(n\), и так далее, до результата матча между командой \(n - 1\) и командой \(n\).

Число, соответствующее результату матча между командой \(x\) и командой \(y\), должно быть равно \(1\), если побеждает команда \(x\), \(-1\), если побеждает команда \(y\), или \(0\), если матч заканчивается вничью.

Все команды должны иметь одинаковый итоговый счет, и количество ничьих должно быть минимально возможным. Если оптимальных ответов несколько — выведите любой из них. Можно показать, что всегда есть способ составить результаты игр так, что все команды имеют одинаковый итоговый счет.

Примечание

В первом наборе входных данных из примера обе команды получают по \(1\) очку, так как их матч заканчивается вничью.

Во втором наборе входных данных из примера команда \(1\) побеждает команду \(2\) (команда \(1\) получает \(3\) очка), команда \(1\) проигрывает команде \(3\) (команда \(3\) получает \(3\) очка), и команда \(2\) выигрывает у команды \(3\) (команда \(2\) получает \(3\) очка).

D. Пифагоровы тройки

Бинарный поиск математика Перебор теория чисел *1500

Пифагорова тройка — это тройка целых чисел \((a, b, c)\) таких, что можно образовать прямоугольный треугольник с длинами первого катета, второго катета и гипотенузы, равными \(a\), \(b\) и \(c\) соответственно. Примером пифагоровой тройки является \((3, 4, 5)\).

Вася изучает свойства прямоугольных треугольников, и он использует формулу, которая определяет, является ли некоторая тройка целых чисел пифагоровой. К сожалению, он забыл точную формулу; он помнит только, что формула была каким-то уравнением с квадратами. Поэтому он придумал следующую формулу: \(c = a^2 - b\).

Очевидно, что это неправильная формула для проверки, является ли тройка чисел пифагоровой. Но, к удивлению Васи, его формула сработала на тройке \((3, 4, 5)\): \(5 = 3^2 - 4\) поэтому по формуле Васи, это пифагорова тройка.

Когда Вася нашел правильную формулу (и понял, что его формула неверна), он задался вопросом: сколько существует троек целых чисел \((a, b, c)\) \(1 \le a \le b \le c \le n\) таких, что они являются пифагоровыми как по его формуле, так и по настоящему определению? Он попросил вас посчитать количество таких троек.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор состоит из одной строки, содержащей одно целое число \(n\) (\(1 \le n \le 10^9\)).

Выходные данные

Для каждого теста выведите одно целое число — количество троек целых чисел \((a, b, c)\) \(1 \le a \le b \le c \le n\) таких, чтобы они являются пифагоровыми как по настоящему определению, так и по формуле, которую придумал Вася.

Примечание

Единственная пифагорова тройка, удовлетворяющая \(c = a^2 - b\) и \(1 \le a \le b \le c \le 9\), является \((3, 4, 5)\); поэтому ответ для \(n = 3\) равен \(0\), а ответ для \(n = 6\) (и для \(n = 9\)) равен \(1\).

E. Дешевый обед

графы жадные алгоритмы Перебор реализация сортировки Структуры данных *2000

Иван хочет полноценно пообедать. Для этого он хочет заказать первое, второе, напиток и десерт.

Всего на выбор у Ивана есть \(n_1\) разных первых блюд (\(i\)-е первое стоит \(a_i\) монет), \(n_2\) разных вторых блюд (\(i\)-е второе стоит \(b_i\) монет), \(n_3\) разных напитков (\(i\)-й напиток стоит \(c_i\) монет) и \(n_4\) разных десертов (\(i\)-й десерт стоит \(d_i\) монет).

Некоторые блюда не сочетаются между собой. Всего есть \(m_1\) пар из первого и второго, которые не сочетаются, \(m_2\) несочетающихся пар из второго и напитка и \(m_3\) несочетающихся пар из напитка и десерта.

Иван хочет купить ровно одно первое, одно второе, один напиток и один десерт так, чтобы они хорошо сочетались между собой и их общая стоимость была наименьшей возможной. Помогите ему найти самый бюджетный вариант!

Входные данные

В первой строке заданы четыре целых числа \(n_1\), \(n_2\), \(n_3\) и \(n_4\) (\(1 \le n_i \le 150000\)) — количество видов первого, второго, напитков и десертов соответственно.

Далее следуют четыре строки. В первой строке заданы \(n_1\) целых чисел \(a_1, a_2, \dots, a_{n_1}\) (\(1 \le a_i \le 10^8\)), где \(a_i\) — это цена \(i\)-го вида первого блюда. Следующие три строки описывают цены вторых блюд, напитков и десертов в том же формате (\(1 \le b_i, c_i, d_i \le 10^8\)).

В следующей строке задан одно целое число \(m_1\) (\(0 \le m_1 \le 200000\)) — количество несочетающихся пар из первого и второго блюд. В каждой из следующих \(m_1\) строк заданы два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le n_1\); \(1 \le y_i \le n_2\)) означающие, что первое блюдо номер \(x_i\) не сочетается со вторым блюдом номер \(y_i\). Все пары различные.

Блок несочетающихся пар из второго блюда и напитка задан в аналогичном формате. В таком же формате заданы и несочетающиеся пары из напитка и десерта (\(0 \le m_2, m_3 \le 200000\)).

Выходные данные

Если невозможно выбрать первое, второе, напиток и десерт, сочетающиеся друг с другом, выведите \(-1\). В противном случае выведите одно число — наименьшую суммарную стоимость обеда.

Примечание

Оптимальный вариант в первом примере — это выбрать первое блюдо номер \(2\), второе номер \(1\), напиток номер \(2\) и десерт номер \(1\).

Во втором примере, единственная пара из первого и второго не сочетается, а потому невозможно выбрать обед.

C. Двое полицейских

*особая задача Бинарный поиск математика Перебор *1900

Задана улица, которую можно представить массивом длины \(n\).

Двое полицейских патрулируют эту улицу: первый стоит в точке \(x\), а второй стоит в точке \(y\).

В течение одной минуты оба полицейских могут решить, что им делать (независимо): пойти влево (если текущая позиция больше \(1\)), пойти вправо (если текущая позиция меньше \(n\)), или же не делать ничего.

Улица считается чистой, если каждая точка улицы посещена хотя бы одним полицейским.

Ваша задача — найти минимальное количество минут, необходимое полицейским для того, чтобы посетить каждую точку улицы (опять же, каждая точка должна быть посещена хотя бы одним из них).

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит три целых числа \(n\), \(x\) и \(y\) (\(2 \le n \le 10^6\); \(1 \le x, y \le n\); \(x \ne y\)) — длину улицы, позицию первого полицейского и позицию второго полицейского, соответственно.

Гарантируется, что сумма \(n\) не превосходит \(10^6\) (\(\sum n \le 10^6\)).

Выходные данные

Для каждого набора тестовых данных выведите одно целое число — минимальное количество минут, необходимое полицейским, чтобы посетить каждую точку улицы.

B. Сбалансированные остатки

Конструктив математика Перебор *1000

Вам дано число \(n\) (делящееся на \(3\)) и массив \(a[1 \dots n]\). За один ход вы можете увеличить любой из элементов массива на единицу. Формально, вы выбираете индекс \(i\) (\(1 \le i \le n\)) и заменяете \(a_i\) на \(a_i + 1\). Вы можете выбирать один и тот же индекс \(i\) неоднократно для разных ходов.

Обозначим за \(c_0\), \(c_1\) и \(c_2\) количества чисел из массива \(a\) которые имеют остаток \(0\), \(1\) и \(2\) при делении на число \(3\) соответственно. Скажем, что массив \(a\) имеет сбалансированные остатки, если \(c_0\), \(c_1\) и \(c_2\) равны между собой.

Например, если \(n = 6\) и \(a = [0, 2, 5, 5, 4, 8]\), то возможна следующая последовательность ходов:

  • изначально \(c_0 = 1\), \(c_1 = 1\) и \(c_2 = 4\), эти величины не равны между собой. Увеличим \(a_3\), теперь массив \(a = [0, 2, 6, 5, 4, 8]\);
  • \(c_0 = 2\), \(c_1 = 1\) и \(c_2 = 3\), эти величины не равны между собой. Увеличим \(a_6\), теперь массив \(a = [0, 2, 6, 5, 4, 9]\);
  • \(c_0 = 3\), \(c_1 = 1\) и \(c_2 = 2\), эти величины не равны между собой. Увеличим \(a_1\), теперь массив \(a = [1, 2, 6, 5, 4, 9]\);
  • \(c_0 = 2\), \(c_1 = 2\) и \(c_2 = 2\), эти величины равны между собой, значит, массив \(a\) имеет сбалансированные остатки.

Найдите, какое минимальное количество ходов необходимо сделать, чтобы массив \(a\) имел сбалансированные остатки.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(3 \le n \le 3 \cdot 10^4\)) — длина массива \(a\). Гарантируется, что число \(n\) делится на \(3\).

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 100\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(150\,000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество ходов, которые надо совершить, чтобы массив \(a\) имел сбалансированные остатки.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных необходимо сделать один ход для \(i=2\).

В третьем наборе входных данных необходимо сделать три хода:

  • первый ход: \(i=9\);
  • второй ход: \(i=9\);
  • третий ход: \(i=2\).

В четвертом наборе входных данных величины \(c_0\), \(c_1\) и \(c_2\) изначально совпадают, поэтому массив \(a\) уже имеет сбалансированные остатки.

C. Сумма кубов

Бинарный поиск математика Перебор Перебор *1100

Вам дано целое положительное число \(x\). Проверьте, представимо ли число \(x\) в виде суммы кубов двух целых положительных чисел.

Формально, вам нужно проверить, существует ли два целых числа \(a\) и \(b\) (\(1 \le a, b\)), таких что \(a^3+b^3=x\).

Например, если \(x = 35\), то подходят числа \(a=2\) и \(b=3\) (\(2^3+3^3=8+27=35\)). Если же \(x=4\), то ни одна пара чисел \(a\) и \(b\) не подходит.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одного целого положительного числа \(x\) (\(1 \le x \le 10^{12}\)).

Обратите внимание, что числа в некоторых наборах входных данных не помещаются в \(32\)-битный целочисленный тип, поэтому вы должны использовать как минимум \(64\)-битный целочисленный тип вашего языка программирования.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если число \(x\) представимо в виде суммы кубов двух целых положительных чисел.
  • «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Число \(1\) не представимо в виде суммы двух кубов.

Число \(2\) представимо в виде \(1^3+1^3\).

Число \(4\) не представимо в виде суммы двух кубов.

Число \(34\) не представимо в виде суммы двух кубов.

Число \(35\) представимо в виде \(2^3+3^3\).

Число \(16\) представимо в виде \(2^3+2^3\).

Число \(703657519796\) представимо в виде \(5779^3+7993^3\).

C. Сумма кубов

Бинарный поиск математика Перебор Перебор *1100

Вам дано целое положительное число \(x\). Проверьте, представимо ли число \(x\) в виде суммы кубов двух целых положительных чисел.

Формально, вам нужно проверить, существует ли два целых числа \(a\) и \(b\) (\(1 \le a, b\)), таких что \(a^3+b^3=x\).

Например, если \(x = 35\), то подходят числа \(a=2\) и \(b=3\) (\(2^3+3^3=8+27=35\)). Если же \(x=4\), то ни одна пара чисел \(a\) и \(b\) не подходит.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одного целого положительного числа \(x\) (\(1 \le x \le 10^{12}\)).

Обратите внимание, что числа в некоторых наборах входных данных не помещаются в \(32\)-битный целочисленный тип, поэтому вы должны использовать как минимум \(64\)-битный целочисленный тип вашего языка программирования.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если число \(x\) представимо в виде суммы кубов двух целых положительных чисел.
  • «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Число \(1\) не представимо в виде суммы двух кубов.

Число \(2\) представимо в виде \(1^3+1^3\).

Число \(4\) не представимо в виде суммы двух кубов.

Число \(34\) не представимо в виде суммы двух кубов.

Число \(35\) представимо в виде \(2^3+3^3\).

Число \(16\) представимо в виде \(2^3+2^3\).

Число \(703657519796\) представимо в виде \(5779^3+7993^3\).

A. K-е наибольшее

жадные алгоритмы Перебор реализация *800

Вам дан массив \(a\), состоящий из \(n\) целых чисел. Изначально все элементы \(a\) равны \(0\) либо \(1\). Вы должны обработать \(q\) запросов двух типов:

  • 1 x : Присвоить \(a_x\) значение \(1 - a_x\).
  • 2 k : Вывести \(k\)-й наибольший элемент массива.

Напомним, что \(k\)-й наибольший элемент массива \(b\) определяется следующим образом:

  • Сортируем массив в невозрастающем порядке, возвращаем из него \(k\)-й элемент.

Например, второй наибольший элемент массива \([0, 1, 0, 1]\) равен \(1\), так как после сортировки в невозрастающем порядке он становится равен \([1, 1, 0, 0]\), а второй элемент в этом массиве равен \(1\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^5\)) — длину заданного массива и количество запросов.

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, a_3, \dots, a_n\) (\(0 \le a_i \le 1\)) — элементы исходного массива.

Каждая из следующих строк \(q\) содержит два целых числа. Первое из них — \(t\) (\(1 \le t \le 2\)) — тип запроса.

  • Если \(t = 1\), то второе число это \(x\) (\(1 \le x \le n\)) — позиция измененного числа. Вы должны присвоить \(a_x\) значение \(1 - a_x\).
  • Если \(t = 2\), то второе число это \(k\) (\(1 \le k \le n\)) — вы должны вывести \(k\)-й наибольший элемент массива.

Гарантируется, что будет по крайней мере один запрос второго типа (удовлетворяющий \(t = 2\)).

Выходные данные

Для каждого запроса второго типа выведите единственное целое число — ответ на запрос.

Примечание

Изначально \(a = [1, 1, 0, 1, 0]\).

В первой операции нужно вывести третье наибольшее значение, которое равно \(1\).

Вторая операция присваивает \(a_2\) значение \(0\), \(a\) становится \([1, 0, 0, 1, 0]\).

В третьей операции нужно вывести третье наибольшее значение, которое равно \(0\).

В четвертой операции нужно вывести первое наибольшее значение, которое равно \(1\).

В пятой операции нужно вывести пятое наибольшее значение, которое равно \(0\).

B. Минимальная стоимость

математика Перебор *1200

Дан граф из \(n\) строк и \(10^6 + 2\) столбцов, где строки пронумерованы от \(1\) до \(n\), а столбцы от \(0\) до \(10^6 + 1\):

Обозначим вершину в строке \(i\) и столбце \(j\) как \((i, j)\).

Изначально для каждого \(i\) строка \(i\) содержит ровно одно препятствие — в вершине \((i, a_i)\). Вы хотите переместить несколько препятствий так, чтобы можно было достичь вершины \((n, 10^6+1)\), начав в вершине \((1, 0)\), перемещаясь по ребрам этого графа (нельзя проходить через вершины с препятствиями). Для перемещения одного препятствия на соседнюю по ребру свободную вершину нужны \(u\) или \(v\) монет:

  • Если в вершине \((i, j)\) есть препятствие, можно использовать \(u\) монет, чтобы переместить его в вершину \((i-1, j)\) или вершину \((i+1, j)\), если эта вершина существует, и в данный момент в ней нет препятствия.
  • Если в вершине \((i, j)\) есть препятствие, то можно использовать \(v\) монет, чтобы переместить его в вершину \((i, j-1)\) или вершину \((i, j+1)\), если эта вершина существует, и в данный момент в ней нет препятствия.
  • Обратите внимание, что вы не можете перемещать препятствия за пределы сетки. Например, нельзя переместить препятствие с вершины \((1,1)\) в \((0,1)\).

Для лучшего понимания смотрите картинку выше.

Найдите минимальное количество монет, которое нужно потратить, чтобы можно было достичь вершины \((n, 10^6+1)\), начав в вершине \((1, 0)\), перемещаясь по ребрам этого графа, не проходя через вершины с препятствиями.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(u\) и \(v\) (\(2 \le n \le 100\), \(1 \le u, v \le 10^9\)) — количество строк в графе и количества монет, необходимых для перемещения по вертикали и горизонтали соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)), где \(a_i\) обозначает, что препятствие в \(i\)-й строке находится в вершине \((i, a_i)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество монет, которое нужно потратить, чтобы можно было достичь вершины \((n, 10^6+1)\), начав в вершине \((1, 0)\), перемещаясь по ребрам этого графа, не проходя через вершины с препятствиями.

Можно показать, что при ограничениях задачи всегда существует способ сделать такое путешествие возможным.

Примечание

В первом примере два препятствия стоят в вершинах \((1, 2)\) и \((2,2)\). Вы можете передвинуть препятствие с \((2, 2)\) в \((2, 3)\), а затем в \((1, 3)\). Общая стоимость будет составлять \(u+v = 7\) монет.

Во втором примере два препятствия стоят в \((1, 3)\) и \((2,2)\). Вы можете передвинуть препятствие с \((1, 3)\) в \((2, 3)\). Стоимость составляет \(u = 3\) монеты.

C. Pekora и батуты

дп жадные алгоритмы Перебор реализация Структуры данных *1700

Есть парк батутов с \(n\) батутами, расположенными в ряд. \(i\)-й из них имеет силу \(S_i\).

Pekora может прыгать по батутам в несколько проходов. Она начинает проход, прыгая на любой батут по своему выбору.

Если сейчас Pekora прыгает на батут \(i\), то батут подбросит ее в позицию \(i + S_i\), а \(S_i\) станет равно \(\max(S_i-1,1)\). Иначе говоря, \(S_i\) уменьшится на \(1\), кроме случая \(S_i=1\), когда \(S_i\) останется равно \(1\).

Если в позиции \(i + S_i\) нет батута, то этот проход завершен. В противном случае Pekora продолжит проход прыжком с батута в позиции \(i + S_i\) по принципу, описанному выше.

Pekora не может перестать прыгать во время прохода, пока не приземлится на позицию больше \(n\) (в которой нет батута). Бедная Pekora!

Pekora — непослушный кролик, и хочет разрушить парк батутов, уменьшив все \(S_i\) до \(1\). Какое минимальное количество проходов ей нужно, чтобы уменьшить все \(S_i\) до \(1\)?

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 5000\)) — количество батутов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(S_1, S_2, \dots, S_n\) (\(1 \le S_i \le 10^9\)), где \(S_i\) — это сила \(i\)-го батута.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество проходов, за которое Pekora может уменьшить все \(S_i\) до \(1\).

Примечание

Для первого набора входных данных, ниже приведена оптимальная последовательность проходов, которые Pekora может использовать. (Жирным выделены позиции батутов, куда прыгает Pekora в очередной проход).

  • \([1,4,\textbf{2},2,\textbf{2},2,\textbf{2}]\)
  • \([1,\textbf{4},1,2,1,\textbf{2},1]\)
  • \([1,\textbf{3},1,2,\textbf{1},\textbf{1},\textbf{1}]\)
  • \([1,\textbf{2},1,\textbf{2},1,\textbf{1},\textbf{1}]\)

Для второго набора входных данных оптимальная последовательность проходов приведена ниже.

  • \([\textbf{2},3]\)
  • \([1,\textbf{3}]\)
  • \([1,\textbf{2}]\)

Для третьего набора входных данных, все \(S_i\) уже равны \(1\).

E. Фиб-дерево

Деревья Перебор поиск в глубину и подобное разделяй и властвуй теория чисел *2400

Пусть \(F_k\) обозначает \(k\)-й член последовательности Фибоначчи, определенной следующим образом:

  • \(F_0 = F_1 = 1\)
  • для любого целого \(n \geq 0\), \(F_{n+2} = F_{n+1} + F_n\).

Вам дано дерево с \(n\) вершинами. Напомним, что дерево — это связный неориентированный граф без циклов.

Дерево называется Фиб-деревом, если его количество вершин равно \(F_k\) для некоторого \(k\), и выполняется хотя бы одно из следующих условий:

  • Дерево состоит только из \(1\) вершины;
  • Вы можете разделить его на два Фиб-дерева, удалив некоторое ребро дерева.

Определите, является ли данное дерево Фиб-деревом.

Входные данные

В первой строке входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество вершин в дереве.

Далее следуют \(n-1\) строк, каждая из которых содержит два целых числа \(u\) и \(v\) (\(1\leq u,v \leq n\), \(u \neq v\)), обозначающие ребро между вершинами \(u\) и \(v\). Гарантируется, что данные ребра образуют дерево.

Выходные данные

Выведите «YES», если данное дерево является Фиб-деревом, или «NO», если не является.

Ответ можно вывести в любом регистре. Например, если ответ «YES», то вывод «Yes» или «yeS» также будет считаться правильным ответом.

Примечание

В первом примере можно удалить ребро \((1, 2)\), и дерево будет разбито на \(2\) дерева размера \(1\) и \(2\) соответственно. Любое дерево размера \(2\) является Фиб-деревом, так как его можно разбить на \(2\) дерева размером \(1\).

Во втором примере, независимо от того, какое ребро мы удаляем, дерево будет разбито на \(2\) дерева размера \(1\) и \(4\). Поскольку \(4\) не равняется \(F_k\) ни для какого \(k\), это не Фиб-дерево.

В третьем примере, вот один из возможных порядков удаления ребер, чтобы все деревья в процессе были Фиб-деревьями: \((1, 3), (1, 2), (4, 5), (3, 4)\).

I. Правитель зоопарка

Перебор Структуры данных *3500

Поняв, что управляющая зоопарком — это всего лишь утка, животные свергли ее. Теперь им предстоит решить между собой вопрос о новом правителе в ходе боевого турнира следующего формата:

Изначально животное \(0\) — это король, в то время как все остальные выстраиваются в очередь, с животным \(1\) в начале очереди и животным \(n-1\) в конце. Животное в начале очереди бросает королю вызов на поединок, и животное с большей силой выигрывает поединок. Победитель становится королем, а проигравший станет в конец очереди.

Животное, которое выигрывает \(3\) поединка подряд будет короновано правителем всего зоопарка. Сила каждого животного зависит от того, сколько последовательных поединков оно выиграло. Животное \(i\) имеет силу \(A_i\) с \(0\) выигрышами подряд, \(B_i\) с \(1\) выигрышем подряд и \(C_i\) с \(2\) выигрышами подряд. Изначально у каждого животного \(0\) выигрышей подряд.

Для всех животных, \(A_i > B_i\) и \(C_i > B_i\). Также все значения \(A_i\), \(B_i\), \(C_i\) попарно различны (все \(3n\) значений попарно различны).

Другими словами, животное, не являющееся королем, имеет силу \(A_i\). Король обычно имеет силу \(B_i\) или \(C_i\). Исключение составляет первый ход, первый король (животное \(0\)) имеет силу \(A_i\).

Кто станет новым правителем, и после скольких поединков? Или животные будут сражаться вечно, и никто не станет правителем?

Входные данные

Первая строка содержит одно целое число \(n\) (\(4 \leq n \leq 6000\)) — количество животных.

\(i\)-я из следующих \(n\) строк содержит \(3\) целых числа, \(A_i\), \(B_i\) и \(C_i\) (\(0 \leq A_i, B_i, C_i \leq 10^9\)).

Гарантируется, что \(A_i > B_i\) и \(C_i > B_i\), и что все значения \(A_i\), \(B_i\) и \(C_i\) попарно различны.

Выходные данные

Выведите два целых числа в одной строке. Первое — это номер животного, ставшего правителем, а второе — количество прошедших поединков, пока какое-либо животное не станет правителем.

Если животные будут драться бесконечно долго, выведите -1 -1.

Примечание

Ниже описана последовательность событий для второго примера. Обратите внимание, что в бою \(1\) король (животное \(0\)) имеет силу \(A_0\). Турнир заканчивается на поединке \(7\), как животное \(1\) выигрывает поединок \(5\), \(6\) и \(7\).

E. Почти отказоустойчивая база данных

жадные алгоритмы Конструктив Перебор поиск в глубину и подобное реализация *2500

Вы храните в базе данных массив длины \(m\). Чтобы обезопасить данные от случайного повреждения, база данных хранит не одну, а \(n\) физических копий хранимой информации.

К сожалению, недавно в базе данных произошла масштабная авария, которая потенциально изменила информацию в каждой копии.

Предполагается, что инцидент поменял не более двух элементов в каждой копии. Вам нужно восстановить исходный массив из текущего состояния базы данных.

Если существует несколько способов восстановления, найдите любой. Если нет ни одного массива, отличающегося от каждой копии не более чем в двух позициях, определите это тоже.

Входные данные

В первой строке задано два целых числа \(n\) и \(m\) (\(2 \le n\); \(1 \le m\); \(n \cdot m \le 250\,000\)) — количество физических копий исходной информации и размер массива исходной информации, соответственно.

В каждой из следующих \(n\) строк задан массив из \(m\) чисел \(s_{i, 1}, s_{i, 2}, \dots, s_{i, m}\) (\(1 \le s_{i, j} \le 10^9\)) — очередная физическая копия в базе данных после аварии.

Выходные данные

Если можно восстановить массив, который мог бы представлять исходную информацию, то выведите в первой строке слово «Yes», и во второй строке сам массив из ровно \(m\) чисел от \(1\) до \(10^9\).

Если возможных ответов несколько, то выведите любой.

Если ни одного ответа нет, то выведите в единственной строке слово «No».

Примечание

В первом примере массив \([1, 10, 1, 100]\) отличается от первой и второй физических копий ровно в одной позиции, от третьей физической копии ровно в двух позициях.

Во втором примере массив \([1, 1, 1, 1, 1, 1, 1]\) равен первой физической копии и отличается от каждой из остальных девяти физических копий не более чем в двух позициях.

В третьем примере невозможно найти какой-нибудь массив, который отличается не более чем в двух позициях от обеих физических копий после аварии.

B. Планета Лапитулетти

Перебор реализация *1300

На планете Лапитулетти время идет так же, как и на Земле, только сутки длятся \(h\) часов, а каждый час длится \(m\) минут. Жители этой планеты используют цифровые часы, схожие с земными. Часы показывают время в формате ЧЧ:ММ (сначала показывается число часов в десятичной записи, затем (после двоеточия) показывается число минут в десятичной записи; при необходимости число минут и часов дополняется ведущими нулями слева до двух цифр). Часы исчисляются числами от \(0\) до \(h-1\), а минуты от \(0\) до \(m-1\).

Так изображаются цифры на часах. Обратите внимание, что цифра \(1\) расположена посередине своей позиции.

На планете Лапитулетти пользуются обычным зеркалом. Жители часто смотрят на отражение цифровых часов в зеркале и радуются каждый раз, когда отраженные показания часов являются корректными (то есть в отражении видны корректные цифры, и время, которое они образуют, отображается на обычных часах в какой-то момент суток).

Зеркало отражает изображение часов относительно вертикальной оси.

Отражение не является корректным временем.

Отражение является корректным временем для \(h=24\), \(m = 60\). Однако, например, при \(h=10\), \(m=60\) отражение не является корректным временем.

Житель планеты Лапитулетти начинает смотреть на отражение часов в момент времени \(s\) и хочет узнать ближайший момент времени в будущем (который, возможно, наступит в следующие сутки), когда отраженные показания часов будут корректными.

Можно показать, что при любых \(h\), \(m\) и \(s\) такой момент времени существует. Если в момент времени, когда житель начинает смотреть на часы, отраженное время корректное, ближайшим считается этот момент времени.

Вам предстоит решить задачу для нескольких тестовых случаев.

Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 100\)) — количество наборов входных данных.

Следующие \(2 \cdot T\) строк содержат описание наборов входных данных. Описание каждого набора состоит из двух строк.

Первая строка описания содержит два целых числа \(h\), \(m\) (\(1 \le h, m \le 100\)).

Вторая строка содержит показания часов \(s\) в описанном формате ЧЧ:ММ.

Выходные данные

Для каждого тестового случая в отдельной строке выведите ближайший момент времени в формате ЧЧ:ММ, в который отраженное время является корректным.

Примечание

Во втором тестовом случае нетрудно показать, что отражение 23:59 не является корректным, а отражение момента 00:00 следующих суток является корректным.

C. K-красивые строки

Бинарный поиск жадные алгоритмы Конструктив Перебор Строки *2000

Дана строка \(s\) из строчных букв английского алфавита и число \(k\). Назовем строку из строчных букв английского алфавита красивой, если количество вхождений каждой буквы в эту строку кратно числу \(k\). Требуется найти лексикографически минимальную красивую строку длины \(n\), которая лексикографически больше или равна строке \(s\). Если такой строки не существует, выведите \(-1\).

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 10\,000\)) — количество наборов входных данных.

Следующие \(2 \cdot T\) строк содержат описание наборов входных данных. Описание каждого набора состоит из двух строк.

Первая строка описания содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^5\)) — длину строки \(s\) и число \(k\) соответственно.

Вторая строка содержит строку \(s\) из строчных букв английского алфавита.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого тестового случая в отдельной строке выведите лексикографически минимальную красивую строку длины \(n\), которая больше или равна строке \(s\), или \(-1\), если такой строки не существует.

Примечание

В первом наборе входных данных «acac» лексикографически больше или равна \(s\), а каждая буква в ней встречается \(2\) или \(0\) раз, поэтому она красивая.

Во втором наборе входных данных каждая буква в \(s\) встречается \(0\) или \(1\) раз, поэтому сама \(s\) является ответом.

Можно показать, что в третьем наборе подходящей строки нет.

В четвертом примере каждая буква встречается \(0\), \(3\) или \(6\) раз в «abaabaaab». Все эти числа делятся на \(3\).

D. НОД массива

математика Перебор реализация сортировки Структуры данных теория чисел хэши *2100

Дан массив \(a\) длины \(n\). Требуется обработать \(q\) запросов следующего вида: даны два целых числа \(i\) и \(x\), необходимо умножить элемент \(a_i\) на \(x\).

После обработки каждого запроса нужно вывести наибольший общий делитель (НОД) всех чисел массива \(a\).

Так как ответ может быть слишком большим, вам требуется вывести его по модулю \(10^9+7\).

Входные данные

Первая строка входных данных содержит два целых числа — \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) натуральных чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — элементы массива \(a\) до изменений.

Следующие \(q\) строк содержат запросы в следующем формате: в каждой строке содержатся два целых числа \(i\) и \(x\) (\(1 \le i \le n\), \(1 \le x \le 2 \cdot 10^5\)).

Выходные данные

Выведите \(q\) строк: после выполнения каждого запроса выведите НОД всех чисел массива по модулю \(10^9+7\) в отдельной строке.

Примечание

После первого запроса массив станет \([12, 6, 8, 12]\), \(\operatorname{gcd}(12, 6, 8, 12) = 2\).

После второго запроса — \([12, 18, 8, 12]\), \(\operatorname{gcd}(12, 18, 8, 12) = 2\).

После третьего запроса — \([12, 18, 24, 12]\), \(\operatorname{gcd}(12, 18, 24, 12) = 6\).

Здесь функция \(\operatorname{gcd}\) обозначает наибольший общий делитель.

A. Строка ABC

битмаски Перебор реализация *900

Задана строка \(a\), состоящая из \(n\) символов, \(n\) четно. Для каждого \(i\) от \(1\) до \(n\) \(a_i\) является одним из 'A', 'B' или 'C'.

Правильной скобочной последовательностью называется скобочная последовательность, которую можно преобразовать в корректное арифметическое выражение путем вставок между ее символами символов '1' и '+'. Например, скобочные последовательности «()()», «(())» — правильные (полученные выражения: «(1)+(1)», «((1+1)+1)»), а «)(» и «(» — нет.

Вы хотите найти такую строку \(b\), которая состоит из \(n\) символов, что:

  • \(b\) является правильной скобочной последовательностью;
  • если для некоторых \(i\) и \(j\) (\(1 \le i, j \le n\)) \(a_i=a_j\), тогда \(b_i=b_j\).

Другими словами, вы хотите заменить все вхождения 'A' скобками одного типа, затем все вхождения 'B' скобками одного типа и все вхождения 'C' скобками одного типа.

Ваша задача — определить, существует ли такая строка \(b\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следуют описания \(t\) наборов входных данных.

В единственной строке каждого набора входных данных содержится одна строка \(a\). \(a\) состоит только из заглавных букв 'A', 'B' и 'C'. Пусть \(n\) будет длиной строки \(a\). Гарантируется, что \(n\) четно и что \(2 \le n \le 50\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует такая строка \(b\), что:

  • \(b\) является правильной скобочной последовательностью;
  • если для некоторых \(i\) и \(j\) (\(1 \le i, j \le n\)) \(a_i=a_j\), тогда \(b_i=b_j\).

Иначе выведите «NO».

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных одна из возможных строк \(b\) равна «(())()».

Во втором наборе входных данных одна из возможных строк \(b\) равна «()()».

B. Берляндский кроссворд

битмаски жадные алгоритмы Перебор реализация *1400

Берляндский кроссворд — это головоломка, которая решается на квадратном поле, состоящим из \(n\) строк и \(n\) столбцов. Изначально все ячейки белые.

Чтобы решить головоломку, нужно раскрасить некоторые ячейки на границах поля в черный цвет так, чтобы:

  • ровно \(U\) ячеек в верхнем ряду были черными;
  • ровно \(R\) ячеек в правом столбце были черными;
  • ровно \(D\) ячеек в нижнем ряду были черными;
  • ровно \(L\) ячеек в левом столбце были черными.

Обратите внимание, что можно ничего не красить в черный и оставить все клетки белыми.

Ваша задача — проверить, существует ли решение у заданной головоломки.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следует описание \(t\) наборов входных данных.

В единственной строке каждого набора входных данных записаны \(5\) целых чисел \(n, U, R, D, L\) (\(2 \le n \le 100\); \(0 \le U, R, D, L \le n\)).

Выходные данные

На каждый набор входных данных выведите «YES», если решение существует, и «NO» в противном случае.

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

Возможные решения на наборы входных данных \(1\), \(2\) и \(4\):

F. Уничтожение ребер

графы Конструктив Перебор поиск в глубину и подобное реализация *2900

Вам дан неориентированный связный граф, состоящий из \(n\) вершин и \(m\) ребер. Ваша цель — уничтожить все ребра данного графа.

Вы можете выбрать любую вершину в качестве начальной и начать ходить от нее по ребрам. Когда вы идете по ребру, вы разрушаете его. Очевидно, что вы не можете пройти по ребру, если оно уже разрушено.

Вы можете выполнить операцию смена режима не более одного раза во время обхода, и эта операция может быть выполнена только тогда, когда вы находитесь в какой-то вершине (вы не можете выполнить ее во время обхода ребра). После смены режима ребра, через которые вы проходите, удаляются следующим образом: первое ребро после смены режима не уничтожается, второе — уничтожается, третье — не уничтожается, четвертое — уничтожается и так далее. Вы не можете переключиться обратно в исходный режим, и вам не нужно выполнять эту операцию, если вы этого не хотите.

Можете ли вы уничтожить все ребра данного графа?

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 3000\); \(n - 1 \le m \le \min(\frac{n(n-1)}{2}, 3000\))) — число вершин и число ребер в графе.

Затем следуют \(m\) строк, каждая из которых содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\); \(x_i \ne y_i\)) — концы \(i\)-го ребра.

Эти ребра образуют связный неориентированный граф без кратных ребер.

Выходные данные

Если невозможно уничтожить все ребра, выведите 0.

В противном случае выведите последовательность ваших действий следующим образом. Сначала выведите \(k\) — количество действий (\(k \le 2m + 2\)). Затем выведите саму последовательность, состоящую из \(k\) целых чисел. Первое целое число должно быть индексом стартовой вершины. Затем каждое следующее целое число должно быть либо индексом следующей вершины в вашем обходе, либо \(-1\), если вы используете операцию смена режима. Вы можете использовать операцию смена режима не более одного раза.

Если ответов несколько, выведите любой из них.

E. Циншань и Даниэль

жадные алгоритмы Перебор реализация Структуры данных *3200

Циншань и Даниэль собираются сыграть в карточную игру. Но играть в нее только вдвоем будет очень скучно. Поэтому они решили сделать \(n\) роботов, чтобы они сыграли в игру автоматически. Роботы, сделанные Циншань, относятся к команде \(1\), а роботы, сделанные Даниэлем, относятся к команде \(2\). Робот \(i\) находится в команде \(t_i\). Перед началом игры роботу \(i\) выдается \(a_i\) карт.

Правила карточной игры просты:

  • Роботы выстраиваются по кругу в порядке номеров и будут в некотором порядке выбрасывать по одной карте. Сначала робот \(1\) выбрасывает одну из своих карт из игры. После этого роботы будут действовать по следующим правилам:
  • Если последнюю карту выбросил робот \(i\), то следующим карту выбрасывает ближайший робот, чья команда противоположна команде \(i\)-го робота. Другими словами, робот \(j\) должен выбросить одну свою карту сразу после робота \(i\), если и только если среди всех возможных \(j\) таких, что \(t_i\ne t_j\), расстояние \(dist(i,j)\) (определение будет дано ниже) минимально.
  • Робот, у которого больше не осталось карт, должен завершить игру немедленно. Этот робот не будет рассматриваться в следующих шагах.
  • Когда нет подходящего робота, который должен выбросить следующую карту, игра заканчивается.

Мы определяем расстояние от робота \(x\) до робота \(y\) как \(dist(x,y)=(y-x+n)\bmod n\). Это соответствует ориентированному расстоянию по кругу.

Например, если \(n=5\), то расстояние от \(1\) до \(3\) это \(dist(1,3)=(3-1+5)\bmod 5=2\), а расстояние от \(3\) до \(1\) это \(dist(3,1)=(1-3+5)\bmod 5 =3\).

Циншань заметила, что наблюдение за игрой роботов занимает очень большое время. Она хочет узнать результаты как можно быстрее. Вы, как фанат Циншань, должны помочь ей посчитать массив \([ans_1,ans_2,\ldots,ans_n]\): \(ans_i\) равно количеству карт, которое выбросит \(i\)-й робот в течение всей игры. Нужно спешить!

Чтобы избежать большого размера входных данных, команды и количества карт каждого робота должны быть сгенерированы в вашей программе с использованием некоторых вспомогательных массивов.

Входные данные

В первой строке находится единственное целое число \(n\) (\(1 \le n \le 5\cdot 10^6\)) — количество роботов, играющих в игру.

Во второй строке находится единственное целое число \(m\) (\(1 \le m \le \min(n,200\,000)\)).

Каждая из следующих \(m\) строк содержит четыре целых числа \(p_i\), \(k_i\), \(b_i\), \(w_i\) (\(1 \le p_i \le n\), \(1 \le k_i \le 10^9+7\), \(0 \le b_i ,w_i< k_i\)). Гарантируется, что \(p_m=n\) и \(p_{j-1}<p_{j}\) (\(2 \le j \le m\)).

Массивы \(a_j\) и \(t_j\) должны быть сгенерированы следующим псевдокодом:


seed = 0
base = 0

function rnd():
ret = seed
seed = (seed * base + 233) mod 1000000007
return ret

p[0] = 0
for i = 1 to m:
seed = b[i]
base = w[i]
for j = p[i - 1] + 1 to p[i]:
t[j] = (rnd() mod 2) + 1
a[j] = (rnd() mod k[i]) + 1
Выходные данные

Выведите единственное целое число \(\left( \prod_{i=1}^{n} ((ans_i \oplus i^2)+1)\right) \bmod 10^9+7\), где \(\oplus\) обозначает операцию исключающего ИЛИ.

Примечание

В первом тесте \(a=[5,5,1]\) и \(t=[1,2,2]\).

Робот \(1\) выбрасывает первую карту.

Затем робот \(2\) выбрасывает карту. Это делает не робот \(3\), потому что \(dist(1,2)<dist(1,3)\).

Затем робот \(1\) выбрасывает карту. Это делает не робот \(3\), потому что \(t_2=t_3\).

Если мы выпишем индексы роботов, которые будут выбрасывать карты по очереди, то мы получим последовательность \([1,2,1,2,1,2,1,2]\). Поэтому роботы \(1\), \(2\) и \(3\) уберут \(5\), \(5\) и \(0\) карт, соответственно. Ответ будет равен \((((5 \oplus 1^2)+1)\times((5 \oplus 2^2)+1)\times((0 \oplus 3^2)+1)) \bmod 10^9+7=(5\times 2 \times 10)\bmod 10^9+7=100\).

A. Раздели!

жадные алгоритмы Конструктив Перебор Строки *900

Каваширо Нитори — девочка, любящая спортивное программирование.

Однажды она нашла строку и целое число. Будучи опытным составителем задач, она сразу подумала о следующей задаче.

Дана строка \(s\) и параметр \(k\), проверьте, существует ли последовательность из \(k+1\) непустой строки \(a_1,a_2...,a_{k+1}\) такая, что \(\)s=a_1+a_2+\ldots +a_k+a_{k+1}+R(a_k)+R(a_{k-1})+\ldots+R(a_{1}).\(\)

Здесь \(+\) обозначает конкатенацию (соединение) строк. \(R(x)\) — разворот строки \(x\), например, \(R(abcd) = dcba\). Обратите внимание, что в выражении выше специально пропущено слагаемое вида \(R(a_{k+1})\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1\le n\le 100\), \(0\le k\le \lfloor \frac{n}{2} \rfloor\)) — длину строки \(s\) и параметр \(k\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из строчных букв латинского алфавита.

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если можно найти \(a_1,a_2,\ldots,a_{k+1}\), и «NO» (без кавычек) иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом наборе входных данных одно из решений \(a_1=qw\) и \(a_2=q\).

Во втором наборе входных данных одно из решений \(a_1=i\) и \(a_2=o\).

В пятом наборе входных данных одно из решений — это \(a_1=dokidokiliteratureclub\).

A. Мексимизация

жадные алгоритмы Перебор сортировки Структуры данных *800

Дано число \(n\) и массив \(a_1, a_2, \ldots, a_n\). Необходимо переставить числа в массиве \(a\) так, чтобы сумма \(\textbf{MEX}\) на всех префиксах массива (\(i\)-й префикс  — это \(a_1, a_2, \ldots, a_i\)) была максимальна.

Формально, вам нужно найти массив \(b_1, b_2, \ldots, b_n\), такой что наборы чисел массивов \(a\) и \(b\) совпадают (то есть массив \(b\) получается некоторой перестановкой чисел в массиве \(a\)) и \(\sum\limits_{i=1}^{n} \textbf{MEX}(b_1, b_2, \ldots, b_i)\) максимальна.

Напомним, что \(\textbf{MEX}\) множества целых неотрицательных чисел  — такое минимальное целое неотрицательное число, которое не входит в это множество.

Например, \(\textbf{MEX}(\{1, 2, 3\}) = 0\), \(\textbf{MEX}(\{0, 1, 2, 4, 5\}) = 3\).

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \le t \le 100)\)  — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) \((1 \le n \le 100)\).

Во второй строке описания каждого набора входных данных находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((0 \le a_i \le 100)\).

Выходные данные

Для каждого набора входных данных выведите массив \(b_1, b_2, \ldots, b_n\), являющийся оптимальной перестановкой чисел \(a_1, a_2, \ldots, a_n\), то есть сумма \(\textbf{MEX}\) на всех его префиксах максимальна.

Если существует несколько оптимальных ответов, вы можете найти любой.

Примечание

В первом наборе входных данных в ответе \(\textbf{MEX}\) на префиксах будет таким:

  1. \(\textbf{MEX}(\{0\}) = 1\)
  2. \(\textbf{MEX}(\{0, 1\}) = 2\)
  3. \(\textbf{MEX}(\{0, 1, 2\}) = 3\)
  4. \(\textbf{MEX}(\{0, 1, 2, 3\}) = 4\)
  5. \(\textbf{MEX}(\{0, 1, 2, 3, 4\}) = 5\)
  6. \(\textbf{MEX}(\{0, 1, 2, 3, 4, 7\}) = 5\)
  7. \(\textbf{MEX}(\{0, 1, 2, 3, 4, 7, 3\}) = 5\)
Сумма \(\textbf{MEX} = 1 + 2 + 3 + 4 + 5 + 5 + 5 = 25\). Можно показать, что это максимальная возможная сумма \(\textbf{MEX}\) на префиксах.

A. GCD Sum

математика Перебор *800

\(\text{\)gcdSum\(}\) положительного целого числа — это \(gcd\) этого числа и суммы его цифр. Формально, \(\text{\)gcdSum\(}(x) = gcd(x, \text{ сумма цифр } x)\) для положительного целого \(x\). \(gcd(a, b)\) обозначает наибольший общий делитель \(a\) и \(b\) — наибольшее целое число \(d\), такое, что оба числа \(a\) и \(b\) делятся на \(d\).

Например: \(\text{\)gcdSum\(}(762) = gcd(762, 7 + 6 + 2)=gcd(762,15) = 3\).

Вам дано целое число \(n\). Найдите наименьшее целое число \(x \ge n\), для которого \(\text{\)gcdSum\(}(x) > 1\).

Входные данные

В первой строке задано одно целое число \(t\) \((1 \le t \le 10^4)\) — количество наборов входных данных.

Затем следуют \(t\) строк, каждая из которых содержит одно целое число \(n\) \((1 \le n \le 10^{18})\).

Все наборы входных данных в одном тесте различны.

Выходные данные

Выведите \(t\) строк, \(i\)-я из которых должна содержать одно целое число — ответ на \(i\)-й набор входных данных.

Примечание

Объяснение трех наборов входных данных из примера:

Набор 1: \(n = 11\):

\(\text{\)gcdSum\(}(11) = gcd(11, 1 + 1) = gcd(11,\ 2) = 1\).

\(\text{\)gcdSum\(}(12) = gcd(12, 1 + 2) = gcd(12,\ 3) = 3\).

Значит, минимальное целое число \(\ge 11\), для которого \(gcdSum\) \(> 1\) — это \(12\).

Набор 2: \(n = 31\):

\(\text{\)gcdSum\(}(31) = gcd(31, 3 + 1) = gcd(31,\ 4) = 1\).

\(\text{\)gcdSum\(}(32) = gcd(32, 3 + 2) = gcd(32,\ 5) = 1\).

\(\text{\)gcdSum\(}(33) = gcd(33, 3 + 3) = gcd(33,\ 6) = 3\).

Значит, минимальное целое число \(\ge 31\), для которого \(gcdSum\) \(> 1\) — это \(33\).

Набор 3: \(\ n = 75\):

\(\text{\)gcdSum\(}(75) = gcd(75, 7 + 5) = gcd(75,\ 12) = 3\).

\(\text{\)gcdSum\(}\) числа \(75\) уже \(> 1\). Значит, это число и является ответом.

C. Отражения от плоскостей

дп Перебор Структуры данных *1600

Гауранг вырос в таинственной вселенной. Перед ним стоят \(n\) 2D плоскостей одна за другой. Он пускает частицу с периодом распада \(k\) в направлении плоскостей.

Частица может пройти через плоскость напрямую, однако, каждая плоскость создает идентичную копию этой частицы, направленную в противоположном направлении с периодом распада равным \(k-1\). Если период распада частицы равен \(1\), то она НЕ создаст копию.

Например, если есть две плоскости, и выпущена частица с периодом распада \(3\) (направлена вправо), то происходит следующий процесс: (здесь \(D(x)\) означает одну частицу с периодом распада \(x\))

  1. первая плоскость создает \(D(2)\) влево и пропускает \(D(3)\) дальше вправо;
  2. вторая плоскость создает \(D(2)\) влево и пропускает \(D(3)\) дальше вправо;
  3. первая плоскость пропускает \(D(2)\) дальше влево и создает \(D(1)\) вправо;
  4. вторая плоскость пропускает \(D(1)\) дальше вправо (\(D(1)\) не может создавать копии).

В конце мультимножество \(S\) всех частиц — это \(\{D(3), D(2), D(2), D(1)\}\). (Смотрите примеры для визуального отображения этого теста.)

Гауранг не справляется со сложностью этого процесса, когда количество плоскостей слишком велико. Помогите Гаурангу узнать размер мультимножества \(S\) по заданным \(n\) и \(k\).

Так как размер мультимножества может быть очень большим, выведите его по модулю \(10^9+7\).

Обратите внимание, что частицы могут перемещаться между плоскостями, не сталкиваясь друг с другом.

Входные данные

В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Затем следуют \(t\) строк, в каждой записаны два целых числа \(n\) и \(k\) (\(1 \le n, k \le 1000\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(1000\). Сумма \(k\) по всем наборам входных данных не превосходит \(1000\). Все наборы входных данных в одном тесте различны.

Выходные данные

Выведите \(t\) целых чисел. \(i\)-е число должно являться ответом на \(i\)-й набор входных данных.

Примечание

Здесь следует объяснение первого примера, состоящего из четырех наборов входных данных.

Набор входных данных 1: (\(n = 2\), \(k = 3\)) уже объяснен в условии задачи.

На картинке ниже изображена симуляция. Каждая цветная прямая показывает путь одной из частиц. Как можно видеть, всего есть четыре различных частицы в мультимножестве. Обратите внимание, что вертикальные промежутки между отраженными частицами введены только для визуальной ясности (как ранее описывалось, частицы не сталкиваются друг с другом)

Набор входных данных 2: (\(n = 2\), \(k = 2\)) выглядит так:

  1. первая плоскость создает \(D(1)\) влево и пропускает \(D(2)\) дальше вправо;
  2. вторая плоскость создает \(D(1)\) влево и пропускает \(D(2)\) дальше вправо;
  3. первая плоскость пропускает \(D(1)\) дальше влево (\(D(1)\) не может создавать копии).

Итоговый размер мультимножества \(\{D(1), D(1), D(2)\}\) равен трем.

Набор входных данных 3: (\(n = 3\), \(k = 1\)) — здесь есть три плоскости, но период распада всего один. Поэтому новые копии не создаются, когда одна частица пролетает через плоскости. Поэтому ответ один.

Набор входных данных 4: (\(n = 1\), \(k = 3\)) — здесь только одна плоскость. Частица создает новую копию влево. Мультимножество \(\{D(2), D(3)\}\) имеет размер два.

E. Два дома

графы жадные алгоритмы интерактив Перебор сортировки *2200

Это интерактивная задача. Не забывайте о том, что ваша программа должна каждый раз после вывода запроса сбрасывать буфер вывода. Для сброса буфера вывода можно использовать fflush(stdout) в C++, system.out.flush() в Java, stdout.flush() в Python или flush(output) в Pascal. Если вы используете другой язык программирования, посмотрите в его документации, как выполняется эта операция. Также рекомендуем вам прочесть руководство по интерактивным задачам: https://cf.m27.workers.dev/blog/entry/45307.

Диксит живет в городе, в котором \(n\) домов. Между каждой парой домов есть ровно одна направленная дорога. То есть для любой пары домов A и B есть либо дорога от дома A к дому B, либо дорога от B к A (но только одна из них). К \(i\)-му дому ведут \(k_i\) дорог.

Два дома A и B являются взаимно достижимыми, если дом A достижим из дома B (существует путь от дома A к дому B по дорогам), и дом B достижим из дома A.

Диксит хочет купить в этом городе два дома, один для того, чтобы жить в нем, другой — для учебы. Естественно, он бы хотел, чтобы от каждого из этих домов можно было добраться до другого дома, то есть ему нужно найти пару взаимно достижимых домов. Если таких пар несколько, Диксит хочет максимизировать величину \(|k_A - k_B|\), где \(k_i\) — количество дорог, ведущих к дому \(i\). Если существует более одной оптимальной пары, подойдет любая из них.

Так как Диксит занят подготовкой CodeCraft, он просит вас помочь ему найти два таких дома, или сообщить, что таких домов нет.

Во входных данных задачи вам не задаются направления дорог. Вы знаете только количество дорог, идущих к каждому дому (\(k_i\)).

Вы можете задавать запросы следующих типов: вы выводите пару домов A и B, и жюри ответит, есть ли путь от дома A к дому B. В этой задаче нет никакого явного ограничения на количество запросов, которые вы можете задать. Но нельзя задавать запросы после того, как жюри ответит «Yes» на один из ваших запросов. Кроме того, нельзя задавать один и тот же запрос дважды.

Как только вы зададите все необходимые запросы (или жюри ответит «Yes» на один из них), ваша программа должна вывести ответ и завершиться.

Прочтите раздел «Протокол взаимодействия» для того, чтобы получить более подробную информацию о взаимодействии.

Входные данные

В первой строке задано одно целое число \(n\) (\(3 \le n \le 500\)) — количество домов в городе. Во второй строке заданы \(n\) целых чисел \(k_1, k_2, \dots, k_n\) (\(0 \le k_i \le n - 1\)), \(i\)-е из которых равно кол-ву дорог, идущих к \(i\)-му дому.

Протокол взаимодействия

Чтобы задать запрос, выведите «? A B» \((1 \leq A,B \leq N, A\neq B)\). Программа жюри ответит «Yes», если есть путь от дома A к дому B, или «No», если пути нет.

Чтобы дать ответ на задачу, выведите «! A B», где A и B — номера двух различных домов, достижимых друг из друга, с максимально возможной величиной \(|k_A - k_B|\). Если такой пары домов не существует, выведите «! 0 0».

После вывода ответа ваша программа должна завершиться, иначе вы получите вердикт «Неправильный ответ».

Вы не можете задавать один и тот же запрос дважды. Нет никакого ограничения на количество запросов, но вы не можете задавать запросы после получения ответа «Yes». После этого ваша программа сразу должна вывести ответ на задачу («! A B» или «! 0 0») и завершиться.

Если вы зададите запрос в неправильном формате или зададите один и тот же запрос дважды, вы получите вердикт «Неправильный ответ».

После вывода запроса не забудьте вывести символ конца строки и сбросить буфер вывода (иначе вы можете получить вердикт «Решение зависло»). В различных языках программирования сброс буфера вывода реализован следующим образом:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • для других языков посмотрите их документацию.
Примечание

В первом примере нам задан город с тремя домами, в каждый из которых ведет по одной дороге. Решение участника задает запрос «? 1 2», чтобы узнать, можно ли от дома \(1\) добраться до дома \(2\). Программа жюри отвечает «Yes». После этого решение участника выводит ответ «! 1 2» и завершается.

Во втором примере решение участника делает шесть различных запросов, убеждается в том, что пары домов, достижимых друг из друга, нет, и выводит «! 0 0» в качестве ответа.

B. Двоичные удаления

дп жадные алгоритмы Перебор реализация *1000

Задана строка \(s\), состоящая только из символов '0' или '1'. Пусть \(|s|\) будет длиной строки \(s\).

Требуется выбрать некоторое целое число \(k\) (\(k > 0\)) и последовательность \(a\) длины \(k\) такую что:

  • \(1 \le a_1 < a_2 < \dots < a_k \le |s|\);
  • \(a_{i-1} + 1 < a_i\) для всех \(i\) от \(2\) до \(k\).

Символы на позициях \(a_1, a_2, \dots, a_k\) удаляются, оставшиеся символы склеиваются без изменения порядка. То есть, другими словами, позиции в выбранной последовательности \(a\) не должны быть соседними.

Пусть полученная строка будет \(s'\). \(s'\) называется отсортированной, если для всех \(i\) от \(2\) до \(|s'|\) \(s'_{i-1} \le s'_i\).

Существует ли такая последовательность \(a\), что \(s'\) отсортирована?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следует описание \(t\) наборов входных данных.

В единственной строке каждого набора входных данных содержится строка \(s\) (\(2 \le |s| \le 100\)). Каждый символ равен либо '0', либо '1'.

Выходные данные

На каждый набор входных данных выведите «YES», если существует такая последовательность \(a\), что при удалении символов на позициях \(a_1, a_2, \dots, a_k\) и склеивании оставшихся частей без изменения порядка получится отсортированная строка.

В противном случае выведите «NO».

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных можно выбрать последовательность \(a=[1,3,6,9]\). При удалении подчеркнутых букв из «10101011011» получится строка «0011111», которая отсортирована.

Во втором и в третьем наборах входных данных последовательность уже отсортирована.

В четвертом наборе входных данных можно выбрать последовательность \(a=[3]\). \(s'=\) «11», которая отсортирована.

В пятом наборе входных данных нет способа выбрать последовательность \(a\) так, чтобы \(s'\) была отсортирована.

C. Минимальный путь на поле

жадные алгоритмы математика Перебор Структуры данных *1500

Предположим, вы стоите на плоскости \(XY\) в точке \((0, 0)\) и хотите попасть в точку \((n, n)\).

Вы можете двигать только в двух направлениях:

  • вправо, т. е. горизонтально и в направлении увеличения \(x\) коодинаты,
  • или вверх, т. е. вертикально и в направлении увеличения \(y\) координаты.

Другими словами, ваш путь имеет следующую структуру:

  • первоначально, вы выбираете: пойти вправо или вверх;
  • далее вы проходите некоторое положительное целое расстояние в выбранном направлении (расстояния можно выбирать независимо);
  • далее вы меняете направление движения (от «вправо» к «вверх», либо от «вверх» к «вправо») и повторяете процесс.

Вам не нравится менять свое направление слишком много раз, а потому вы сделаете не более \(n - 1\) изменений направления.

В результате ваш путь будет представлять ломаную от \((0, 0)\) к \((n, n)\), состоящую из не более чем \(n\) отрезков, каждый из которых имеет положительную целую длину, а также вертикальные и горизонтальные отрезки идут по очереди.

Не все пути равны. У вас есть \(n\) целых чисел \(c_1, c_2, \dots, c_n\), где \(c_i\) — это цена \(i\)-го отрезка.

Используя эти цены, можно определить цену пути как сумму длин отрезков этого пути умноженных на их стоимости, т. е. если путь состоит из \(k\) отрезков (\(k \le n\)), то цена пути равна \(\sum\limits_{i=1}^{k}{c_i \cdot length_i}\) (отрезки нумеруются от \(1\) по \(k\) в порядке их обхода).

Определите путь минимальной стоимости и выведите его цену.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 10^5\)).

Во второй строке каждого набора заданы \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le 10^9\)) — цены каждого отрезка.

Гарантируется, что сумма \(n\) не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных вы должны вывести минимальную цену пути из \((0, 0)\) в \((n, n)\), состоящего из не более \(n\) чередующихся отрезков.

Примечание

В первом примере из условия, чтобы достигнуть \((2, 2)\), нужно сделать хотя бы один поворот, и путь может состоять из \(2\) отрезков: горизонтального длины \(2\) и вертикального длины \(2\). Стоимость равна \(2 \cdot c_1 + 2 \cdot c_2 = 26 + 176 = 202\).

Во втором примере можно построить путь из \(3\) отрезков: длины \(1\), длины \(3\) и длины \(2\). Стоимость равна \(1 \cdot 2 + 3 \cdot 3 + 2 \cdot 1 = 13\).

В третьем примере можно построить путь из \(4\) отрезков: длины \(1\), длины \(1\), длины \(4\) и длины \(4\). Стоимость равна \(1 \cdot 4 + 1 \cdot 3 + 4 \cdot 2 + 4 \cdot 1 = 19\).

A. Поеду домой

математика Перебор реализация хэши *1800

На третьем месяце дистанционного обучения студентке Насте стало скучно, и она решила поехать домой к себе в родной город на пару недель с целью развеяться. Чтобы ей было веселее в дороге, её друг подарил ей массив целых чисел \(a\).

Шел пятый час поездки, и Настя вспомнила про подарок. Чтобы развлечь себя, она решила проверить, можно ли выбрать четыре различных индекса \(x, y, z, w\) таких, что \(a_x + a_y = a_z + a_w\).

Занявшись этим делом, Настя не заметила, как прошло время, и её поезд уже пришел на станцию назначения. Она не успела закончить проверку, но всё ещё хочет узнать истину. Сможете ей помочь?

Входные данные

Первая строка содержит целое число \(n\) (\(4 \leq n \leq 200\,000\)) — количество чисел в массиве.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 2.5 \cdot 10^6\)).

Выходные данные

Выведите «YES», если четыре таких индекса существуют, и «NO» иначе.

Если они существуют, далее выведите сами индексы \(x\), \(y\), \(z\) и \(w\) (\(1 \le x, y, z, w \le n\)).

Если возможных ответов несколько, выведите любой.

Примечание

В первом примере \(a_2 + a_3 = 1 + 5 = 2 + 4 = a_1 + a_6\). Обратите внимание, что ответ 2 3 4 6 также подходит.

Во втором примере нельзя выбрать четыре таких индекса. Ответ 1 2 2 3 не подходит, потому что в нем не все индексы различны, хоть и \(a_1 + a_2 = 1 + 3 = 3 + 1 = a_2 + a_3\)

B. Две люстры

Бинарный поиск китайская теорема об остатках математика Перебор теория чисел *2200

Вася — директор крупной строительной компании. Как и у всякого большого начальника у него есть большой, солидно обставленный кабинет, в котором висят две хрустальные люстры. Так сложилось, что Васе проще думать, если свет в комнате каждый день разного цвета. Когда Вася отдавал распоряжение о том, как именно оформлять его кабинет, он также указал, что ему нужны две таких люстры, чтобы в них каждый день цвет освещения изменялся по какому-нибудь циклу. Например, по такому: красный – коричневый – желтый – красный – коричневый – желтый, и так по кругу.

В продаже было несколько люстр, отличающихся друг от друга набором цветов в цикле или порядком. По какой-то ошибке, а может из-за невнимательности, человек, ответственный за выбор люстр, купил две разные люстры.

Из-за того, что люстры разные, в некоторые дни они будут светить одинаково, а в некоторые — по-разному. Естественно, это не солидно, и вообще раздражает Васю, так что когда в \(k\)-й раз наступит событие «сегодня люстры светят разными цветами», Вася очень разозлится и кого-то уволит (вероятно, сотрудника, купившего люстры). Ваша задача – понять, на какой день, начиная со дня установки люстр, это случится. Считайте, что Вася очень любит работать, поэтому работает каждый день, без праздников и выходных.

Входные данные

В первой строке даны три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m \le 500\,000\); \(1 \le k \le 10^{12}\)) — количество цветов в первой люстре, количество цветов во второй люстре и сколько раз люстры должны гореть разным цветом, чтобы Вася очень разозлился.

Во второй строке даны \(n\) различных чисел \(a_i\) (\(1 \le a_i \le 2 \cdot \max(n, m)\)), задающих последовательность цветов для первой люстры.

В третьей строке даны \(m\) различных чисел \(b_j\) (\(1 \le b_i \le 2 \cdot \max(n, m)\)), задающих последовательность цветов для второй люстры.

В \(i\)-й день первая люстра светит цветом \(a_x\), где \(x = ((i - 1) \mod n) + 1)\), а вторая цветом \(b_y\), где \(y = ((i - 1) \mod m) + 1)\).

Гарантируется, что последовательность \(a\) не совпадает тождественно с последовательностью \(b\), а значит лампы будут периодически раздражать Васю.

Выходные данные

Выведите одно число — через сколько дней Вася очень разозлится.

Примечание

В первом тесте из условия люстры будут гореть разными цветами в дни \(1\), \(2\), \(3\) и \(5\). Соответственно ответом является \(5\).

C. Сортировка матрицы

битмаски жадные алгоритмы Конструктив Перебор *2600

Даны две таблицы \(A\) и \(B\) размера \(n \times m\).

Назовём сортировкой по столбцу следующее действие: выбирается столбец, и все строки упорядочиваются по значению в этом столбце, от строк, содержащих меньшие значения, к строкам с большими. В случае, если две строки имеют одинаковое значение в этом столбце, их порядок не меняется (такие сортировки называются стабильными).

Подобное поведение сортировки по столбцу можно найти практически в любом офисном приложении для работы с таблицами. Петя работает в одном из таких приложений, и у него открыта таблица \(A\). Он хочет проделать ноль или более операций сортировки по столбцу, чтобы получить таблицу \(B\).

Определите, может ли он это сделать, и если может, предложите ему алгоритм действий — последовательность столбцов, по которым нужно применить сортировку по столбцу. Обратите внимание, что не требуется минимизировать число действий.

Входные данные

В первой строке даны два числа \(n\) и \(m\) (\(1 \le n, m \le 1500\)) — размеры таблицы.

Каждая из следующих \(n\) строк содержит \(m\) целых чисел \(a_{i,j}\) (\(1 \le a_{i, j} \le n\)) — элементы таблицы \(A\).

Каждая из следующих \(n\) строк содержит \(m\) целых чисел \(b_{i, j}\) (\(1 \le b_{i, j} \le n\)) — элементы таблицы \(B\).

Выходные данные

Если превратить таблицу \(A\) в таблицу \(B\) невозможно, выведите \(-1\).

В противном случае выведите \(k\) (\(0 \le k \le 5000\)) — количество сортировок, которые нужно сделать.

Затем выведите \(k\) целых чисел \(c_1, \ldots, c_k\) (\(1 \le c_i \le m\)) — номера столбцов, по которым нужно сделать сортировку.

Можно доказать, что если Петя может осуществить желаемое, то \(5000\) действий ему хватит.

Примечание

Рассмотрим второй пример. После сортировки по первому столбцу таблица имеет вид

\(\)\begin{matrix} 1&3&3\\ 1&1&2\\ 2&3&2. \end{matrix}\(\)

После того, как мы отсортируем таблицу по второму столбцу, она станет

\(\)\begin{matrix} 1&1&2\\ 1&3&3\\ 2&3&2, \end{matrix}\(\)

что нам и нужно.

В третьем тесте любая сортировка не меняет таблицу, так как все столбцы уже отсортированы.

C. Двусторонние строки

Перебор реализация Строки *1000

Вам заданы строки \(a\) и \(b\), состоящие из строчных букв латинского алфавита. Вы можете сделать произвольное число следующих операций в произвольном порядке:

  • если \(|a| > 0\) (длина строки \(a\) больше нуля), удалить первый символ строки \(a\), то есть заменить \(a\) на \(a_2 a_3 \ldots a_n\);
  • если \(|a| > 0\), удалить последний символ строки \(a\), то есть заменить \(a\) на \(a_1 a_2 \ldots a_{n-1}\);
  • если \(|b| > 0\) (длина строки \(b\) больше нуля), удалить первый символ строки \(b\), то есть заменить \(b\) на \(b_2 b_3 \ldots b_n\);
  • если \(|b| > 0\), удалить последний символ строки \(b\), то есть заменить \(b\) на \(b_1 b_2 \ldots b_{n-1}\).

Заметьте, что после каждой из операций строка \(a\) или \(b\) могут стать пустыми.

Например, если \(a=\)«hello» и \(b=\)«icpc», то вы можете применить следующую последовательность операций:

  • удалить первый символ строки \(a\) \(\Rightarrow\) \(a=\)«ello» и \(b=\)«icpc»;
  • удалить первый символ строки \(b\) \(\Rightarrow\) \(a=\)«ello» и \(b=\)«cpc»;
  • удалить первый символ строки \(b\) \(\Rightarrow\) \(a=\)«ello» и \(b=\)«pc»;
  • удалить последний символ строки \(a\) \(\Rightarrow\) \(a=\)«ell» и \(b=\)«pc»;
  • удалить последний символ строки \(b\) \(\Rightarrow\) \(a=\)«ell» и \(b=\)«p».

По заданным строкам \(a\) и \(b\) найдите минимальное количество операций, за которые можно сделать строки \(a\) и \(b\) равными. Обратите внимание, что пустые строки также являются равными.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 100\)). Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит строку \(a\) (\(1 \le |a| \le 20\)), состоящую из строчных букв латинского алфавита.

Вторая строка каждого набора входных данных содержит строку \(b\) (\(1 \le |b| \le 20\)), состоящую из строчных букв латинского алфавита.

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество операций, за которые можно сделать строки \(a\) и \(b\) равными.

G. Максимизируй оставшуюся строку

дп жадные алгоритмы Перебор Строки Структуры данных *2000

Вам задана строка \(s\), состоящая из строчных букв латинского алфавита. Пока в строке \(s\) есть хотя бы один символ, повторяющийся хотя бы дважды, вы выполняете следующую операцию:

  • вы выбираете индекс \(i\) (\(1 \le i \le |s|\)), такой что символ на позиции \(i\) встречается хотя бы два раза в строке \(s\), и удаляете символ на позиции \(i\), то есть заменяете \(s\) на \(s_1 s_2 \ldots s_{i-1} s_{i+1} s_{i+2} \ldots s_n\).

Например, если \(s=\)«codeforces», то вы можете применить следующую последовательность операций:

  • \(i=6 \Rightarrow s=\)«codefrces»;
  • \(i=1 \Rightarrow s=\)«odefrces»;
  • \(i=7 \Rightarrow s=\)«odefrcs»;

По заданной строке \(s\) найдите лексикографически максимальную строку, которая может быть получена после применения некоторой последовательности операций, оставляющей в строке только уникальные символы.

Строка \(a\) длины \(n\) лексикографически меньше строки \(b\) длины \(m\), если:

  • существует индекс \(i\) (\(1 \le i \le \min(n, m)\)), такой что первые \(i-1\) символов у строк \(a\) и \(b\) совпадают, а \(i\)-й символ строки \(a\) меньше, чем \(i\)-й символ строки \(b\);
  • или первые \(\min(n, m)\) символов у строк \(a\) и \(b\) совпадают и \(n < m\).

Например строка \(a=\)«aezakmi» лексикографически меньше строки \(b=\)«aezus».

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следую \(t\) наборов входных данных.

Каждый набор входных данных характеризуется строкой \(s\), состоящей из строчных букв латинского алфавита (\(1 \le |s| \le 2 \cdot 10^5\)).

Гарантируется, что сумма длин строк во всех наборах входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически максимальную строку, которая может быть получена после применения некоторой последовательности операций, оставляющей в строке только уникальные символы.

C. Завершите MST

битмаски графы Деревья жадные алгоритмы Перебор поиск в глубину и подобное снм Структуры данных *2500

Как преподаватель, Riko Hakozaki часто помогает ученикам в решении задач по различным предметам. Сегодня ее попросили помочь с задачей по программированию, которая заключается в следующем.

Вам выдается неориентированный полный граф с \(n\) вершинами, где для некоторых ребер заданы положительные веса, а для остальных нет. Вам нужно назначить всем еще не назначенным рёбрам неотрицательные веса так, чтобы у получившегося графа XOR (побитовое исключающее ИЛИ) всех весов был равен \(0\).

Определим уродство полного графа как вес его минимального остовного дерева, где вес остовного дерева равен сумме весов его рёбер. Нужно назначить веса так, чтобы уродство получившегося графа было как можно меньше.

Напомним, что неориентированный полный граф с \(n\) вершинами содержит все рёбра \((u, v)\) с \(1 \le u < v \le n\); такой граф имеет \(\frac{n(n-1)}{2}\) рёбер.

Она не знает, как решить эту задачу, поэтому просит вас решить ее за нее.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(0 \le m \le \min(2 \cdot 10^5, \frac{n(n-1)}{2} - 1)\))  — количество вершин и количество предварительно назначенных рёбер. Гарантируется, что есть по крайней мере одно неназначенное ребро.

\(i\)-я из следующих строк \(m\) содержит три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i, v_i \le n\), \(u \ne v\), \(1 \le w_i < 2^{30}\)), обознаающие ребро от \(u_i\) до \(v_i\), которому был назначен вес \(w_i\). Ни одно ребро не появляется во вводе более одного раза.

Выходные данные

Выведите в одной строке одно целое число  — минимальное уродство среди всех возможных назначений весов с XOR суммой равной \(0\).

Примечание

На изображении ниже показан первый пример. Черные веса назначены предварительно, красные веса назначены нами, а минимальное остовное дерево состоит из синих ребер.

E. Дерево-календарь

Деревья Конструктив Перебор поиск в глубину и подобное сортировки Структуры данных *3100

Yuu Koito и Touko Nanami — молодожёны! В день свадьбы Yuu подарила Touko ориентированное дерево с \(n\) вершинами и корнем в \(1\), а также маркировку \(a\), которая является некоторым DFS обходом дерева. Каждое ребро в этом дереве направлено в сторону от корня.

Следующий алгоритм после вызова dfs(1) возвращает \(a\) — DFS-обход дерева, корнем которого является \(1\):


номер := 0
a := массив длины n

функция dfs(u):
номер := номер + 1
a[u] := номер
для всех v, для которых есть ориентированное ребро (u -> v):
dfs(v)

Обратите внимание, что для дерева может существовать несколько различных DFS-обходов

Touko настолько понравился подарок, что она решила поиграть с ним! Каждый день, начиная с дня после свадьбы, Touko выполняет следующую процедуру один раз:

  • Среди всех ориентированных рёбер \(u \rightarrow v\) таких, что \(a_u < a_v\), выберите рёбро \(u' \rightarrow v'\) с лексикографически минимальной парой \((a_{u'}, a_{v'})\).
  • Обменяйте местами \(a_{u'}\) и \(a_{v'}\).

Прошли дни со свадьбы, а Touko как-то забыла, когда была свадьба, и какой была оригинальная маркировка \(a\)! Опасаясь, что Yuu может разозлиться, Touko решила попросить вас определить эту информацию, используя текущую маркировку.

Будучи ее хорошим другом, вы должны найти количество дней, прошедших со свадьбы, и оригинальную маркировку дерева. Однако есть шанс, что Touko могла ошибиться в процессе, в результате чего текущую маркировку невозможно получить ни из какой начальной маркировки, в этом случае, пожалуйста, сообщите об этом Touko.

Входные данные

В первой строке входных данных содержится целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — количество вершин в дереве.

Во второй строке содержатся \(n\) целые числа \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le n\), все \(a_i\) различны) — текущая маркировка дерева.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u, v \le n\), \(u \neq v\)), описывающие ориентированное ребро от \(u_i\) до \(v_i\). Ребра образуют корневое ориентированное дерево с корнем в \(1\).

Выходные данные

Если текущую маркировку невозможно получить ни из какого DFS-обхода, выведите NO.

В противном случае в первой строке выведите YES. Во второй строке выведите единственное целое число, обозначающее количество дней со дня свадьбы. В третьей строке выведите \(n\) чисел через пробел, обозначающих оригинальную маркировку дерева.

Если есть несколько правильных решений, вы можете вывести любое. Это означает, что вы можете вывести любую пару (DFS-обход, количество дней), для которой мы получим текущую конфигурацию, начав из DFS-обхода, который вы предоставили, ровно через предоставленное вами количество дней.

Примечание

Следующая анимация демонстрирует первый пример. Белая метка внутри вершины обозначает номер вершины \(i\), а оранжевая метка — значение \(a_i\).

F. Оптимальное кодирование

Перебор Структуры данных *3500

Любимая последовательность чисел Touko — это перестановка \(a_1, a_2, \dots, a_n\) чисел \(1, 2, \dots, n\), и она хочет коллекцию перестановок, похожих на ее любимую перестановку.

У нее есть коллекция \(q\) отрезков вида \([l_i, r_i]\) с \(1 \le l_i \le r_i \le n\). Для создания перестановок, похожих на ее любимую перестановку, она придумала следующее определение:

  • Перестановка \(b_1, b_2, \dots, b_n\) позволяет интервалу \([l', r']\) удерживать свою форму, если для любой пары целых \((x, y)\) таких, что \(l' \le x < y \le r'\), неравенство \(b_x < b_y\) выполняется тогда и только тогда, когда \(a_x < a_y\).
  • Перестановка \(b_1, b_2, \dots, b_n\) называется \(k\)-похожей, если \(b\) позволяет всем интервалам \([l_i, r_i]\) для \(1 \le i \le k\) сохранять свою форму.

Yuu хочет найти все \(k\)-похожие перестановки для Touko, но это оказалось очень сложной задачей. Вместо этого Yuu будет кодировать набор всех \(k\)-похожих перестановок ориентированными ациклическими графами (DAG). Yuu также придумала для себя следующие определения:

  • Перестановка \(b_1, b_2, \dots, b_n\) удовлетворяет DAG \(G'\), если для всех ребер \(u \to v\) в \(G'\) выполняется \(b_u < b_v\).
  • \(k\)-кодирование — это DAG \(G_k\) на наборе вершин \(1, 2, \dots, n\) такой, что перестановка \(b_1, b_2, \dots, b_n\) удовлетворяет \(G_k\), если и только если \(b\) является \(k\)-похожей.

Поскольку Yuu сегодня свободна, она хочет выяснить минимальное количество ребер среди всех \(k\)-кодирований для каждого \(k\) от \(1\) до \(q\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n \le 25\,000\), \(1 \le q \le 100\,000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\), которые образуют перестановку \(1, 2, \dots, n\).

В \(i\)-й из следующих строк \(q\) содержатся два целых числа \(l_i\) и \(r_i\). (\(1 \le l_i \le r_i \le n\)).

Выходные данные

Выведите \(q\) строк. \(k\)-я из них должна содержать единственное целое число  — минимальное количество рёбер среди всех \(k\)-кодирований.

Примечание

Для первого примера:

  • Все \(1\)-похожие перестановки должны позволять интервалу \([1, 3]\) удерживать свою форму. Поэтому набор всех \(1\)-похожих перестановок составляет \(\{[3, 4, 2, 1], [3, 4, 1, 2], [2, 4, 1, 3], [2, 3, 1, 4]\}\). Оптимальным кодированием этих перестановок является
  • Все \(2\)-похожие перестановки должны позволять интервалам \([1, 3]\) и \([2, 4]\) удерживать свою форму. Поэтому набор всех \(2\)-похожих перестановок составляет \(\{[3, 4, 1, 2], [2, 4, 1, 3]\}\). Оптимальным кодированием этих перестановок является
  • Все \(3\)-похожие перестановки должны позволять интервалы \([1, 3]\), \([2, 4]\) и \([1, 4]\) удерживать свои формы. Поэтому набор всех \(3\)-похожих перестановок включает только \([2, 4, 1, 3]\). Оптимальным кодированием этой перестановки является

C. Очередная задача про колоду карт

Деревья Перебор реализация Структуры данных *1100

У вас есть колода из \(n\) карт, пронумерованных сверху вниз, т. е. у верхней карты индекс \(1\), а у нижней — \(n\). У каждой карты есть цвет: цвет \(i\)-й карты равен \(a_i\).

Вам нужно обработать \(q\) запросов: \(j\)-й запрос описывается одним целым числом \(t_j\). Для каждого запроса вам нужно:

  • найти самую верхнюю карту в колоде с цветом \(t_j\), т. е. карту с минимальным индексом;
  • вывести индекс найденной карты;
  • вытащить данную карту и положить ее сверху колоды.
Входные данные

В первой строке заданы два целых числа \(n\) и \(q\) (\(2 \le n \le 3 \cdot 10^5\); \(1 \le q \le 3 \cdot 10^5\)) — количество карт в колоде и количество запросов.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 50\)) — цвета карт.

В третьей строке заданы \(q\) целых чисел \(t_1, t_2, \dots, t_q\) (\(1 \le t_j \le 50\)) — цвета в запросах. Гарантируется, что в запросах используются только цвета, представленные в колоде.

Выходные данные

Выведите \(q\) целых чисел — ответы на все запросы.

Примечание

Описание примера:

  1. текущая колода \([2, 1, 1, 4, \underline{3}, 3, 1]\) и верхняя карта цвета \(t_1 = 3\) на позиции \(5\);
  2. текущая колода \([3, \underline{2}, 1, 1, 4, 3, 1]\) и верхняя карта цвета \(t_2 = 2\) на позиции \(2\);
  3. текущая колода \([2, 3, \underline{1}, 1, 4, 3, 1]\) и верхняя карта цвета \(t_3 = 1\) на позиции \(3\);
  4. текущая колода \([\underline{1}, 2, 3, 1, 4, 3, 1]\) и верхняя карта цвета \(t_4 = 1\) на позиции \(1\);
  5. текущая колода \([1, 2, 3, 1, \underline{4}, 3, 1]\) и верхняя карта цвета \(t_5 = 4\) на позиции \(5\).

D. Строка минимальной стоимости

графы жадные алгоритмы Конструктив Перебор Строки *1600

Определим стоимость строки \(s\) как количество пар индексов \(i\) и \(j\) (\(1 \le i < j < |s|\)) таких, что \(s_i = s_j\) и \(s_{i+1} = s_{j+1}\).

Заданы два положительных целых числа \(n\) и \(k\). Среди всех строк длины \(n\), содержащих только первые \(k\) букв латинского алфавита, найдите строку с минимально возможной стоимостью. Если таких строк несколько — найдите любую из них.

Входные данные

Единственная строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5; 1 \le k \le 26\)).

Выходные данные

Выведите строку \(s\) такую, что она состоит из \(n\) символов, каждый из которых является одной из первых \(k\) латинских букв, и она имеет минимально возможную стоимость среди всех таких строк. Если таких строк несколько — выведите любую из них.

F. Чайнворд

дп матрицы Перебор Строки строковые суфф. структуры Структуры данных *2700

Чайнворд — это особый тип кроссворда. Как и в большинстве кроссвордов, в нем есть клетки, в которые надо вписать буквы, и некоторые подсказки, которые указывают на то, какие буквы должны быть.

В чайнворде клетки для букв расположены в одну строку. В этой задаче мы будем рассматривать чайнворды длины \(m\).

Подсказка к чайнворду — это последовательность отрезков такая, что отрезки не пересекаются между собой и покрывают все \(m\) клеток. Каждый отрезок содержит описание слова в соответствующих клетках.

Особенность в том, что подсказки на самом деле две: одна последовательность находится в строке над клетками для букв, а другая — под ней. Когда эти последовательности разные, они помогают разрешить неоднозначность в ответах.

Дан словарь из \(n\) слов, каждое слово состоит из строчных латинских букв. Все слова попарно различны.

Экземпляр чайнворда — это следующая тройка:

  • строка из \(m\) строчных латинских букв;
  • первая подсказка: последовательность отрезков такая, что буквы, соответствующие каждому отрезку, составляют некоторое слово из словаря;
  • вторая подсказка: еще одна последовательность отрезков такая, что буквы, соответствующие каждому отрезку, составляют некоторое слово из словаря.

Обратите внимание, что последовательности отрезков не обязаны различаться.

Два экземпляра чайнвордов считаются различными, если различаются их строки, первые подсказки или вторые подсказки.

Посчитайте количество различных экземпляров чайнвордов. Так как их число может быть достаточно велико, выведите его остаток от деления на \(998\,244\,353\).

Входные данные

В первой строке записаны два целых числа \(n\) and \(m\) (\(1 \le n \le 8\), \(1 \le m \le 10^9\)) — количество слов в словаре и количество клеток с буквами.

В каждой из следующих \(n\) строк записано одно слово — непустая строка из не более \(5\) строчных латинских букв. Все слова попарно различные.

Выходные данные

Выведите одно целое число — количество различных экземпляров чайнвордов длины \(m\) для данного словаря по модулю \(998\,244\,353\).

Примечание

Здесь приведены все примеры различных чайнвордов для первого примера:

Красные полоски над буквами означают отрезки первой подсказки, синие полоски под буквами означают отрезки второй подсказки.

Во втором примере возможные строки: «abab», «abcd», «cdab» и «cdcd». Все подсказки — это отрезки, которые покрывают первые две буквы и последние две буквы.

G. Фишки на доске

битмаски дп игры Перебор Структуры данных *2700

У Алисы и Боба есть доска из \(n\) строк и \(m\) столбцов. В каждой строке есть ровно одна фишка.

Алиса и Боб играют в следующую игру. Они выбирают два целых числа \(l\) и \(r\), такие, что \(1 \le l \le r \le m\), и разрезают доску таким образом, что только столбцы с \(l\) по \(r\) (включительно) принадлежат доски. То есть все столбцы левее столбца \(l\) и все столбцы правее столбца \(r\) больше не являются частью доски.

После разрезания доски они начинают свою игру на оставшейся части доски (от столбца \(l\) до столбца \(r\)). Они ходят по очереди, и первый игрок, который не может сделать ход, проигрывает. Первый ход делает Алиса, второй — Боб, третий — снова Алиса, и так далее. Во время своего хода игрок должен выбрать одну из фишек и сдвинуть ее на любое количество столбцов влево (то есть, если фишка была в столбце \(i\), ее можно переместить в любой столбец \(j < i\), а фишки в самом левом столбце двигать нельзя). Фишки не должны покидать выбранную часть доски.

У Алисы и Боба есть \(q\) пар чисел \(L_i\) и \(R_i\). Для каждой такой пары они хотят определить, кто выиграет, если \(l = L_i\) и \(r = R_i\). Обратите внимание, что эти игры рассматриваются независимо (они не влияют на положение на доске в последующих играх), и оба игрока играют оптимально.

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество строк и столбцов, соответственно.

Во второй строке заданы \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le m\)), где \(c_i\) — номер столбца, в котором расположена фишка в \(i\)-м ряду (то есть, такое число обозначает фишку в клетке на пересечении \(i\)-й строки и \(c_i\)-го столбца).

В третьей строке задано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)).

Затем следуют \(q\) строк, в \(i\)-й строке заданы два целых числа \(L_i\) и \(R_i\) (\(1 \le L_i \le R_i \le m\)).

Выходные данные

Выведите строку из \(q\) символов. \(i\)-й символ должен быть A, если Алиса выигрывает при \(l = L_i\) и \(r = R_i\), или B, если выигрывает Боб.

A. Шпион обнаружен!

Перебор реализация *800

Вам дан массив \(a\), состоящий из \(n\) (\(n \ge 3\)) целых положительных чисел. Известно, что в этом массиве, все числа, кроме одного, совпадают (например, в массиве \([4, 11, 4, 4]\) все числа, кроме одного, равны \(4\)).

Выведите номер элемента, который не совпадает с остальными. Числа в массиве пронумерованы с единицы.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 100\)). Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 100\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 100\)).

Гарантируется, что в массиве \(a\) все числа, кроме одного, совпадают.

Выходные данные

Для каждого набора входных данных выведите одно целое число — номер элемента, который не совпадает с остальными.

E. Перестановка по сумме

жадные алгоритмы математика Перебор *1600

Перестановка — это последовательность длины \(n\) целых чисел от \(1\) до \(n\), в которой все числа встречаются ровно по одному разу. Например, \([1]\), \([3, 5, 2, 1, 4]\), \([1, 3, 2]\) — перестановки, а \([2, 3, 2]\), \([4, 3, 1]\), \([0]\) — нет.

Поликарпу дали четыре целых числа \(n\), \(l\), \(r\) (\(1 \le l \le r \le n)\) и \(s\) (\(1 \le s \le \frac{n (n+1)}{2}\)) и попросили найти перестановку \(p\) чисел от \(1\) до \(n\), обладающую следующим свойством:

  • \(s = p_l + p_{l+1} + \ldots + p_r\).

Например, для \(n=5\), \(l=3\), \(r=5\) и \(s=8\) подходят следующие перестановки (перечислены не все варианты):

  • \(p = [3, 4, 5, 2, 1]\);
  • \(p = [5, 2, 4, 3, 1]\);
  • \(p = [5, 2, 1, 3, 4]\).
Но, например, не существует ни одной перестановки, подходящей под условие выше для \(n=4\), \(l=1\), \(r=1\) и \(s=5\).

Помогите Поликарпу для заданных \(n\), \(l\), \(r\) и \(s\) найти перестановку чисел от \(1\) до \(n\), подходящую под условие выше. Если существует несколько подходящих перестановок, выведите любую из них.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных характеризуется четырьмя целыми числами \(n\) (\(1 \le n \le 500\)), \(l\) (\(1 \le l \le n\)), \(r\) (\(l \le r \le n\)), \(s\) (\(1 \le s \le \frac{n (n+1)}{2}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • \(n\) целых чисел — перестановку длины \(n\), обладающую свойством из условия, если такая перестановка существует;
  • -1, иначе.

Если существует несколько подходящих перестановок, выведите любую из них.

F. Образование

дп жадные алгоритмы Перебор реализация *1900

Поликарп мечтает о покупке нового компьютера, который стоит \(c\) тугриков. Для этого он хочет устроиться программистом в большую компанию.

В компании Поликарпа есть \(n\) должностей, пронумерованных начиная с единицы. Сотрудник на должности \(i\) каждый день зарабатывает \(a[i]\) тугриков. Чем выше номер должности, тем больше тугриков получает сотрудник. Изначально Поликарп устраивается на должность с номером \(1\) и имеет \(0\) тугриков.

Каждый день Поликарп может сделать одно из двух действий:

  • Если Поликарп находится на должности \(x\), то он может заработать \(a[x]\) тугриков;
  • Если Поликарп находится на должности \(x\) (\(x < n\)) и имеет хотя бы \(b[x]\) тугриков, то он может потратить \(b[x]\) тугриков на онлайн-курс и перейти на должность \(x+1\).

Например, если \(n=4\), \(c=15\), \(a=[1, 3, 10, 11]\), \(b=[1, 2, 7]\), то Поликарп может действовать так:

  • В первый день Поликарп находится на должности \(1\) и зарабатывает \(1\) тугрик. Теперь у него есть \(1\) тугрик;
  • Во второй день Поликарп находится на должности \(1\) и переходит на должность \(2\). Теперь у него есть \(0\) тугриков;
  • В третий день Поликарп находится на должности \(2\) и зарабатывает \(3\) тугрика. Теперь у него есть \(3\) тугрика;
  • В четвертый день Поликарп находится на должности \(2\) и переходит на должность \(3\). Теперь у него есть \(1\) тугрик;
  • В пятый день Поликарп находится на должности \(3\) и зарабатывает \(10\) тугриков. Теперь у него есть \(11\) тугриков;
  • В шестой день Поликарп находится на должности \(3\) и зарабатывает \(10\) тугриков. Теперь у него есть \(21\) тугриков;
  • Спустя шесть дней, Поликарп может купить себе новый компьютер.

Найдите минимальное количество дней, через которое Поликарп сможет купить себе новый компьютер.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(c\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le c \le 10^9\)) — количество должностей в компании и стоимость нового компьютера.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1 \le a_2 \le \ldots \le a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка каждого набора входных данных содержит \(n - 1\) целое число \(b_1, b_2, \ldots, b_{n-1}\) (\(1 \le b_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышаем \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество дней, через которое Поликарп сможет купить себе новый компьютер.

G. Короткая задача

дп математика Перебор теория чисел *1700

Обозначим за \(d(n)\) сумму всех делителей числа \(n\), т.е. \(d(n) = \sum\limits_{k | n} k\).

Например, \(d(1) = 1\), \(d(4) = 1+2+4=7\), \(d(6) = 1+2+3+6=12\).

Для заданного числа \(c\), найдите минимальное \(n\) такое, что \(d(n) = c\).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных характеризуется одним целым числом \(c\) (\(1 \le c \le 10^7\)).

Выходные данные

Для каждого набора входных данных выведите:

  • «-1», если не существует \(n\), такого что \(d(n) = c\);
  • \(n\), иначе.

F. Задача об обмене

Конструктив Перебор сортировки Структуры данных *2500

Вам даны два массива \(a\) и \(b\), оба из \(n\) элементов. Вы можете поменять местами два элемента в \(b\) не более одного раза (или ничего не делать). Вам нужно минимизировать величину \(\)\sum_{i}|a_{i}-b_{i}|.\(\)

Найдите минимально возможное значение этой суммы.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le {10^9}\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le {10^9}\)).

Выходные данные

Выведите минимально возможное значение суммы \(\sum_{i}|a_{i}-b_{i}|\).

Примечание

В первом примере можно поменять местами первый и пятый элементы массива \(b\), и он станет равным \([ 5, 2, 3, 4, 1 ]\).

В таком случае значение суммы будет равно \(|5-5| + |4-2| + |3-3| + |2-4| + |1-1| = 4\), что является минимумом.

Во втором примере можно поменять местами первый и второй элементы. Ответ равен \(2\).

B. Феникс и пазл

геометрия математика Перебор теория чисел *1000

Феникс играет с новым пазлом, который состоит из \(n\) одинаковых фрагментов. Каждый фрагмент — это равнобедренный прямоугольный треугольник, как показано ниже.

Фрагмент пазла

Цель пазла — собрать квадрат, используя \(n\) фрагментов. Феникс может поворачивать и двигать фрагменты как хочет, но фрагменты нельзя накладывать друг на друга и все \(n\) фрагментов должны быть использованы (конечно же, в квадрате не должно быть никаких прогалов). Может ли Феникс решить пазл?

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 10^9\)) — количество фрагментов в пазле.

Выходные данные

Для каждого набора, если Феникс может собрать квадрат из \(n\) фрагментов, выведите YES. Иначе, выведите NO.

Примечание

Для \(n=2\), Феникс может собрать следующий квадрат:

Для \(n=4\), Феникс может собрать такой квадрат:

Для \(n=6\), Феникс не сможет собрать квадрат.

H. Феникс и биты

битмаски Перебор сортировки Структуры данных *3500

Феникс любит играть с битами — особенно используя битовые операции AND, OR и XOR. У него есть \(n\) целых чисел \(a_1, a_2, \dots, a_n\) и \(q\) запросов, каждый одного из следующих типов:

  1. заменить все числа \(a_i\), для которых \(l \le a_i \le r\), на \(a_i\) AND \(x\);
  2. заменить все числа \(a_i\), для которых \(l \le a_i \le r\), на \(a_i\) OR \(x\);
  3. заменить все числа \(a_i\), для которых \(l \le a_i \le r\), на \(a_i\) XOR \(x\);
  4. вывести количество различных чисел \(a_i\), для которых \(l \le a_i \le r\).

В каждом запросе Феникса \(l\), \(r\) и \(x\) заданы. Заметим, что он рассматривает значения чисел, а не их индексы.

Входные данные

В первой строке заданы два целых числа \(n\) и \(q\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le q \le 10^5\)) — количество чисел и количество запросов, соответственно.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i < 2^{20}\)) — числа, которые есть у Феникса в начале.

В следующих \(q\) строках заданы запросы. Для каждого запроса, первое число в строке \(t\) (\(1 \le t \le 4\)) — это тип запроса.

Если \(t \in \{1, 2, 3\}\), то далее следуют три целых числа \(l_i\), \(r_i\) и \(x_i\) (\(0 \le l_i, r_i, x_i < 2^{20}\); \(l_i \le r_i\)).

В противном случае (если \(t=4\)), далее следуют два целых числа \(l_i\) и \(r_i\) (\(0 \le l_i \le r_i < 2^{20}\)).

Гарантируется, что есть хотя бы один запрос, где \(t=4\).

Выходные данные

Выведите ответ для каждого запроса четвертого типа (\(t=4\)).

Примечание

В первом примере:

  • В первом запросе, \(2\) заменяется на \(2\) AND \(2 = 2\), и \(3\) заменяется на \(3\) AND \(2 = 2\). Множество чисел становится \(\{1, 2, 4, 5\}\).
  • Во втором запросе, есть \(3\) различных числа от \(2\) по \(5\): \(2\), \(4\) и \(5\).
  • В третьем запросе, \(2\) заменяется на \(2\) XOR \(3 = 1\), \(4\) заменяется на \(4\) XOR \(3 = 7\), и \(5\) заменяется на \(5\) XOR \(3 = 6\). Множество чисел становится \(\{1, 6, 7\}\).
  • В четвертом запросе, есть \(2\) различных числа от \(1\) по \(6\): \(1\) и \(6\).
  • В пятом запросе, \(1\) заменяется на \(1\) OR \(8 = 9\). Множество чисел становится \(\{6, 7, 9\}\).
  • В шестом запросе, есть одно различное число от \(8\) по \(10\): \(9\).

B. AGAGA XOOORRR

битмаски дп жадные алгоритмы Перебор *1500

Ехаб известен своей любовью к определенным операциям. Сейчас у него есть массив \(a\) длины \(n\), и он может делать на нем следующую операцию:

  • Он выбирает \(2\) соседних элемента; Ехаб удаляет их из массива и вставляет на их место одно число: их исключающее ИЛИ. Обратите внимание, длина массива уменьшается на один.

Теперь он спрашивает вас: возможно ли сделать все элементы массива равными? Так как он хочет сделать вашу жизнь сложнее, то вводит дополнительное ограничение: в массиве должно остаться хотя бы \(2\) элемента.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 15\)) — количество наборов входных данных

В первой строке каждого набора входных данных записано целое число \(n\) (\(2 \le n \le 2000\)) — размер массива \(a\).

Во второй строке каждого набора входных данных записано \(n\) целых чисел \(a_1\), \(a_2\), \(\ldots\), \(a_{n}\) (\(0 \le a_i < 2^{30}\)) — элементы массива \(a\).

Выходные данные

Если Ехаб может сделать все элементы массива равными, применяя описанную операцию, так, чтобы в массиве осталось хотя бы \(2\) элемента, выведите «YES». Иначе выведите «NO».

Примечание

В первом примере мы можем удалить первые \(2\) элемента, \(0\) и \(2\), и вставить вместо них \(0 \oplus 2=2\). Получится массив \([2,2]\), в котором все элементы равны.

Во втором примере ответа не существует.

C. Берляндский отбор

жадные алгоритмы Перебор сортировки Структуры данных теория чисел *1400

Поликарп организует региональные ICPC соревнования в Берляндии. Всего в Берляндии \(n\) университетов, пронумерованных от \(1\) до \(n\). Поликарп знает всех спортивных программистов в регионе. Всего \(n\) студентов: \(i\)-й студент учится в университете \(u_i\), а его навык программирования оценивается величиной \(s_i\).

Поликарп сейчас думает над правилами регионального соревнования. В частности, над количеством участников в командах.

Поликарп знает, что если он выберет размер команды, как некоторое целое число \(k\), то каждый университет отправит \(k\) своих самых сильных (с наибольшей величиной навыка \(s\)) студентов в первой команде, следующие \(k\) — во второй команде и так далее. Если остается меньше \(k\) студентов, то команду нельзя собрать. Обратите внимание, что некоторые университеты могут отправить ноль команд.

Сила региона определяется, как суммарная величина навыков участников всех команд. Если ни одной команды нет, то сила равна \(0\).

Помогите Поликарпу найти силу региона для каждого \(k\) от \(1\) до \(n\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество университетов и количество студентов.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(u_1, u_2, \dots, u_n\) (\(1 \le u_i \le n\)) — университет, в котором учится \(i\)-й студент.

В третьей строке каждого набора входных данных записаны \(n\) целых чисел \(s_1, s_2, \dots, s_n\) (\(1 \le s_i \le 10^9\)) — величина навыка программирования \(i\)-го студента.

Сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите \(n\) целых чисел: силу региона — суммарную величину навыка программирования участников команд — для каждого выбора размера команды \(k\).

Примечание

В первом наборе входных данных команды университетов для каждого \(k\):

  • \(k=1\):
    • университет \(1\): \([6], [5], [5], [3]\);
    • университет \(2\): \([8], [1], [1]\);
  • \(k=2\):
    • университет \(1\): \([6, 5], [5, 3]\);
    • университет \(2\): \([8, 1]\);
  • \(k=3\):
    • университет \(1\): \([6, 5, 5]\);
    • университет \(2\): \([8, 1, 1]\);
  • \(k=4\):
    • университет \(1\): \([6, 5, 5, 3]\);

D. Максимальная сумма произведений

дп математика Перебор реализация *1600

Вам заданы два массива целых чисел \(a\) и \(b\) длины \(n\).

Вы можете развернуть не более одного подмассива (последовательного отрезка) массива \(a\).

Ваша задача состоит в том, чтобы перевернуть такой подмассив, чтобы сумма \(\sum\limits_{i=1}^n a_i \cdot b_i\) была максимально возможной.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 5000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^7\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^7\)).

Выходные данные

Выведите одно целое число — максимально возможную сумма после разворота не более одного подмассива (последовательного отрезка) \(a\).

Примечание

В первом примере можно перевернуть подмассив \([4, 5]\). Тогда \(a = [2, 3, 2, 3, 1]\) и \(2 \cdot 1 + 3 \cdot 3 + 2 \cdot 2 + 3 \cdot 4 + 1 \cdot 2 = 29\).

Во втором примере не нужно использовать операцию. \(13 \cdot 2 + 37 \cdot 4 = 174\).

В третьем примере можно перевернуть подмассив \([3, 5]\). Тогда \(a = [1, 8, 3, 6, 7, 6]\) и \(1 \cdot 5 + 8 \cdot 9 + 3 \cdot 6 + 6 \cdot 8 + 7 \cdot 8 + 6 \cdot 6 = 235\).

F. Сундуки и ключи

битмаски дп Перебор поиск в глубину и подобное Потоки *3200

Алиса и Боб играют в игру. У Алисы есть \(n\) сундуков с сокровищами (в \(i\)-м лежит \(a_i\) монет) и \(m\) ключей (\(j\)-й из которых она может продать Бобу за \(b_j\) монет).

Сначала Алиса вешает некоторые замки на сундуки. Есть \(m\) типов замков, замок \(j\)-го типа можно открыть только \(j\)-м ключом. Чтобы повесить замок типа \(j\) на \(i\)-й сундук, Алиса должна заплатить \(c_{i,j}\) долларов. Алиса может повесить произвольное количество различных замков на каждый сундук (возможно, ноль).

Затем Боб покупает у Алисы несколько ключей (возможно, ноль или все) и открывает все сундуки, которые он может открыть (он может открыть сундук, если у него есть ключи от всех замков на этом сундуке). Прибыль Боба — это разность между суммарным количеством монет в открытых сундуках и суммарным количеством монет, которые он тратит на покупку ключей у Алисы. Если прибыль Боба строго положительная (больше ноля), то он выигрывает игру. Иначе Алиса выигрывает игру.

Алиса хочет повесить замки на некоторые сундуки так, чтобы она выиграла игру вне зависимости от ключей, которые Боб купит (Боб не может получить положительную прибыль). Разумеется, она хочет потратить как можно меньше долларов на покупку замков. Помогите ей определить, может ли она выиграть игру, а если может, то сколько долларов ей придется потратить на замки.

Входные данные

В первой строке записаны два целых числа \(n\) and \(m\) (\(1 \le n, m \le 6\)) — количество сундуков и количество ключей, соответственно.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 4\)), где \(a_i\) — это количество монет в \(i\)-м сундуке.

В третьей строке записаны \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_j \le 4\)), где \(b_j\) — это количество монет, которые Боб тратит на покупку \(j\)-го ключа у Алисы.

Затем следуют \(n\) строк. В \(i\)-й строке записаны \(m\) целых чисел \(c_{i,1}, c_{i,2}, \dots, c_{i,m}\) (\(1 \le c_{i,j} \le 10^7\)), где \(c_{i,j}\) — это количество долларов, которые Алиса тратит на покупку замка \(j\)-го типа на \(i\)-й сундук.

Выходные данные

Если Алиса не может гарантированно выиграть (как бы она ни выбирала замки, Боб всегда сможет получить положительную прибыль), то выведите \(-1\).

Иначе выведите одно целое число — минимальное количество долларов, которые необходимо потратить Алисе, чтобы выиграть вне зависимости от действий Боба.

Примечание

В первом примере Алиса должна повесить замки \(1\) и \(3\) типов на первый сундук и замки \(2\) и \(3\) типов на второй сундук.

Во втором примере Алиса должна повесить замки \(1\) и \(2\) типов на первый сундук и замок \(3\) типа на второй сундук.

D. Рамки

Перебор *2600

Однажды Васе в руки попался листок клетчатой бумаги размером n × m клеток. Наш Вася очень любит геометрические фигуры, и поэтому он нарисовал на листке два прямоугольника со сторонами, параллельными осям координат, причем длина каждой стороны каждого прямоугольника не менее чем 3 клетки, а сами стороны нарисованы по линиям между клетками (также стороны могут являться частью границы листка бумаги). Затем Вася заштриховал все клеточки на рамках прямоугольников.

Рамкой прямоугольника назовем множество клеток внутри прямоугольника, имеющие хотя бы одну общую сторону с его границей.

Спустя некоторое время, Вася нашел лист бумаги того же самого размера, и никак не мог понять, тот же самый ли это листок. Поэтому он попросил вас проверить, правда ли, что на найденном им листке бумаги нарисованы две рамки, и ничего кроме них.

Обратите внимание, что нарисованные Васей рамки могут пересекаться, накладываться произвольным образом и даже полностью совпадать.

Координаты на листке введены таким образом, что ось X идет сверху вниз, x-координаты номеров клеток принимают значения от 1 до n, а ось Y идет слева направо, и y-координаты клеток принимают значения от 1 до m.

Входные данные

В первой строке входных данных записаны два целых числа n и m (3 ≤ n, m ≤ 1000) — размеры найденного листка. Следующие n строк, каждая из которых состоит из m символов «.» (точка) и «#» (решетка), описывают найденный листок бумаги. Символ «#» означает заштрихованную клетку, символ «.» — незаштрихованную.

Выходные данные

Выведите в первую строку единственное слово «YES» или «NO», означающее, верно ли, что на найденном листке нарисованы две рамки. При утвердительном ответе во вторую строку выведите 4 целых числа: координаты верхнего левого и правого нижнего углов первой рамки, и в третью строку — 4 целых числа: координаты верхнего левого и правого нижнего углов второй рамки. Если ответов несколько, выведите любой.

Примечание

В первом примере на рисунке существует две рамки. Первая:

###..
#.#..
###..
.....

Вторая:

#####
#...#
#...#
#####

Во втором примере нарисованы не рамки. Обратите внимание, что у корректных рамок высота и ширина не меньше 3.

A. Не отвлекайся!

Перебор реализация *800

У Поликарпа есть \(26\) задач. Каждая задача обозначается заглавной буквой латинского алфавита.

Учитель попросил Поликарпа решать задачи следующим образом: если Поликарп начал решать какую-то задачу, то он должен решать ее до конца, не отвлекаясь на другие задачи. После переключения на другую задачу, возвращаться к предыдущей задаче нельзя.

Поликарп может решать только одну задачу в течение дня. Каждый день он записывал, какую задачу он решал. Теперь учитель хочет узнать, следовал ли Поликарп его советам.

Например, если Поликарп решал задачи в следующем порядке «DDBBCCCBBEZ», то учитель увидит, что в третий день Поликарп начал решать задачу 'B', потом в пятый день он отвлекся и начал решать задачу 'C' и в восьмой день Поликарп вернулся к задаче 'B'. Другие примеры, когда у учителя возникают подозрения: «BAB», «AABBCCDDEEBZZ» и «AAAAZAAAAA».

Если же Поликарп решал задачи в следующем порядке «FFGZZZY», то у учителя не может возникнуть никаких подозрений. Обратите внимание, что Поликарп не обязан решать все задачи. Другие примеры, когда у учителя не возникает подозрений: «BA», «AFFFCC» и «YYYYY».

Помогите Поликарпу узнать, могут ли возникнуть подозрения у его учителя.

Входные данные

В первой строке находится целое число \(t\) (\(1 \le t \le 1000\)). Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(1 \le n \le 50\)) — количество дней в течение которых Поликарп решал задачи.

Во второй строке находится строка длины \(n\) состоящая из заглавных английских букв — задачи которые решал Поликарп.

Выходные данные

Для каждого набора входных данных выведите:

  • «YES», если у учителя не могут возникнуть подозрения;
  • «NO», в противном случае.

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

B. Заурядные числа

математика Перебор теория чисел *800

Назовем целое положительное число \(n\) заурядным, если в десятичной системе счисления все его цифры одинаковые. Например числа \(1\), \(2\) и \(99\) являются заурядными числами, а \(719\) и \(2021\) не являются заурядными числами.

Для заданного числа \(n\) найдите количество заурядных чисел среди чисел от \(1\) до \(n\).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных характеризуется одним целым числом \(n\) (\(1 \le n \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество заурядных чисел среди чисел от \(1\) до \(n\).

G. Идти или не идти?

графы жадные алгоритмы кратчайшие пути Перебор поиск в глубину и подобное реализация *2200

Дима проспал будильник, который должен был поднять его в школу.

Диме интересно, успеет ли он прийти на первый урок. Для этого ему необходимо узнать минимальное время, которое потребуется ему, чтобы дойти от дома до школы.

Город, в котором живет Дима, представляет собой прямоугольное поле размером \(n \times m\). Каждая клетка \((i, j)\) на этом поле обозначается одним числом \(a_{ij}\):

  • Число \(-1\) означает, что проход по клетке запрещен;
  • Число \(0\) означает, что клетка свободна, и Дима может по ней пройти.
  • Число \(x\) (\(1 \le x \le 10^9\)) означает, что в клетке расположен портал со стоимостью \(x\). Клетка с порталом также считается свободной.

Из любого портала Дима может отправиться в любой другой портал, при этом время перемещения из портала \((i, j)\) в портал \((x, y)\) соответствует сумме их стоимостей \(a_{ij} + a_{xy}\).

Помимо перемещения между порталами, Дима также может перемещаться между соседними по стороне не занятыми клетками за время \(w\). В частности, он может заходить на клетку с порталом и не пользоваться им.

Изначально Дима находится в левой верхней клетке \((1, 1)\), а школа в правой нижней клетке \((n, m)\).

Входные данные

В первой строке содержатся три целых числа \(n\), \(m\) и \(w\) (\(2 \le n, m \le 2 \cdot 10^3\), \(1 \le w \le 10^9\)), где \(n\) и \(m\) — размеры города, \(w\) — время, за которое Дима перемещается между не занятыми клетками.

Следующие \(n\) строк содержат по \(m\) чисел (\(-1 \le a_{ij} \le 10^9\)) — описания клеток.

Гарантируется, что клетки \((1, 1)\) и \((n, m)\) свободны.

Выходные данные

Выведите одно число — минимальное время, которое потребуется Диме, чтобы добраться до школы. Если он не сможет добраться до школы вообще — выведите «-1».

Примечание

Пояснение к первому примеру:

C. Вложить и выложить

Деревья жадные алгоритмы Перебор реализация Структуры данных *1600

Василий — большой любитель планирования дел наперед. Поэтому каждое утро он занимается формированием вложенного списка предстоящих дел.

Корректным вложенным списком является любой список, который можно получить из списка с одним пунктом «1» путем применения операций. Каждая операция вставляет в список новый пункт на следующей строке после одного из уже существующих пунктов \(a_1 \,.\, a_2 \,.\, a_3 \,.\, \,\cdots\, \,.\,a_k\), и бывает двух видов:

  1. добавить пункт \(a_1 \,.\, a_2 \,.\, a_3 \,.\, \cdots \,.\, a_k \,.\, 1\) (начав более вложенный список), или
  2. добавить пункт \(a_1 \,.\, a_2 \,.\, a_3 \,.\, \cdots \,.\, (a_k + 1)\) (продолжив текущий уровень).
Операцию можно производить только при условии, что в списке не появится двух одинаковых пунктов. А также, если рассматривать каждый пункт как последовательность чисел, последовательность пунктов должна всегда оставаться возрастающей в лексикографическом порядке. Примеры корректных и некорректных списков приведены на рисунке. Пример того, как можно получить корректный список, изображенный на картинке, приведен в секции «Примечание».

Когда Василий захотел сохранить Word-документ со списком своих дел, он промахнулся и вместо «Ctrl+S» нажал совсем другую комбинацию клавиш. Достоверно неизвестно, что это была за комбинация клавиш, но после ее нажатия каждый пункт списка заменился одним числом: числом, изначально написанным последним в номере пункта.

Василий хочет, чтобы вы помогли ему восстановить подходящий изначальный вложенный список.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^3\)) — количество строк в списке.

Следующие \(n\) строк набора входных данных содержат по одному числу \(a_i\) (\(1 \le a_i \le n\)) — описание того, что осталось от вложенного списка Василия.

Гарантируется, что в каждом наборе входных данных существует хотя бы один подходящий список.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^3\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк, которые являются корректным вложенным списком, из которого мог получиться список, который вам предоставил Василий.

Если ответов несколько, то вы можете вывести любой подходящий.

Примечание

Во втором наборе входных данных одним из корректных подходящих списков является:

1

1.1

1.1.1

1.1.2

1.2

1.2.1

2

2.1

2.2

Такой список можно получить при помощи последовательности операций, показанной ниже:

  1. Изначальный список с одним пунктом \(1\).
  2. Вставляем пункт \(2\) при помощи операции вставки второго типа после пункта \(1\).
  3. Вставляем пункт \(1.1\) при помощи операции вставки первого типа после пункта \(1\).
  4. Вставляем пункт \(1.2\) при помощи операции вставки второго типа после пункта \(1.1\).
  5. Вставляем пункт \(1.1.1\) при помощи операции вставки первого типа после пункта \(1.1\).
  6. Вставляем пункт \(1.1.2\) при помощи операции вставки второго типа после пункта \(1.1.1\).
  7. Вставляем пункт \(1.2.1\) при помощи операции вставки первого типа после пункта \(1.2\).
  8. Вставляем пункт \(2.1\) при помощи операции вставки первого типа после пункта \(2\).
  9. Вставляем пункт \(2.2\) при помощи операции вставки второго типа после пункта \(2.1\).

D. Нравится - не нравится

битмаски дп Перебор Теория вероятностей *2400

К Василию в гости пришло \(n\) друзей-трейдеров. Они начали обсуждать разные валюты, которыми торговали, но вот незадача: далеко не всем его друзьям нравится каждая валюта, некоторые валюты они любят, а некоторые — нет.

Для каждого друга Василия \(i\) известно, нравится ли ему валюта \(j\). Всего валют \(m\). Известно, что трейдерам не может нравится больше, чем \(p\) валют.

Так как друзьям нужно найти что-то общее для обсуждения, им нужно найти максимальное по мощности (возможно пустое) подмножество валют такое, что найдется как минимум \(\lceil \frac{n}{2} \rceil\) друзей (округление в большую сторону), каждому из которых будут нравиться все валюты этого множества.

Входные данные

В первой строке заданы три числа \(n, m\) и \(p\) \((1 \le n \le 2 \cdot 10^5, 1 \le p \le m \le 60, 1 \le p \le 15)\) — количество друзей-трейдеров, количество валют и максимальное количество валют, которые нравятся каждому другу.

Далее следует \(n\) строк по \(m\) символов в каждой. \(j\)-й символ в \(i\)-й строке равен \(1\), если другу \(i\) нравится валюта \(j\), и \(0\) — если не нравится. Гарантируется, что количество единиц в каждой строке не превышает \(p\).

Выходные данные

Выведите строку длины \(m\), задающую максимальное по размеру подмножество валют, которые нравятся хотя бы половине друзей. Символом \(1\) должны быть обозначены валюты, которые принадлежат этому подмножеству.

Если ответов несколько, то вы можете вывести любой подходящий.

Примечание

В первом тестовом примере только первая валюта нравится как минимум \(\lceil \frac{3}{2} \rceil = 2\) друзьям, поэтому легко показать, что ответ лучше составить нельзя.

Во втором тестовом примере максимальный ответ содержит \(2\) валюты и будет нравится друзьям под номерами \(1\), \(2\) и \(5\). В этом тесте есть и другие валюты, которые нравятся хотя бы половине друзей, но с их помощью нельзя добиться большего размера множества.

F. Гоблины и гномы

дп Паросочетания Перебор Потоки *2800

Монокарп играет в компьютерную игру «Гоблины и гномы». В этой игре он управляет подземным городом гномов, защищающимся от орд гоблинов.

Подземный город состоит из \(n\) залов и \(m\) односторонних туннелей, соединяющих некоторые пары залов. Структура туннелей такова, что, выйдя из какого-то зала, нельзя вернуться в него обратно по тоннелям.

На город готовится \(k\) атак гоблинов, в \(i\)-й атаке город атакуют \(i\) гоблинов. Цель Монокарпа — выдержать все \(k\) атак.

\(i\)-я атака происходит следующим образом: сначала \(i\) гоблинов появляются в каких-то залах города и грабят их, при этом в каждом зале появляется не более одного гоблина. После этого гоблины начинают перемещаться из зала в зал по туннелям, попутно грабя каждый зал на своем пути.

Гоблины очень жадные и хитрые, а поэтому планируют выбирать свои стартовые залы и пути так, что никакие два гоблина не пройдут через один и тот же зал. При этом, среди всех возможных планов атаки они выбирают такой, что позволяет в сумме разграбить максимальное количество залов. После того как гоблины разграбили максимальное количество залов, они покидают город.

Если в результате атаки все залы оказались разграблены — Монокарп проигрывает. Иначе гномам удается восстановить город. Если какой-то зал оказался разграблен в ходе атаки, то в ходе следующих атак он все равно представляет интерес для гоблинов (гномы успевают восстановить его).

Перед каждой атакой у Монокарпа есть время для подготовки. Монокарп может готовиться бесконечно долго (он сам решает, когда вызвать каждую атаку), но чем дольше он готовится к атаке, тем меньше очков он получает. Если Монокарп готовился к \(i\)-й атаке \(t_i\) минут, то после нее он получает \(\max(0, x_i - t_i \cdot y_i)\) очков (естественно, если он не проигрывает).

Во время подготовки к атаке Монокарп может блокировать туннели. За одну минуту он может заблокировать либо все туннели, ведущие в некоторый зал, либо все туннели, ведущие из некоторого зала. Если Монокарп заблокировал какой-то туннель во время подготовки к атаке, то этот туннель остается заблокированным и во время следующих атак.

Помогите Монокарпу выдержать все \(k\) атак гоблинов и набрать максимальное количество очков!

Входные данные

В первой строке задано три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 50\); \(0 \le m \le \frac{n(n - 1)}{2}\); \(1 \le k \le n - 1\)) — количество залов в городе, количество туннелей, и количество атак гоблинов, соответственно.

Далее следуют \(m\) строк, описывающих туннели. В \(i\)-й из этих строк заданы два числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \ne v_i\)), соответствующих туннелю из зала \(u_i\) в зал \(v_i\). Структура туннелей такова, что, выйдя из какого-то зала, гоблин не может вернуться в него обратно по тоннелям. Между каждой парой залов существует не более одного туннеля.

Далее следуют \(k\) строк, описывающих, как Монокарп получает очки за атаки. В \(i\)-й строке заданы два числа \(x_i\) и \(y_i\) (\(1 \le x_i \le 10^9\); \(1 \le y_i \le 10^9\)). Если Монокарп готовился к \(i\)-й атаке \(t_i\) минут, то после нее он получает \(\max(0, x_i - t_i \cdot y_i)\) очков.

Выходные данные

Выведите оптимальную последовательность действий Монокарпа в следующем формате:

В первой строке выведите целое число \(a\) (\(k \le a \le 2n + k\)) — количество действий, которые совершает Монокарп. Во второй строке выведите сами эти действия в том порядке, в котором Монокарп их выполняет. \(i\)-е действие описывается целым числом \(b_i\) (\(-n \le b_i \le n\)) в следующем формате:

  • если \(b_i > 0\), то Монокарп блокирует все туннели, ведущие из зала \(b_i\);
  • если \(b_i < 0\), то Монокарп блокирует все туннели, ведущие в зал \(|b_i|\);
  • если \(b_i = 0\), то Монокарп вызывает очередную атаку гоблинов.

Нельзя повторять одно и то же действие по блокировке \(b_i\) несколько раз. Каждый раз, когда Монокарп вызывает очередную атаку гоблинов, он должен выдержать ее (у гоблинов не должно быть возможности разграбить все залы города). Монокарп должен выдержать ровно \(k\) атак и получить максимально возможное количество очков.

Если существует несколько оптимальных последовательностей действий — выведите любую из них.

Примечание

В первом примере Монокарп сначала блокирует все туннели, ведущие в зал \(2\), а потом — все туннели, ведущие в зал \(3\), после чего вызывает все атаки. Он готовился к атаке \(1\) две минуты, поэтому он получает за нее \(98\) очков. К остальным атакам он не готовился, поэтому получает максимально возможные очки за них (\(200\), \(10\) и \(100\)). Суммарно он набирает \(408\) очков.

Во втором примере Монокарп сразу вызывает первую атаку и получает за нее \(100\) очков. Перед второй атакой он блокирует все туннели, ведущие в зал \(3\). Это означает, что он готовится к ней одну минуту и получает \(195\) очков за нее. К третьей атаке Монокарп не готовится и получает \(10\) очков. Перед четвертой атакой он блокирует туннели, ведущие из зала \(1\), это означает, что он готовится к атаке одну минуту и получает за нее \(99\) очков. Суммарно он набирает \(404\) очка.

В третьем примере Монокарпу не важно, сделает он одно действие или несколько перед единственной атакой, так как он в любом случае не получит за нее очков. А потому блокирует все туннели в городе, потратив на это целых \(5\) минут и переживает атаку, не получив за нее очков.

C1. Настойки (простая версия)

дп жадные алгоритмы Перебор Структуры данных *1500

Это простая версия задачи. Единственное отличие в том, что в этой версии \(n \leq 2000\). Вы можете делать взломы, только если решены обе версии задачи.

В линию выстроены \(n\) настоек, причем настойка \(1\) находится слева, а настойка \(n\) — справа. Каждая настойка увеличит ваше здоровье на \(a_i\), если ее выпить. \(a_i\) может быть отрицательным, что означает, что настойка уменьшит ваше здоровье.

Вы начинаете с \(0\) здоровья и будете идти слева направо, от первой настойки до последней. Для каждой настойки вы можете выбрать, выпить ли ее. Вы должны следить за тем, чтобы ваше здоровье всегда было неотрицательным.

Какое наибольшее количество настоек вы можете выпить?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2000\)) — количество настоек.

Следующая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ... ,\(a_n\) (\(-10^9 \leq a_i \leq 10^9\)), которые обозначают изменения здоровья после употребления данных настоек.

Выходные данные

Выведите одно целое число — максимальное количество настоек, которое вы можете выпить, чтобы ваше здоровье всегда было неотрицательным.

Примечание

В примере, вы можете выпить \(5\) настоек, приняв настойки \(1\), \(3\), \(4\), \(5\) и \(6\). Невозможно выпить все \(6\) настоек, потому что в какой-то момент ваше здоровье станет отрицательным.

D. Убить Антона

Конструктив математика Перебор Строки Структуры данных *2200

После того, как Антон отклонил \(10^{100}\) задач на структуры данных, Errorgorn очень зол на него и решил его убить.

ДНК Антона можно представить в виде строки \(a\), которая содержит только символы из строки «ANTON» (всего \(4\) различных символов).

Errorgorn может заменить ДНК Антона на строку \(b\), которая должна быть перестановкой \(a\). Однако тело Антона может защититься от этой атаки. За \(1\) секунду его тело может поменять местами \(2\) соседних символа его ДНК, чтобы превратить ее обратно в \(a\). Тело Антона умно и будет использовать минимальное количество ходов.

Чтобы максимизировать вероятность смерти Антона, Errorgorn хочет изменить ДНК Антона на строку, которая максимизирует время, необходимое телу Антона для возвращения к его исходному ДНК. Но поскольку Errorgorn занят решением новых задач на структуры данных, ему нужна ваша помощь, чтобы найти лучшую строку \(B\). Сможете ли вы ему помочь?

Входные данные

Первая строка ввода содержит одно целое число \(t\) \((1 \leq t \leq 100000)\) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит \(1\) строку \(a\) (\(1 \leq |a| \leq 100000\)). \(a\) состоит только из символов "A", "N", "O" и "T".

Гарантируется, что сумма \(|a|\) по всем тестовым примерам не превышает \(100000\).

Выходные данные

Для каждого набора входных данных выведите единственную строку \(b\). Если ответов несколько, вы можете вывести любой из них. \(b\) должна быть перестановкой строки \(a\).

Примечание

Для первого набора входных данных, телу Антона требуется \(7\) секунд, чтобы превратить NNOTA в ANTON:

NNOTA \(\to\) NNOAT \(\to\) NNAOT \(\to\) NANOT \(\to\) NANTO \(\to\) ANNTO \(\to\) ANTNO \(\to\) ANTON.

Обратите внимание, что нельзя вывести такие строки, как AANTON, ANTONTRYGUB, AAA и anton, так как они не являются перестановкой ANTON.

Для первого тестового случая телу Антона требуется \(2\) секунды, чтобы преобразовать AANN в NAAN. Обратите внимание, что другие строки, такие как NNAA и ANNA также будут приняты.

C. Погоня

Бинарный поиск жадные алгоритмы Перебор сортировки *1200

Вы и ваш друг Илья участвуете в личном соревновании по программированию, состоящем из множества этапов. За каждый этап участник может получить любое целое число баллов от \(0\) до \(100\) включительно, независимо от других участников.

Баллы, набранные участниками в отдельных этапах, используются для формирования суммарных результатов соревнования. Пусть к некоторому моменту времени прошло \(k\) этапов. Тогда для каждого участника выбирается \(k - \lfloor \frac{k}{4} \rfloor\) этапов, на которых он набрал наибольшее число баллов, и суммируются баллы на них. Полученное число и является суммарным результатом участника. (Здесь \(\lfloor t \rfloor\) обозначает округление вниз до наибольшего целого числа, не большего \(t\).)

Например, пусть прошло \(9\) этапов, на которых вы набрали баллы \(50, 30, 50, 50, 100, 10, 30, 100, 50\). Сначала выбираются \(7\) этапов, на которых вы набрали наибольшее число баллов: например, это могут быть все этапы, кроме \(2\)-го и \(6\)-го. Тогда ваш суммарный результат равен \(50 + 50 + 50 + 100 + 30 + 100 + 50 = 430\).

К данному моменту прошло \(n\) этапов, и вам известны ваши баллы и баллы Ильи на каждом из этих этапов. Однако сколько ещё этапов будет в соревновании, неизвестно. Вам интересно, какое наименьшее число этапов ещё должно пройти, чтобы ваш результат хотя бы теоретически смог оказаться больше или равен результату Ильи. Найдите это число!

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\)) — число прошедших этапов соревнования.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 100\)) — ваши баллы на прошедших этапах.

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \le b_i \le 100\)) — баллы Ильи на прошедших этапах.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наименьшее число этапов, через которое ваш результат может оказаться больше или равен результату Ильи.

Если ваш результат уже и так не меньше результата Ильи, выведите \(0\).

Примечание

В первом наборе входных данных вы набрали \(100\) баллов на единственном прошедшем этапе, а Илья — \(0\). Значит, ваш суммарный результат (\(100\)) и так не хуже результата Ильи (\(0\)).

Во втором наборе входных данных вы набрали \(0\) баллов на первом этапе, а Илья — \(100\). Достаточно одного этапа с противоположным результатом, чтобы суммарный результат вас обоих стал равен \(100\).

В третьем наборе входных данных ваш суммарный результат равен \(30 + 40 + 50 = 120\), а Ильи — \(100 + 100 + 100 = 300\). После трёх дополнительных этапов ваш результат может стать равен \(420\), а Ильи — \(400\).

В четвёртом наборе входных данных после четырёх дополнительных этапов ваш результат может стать равен \(470\), а Ильи — \(400\). Трёх этапов недостаточно.

E2. Сортировка слиянием

*особая задача *особая задача Перебор

Рассмотрим следующий код сортировки слиянием на языке Python:

def sort(a):
n = len(a)
b = [0 for i in range(n)]
log = []

def mergeSort(l, r):
if r - l <= 1:
return
m = (l + r) >> 1
mergeSort(l, m)
mergeSort(m, r)
i, j, k = l, m, l
while i < m and j < r:
if a[i] < a[j]:
log.append('0')
b[k] = a[i]
i += 1
else:
log.append('1')
b[k] = a[j]
j += 1
k += 1
while i < m:
b[k] = a[i]
i += 1
k += 1
while j < r:
b[k] = a[j]
j += 1
k += 1
for p in range(l, r):
a[p] = b[p]

mergeSort(0, n)
return "".join(log)

Как можно заметить, этот код использует логирование — важнейший инструмент разработки.

Старший разработчик ВКонтакте Вася сгенерировал перестановку \(a\) (массив из \(n\) различных целых чисел от \(1\) до \(n\)), дал её на вход функции sort и получил на выходе строку \(s\). На следующий день строку \(s\) Вася нашёл, а перестановка \(a\) потерялась.

Вася хочет восстановить любую перестановку \(a\) такую, что вызов функции sort от неё даст ту же строку \(s\). Помогите ему!

Входные данные

Ввод содержит непустую строку \(s\), состоящую из символов 0 и 1.

В этой версии задачи для любого теста существует перестановка длины не более \(10^3\), удовлетворяющая условию. Тем не менее, ваш ответ может иметь любую длину, в том числе превышающую \(10^3\).

Выходные данные

В первой строке выведите целое число \(n\) — длину перестановки.

Во второй строке выведите \(n\) различных целых чисел \(a_0, a_1, \ldots, a_{n-1}\) (\(1 \le a_i \le n\)) — элементы перестановки.

Если существует несколько вариантов ответа, выведите любой из них.

A. Покраска флага

Перебор реализация *800

Сегодня мы сыграем в игру «покрась в красный и белый» (нет, это не гражданская война, это просто цвета канадского флага).

Вам дана таблица \(n \times m\), состоящая из символов «R», «W» и «.». Символ «R» обозначает красную клетку, «W» обозначает белую клетку, а «.» обозначает непокрашенную клетку. Соседями клетки называются клетки, имеющие общую сторону с данной (клетки, имеющие только общий угол, не считаются).

Ваша задача — покрасить непокрашенные клетки в красный или белый так, чтобы у каждой красной клетки были только белые соседи (и не было красных), а у каждой белой — только красные соседи (и не было белых). Уже покрашенные клетки перекрашивать нельзя.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целые числа \(n\) и \(m\) (\(1 \le n \le 50\), \(1 \le m \le 50\)) — высота и ширина таблицы.

Следующие \(n\) строк содержат таблицу. Каждый символ таблицы равен «R», «W» или «.».

Выходные данные

Для каждого набора входных данных выведите «YES», если можно раскрасить таблицу требуемым образом, и «NO» в противном случае.

Если ответ существует, выведите покрашенную таблицу в следующих \(n\) строках. Если существует несколько решений, выведите любое из них.

Вы можете выводить каждую букву слов «YES» и «NO» в любом регистре (строчную или заглавную), например, ответы «yEs» и «nO» будут зачтены. Однако буквы в таблице нужно выводить заглавными.

Примечание

Ответ в первом примере дан в примере вывода. Можно показать, что решения во втором примере не существует. В третьем примере все клетки изначально покрашены, и покраска является корректной.

A. Честный плей-офф

Перебор реализация *800

В турнире по системе плей-офф участвуют четыре игрока. Турнир проводится по следующей схеме: первый игрок сыграет со вторым, а третий с четвертым, затем победители пар сыграют в финале турнира.

Известно, что в матче между двумя игроками выиграет тот, чье мастерство больше. Мастерство \(i\)-го игрока равно \(s_i\) и все уровни мастерства попарно различны (т.е. в массиве \(s\) нет двух одинаковых значений).

Турнир называется честным, если в финале встретятся игроки с максимальными умениями.

Определите, является ли заданный турнир честным.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка входных данных содержит четыре целых числа \(s_1, s_2, s_3, s_4\) (\(1 \le s_i \le 100\)) — мастерство игроков. Гарантируется, что в массиве все числа различны.

Выходные данные

Для каждого набора входных данных, выведите YES, если турнир является честным, или NO в противном случае.

Примечание

Рассмотрим примеры:

  1. в первом примере игроки \(2\) и \(3\) с навыками \(7\) и \(9\) выходят в финал;
  2. во втором примере игроки \(2\) и \(4\) с навыками \(5\) и \(9\) выходят в финал. Игрок с навыком \(6\) не прошел в финал, но игрок с навыком \(5\) прошел в финал, поэтому турнир нечестен;
  3. в третьем примере игроки \(1\) и \(3\) с навыками \(5\) и \(8\) выходят в финал;
  4. в четвертом примере игроки \(1\) и \(3\) с навыками \(6\) и \(3\) выходят в финал. Игрок с навыком \(5\) не прошел в финал, но игрок с навыком \(3\) прошел в финал, поэтому турнир нечестен.

B. Переупорядочение массива

жадные алгоритмы математика Перебор сортировки теория чисел *900

Вам задан массив \(a\), состоящий из \(n\) целых чисел.

Назовем пару индексов \(i\), \(j\) хорошей, если \(1 \le i < j \le n\) и \(\gcd(a_i, 2a_j) > 1\) (где \(\gcd(x, y)\) — наибольший общий делитель чисел \(x\) и \(y\)).

Найдите максимальное количество хороших пар индексов, если вы можете переупорядочить элементы массива \(a\) произвольным образом.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2000\)) — количество элементов в массиве.

Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора выходных данных выведите одно целое число — максимальное количество хороших пар индексов после переупорядочивания элементов массива \(a\).

Примечание

В первом примере из условия элементы массива можно переставить следующим образом: \([6, 3, 5, 3]\).

В третьем примере из условия элементы массива можно переставить следующим образом: \([4, 4, 2, 1, 1]\).

F. Расстояние между строками

Бинарный поиск Перебор реализация Строки Структуры данных хэши *3000

Предположим, вам даны две строки \(a\) и \(b\). Вы можете применить следующую операцию любое количество раз: выбрать любую непрерывную подстроку \(a\) или \(b\) и отсортировать символы в ней в порядке неубывания. Пусть \(f(a, b)\) — минимальное количество операций, которое необходимо применить, чтобы сделать строки равными (или \(f(a, b) = 1337\), если невозможно сделать \(a\) и \(b\) равными с помощью этих операций).

Например:

  • \(f(\text{ab}, \text{ab}) = 0\);
  • \(f(\text{ba}, \text{ab}) = 1\) (за одну операцию мы можем отсортировать всю первую строку);
  • \(f(\text{ebcda}, \text{ecdba}) = 1\) (за одну операцию мы можем отсортировать подстроку со \(2\)-го по \(4\)-й символ второй строки);
  • \(f(\text{a}, \text{b}) = 1337\).

Вам задано \(n\) строк \(s_1, s_2, \dots, s_k\) одинаковой длины. Вычислите \(\sum \limits_{i = 1}^{n} \sum\limits_{j = i + 1}^{n} f(s_i, s_j)\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество строк.

Затем следует \(n\) строк, каждая строка содержит одну из строк \(s_i\), состоящую из строчных латинских букв. \(|s_1| = |s_2| = \ldots = |s_n|\) и \(n \cdot |s_1| \le 2 \cdot 10^5\). Все заданные строки попарно различны.

Выходные данные

Выведите одно целое число: \(\sum \limits_{i = 1}^{n} \sum\limits_{j = i + 1}^{n} f(s_i, s_j)\).

A. Омкар и плохая легенда

Конструктив Перебор *800

Омкар получил сообщение от Антона: «Ваша легенда по задаче A слишком запутанная. Просто сделайте формальное условие». В связи с этим Омкар дает вам массив \(a = [a_1, a_2, \ldots, a_n]\) из \(n\) попарно различных целых чисел. Массив \(b = [b_1, b_2, \ldots, b_k]\) называется хорошим, если для любых различных элементов \(b_i, b_j\) массива \(b\), \(|b_i-b_j|\) встречается в \(b\) хотя бы один раз. Кроме того, все элементы \(b\) должны быть попарно различными. Можете ли вы добавить несколько (возможно, \(0\)) целых чисел в \(a\), чтобы получился хороший массив \(b\) размером не более \(300\)? Если \(a\) уже хороший, вы не обязаны добавлять никаких элементов.

Например, массив \([3, 6, 9]\) является хорошим, поскольку \(|6-3|=|9-6| = 3\), встречается в массиве, и \(|9-3| = 6\), встречается в массиве, тогда как массив \([4, 2, 0, 6, 9]\) не является хорошим, поскольку \(|9-4| = 5\) не встречается в массиве.

Для целых чисел \(x\) и \(y\), \(|x-y| = x-y\), если \(x > y\) и \(|x-y| = y-x\) в противном случае.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит \(t\) (\(1 \leq t \leq 50\)), количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 100\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) попарно различных целых чисел \(a_1, a_2, \cdots, a_n\) (\(-100 \leq a_i \leq 100\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую YES, если Омкар может создать хороший массив \(b\) путем добавления целых чисел к \(a\) и NO в противном случае. Регистр каждой буквы не имеет значения, поэтому YEs и nO также будут приняты.

Если первая строка YES, выведите вторую строку, содержащую одно целое число \(k\) (\(n \leq k \leq 300\)).

Затем выведите одну строку, содержащую \(k\) попарно различных целых чисел \(b_1, b_2, \cdots, b_k\) (\(-10^9 \leq b_i \leq 10^9\)) — элементы хорошего массива \(b\). \(b_1, b_2, \cdots, b_k\) могут быть в любом порядке. Для каждого \(a_i\) из \(a\), \(a_i\) должно хотя бы раз встречаться в \(b\).

Можно показать, что если Омкар может создать такой массив \(b\), то он может сделать это и таким образом, чтобы удовлетворить вышеуказанным ограничениям.

Если существует несколько решений, можно вывести любое.

Примечание

Для первого набора входных данных можно добавить целые числа к \(a\), чтобы получить массив \(b = [3, 0, 6, 9, 3]\). Обратите внимание, что \(|6-3| = |9-6| = |3-0| = 3\) и \(3\) встречается в \(b\), \(|6-0| = |9-3| = 6\) и \(6\) встречается в \(b\), а также \(|9-0| = 9\) встречается в \(b\), поэтому \(b\) хороший.

Для второго набора входных данных можно добавить целые числа к \(a\), чтобы получить массив \(b = [5, 3, 1, 2, 4]\). Здесь \(|2-1| = |3-2| = |4-3| = |5-4| = 1\) встречается в \(b\), \(|3-1| = |4-2| = |5-3| = 2\) встречается в \(b\), \(|4-1| = |5-2| = 3\) встречается в \(b\), и \(|5-1| = 4\) встречается в \(b\), поэтому \(b\) является хорошим.

Для четвертого набора входных данных можно добавить целые числа к \(a\), чтобы получить массив \(b = [8, 12, 6, 2, 4, 10]\). Здесь \(|4-2| = |6-4| = |8-6| = |10-8| = |12-10| = 2\) встречается в \(b\), \(|6-2| = |8-4| = |10-6| = |12-8| = 4\) встречается в \(b\), \(|8-2| = |10-4| = |12-6| = 6\) встречается в \(b\), \(|10-2| = |12-4| = 8\) встречается в \(b\), а также \(|12-2| = 10\) встречается в \(b\), поэтому \(b\) хороший.

Можно доказать, что для всех остальных наборов входных данных невозможно получить хороший массив \(b\).

B. Принцесса Веруртейлунга

Конструктив Перебор Строки *1200

Я, Фишль, принцесса Веруртейлунга, спустилась на эту землю по зову судьбы — О, ты тоже путешественница из другого мира? Очень хорошо, я разрешаю вам путешествовать со мной.

Нет ничего удивительного в том, что Фишль говорит, так странно выбирая выражения. Однако на этот раз даже Оз, ее друг-ворон, не может истолковать их! Может быть, вы поможете нам понять, что говорит эта юная принцесса?

Вам дана строка из \(n\) строчных латинских букв — слово, которое только что произнесла Фишль. Вы думаете, что MEX строки может помочь вам найти смысл этого сообщения. MEX строки определяется как самая короткая строка, которая не встречается как непрерывная подстрока во входных данных. Если существует несколько таких строк, то за MEX считается лексикографически наименьшая из них. Обратите внимание, что пустая подстрока НЕ считается MEX.

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).

Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

Узнайте, что представляет собой строка MEX!

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \leq t \leq 1000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 1000\)) — длина слова. Вторая строка каждого набора входных данных содержит одну строку из \(n\) строчных латинских букв.

Сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Выходные данные

Для каждого набора входных данных выведите MEX строки в отдельной строке.

E1. Удаляй и удлиняй (простая версия)

Бинарный поиск дп жадные алгоритмы Перебор реализация Строки строковые суфф. структуры хэши *1600

Это простая версия задачи. Единственное отличие — это ограничения на \(n\) и \(k\). Вы можете делать взломы, только если все версии задачи решены.

У вас есть строка \(s\), и вы можете выполнять над ней два типа операций:

  • Удалить последний символ строки.
  • Дублировать строку: \(s:=s+s\), где \(+\) обозначает конкатенацию.

Вы можете использовать каждую операцию любое количество раз (возможно, ни одного).

Ваша задача — найти лексикографически наименьшую строку длины ровно \(k\), которую можно получить, выполнив эти операции над строкой \(s\).

Строка \(a\) лексикографически меньше строки \(b\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(a\) является префиксом \(b\), но \(a\ne b\);
  • В первой позиции, где \(a\) и \(b\) отличаются, строка \(a\) имеет букву, которая появляется раньше в алфавите, чем соответствующая буква в \(b\).
Входные данные

Первая строка содержит два целых числа \(n\), \(k\) (\(1 \leq n, k \leq 5000\)) — длину исходной строки \(s\) и длину желаемой строки.

Вторая строка содержит строку \(s\), состоящую из \(n\) строчных английских букв.

Выходные данные

Выведите лексикографически наименьшую строку длины \(k\), которая может быть получена путем выполнения операций над строкой \(s\).

Примечание

В первом тесте оптимально сделать одно дублирование: «dbcadabc» \(\to\) «dbcadabcdbcadabc».

Во втором тесте оптимально удалить последние \(3\) символа, затем продублировать строку \(3\) раза, затем удалить последние \(3\) символов, чтобы строка имела длину \(k\).

«abcd» \(\to\) «abc» \(\to\) «ab» \(\to\) «a» \(\to\) «aa» \(\to\) «aaaa» \(\to\) «aaaa» \(\to\) «aaaa» \(\to\) «aaaa» \(\to\) «aaaa».

A. Каменная игра

дп жадные алгоритмы Перебор *800

Поликарп играет в новую компьютерную игру. В этой игре есть \(n\) камней, выстроенных в ряд и пронумерованных слева направо. Камень с номером \(i\) обладает целочисленной силой \(a_i\). Силы всех камней различны.

Каждый ход Поликарп может уничтожить либо камень с наименьшим номером, либо камень с наибольшим номером (другими словами, либо самый левый, либо самый правый) из еще не уничтоженных камней.

Сейчас Поликарп хочет получить два достижения. Он получит их, если уничтожит камень с наименьшей силой и камень с наибольшей силой. Помогите Поликарпу узнать, какое минимальное количество ходов он должен сделать, чтобы добиться своей цели.

Например, если \(n = 5\) и \(a = [1, 5, 4, 3, 2]\), то Поликарп мог делать следующие ходы:

  • Уничтожить самый левый камень. После этого хода \(a = [5, 4, 3, 2]\).
  • Уничтожить самый правый камень. После этого хода \(a = [5, 4, 3]\).
  • Уничтожить самый левый камень. После этого хода \(a = [4, 3]\). Поликарп уничтожил камни с наибольшей и наименьшей силой, поэтому может заканчивать игру.

Обратите внимание, что в примере выше можно закончить игру и за два шага. Например:

  • Уничтожить самый левый камень. После этого хода \(a = [5, 4, 3, 2]\).
  • Уничтожить самый левый камень. После этого хода \(a = [4, 3, 2]\). Поликарп уничтожил камни с наибольшей и наименьшей силой, поэтому может заканчивать игру.

Найдите минимальное количество ходов, необходимое для уничтожения камней с наибольшей и наименьшей силой.

Входные данные

В первой строке находится целое число \(t\) (\(1 \le t \le 100\)). Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(2 \le n \le 100\)) — количество камней.

Во второй строке находится \(n\) целых различных чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — силы камней.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество ходов, необходимое для уничтожения камней с наибольшей и наименьшей силой.

B. Древесный массив

графы Деревья дп Комбинаторика математика Перебор Теория вероятностей *2300

Вам задано дерево, состоящее из \(n\) вершин. По заданному дереву вы строите массив, отмечая вершины по одной.

Первоначально, когда еще не помечено ни одной вершины, вы выбираете вершину равновероятно по всем вершинам дерева и отмечаете ее.

После этого, пока еще остаются непомеченные вершины, вы выбираете и помечаете вершину равновероятно среди всех еще непомеченных, но связанных по ребру хотя бы с одной помеченной вершиной.

Можно доказать, что данный процесс пометит все вершины в дереве.

Финальный массив \(a\) — это список номеров вершин в порядке, в котором они были помечены.

Определите математическое ожидание количества инверсий в массиве, полученном на основе заданного дереве с помощью описанного выше алгоритма.

Количество инверсий в массиве \(a\) — это количество пар индексов \((i, j)\) таких, что \(i < j\) и \(a_i > a_j\). Например, в массиве \([4, 1, 3, 2]\) количество инверсий равно \(4\): \((1, 2)\), \((1, 3)\), \((1, 4)\), \((3, 4)\).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 200\)) — количество вершин в дереве.

В следующих \(n - 1\) строках заданы по два целых числа \(x\) и \(y\) (\(1 \le x, y \le n\); \(x \neq y\)), означающие ребро между вершинами \(x\) и \(y\).

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите математическое ожидание количества инверсий в построенном массиве по модулю \(10^9+7\).

Формально, пусть \(M = 10^9+7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

Изображение дерева из первого примера:

В первом примере получающиеся массивы почти фиксированы. Если первоначально выбрана вершина \(2\), то единственный возможный массив — это \([2, 1, 3]\) (\(1\) инверсия). Если первоначально выбрана вершина \(3\), то единственный возможный массив — это \([3, 1, 2]\) (\(2\) инверсии). Если первоначально выбрана вершина \(1\), то массивы \([1, 2, 3]\) (\(0\) инверсий) и \([1, 3, 2]\) (\(1\) инверсия) — это единственные варианты и они равновероятны. В результате математическое ожидание количества инверсий равно \(\frac{1}{3}\cdot 1 + \frac{1}{3} \cdot 2 + \frac{1}{3} \cdot (\frac{1}{2} \cdot 0 + \frac{1}{2} \cdot 1) = \frac{7}{6}\).

\(166666669 \cdot 6 = 7 \pmod {10^9 + 7}\), то есть ответ равен \(166666669\).

Изображение дерева из второго примера:

Изображение дерева из третьего примера:

D. Инвертируем инверсии

Бинарный поиск Перебор Структуры данных *3200

Вы играли со своей перестановкой \(p\) длины \(n\), но потеряли ее в Блэр, штат Алабама!

К счастью, вы помните некоторую информацию о перестановке. А точнее, вы помните массив \(b\) длины \(n\), где \(b_i\) — это количество индексов \(j\) таких, что \(j < i\) и \(p_j > p_i\).

У вас есть массив \(b\), и вы хотите восстановить перестановку \(p\). Однако ваша память не идеальна, и вы постоянно меняете значения массива \(b\), как вспоминаете что-то еще. В следующие \(q\) секунд каждую секунду происходит одно из следующего:

  1. \(1\) \(i\) \(x\) — вы вспоминаете, что \(b_i\) равно \(x\);
  2. \(2\) \(i\) — вам нужно определить значение элемента \(p_i\). Если существует более одного ответа, выведите любой. Можно доказать, что при данных ограничениях всегда найдется хотя бы одна перестановка.

Отвечайте на запросы, и вы сможете вспомнить массив!

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — размер перестановки.

Во второй строке заданы \(n\) целых чисел \(b_1, b_2 \ldots, b_n\) (\(0 \leq b_i < i\)) — то, как вы помнили массив \(b\) сначала.

В третьей строке задано одно целое число \(q\) (\(1 \leq q \leq 10^5\)) — количество запросов.

В следующих \(q\) строках заданы сами запросы, каждый одного из следующих видов:

  • \(1\) \(i\) \(x\) (\(0 \leq x < i \leq n\)) описывает запрос вида \(1\);
  • \(2\) \(i\) (\(1 \leq i \leq n\)), описывает запрос вида \(2\).

Гарантируется, что есть хотя бы один запрос вида \(2\).

Выходные данные

На каждый запрос вида \(2\) выведите одно число — ответ на заданный запрос.

Примечание

В первом примере первоначально есть ровно одна перестановка, удовлетворяющая условиям: \([1, 2, 3]\), так как должна содержать \(0\) инверсий.

После запроса вида \(1\) массив \(b\) становится равен \([0, 1, 0]\). Единственная перестановка \(p\), порождающая данный массив — это \([2, 1, 3]\). В этой перестановке \(b_2\) равен \(1\), так как \(p_1 > p_2\).

B. Приятные пары

математика Перебор реализация теория чисел *1200

Вам задан массив \(a_1, a_2, \dots, a_n\), состоящий из \(n\) различных целых чисел. Посчитайте количество пар индексов \((i, j)\) таких, что \(i < j\) и \(a_i \cdot a_j = i + j\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой стоке каждого набора задано одно целое число \(n\) (\(2 \leq n \leq 10^5\)) — длина массива \(a\).

Во второй строке каждого набора заданы \(n\) целых чисел через пробел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 2 \cdot n\)) — массив \(a\). Гарантируется, что все элементы массива различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите количество пар индексов \((i, j)\) таких, что \(i < j\) и \(a_i \cdot a_j = i + j\).

Примечание

В первом наборе единственная пара, удовлетворяющая условиям — это \((1, 2)\), так как \(a_1 \cdot a_2 = 1 + 2 = 3\)

Во втором наборе единственная подходящая пара – это \((2, 3)\).

В третьем наборе пары, удовлетворяющие условиям — это \((1, 2)\), \((1, 5)\) и \((2, 3)\).

C. Машины соперников

битмаски математика Перебор поиск в глубину и подобное реализация Теория вероятностей *1900

После победы над соперником из Чёрного Списка вы получаете шанс вытянуть \(1\) из \(x\) доступных призовых карточек. Изначально \(x=3\) и доступны следующие карточки: Взятка, Освобождение от конфискации и Машина соперника. Изначально вероятность вытянуть их в случайной попытке равна \(c\), \(m\) и \(p\) соответственно. Также присутствует фактор изменчивости \(v\). Вы можете играть в гонки с соперником до тех пор, пока не вытяните карточку Машина соперника. Предположим, что вы выигрываете каждую гонку и получаете шанс тянуть призовую карточку. В каждом вытягивании вы достаете одну из \(x\) доступных карточек с соответствующей вероятностью. Пусть вы вытянули карточку и вероятность ее вытягивания до вашей попытки была равна \(a\). Тогда

  • Если это карточка Машина соперника, то игра для вас заканчивается и вы больше не можете участвовать в гонках.
  • Иначе
    1. Если \(a\leq v\), то вероятность вытянутой карточки становится равной \(0\) и она перестает быть доступной для последующих вытягиваний, уменьшая \(x\) на \(1\). Более того, освободившаяся вероятность \(a\) распределяется равномерно среди оставшихся доступных карточек.
    2. Если \(a > v\), вероятность вытянутой карточки уменьшается на \(v\), и освободившаяся вероятность распределяется равномерно среди остальных доступных карточек.

Например,

  • Если \((c,m,p)=(0.2,0.1,0.7)\) и \(v=0.1\), то после вытягивания карточки Взятка новые вероятности будут равны \((0.1,0.15,0.75)\).
  • Если \((c,m,p)=(0.1,0.2,0.7)\) и \(v=0.2\), то после вытягивания карточки Взятка новые вероятности будут равны \((\text{Недоступна},0.25,0.75)\).
  • Если \((c,m,p)=(0.2, \text{Недоступна},0.8)\) и \(v=0.1\), то после вытягивания карточки Взятка новые вероятности будут равны \((0.1, \text{Недоступна} ,0.9)\).
  • Если \((c,m,p)=(0.1,\text{Недоступна},0.9)\) и \(v=0.2\), то после вытягивания карточки Взятка новые вероятности будут равны \((\text{Недоступна},\text{Недоступна},1.0)\).

Вам хочется заполучить машину соперника. Для этого вы должны найти математическое ожидание количества гонок, которые нужно пройти, чтобы вытянуть карточку Машина соперника.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10\)) — количество наборов входных данных.

Первая и единственная строка каждого набора содержит четыре действительных числа \(c\), \(m\), \(p\) и \(v\) (\(0 < c,m,p < 1\), \(c+m+p=1\), \(0.1\leq v\leq 0.9\)).

Гарантируется, что каждое из чисел \(c\), \(m\), \(p\) и \(v\) содержит не более \(4\)-х знаков после запятой.

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую одно действительное число — математическое ожидание количества гонок, которые нужно пройти, чтобы вытянуть карточку Машина соперника.

Ответ будет считаться верным, если его абсолютная или относительная ошибка не будет превосходить \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри – \(b\). Ваш ответ считается правильным, если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

Обозначим за C вытягивание карточки Взятка, за M — карточки Освобождение от конфискации, за P — карточки Машина соперника.

В первом наборе входных данных возможные последовательности вытягиваний представлены ниже:

  • P с вероятностью \(0.6\);
  • CP с вероятностью \(0.2\cdot 0.7 = 0.14\);
  • CMP с вероятностью \(0.2\cdot 0.3\cdot 0.9 = 0.054\);
  • CMMP с вероятностью \(0.2\cdot 0.3\cdot 0.1\cdot 1 = 0.006\);
  • MP с вероятностью \(0.2\cdot 0.7 = 0.14\);
  • MCP с вероятностью \(0.2\cdot 0.3\cdot 0.9 = 0.054\);
  • MCCP с вероятностью \(0.2\cdot 0.3\cdot 0.1\cdot 1 = 0.006\);
Поэтому математическое ожидание количества гонок равно \(1\cdot 0.6 + 2\cdot 0.14 + 3\cdot 0.054 + 4\cdot 0.006 + 2\cdot 0.14 + 3\cdot 0.054 + 4\cdot 0.006 = 1.532\).

Во втором наборе данных возможные последовательности вытягиваний представлены ниже -

  • P с вероятностью \(0.4\);
  • CP с вероятностью \(0.4\cdot 0.6 = 0.24\);
  • CMP с вероятностью \(0.4\cdot 0.4\cdot 1 = 0.16\);
  • MP с вероятностью \(0.2\cdot 0.5 = 0.1\);
  • MCP с вероятностью \(0.2\cdot 0.5\cdot 1 = 0.1\).

Поэтому математическое ожидание количества гонок равно \(1\cdot 0.4 + 2\cdot 0.24 + 3\cdot 0.16 + 2\cdot 0.1 + 3\cdot 0.1 = 1.86\).

D2. ПРС и криминальный список (сложная версия)

интерактив Конструктив математика Перебор *2200

Это сложная версия задачи. Единственное различие между простой и сложной версиями заключается в том, что здесь \(2\leq k\leq 100\). Вы можете делать взломы, только если решили обе версии этой задачи.

Это интерактивная задача!

Для каждого десятичного числа есть эквивалентное ему \(k\)-ичное. Цифры числа, записанного в \(k\)-ичной системе счисления, будем называть \(k\)-цифрами. Определим \(k\)-ичный XOR двух \(k\)-цифр \(a\) и \(b\) как \((a + b)\bmod k\).

\(k\)-ичный XOR двух \(k\)-ичных чисел равен новому числу, полученному из первых двух попарным \(k\)-ичным XOR соответствующих \(k\)-цифр. \(k\)-ичный XOR двух десятичных чисел \(a\) и \(b\) обозначается \(a\oplus_{k} b\) и равен десятичному представлению \(k\)-ичного XOR \(a\) и \(b\), записанных в \(k\)-ичной системе счисления. Все числа, встречающиеся далее в условии, записаны в десятичной системе счисления, если не указано иное.

Вы взломали базу преступлений Полиции Рокпорт-Сити (ПРС), так же известную как Криминальный Список. Но, чтобы получить к ней доступ, вам нужен пароль. Вы его не знаете, но вполне уверены, что его значение лежит между \(0\) и \(n-1\) включительно. Вы решили угадать его. Вы можете сделать не более чем \(n\) попыток, далее система заблокируется. Система адаптивна – каждый раз, когда вы делаете неверную попытку, она меняет пароль. А именно, если до попытки пароль был равен \(x\) и вы попытались ввести другое число \(y\), то система поменяет пароль на число \(z\) такое, что \(x\oplus_{k} z=y\). Угадайте пароль и взломайте систему.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10\,000\)) — количество наборов входных данных. Далее следует описание \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) (\(1\leq n\leq 2\cdot 10^5\)) и \(k\) \((2\leq k\leq 100)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Протокол взаимодействия

Для каждого набора входных данных считайте два целых числа \(n\) и \(k\). Вам разрешено сделать не более \(n\) попыток угадать пароль.

Для каждой попытки выведите одно целое число \(y\) (\(0\leq y\leq 2\cdot 10^7\)). Пусть текущий пароль равен \(x\). Считайте одно целое число \(r\).

Если \(x=y\), вы считаете \(r=1\), и этот набор входных данных считается решенным. Далее вы должны продолжить решать оставшиеся наборы.

Иначе вы считаете \(r=0\), и система поменяет пароль на число \(z\) такое, что \(x\oplus_{k} z=y\).

После каждой попытки не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Если вы сделаете некорректную попытку или превысите лимит в \(n\) попыток, вы считаете \(r=-1\) вместо ответа и получите вердикт Неправильный ответ. В таком случае ваша программа должна немедленно завершается, чтобы избежать неопределенных вердиктов.

Обратите внимание, что система адаптивна. Это значит, что изначальный пароль не зафиксирован в начале и может зависеть от ваших запросов. Гарантируется, что в любой момент времени существует хотя бы один начальный пароль, для которого согласуются все ответы на запросы.

Взломы:

Для взломов используйте следующий формат:

Первая строка должна содержать одно целое число \(t\) (\(1\leq t\leq 10\,000\)) — количество наборов входных данных.

Первая и единственная строка каждого набора должна содержать два целых числа \(n\) (\(1\leq n\leq 2\cdot 10^5\)) и \(k\) (\(2\leq k\leq 100\)), равные соответственно количеству возможных попыток и основанию системы счисления. Оптимальный начальный пароль будет автоматически подобран системой.

Сумма \(n\) по всем наборам входных данных не должна превышать \(2\cdot 10^5\).

Примечание

Набор 1:

В этом наборе входных данных загаданный пароль равен \(2\).

Первая попытка равна \(3\). Это не равно текущему паролю. Поэтому система возвращает ответ \(0\) и меняет пароль на \(1\), поскольку \(2\oplus_2 1=3\).

Вторая попытка равна \(4\). Это не равно текущему паролю. Поэтому система возвращает ответ \(0\) и меняет пароль на \(5\), поскольку \(1\oplus_2 5=4\).

Третья попытка равна \(5\). Это равно текущему паролю. Поэтому система возвращает ответ \(1\) и работа сделана.

Набор 2:

В этом наборе входных данных загаданный пароль равен \(3\).

Первая попытка равна \(1\). Это не равно текущему паролю. Поэтому система возвращает \(0\) и меняет пароль на \(7\), поскольку \(3\oplus_3 7=1\). \([3=(10)_3\), \(7=(21)_3\), \(1=(01)_3\) и \((10)_3\oplus_3 (21)_3 = (01)_3]\).

Вторая попытка равна \(4\). Это не равно текущему паролю. Поэтому система возвращает \(0\) и меняет пароль на \(6\), поскольку \(7\oplus_3 6=4\). \([7=(21)_3\), \(6=(20)_3\), \(4=(11)_3\) and \((21)_3\oplus_3 (20)_3 = (11)_3]\).

Третья попытка равна \(6\). Это равно текущему паролю. Поэтому система возвращает ответ \(1\) и работа сделана.

Заметьте, что начальные пароли были взяты такими для наглядности объяснения. В действительности система может повести себя иначе, поскольку она адаптивна.

C. AquaMoon и перестановки

2-sat графы Комбинаторика Конструктив Паросочетания Перебор *2800

Cirno подготовила \(n\) массивов длины \(n\) каждый. Каждый массив — это перестановка из \(n\) целых чисел от \(1\) до \(n\). Эти массивы специальные: для всех \(1 \leq i \leq n\), если мы возьмем \(i\)-й элемент каждого массива и построим другой массив длины \(n\), состоящий из этих элементов, получившийся массив также будет перестановкой \(n\) чисел от \(1\) до \(n\). Другими словами, если эти \(n\) массивов расположить друг под другом, образовав матрицу с \(n\) строками и \(n\) столбцами, эта матрица будет латинским квадратом.

После этого Cirno добавила дополнительные \(n\) массивов, каждый массив также является перестановкой из \(n\) целых чисел от \(1\) до \(n\). Для всех \(1 \leq i \leq n\) существует хотя бы одна позиция \(1 \leq k \leq n\), такая что для \(i\)-го и \((n + i)\)-го массивов \(k\)-е элементы совпадают. Обратите внимание, что массивы с индексами от \(n + 1\) до \(2n\) не обязаны образовывать латинский квадрат.

Также Cirno убедилась, что среди \(2n\) массивов никакие два не равны, то есть для всех пар индексов \(1 \leq i < j \leq 2n\) существует хотя бы одна позиция \(1 \leq k \leq n\), такая что в \(i\)-м и \(j\)-м массивах \(k\)-е элементы различны.

В конце Cirno произвольно поменяла порядок, в котором расположены подготовленные \(2n\) массивов.

AquaMoon называет подмножество всех \(2n\) массивов размера \(n\) хорошим, если эти массивы образуют латинский квадрат.

AquaMoon хочет узнать, сколько хороших подмножеств существует. Поскольку это количество может быть очень большим, найдите его по модулю \(998\,244\,353\). Также она хочет найти любое хорошее подмножество. Можете ли вы помочь ей?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(5 \leq n \leq 500\)).

Затем \(2n\) строк следует. \(i\)-я из этих строк содержит \(n\) целых чисел, составляющих \(i\)-й массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите две строки.

В первой строке выведите количество хороших подмножеств по модулю \(998\,244\,353\).

Во второй строке выведите \(n\) индексов от \(1\) до \(2n\) — индексы \(n\) массивов, которые образуют хорошее подмножество (вы можете вывести их в любом порядке). Если существует несколько возможных ответов — выведите любой.

Примечание

В первом наборе входных данных количество хороших подмножеств равно \(1\). Единственное такое подмножество это подмножество массивов с индексами \(1\), \(2\), \(3\), \(4\), \(5\), \(6\), \(7\).

Во втором наборе входных данных количество хороших подмножеств равно \(2\). Эти подмножества это \(1\), \(3\), \(5\), \(6\), \(10\), а также \(2\), \(4\), \(7\), \(8\), \(9\).

F. AquaMoon и картофель

дп Перебор Структуры данных *3500

У AquaMoon есть три массива \(a\), \(b\), \(c\) длины \(n\), состоящие из целых чисел. Выполнено, что \(1 \leq a_i, b_i, c_i \leq n\) для всех \(i\).

Чтобы ускорить выращивание картофеля, она организует свою ферму, основываясь на этих трех массивах. Сейчас она хочет выполнить \(m\) операций, чтобы посчитать сколько картофелин она получит. Каждая операция будет иметь один из двух типов:

  1. AquaMoon реорганизует ферму и делает \(k\)-й элемент массива \(a\) равным \(x\). Другими словами, она выполняет присваивание \(a_k := x\).
  2. Дано положительное целое число \(r\). AquaMoon получает картофелину за каждую тройку \((i,j,k)\), такую что \(1\le i<j<k\le r\) и \(b_{a_i}=a_j=c_{a_k}\). Посчитайте количество таких троек.

Поскольку AquaMoon очень занята поиском библиотеки, помогите ей выполнить все операции.

Входные данные

В первой строке находится два целых числа \(n\), \(m\) (\(1\le n\le 2\cdot10^5\), \(1\le m\le 5\cdot10^4\)).

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \dots,a_n\) (\(1\le a_i\le n\)).

В третьей строке находится \(n\) целых чисел \(b_1, b_2, \dots,b_n\) (\(1\le b_i\le n\)).

В четвертой строке находится \(n\) целых чисел \(c_1, c_2, \dots,c_n\) (\(1\le c_i\le n\)).

Следующие \(m\) строк описывают операции, \(i\)-я строка описывает \(i\)-ю операцию в одном из двух форматов:

  • "\(1\ k\ x\)" (\(1\le k,x\le n\)) для операции первого типа.
  • "\(2\ r\)" (\(1\le r\le n\)) для операции второго типа.

Гарантируется, что существует хотя бы одна операция второго типа.

Выходные данные

Для каждой операции второго типа выведите ответ.

Примечание

Для первой операции все подходящие тройки:

  • \(i=1\), \(j=2\), \(k=3\)
  • \(i=2\), \(j=3\), \(k=4\)
  • \(i=3\), \(j=4\), \(k=5\)

Не существует подходящих троек для третьей операции.

Для четвертой операции все подходящие тройки:

  • \(i=2\), \(j=4\), \(k=5\)
  • \(i=3\), \(j=4\), \(k=5\)

A. AquaMoon и два массива

жадные алгоритмы Перебор *800

AquaMoon и Cirno играют в интересную игру с массивами. Cirno приготовил два массива \(a\) и \(b\), оба состоящих из \(n\) неотрицательных целых чисел. AquaMoon может сделать следующую операцию произвольное количество раз (возможно, ноль):

  • Она выбирает два индекса \(i\) и \(j\) (\(1 \le i, j \le n\)), затем уменьшает \(i\)-й элемент массива \(a\) на \(1\) и увеличивает \(j\)-й элемент массива \(a\) на \(1\). В результате значения на \(i\)-м и \(j\)-м индексах массива \(a\) становятся равными \(a_i - 1\) и \(a_j + 1\), соответственно. Каждый элемент массива \(a\) должен оставаться неотрицательным после операции. Если \(i = j\), эта операция никак не поменяет массив \(a\).

AquaMoon хочет сделать несколько операций, чтобы сделать массивы \(a\) и \(b\) равными. Два массива \(a\) и \(b\) называются равными, если \(a_i = b_i\) для всех \(1 \leq i \leq n\).

Помогите AquaMoon найти последовательность операций, которая решит ее задачу или установите, что невозможно сделать массивы \(a\) и \(b\) равными.

Обратите внимание, что вы не обязаны минимизировать количество операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка описания каждого набора входных данных содержит единственное число \(n\) (\(1 \leq n \leq 100\)).

Во второй строке описания каждого набора входных данных находятся \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \leq a_i \leq 100\)). Сумма всех \(a_i\) не превосходит \(100\).

В третьей строке описания каждого набора входных данных находятся \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(0 \leq b_i \leq 100\)). Сумма всех \(b_i\) не превосходит \(100\).

Выходные данные

Для каждого набора входных данных выведите «-1» в единственной строке, если невозможно сделать массивы равными после применения некоторой последовательности операций.

Иначе выведите целое число \(m\) (\(0 \leq m \leq 100\)) в первой строке — количество операций. Затем выведите \(m\) строк, в каждой по два целых числа \(i\) и \(j\) — индексы, которые вы выбрали для операции.

Можно доказать, что если можно сделать два массива равными с помощью некоторой последовательности операций, то существует такая последовательность с \(m \leq 100\).

Если существует несколько возможных решений, выведите любое.

Примечание

В первом наборе входных данных мы сделали следующие операции:

  • \(i = 2\), \(j = 1\): \([1, 2, 3, 4] \rightarrow [2, 1, 3, 4]\);
  • \(i = 3\), \(j = 1\): \([2, 1, 3, 4] \rightarrow [3, 1, 2, 4]\);

Во втором наборе входных данных невозможно сделать два массива равными.

F. Стабилизируй массив (НОД-версия)

Бинарный поиск Перебор разделяй и властвуй Структуры данных теория чисел *1900

Задан массив из положительных целых чисел \(a = [a_0, a_1, \dots, a_{n - 1}]\) (\(n \ge 2\)).

За один шаг массив \(a\) заменяется на другой массив длины \(n\), в котором каждый элемент это наибольший общий делитель (НОД) двух соседних элементов (самого элемента и его правого соседа; считайте, что правый сосед \((n - 1)\)-го элемента это \(0\)-й элемент).

Формально говоря, по массиву \(a = [a_0, a_1, \dots, a_{n - 1}]\) строится новый массив \(b = [b_0, b_1, \dots, b_{n - 1}]\) такой, что \(b_i\) \(= \gcd(a_i, a_{(i + 1) \mod n})\), где \(\gcd(x, y)\) — это наибольший общий делитель \(x\) и \(y\), а \(x \mod y\) — это остаток от деления \(x\) на \(y\). За один шаг строится массив \(b\), а затем массив \(a\) заменяется массивом \(b\) (то есть осуществляется присваивание \(a\) := \(b\)).

Например, если \(a = [16, 24, 10, 5]\), то \(b = [\gcd(16, 24)\), \(\gcd(24, 10)\), \(\gcd(10, 5)\), \(\gcd(5, 16)]\) \(= [8, 2, 5, 1]\). Таким образом, массив \(a = [16, 24, 10, 5]\) после одного шага станет равен \([8, 2, 5, 1]\).

Для заданного массива \(a\) найдите минимальное количество шагов, после которых все значения \(a_i\) станут равными (то есть \(a_0 = a_1 = \dots = a_{n - 1}\)). Если изначально массив \(a\) уже состоял из одинаковых элементов, то считайте, что количество шагов равно \(0\).

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее записаны \(t\) наборов входных данных.

Каждый набор состоит из двух строк. В первой строке содержится целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина массива \(a\). Вторая строка содержит \(n\) целых чисел \(a_0, a_1, \dots, a_{n - 1}\) (\(1 \le a_i \le 10^6\)).

Сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) чисел — ответы на наборы входных данных теста.

A. Паутина лжи

графы жадные алгоритмы Перебор *1400

Когда играешь в игру престолов, ты побеждаешь или умираешь. Третьего не дано.
Серсея Ланнистер, Игра престолов, Джордж Р. Р. Мартин

Есть \(n\) дворян, пронумерованных от \(1\) до \(n\). Дворянин \(i\) обладает могуществом \(i\). Дворяне «дружат» между собой — всего есть \(m\) пар дружных дворян. Дружба между дворянами \(a\) и \(b\) всегда взаимная.

Дворянин считается уязвимым, если выполнены оба следующих условия.

  • у этого дворянина есть хотя бы один друг, и
  • все друзья этого дворянина обладают могуществом, превосходящим могущество этого дворянина.

Вам нужно будет обрабатывать следующие три типа запросов.

  1. Добавить дружбу между \(u\) и \(v\).
  2. Удалить дружбу между \(u\) и \(v\).
  3. Посчитать ответ на следующий процесс.

Процесс: все уязвимые дворяне одновременно умирают, и все их дружбы заканчиваются. После этого, возможно, некоторые другие дворяне становятся уязвимыми. Процесс повторяется до тех пор, пока есть уязвимые дворяне. Можно доказать, что процесс завершится за конечное число шагов. После завершения процесса вам необходимо посчитать количество оставшихся дворян.

Заметьте, что результаты процессов не влияют на дальнейшие и предыдущие запросы, то есть все дворяне живы в начале каждого процесса!

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2\cdot 10^5\), \(0 \le m \le 2\cdot 10^5\)) — количество дворян и количество изначальных пар друзей соответственно.

Следующие \(m\) строк содержат по два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\), \(u \ne v\)), описывающие дружбу между дворянами. Никакая пара друзей не повторяется дважды.

Следующая строка содержит целое число \(q\) (\(1 \le q \le 2\cdot {10}^{5}\)) — количество запросов.

Следующие \(q\) строк содержат сами запросы по одному в строке. Каждый запрос имеет один из следующих видов:

  • \(1\) \(u\) \(v\) (\(1 \le u,v \le n\), \(u \ne v\)) — добавить дружбу между \(u\) и \(v\). Гарантируется, что \(u\) и \(v\) не друзья в этот момент.
  • \(2\) \(u\) \(v\) (\(1 \le u,v \le n\), \(u \ne v\)) — удалить дружбу между \(u\) и \(v\). Гарантируется, что \(u\) и \(v\) дружат в этот момент.
  • \(3\) — вывести ответ на процесс, описанный в условии.
Выходные данные

На каждый запрос \(3\)-го типа выведите целое число, по одному на строку. Гарантируется, что будет хотя бы один запрос типа \(3\).

Примечание

Ситуация в первом запросе типа 3 изображена на рисунке ниже.

В первом раунде процесса дворянин \(1\) слабее, чем все его друзья (\(2\) и \(3\)), и поэтому он умирает. Никакой другой дворянин в раунде 1 не является уязвимым. В раунде 2 дворянин \(3\) слабее своего единственного друга, дворянина \(4\), и поэтому он умирает. На этом этапе процесс завершается, ответ равен \(2\).

Во втором запросе типа 3 единственным выжившим является дворянин \(4\).

    

Второй пример состоит только из одного запроса типа \(3\). В первом раунде умирают два дворянина, во втором раунде умирает один дворянин. Итоговый ответ равен \(1\), поскольку только один дворянин выжил.

D2. Грегор и нечетные коровы (сложная версия)

геометрия математика Перебор теория чисел *3300

Это сложная версия задачи. Единственное отличие от простой версии заключается в том, что в данной версии координаты могут быть как чётными, так и нечётными.

Даны \(n\) столбов, расположенных в различных точках на плоскости. Гарантируется, что никакие три столба не лежат на одной прямой.

На плоскости также есть бесконечное количество коров, по одной в каждой точке с целочисленными координатами.

Грегор — член общества иллюминатов и хочет построить треугольный загон, соединив \(3\) различных существующих столба забором. Корова, находящаяся строго внутри загона, считается огражденной. Если ограждено нечётное число коров, и при этом площадь загона равна целому числу, то загон считается интересным.

Найдите количество интересных загонов.

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \le n \le 6000\)) — количество столбов, которые Грегор может выбрать в качестве вершин загона.

Следующие \(n\) строк содержат по два целых числа \(x\) и \(y\) (\(0 \le x,y \le 10^7\), где \((x,y)\) — координата очередного столба. Все столбы расположены в различных точках. Никакие три столба не лежат на одной прямой.

Выходные данные

Напечатайте одно целое число — количество интересных загонов. Два загона считаются различными, если они образованы различными множествами трех столбов.

Примечание

В первом примере существует только \(1\) загон. Этот загон является интересным, поскольку его площадь равна \(4\) и есть \(1\) пойманная корова, помеченная красным.

Во втором примере существует \(4\) возможных загона. Однако, только один из них является интересным. Этот загон имеет площадь, равную \(8\), и \(5\) пойманных коров.

A. I_love_%username%

Перебор *800

Вася обожает спортивное программирование. Программировать он не умеет, но очень любит наблюдать за ходом разных соревнований. У Васи даже есть любимый участник, за которым он следит особенно пристально.

Однажды Вася решил собрать результаты всех выступлений своего любимого участника и посмотреть на рост его крутости. Для каждого соревнования с его участием он выписал одно неотрицательное число — количество баллов, набранных участником в соревновании. Баллы за соревнования Вася выписывал в том порядке, в котором соревнования проходили (разумеется, никакие два соревнования не проходили одновременно).

Вася считает выступление участника удивительным в двух случаях: если участник установит новый рекорд или анти-рекорд по количеству набранных баллов. Иными словами, удивительно, если участник набирает на соревновании строго больше баллов, чем на каждом из предыдущих соревнований. Также удивительно, если участник набирает на соревновании строго меньше баллов, чем на каждом из предыдущих соревнований. Первое выступление удивительным не считается.

Теперь Вася хочет посчитать, сколько всего было удивительных выступлений за всю карьеру участника. Но список набранных баллов получился длинный, а программировать Вася не умеет... Поэтому он просит Вас помочь ему.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 1000) — количество выступлений участника.

В следующей строке записано n целых неотрицательных чисел, разделенных пробелами — баллы, набранные участником, в хронологическом порядке. Все баллы не превосходят 10000.

Выходные данные

Выведите единственное число — количество удивительных выступлений за всю карьеру участника.

Примечание

В первом примере удивительными являются выступления с номерами 2 и 3.

Во втором примере удивительными являются выступления с номерами 2, 4, 9 и 10.

C. Манхэттенские подмассивы

геометрия жадные алгоритмы Перебор реализация *1700

Предположим, есть две точки \(p = (x_p, y_p)\) и \(q = (x_q, y_q)\). Тогда обозначим манхэттенское расстояние между ними как \(d(p, q) = |x_p - x_q| + |y_p - y_q|\).

Назовем три точки \(p\), \(q\), \(r\) как плохую тройку, если \(d(p, r) = d(p, q) + d(q, r)\).

Назовем массив \(b_1, b_2, \dots, b_m\) хорошим, если нельзя выбрать три различных индекса \(i\), \(j\) и \(k\) так, что точки \((b_i, i)\), \((b_j, j)\) и \((b_k, k)\) — плохая тройка.

Вам задан массив \(a_1, a_2, \dots, a_n\). Посчитайте количество хороших подмассивов \(a\). Подмассив массива \(a\) — это массив \(a_l, a_{l + 1}, \dots, a_r\) для некоторых \(1 \le l \le r \le n\).

Заметим, что согласно определению, подмассивы длины \(1\) и \(2\) являются хорошими.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите количество хороших подмассивов массива \(a\).

Примечание

В первом наборе, можно доказать, что любой подмассив массива \(a\) является хорошим. Например, подмассив \([a_2, a_3, a_4]\) — хороший, потому что содержит только три элемента и:

  • \(d((a_2, 2), (a_4, 4)) = |4 - 3| + |2 - 4| = 3\) \(<\) \(d((a_2, 2), (a_3, 3)) + d((a_3, 3), (a_4, 4)) = 3 + 1 + 2 + 1 = 7\);
  • \(d((a_2, 2), (a_3, 3))\) \(<\) \(d((a_2, 2), (a_4, 4)) + d((a_4, 4), (a_3, 3))\);
  • \(d((a_3, 3), (a_4, 4))\) \(<\) \(d((a_3, 3), (a_2, 2)) + d((a_2, 2), (a_4, 4))\);

Во втором наборе, для примера, подмассив \([a_1, a_2, a_3, a_4]\) не является хорошим, потому что содержит плохую тройку \((a_1, 1)\), \((a_2, 2)\), \((a_4, 4)\):

  • \(d((a_1, 1), (a_4, 4)) = |6 - 9| + |1 - 4| = 6\);
  • \(d((a_1, 1), (a_2, 2)) = |6 - 9| + |1 - 2| = 4\);
  • \(d((a_2, 2), (a_4, 4)) = |9 - 9| + |2 - 4| = 2\);

То есть, \(d((a_1, 1), (a_4, 4)) = d((a_1, 1), (a_2, 2)) + d((a_2, 2), (a_4, 4))\).

E. Stringforces

Бинарный поиск битмаски дп Перебор Строки *2500

Задана строка \(s\) длины \(n\). Каждый символ — это либо одна из первых \(k\) строчных латинских букв, либо знак вопроса.

Требуется заменить каждый знак вопрос на одну из первых \(k\) строчных латинских букв таким образом, чтобы максимизировать следующее значение.

Пусть \(f_i\) будет максимальной длиной подстроки строки \(s\), которая состоит целиком из \(i\)-й латинской буквы. Подстрока строки — это некоторый ее непрерывный подотрезок. Если \(i\)-я буква не встречается в строке, то \(f_i\) равно \(0\).

Значение строки \(s\) — это минимальное значение среди \(f_i\) для всех \(i\) от \(1\) до \(k\).

Какое наибольшее значение может иметь строка?

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le k \le 17\)) — длина строки и количество использованных первых латинских букв.

Во второй строке записана строка \(s\), состоящая из \(n\) символов. Каждый символ — это либо одна из первых \(k\) строчных латинских букв, либо знак вопроса.

Выходные данные

Выведите одно целое число — наибольшее значение, которое может иметь строка, если заменить каждый знак вопроса на одну из первых \(k\) строчных латинских букв.

Примечание

В первом примере знаки вопроса можно заменить следующим образом: «aaaababbbb». \(f_1 = 4\), \(f_2 = 4\), поэтому ответ равен \(4\). Можно заменить и таким образом: «aaaabbbbbb». Тогда \(f_1 = 4\), \(f_2 = 6\), однако, минимум из них все еще равен \(4\).

Во втором примере одна из возможных строк такая: «aabbccdda».

В третьем примере хотя бы одна буква не встретится в строке, поэтому минимум из значений \(f_i\) всегда равен \(0\).

E. Неподвижные точки

Бинарный поиск дп Перебор *2000

Задана последовательность целых чисел \(a_1, a_2, \ldots, a_n\). За один ход можно выбрать любой элемент последовательности и удалить его. Все элементы справа от удаленного сдвигаются на \(1\) позицию влево, чтобы в последовательности не было пустых мест. Таким образом, за один ход длина последовательности всегда сокращается на \(1\). Индексы элементов после хода пересчитываются.

Например, пусть последовательность имеет вид \(a=[3, 2, 2, 1, 5]\). Допустим во время хода был выбран элемент \(a_3=2\). Тогда после хода последовательность будет равна \(a=[3, 2, 1, 5]\), причём теперь её \(3\)-м элементом будет считаться \(a_3=1\), а \(4\)-м будет \(a_4=5\).

Вам дана последовательность \(a_1, a_2, \ldots, a_n\) и число \(k\). Требуется найти минимальное количество ходов, которое нужно совершить, чтобы в последовательности не менее \(k\) элементов были равны своим индексам, т. е. в полученной последовательности \(b_1, b_2, \ldots, b_m\) существовало не менее \(k\) индексов \(i\) таких, что \(b_i = i\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор данных состоит из двух подряд идущих строк. Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2000\)). Вторая строка содержит последовательность целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)). Числа в последовательности не обязательно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2000\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке:

  • \(-1\), если не существует искомой последовательности ходов;
  • в противном случае целое число \(x\) (\(0 \le x \le n\)) — минимальное количество ходов, которое требуется, для того чтобы не менее \(k\) элементов последовательности стали равны своим индексам.
Примечание

В первом наборе входных данных последовательность изначально не удовлетворяет виду, к которому её необходимо привести, однако, удалив первый элемент последовательности, можно добиться того, что последовательность примет вид \([1, 2, 3, 4, 5, 6]\), т. е. \(6\) элементов будут равны своим индексам.

Во втором тестовом примере есть два способа достичь желаемого результата за \(2\) хода: удалить \(1\)-й и \(3\)-й элементы, при этом последовательность будет иметь вид \([1, 2, 3]\), в которой будет \(3\) равных своим индексам элемента; второй способ — удалить \(2\)-й и \(3\)-й элементы, тогда получится последовательность \([5, 2, 3]\), в которой будет \(2\) искомых элемента.

F. Равноудалённые вершины

Деревья дп Комбинаторика Перебор поиск в глубину и подобное *2200

Дерево — это неориентированный связный граф, в котором отсутствуют циклы.

Задано дерево из \(n\) вершин. Необходимо посчитать количество способов выбрать в этом дереве ровно \(k\) вершин (т.е. \(k\)-элементное подмножество вершин), так чтобы все попарные расстояния между выбранными вершинами были равны. Иными словами, чтобы существовало такое число \(c\), что для всех \(u, v\) (\(u \ne v\), \(u, v\) — выбранные вершины) было верно \(d_{u,v}=c\), где \(d_{u,v}\) — расстояние от \(u\) до \(v\).

Поскольку ответ может быть очень большим, необходимо вывести его по модулю \(10^9 + 7\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Перед каждым набором входных данных расположена пустая строка.

Каждый набор данных состоит из нескольких строк. Первая строка набора данных содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 100\)) — количество вершин в дереве и количество выбираемых вершин соответственно. Далее идут \(n - 1\) строк, каждая содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — две вершины, которые соединены ребром. Гарантируется, что заданный граф является деревом, отсутствуют петли и кратные рёбра.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число — количество способов выбрать в дереве ровно \(k\) вершин, так чтобы для любых двух пар вершин расстояние между вершинами в паре было одинаковым, по модулю \(10^9 + 7\) (иными словами, выведите остаток при делении на \(1000000007\)).

D. Массив как разность

битмаски графы дп Конструктив математика Перебор поиск в глубину и подобное *1800

Вам дана последовательность из \(n\) целых чисел \(a_1, \, a_2, \, \dots, \, a_n\).

Существует ли последовательность из \(n\) целых чисел \(b_1, \, b_2, \, \dots, \, b_n\) такая, что выполняется следующее свойство?

  • Для каждого \(1 \le i \le n\) существуют два (не обязательно различных) индекса \(j\) и \(k\) (\(1 \le j, \, k \le n\)) такие, что \(a_i = b_j - b_k\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 20\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, \, \dots, \, a_n\) (\(-10^5 \le a_i \le 10^5\)).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую YES, если существует последовательность \(b_1, \, \dots, \, b_n\), удовлетворяющая требуемому свойству, и NO в противном случае.

Примечание

В первом наборе входных данных, последовательность \(b = [-9, \, 2, \, 1, \, 3, \, -2]\) удовлетворяет свойству. Действительно, имеет место следующее:

  • \(a_1 = 4 = 2 - (-2) = b_2 - b_5\);
  • \(a_2 = -7 = -9 - (-2) = b_1 - b_5\);
  • \(a_3 = -1 = 1 - 2 = b_3 - b_2\);
  • \(a_4 = 5 = 3 - (-2) = b_4 - b_5\);
  • \(a_5 = 10 = 1 - (-9) = b_3 - b_1\).

Во втором наборе входных данных достаточно выбрать \(b = [0]\), так как \(a_1 = 0 = 0 - 0 = b_1 - b_1\).

В третьем наборе входных данных можно показать, что никакая последовательность \(b\) длины \(3\) не удовлетворяет свойству.

G. Серьезный судья

битмаски Перебор поиск в глубину и подобное сортировки *3000

Андреа придумал, как он считает, новый алгоритм сортировки для массивов длины \(n\). Алгоритм работает следующим образом.

Изначально имеется массив из \(n\) целых чисел \(a_1,\, a_2,\, \dots,\, a_n\). Затем выполняется \(k\) шагов.

Для каждого \(1\le i\le k\) на \(i\)-м шаге сортируется подпоследовательность массива \(a\) с индексами \(j_{i,1}< j_{i,2}< \dots< j_{i, q_i}\), не меняя значений с остальными индексами. Таким образом, в результате подпоследовательность \(a_{j_{i,1}},\, a_{j_{i,2}},\, \dots,\, a_{j_{i,q_i}}\) отсортирована, а все остальные элементы \(a\) остались нетронутыми.

Андреа, желая поделиться своим открытием с научным сообществом, отправил небольшую статью с описанием своего алгоритма в журнал «Анналы алгоритмов сортировки», а вы являетесь рецензентом статьи (то есть человеком, который должен оценить правильность статьи). Вы должны решить, является ли алгоритм Андреа правильным, то есть сортирует ли он любой массив \(a\) из \(n\) целых чисел.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1\le n\le 40\), \(0\le k\le 10\)) — длину массивов, обрабатываемых алгоритмом Андреа, и количество шагов алгоритма Андреа.

Далее следуют \(k\) строк, каждая из которых описывает подпоследовательность, рассматриваемую на одном из шагов алгоритма Андреа.

В \(i\)-й из этих строк содержится целое число \(q_i\) (\(1\le q_i\le n\)), за которым следуют \(q_i\) целых чисел \(j_{i,1},\,j_{i,2},\,\dots,\, j_{i,q_i}\) (\(1\le j_{i,1}<j_{i,2}<\cdots<j_{i,q_i}\le n\)) — длина подпоследовательности, рассматриваемой на \(i\)-м шаге, и индексы подпоследовательности.

Выходные данные

Если алгоритм Андреа верен, выведите ACCEPTED, иначе выведите REJECTED.

Примечание

Объяснение первого примера: Алгоритм состоит из \(3\) шагов. Первый сортирует подпоследовательность \([a_1, a_2, a_3]\), второй сортирует подпоследовательность \([a_2, a_3, a_4]\), третий сортирует подпоследовательность \([a_1,a_2]\). Например, если первоначально \(a=[6, 5, 6, 3]\), то алгоритм преобразует массив следующим образом (сортируемая подпоследовательность выделена красным цветом) \(\) [{\color{red}6},{\color{red}5},{\color{red}6},3] \rightarrow [5, {\color{red}6}, {\color{red}6}, {\color{red}3}] \rightarrow [{\color{red}5}, {\color{red}3}, 6, 6] \rightarrow [3, 5, 6, 6] \,.\(\) Можно доказать, что для любого начального массива \(a\), в конце алгоритма массив \(a\) будет отсортирован.

Объяснение второго примера: Алгоритм состоит из \(3\) шагов. На первом сортируется подпоследовательность \([a_1, a_2, a_3]\), на втором — подпоследовательность \([a_2, a_3, a_4]\), на третьем — подпоследовательность \([a_1,a_3,a_4]\). Например, если первоначально \(a=[6, 5, 6, 3]\), то алгоритм преобразует массив следующим образом (сортируемая подпоследовательность выделена красным цветом) \(\) [{\color{red}6},{\color{red}5},{\color{red}6},3] \rightarrow [5, {\color{red}6}, {\color{red}6}, {\color{red}3}] \rightarrow [{\color{red}5}, 3, {\color{red}6}, {\color{red}6}] \rightarrow [5, 3, 6, 6] \,.\(\) Обратите внимание, что \(a=[6,5,6,3]\) является примером массива, который не сортируется алгоритмом.

Объяснение третьего примера: Алгоритм состоит из \(4\) шагов. Первые \(3\) шага ничего не делают, так как сортируют подпоследовательности длиной \(1\), тогда как четвертый шаг сортирует подпоследовательность \([a_1,a_3]\). Например, если первоначально \(a=[5,6,4]\), алгоритм преобразует массив следующим образом (подпоследовательность, которая сортируется, выделена красным цветом) \(\) [{\color{red}5},6,4] \rightarrow [5,{\color{red}6},4] \rightarrow [5,{\color{red}6},4] \rightarrow [{\color{red}5},6,{\color{red}4}]\rightarrow [4,6,5] \,.\(\) Обратите внимание, что \(a=[5,6,4]\) - это пример массива, который не сортируется алгоритмом.

Пояснение четвертого примера: Алгоритм состоит из \(2\) шагов. На первом этапе сортируются подпоследовательности \([a_2,a_3,a_4]\), на втором - весь массив \([a_1,a_2,a_3,a_4,a_5]\). Например, если изначально \(a=[9,8,1,1,1]\), алгоритм преобразует массив следующим образом (подпоследовательность, которая получает сортировку, выделена красным цветом) \(\) [9,{\color{red}8},{\color{red}1},{\color{red}1},1] \rightarrow [{\color{red}9},{\color{red}1},{\color{red}1},{\color{red}8},{\color{red}1}] \rightarrow [1,1,1,8,9] \,.\(\) Поскольку на последнем шаге сортируется весь массив, очевидно, что для любого начального массива \(a\) в конце алгоритма массив \(a\) будет отсортирован.

B. Переворот строки

дп Перебор реализация Строки хэши *1300

У вас есть строка \(s\) и фишка, которую вы можете поставить на любой символ этой строки.

После того, как вы поставите фишку, вы можете подвинуть ее вправо несколько (возможно, ноль) раз, то есть сделать следующее действие несколько раз: если текущая позиция фишки обозначена как \(i\), фишка перемещается в позицию \(i + 1\). Конечно же, это действие невозможно, если фишка находится в последней позиции строки.

После того, как вы закончите двигать фишку вправо, вы можете подвинуть ее влево несколько (возможно, ноль) раз, то есть сделать следующее действие несколько раз: если текущая позиция фишки обозначена как \(i\), фишка перемещается в позицию \(i - 1\). Конечно же, это действие невозможно, если фишка находится в первой позиции строки.

Когда вы ставите фишку или перемещаете ее, вы выписываете символ, на котором оказалась фишка. Например, если строка \(s\)abcdef, вы ставите фишку на \(3\)-й символ, двигаете ее вправо \(2\) раза, а затем двигаете ее влево \(3\) раза, вы выпишете строку cdedcb.

Вам даны две строки \(s\) и \(t\). Ваше задание — определить, можно ли так выполнить описанные операции со строкой \(s\), что в результате вы выпишете строку \(t\).

Входные данные

В первой строке задано одно целое число \(q\) (\(1 \le q \le 500\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке задана строка \(s\) (\(1 \le |s| \le 500\)), во второй строке — строка \(t\) (\(1 \le |t| \le 2 \cdot |s| - 1\)). Обе строки состоят из строчных букв латинского алфавита.

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора выходных данных выведите «YES», если можно выписать строку \(t\), проводя описанные в условии действия со строкой \(s\), или «NO» в противном случае.

Каждую букву можно выводить в любом регистре (YES, yes, Yes будут распознаны как положительный ответ, NO, no и nO будут распознаны как отрицательный ответ).

Примечание

Рассмотрим примеры из условия.

Первый набор входных данных разобран в условии.

Во втором наборе входных данных можно поместить фишку на \(1\)-ю позицию, подвинуть ее дважды вправо, а затем дважды влево.

В четвертом наборе входных данных можно поместить фишку на \(2\)-ю позицию, а потом не двигать ее вообще.

В пятом наборе входных данных можно поставить фишку на \(1\)-ю позицию, подвинуть ее \(5\) раз вправо и завершить процесс.

C. Пенальти

битмаски дп жадные алгоритмы Перебор *1200

Рассмотрим упрощенную фазу пенальти в конце футбольного матча.

Фаза пенальти состоит из не более чем \(10\) ударов: первый удар выполняет первая команда, второй удар выполняет вторая команда, третий удар выполняет первая команда, и так далее. Команда, забившая больше голов, выигрывает; если обе команды забили одинаковое количество голов, объявляется ничья (обратите внимание, что это противоречит официальным правилам футбола). Фазу пенальти останавливают, если одна команда забила больше мячей, чем другая команда может забить с учетом всех оставшихся ударов. Например, если после \(7\)-го удара возникла следующая ситуация: первая команда забила \(1\) мяч, а вторая команда забила \(3\) мяча, то фазу пенальти останавливают: первая команда уже не сможет забить \(3\) мяча за всю фазу пенальти.

Вы знаете, кто выполняет какой удар, поэтому можете спрогнозировать результаты всех \(10\) ударов. Этот прогноз представлены строкой \(s\), состоящей из \(10\) символов. Каждый символ — 1, 0, или ?. Строка задает ваш прогноз следующим образом:

  • если \(s_i\)1, то игрок, выполняющий \(i\)-й удар, обязательно забьет гол;
  • если \(s_i\)0, то игрок, выполняющий \(i\)-й удар, обязательно не забьет гол;
  • если \(s_i\)?, то результат \(i\)-го удара может быть любым.

Основываясь на этом прогнозе, посчитайте минимально возможное количество ударов в фазе пенальти (то есть самый ранний момент, когда фаза пенальти может быть остановлена, если рассмотреть все возможные варианты, как она может проходить). Обратите внимание, что при остановке фазы пенальти ваши прогнозы на следующие удары не учитываются.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1\,000\)) — количество наборов входных данных.

Каждый набор входных данных задается одной строкой \(s\), состоящей из ровно \(10\) символов. Каждый символ — 1, 0 или ?.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможное количество ударов в фазе пенальти.

Примечание

Рассмотрим примеры:

В первом примере, рассмотрим ситуацию, когда \(1\)-й, \(5\)-й и \(7\)-й забивают, а \(2\), \(3\), \(4\) и \(6\) не забивают. Тогда текущее количество голов для первой команды это \(3\), а для второй команды это \(0\), при этом рефери понимает, что вторая команда забьет не более \(2\) голов в оставшихся ударах. Таким образом, серия пенальти закончится после \(7\)-го удара.

Во втором примере, серия пенальти не закончится, пока не будут совершены все \(10\) ударов.

В третьем примере, если первая команда не забьет три своих первых удара, а вторая команда забьет три своих первых удара, то после \(6\)-го удара, первая команда забила \(0\) голов и вторая команда забила \(3\) гола. Рефери понимает, что первая команда может забить не более \(2\) голов в оставшихся ударах. Таким образом, серия пенальти закончится после \(6\)-го удара.

В четвертом примере, несмотря на то, что вы можете предсказать всю серию пенальти, ее результат будет точно известен только после \(9\)-го удара.

E. Сдвиг перестановки

графы Комбинаторика Конструктив математика Перебор поиск в глубину и подобное снм *2100

Тождественная перестановка длины \(n\) — это массив \([1, 2, 3, \dots, n]\).

Мы применили следующие операции к тождественной перестановке длины \(n\):

  • Вначале мы циклически сдвинули ее вправо на \(k\) позиций, где \(k\) вам неизвестно (вы знаете только то, что \(0 \le k \le n - 1\)). При циклическом сдвиге массива вправо на \(k\) позиций необходимо взять \(k\) последних элементов исходного массива (не меняя их относительный порядок) и дописать \(n - k\) первых элементов исходного массива справа от них (также не меняя относительный порядок этих \(n - k\) элементов). Например, если бы мы циклически сдвинули тождественную перестановку длины \(6\) на \(2\) позиции вправо, мы бы получили массив \([5, 6, 1, 2, 3, 4]\);
  • Далее мы выполнили следующую операцию не более \(m\) раз: выбрали два элемента массива и поменяли их местами.

Вам даны \(n\) и \(m\), а также полученный массив. Ваша задача — найти все возможные значения \(k\) в операции циклического сдвига.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Каждый набор входных данных описывается двумя строками. Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(3 \le n \le 3 \cdot 10^5\); \(0 \le m \le \frac{n}{3}\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), каждое целое число от \(1\) до \(n\) встречается в последовательности ровно один раз) — полученный массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

  • Вначале выведите одно целое число \(r\) (\(0 \le r \le n\)) — количество возможных значений \(k\) в операции циклического сдвига;
  • Далее выведите \(r\) целых чисел \(k_1, k_2, \dots, k_r\) (\(0 \le k_i \le n - 1\)) — все возможные значения \(k\) в возрастающем порядке.
Примечание

Рассмотрим примеры из условия.

  • В первом наборе входных данных единственное возможное значение для циклического сдвига это \(3\). Если мы сдвинем \([1, 2, 3, 4]\) на \(3\) позиции, мы получим \([2, 3, 4, 1]\). Далее мы можем поменять \(3\)-й и \(4\)-й элементы местами, чтобы получить массив \([2, 3, 1, 4]\);
  • Во втором наборе единственное возможное значение для циклического сдвига это \(0\). Если мы сдвинем \([1, 2, 3]\) на \(0\) позиций, мы получим \([1, 2, 3]\). Далее мы не производим операций обмена (так как нам разрешено совершить не более \(1\)-го обмена), таким образом, полученный массив остается равным \([1, 2, 3]\);
  • В третьем наборе все значения от \(0\) до \(2\) допустимы для циклического сдвига:
    • если мы сдвинем \([1, 2, 3]\) на \(0\) позиций, мы получим \([1, 2, 3]\). Далее мы можем поменять \(1\)-й и \(3\)-й элементы, чтобы получить \([3, 2, 1]\);
    • если мы сдвинем \([1, 2, 3]\) на \(1\) позицию, мы получим \([3, 1, 2]\). Далее мы можем поменять \(2\)-й и \(3\)-й элементы, чтобы получить \([3, 2, 1]\);
    • если мы сдвинем \([1, 2, 3]\) на \(2\) позиции, мы получим \([2, 3, 1]\). Далее мы можем поменять \(1\)-й и \(2\)-й элементы, чтобы получить \([3, 2, 1]\);
  • В четвертом наборе входных данных операции обмена запрещены, однако ни один циклический сдвиг не равен массиву \([1, 2, 3, 4, 6, 5]\).

G. Граф общих делителей

графы Конструктив математика Перебор снм теория чисел хэши *2700

Рассмотрим последовательность различных целых чисел \(a_1, \ldots, a_n\), каждое из которых соответствует отдельной вершине графа. Будем соединять две вершины ребром, если соответствующие им числа не взаимно просты, т. е. если они имеют общий делитель, больший чем \(1\).

Вам даны \(q\) запросов, в каждом запросе вы хотите попасть из вершины, соответствующей значению \(a_s\), в вершину, соответствующую \(a_t\). Для того чтобы это сделать, вы можете выбирать существующее значение \(a_i\), создать новую вершину со значением \(a_{n+1} = a_i \cdot (1 + a_i)\) и соединить ее со всеми вершинами, значения которых не взаимно просты с \(a_{n+1}\). После этого \(n\) увеличивается на \(1\). Вы можете повторять эту операцию любое количество раз, удлиняя последовательность, и, возможно, получая одинаковые значения. Какое минимальное количество вершин нужно добавить, чтобы \(a_t\) стало достижимо из \(a_s\)?

Обратите внимание, что запросы независимы. В каждом запросе вы начинаете с исходной последовательности \(a\), заданной во входных данных.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \leq n \leq 150\,000\), \(1 \leq q \leq 300\,000\)) — размер исходной последовательности и количество запросов.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(2 \leq a_i \leq 10^6\), \(a_i \neq a_j\), если \(i \ne j\)).

\(j\)-я из следующих \(q\) строк содержит два различных целых числа \(s_j\) и \(t_j\) (\(1 \leq s_j, t_j \leq n\), \(s_j \neq t_j\)) — индексы вершин для \(j\)-го запроса.

Выходные данные

Выведите \(q\) строк. \(j\)-я строка должна содержать одно целое число: минимальное количество вершин, которое нужно добавить, чтобы можно было достичь \(a_{s_j}\) из \(a_{t_j}\).

Примечание

В первом примере вы можете добавить вершину со значением \(2 \cdot 3 = 6\), или \(10 \cdot 11 = 110\), или \(3 \cdot 4 = 12\). Ни одно из этих добавлений не нужно в первом запросе, так как вы уже можете добраться из \(a_1 = 2\) в \(a_2 = 10\).

Во втором запросе оптимальным является добавление вершины со значением \(6\) или \(12\). Например, добавляя вершину со значением \(6\), мы сможем добраться из \(a_1 = 2\) в \(a_3 = 3\) по пути со значениями \((2, 6, 3)\).

В последнем запросе второго примера мы хотим добраться из \(a_3 = 7\) в \(a_5 = 25\). Одним из возможных способов достичь это является создание вершины со значением \(6 \cdot 7 = 42\), а затем создание вершины со значением \(25 \cdot 26 = 650\). В финальном графе, состоящем из 7 вершин, существует путь из \(a_3 = 7\) в \(a_5 = 25\).

B. Кобб

битмаски жадные алгоритмы математика Перебор *1700

Вам даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) и целое число \(k\). Найдите максимальное значение \(i \cdot j - k \cdot (a_i | a_j)\) среди всех пар \((i, j)\) целых чисел таких, что \(1 \le i < j \le n\). Здесь \(|\) обозначает операцию побитового ИЛИ.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\))  — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) (\(2 \le n \le 10^5\)) и \(k\) (\(1 \le k \le \min(n, 100)\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого тестового случая выведите одно целое число — максимально возможное значение \(i \cdot j - k \cdot (a_i | a_j)\).

Примечание

Пусть \(f(i, j) = i \cdot j - k \cdot (a_i | a_j)\).

В первом наборе входных данных,

  • \(f(1, 2) = 1 \cdot 2 - k \cdot (a_1 | a_2) = 2 - 3 \cdot (1 | 1) = -1\).
  • \(f(1, 3) = 1 \cdot 3 - k \cdot (a_1 | a_3) = 3 - 3 \cdot (1 | 3) = -6\).
  • \(f(2, 3) = 2 \cdot 3 - k \cdot (a_2 | a_3) = 6 - 3 \cdot (1 | 3) = -3\).

Таким образом, максимум равен \(f(1, 2) = -1\).

В четвертом наборе входных данных максимум равен \(f(3, 4) = 12\).

A. PizzaForces

математика Перебор *900

PizzaForces — любимая пиццерия Пети. В PizzaForces готовят и продают пиццы трех размеров: маленькая пицца состоит из \(6\) кусочков, средняя — из \(8\), а большая — из \(10\). На приготовление маленькой, средней или большой пиццы уходит \(15\), \(20\) или \(25\) минут, соответственно.

Сегодня у Пети день рождения, и к нему придут \(n\) его друзей, поэтому он решил сделать заказ из своей любимой пиццерии. Петя хочет заказать столько пиццы, чтобы каждому из друзей достался хотя бы один кусочек пиццы. Время приготовления заказа — это суммарное время приготовления всех пицц в заказе.

Ваша задача — определить минимальное количество минут, которое необходимо для приготовления пицц, содержащих суммарно хотя бы \(n\) кусочков. Например:

  • если \(12\) друзей придут к Пете, он должен сделать заказ, состоящий хотя бы из \(12\) кусочков. Он может заказать две маленьких пиццы, в которых ровно \(12\) кусочков, и время их приготовления — \(30\) минут;
  • если \(15\) друзей придут к Пете, он должен сделать заказ, состоящий хотя бы из \(15\) кусочков. Он может заказать одну маленькую пиццу и одну большую, и получится \(16\) кусочков. Время приготовления в таком случае будет \(40\) минут;
  • если \(300\) друзей придут к Пете, он должен сделать заказ, состоящий хотя бы из \(300\) кусочков. Он может заказать \(15\) маленьких пицц, \(10\) средних и \(13\) больших, суммарно они состоят из \(15 \cdot 6 + 10 \cdot 8 + 13 \cdot 10 = 300\) кусочков, и на их приготовление потребуется \(15 \cdot 15 + 10 \cdot 20 + 13 \cdot 25 = 750\) минут;
  • если к Пете придет только один друг, Петя может заказать одну маленькую пиццу, на приготовление которой уйдет \(15\) минут.
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных, состоит из единственной строки, которая содержит одно целое число \(n\) (\(1 \le n \le 10^{16}\)) — количество друзей Пети.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество минут, которое необходимо для приготовления пицц, содержащих суммарно хотя бы \(n\) кусочков.

B. Два стола

Перебор *1300

Рассмотрим прямоугольную комнату, стороны которой параллельны осям координат, с шириной \(W\) и высотой \(H\), левым нижним углом в точке \((0, 0)\) и правым верхним углом в точке \((W, H)\).

В этой комнате стоит прямоугольный стол. Стороны стола параллельны сторонам комнаты, левый нижний угол стола находится в точке \((x_1, y_1)\), а правый верхний — в точке \((x_2, y_2)\).

Вы хотите поставить в эту комнату еще один прямоугольный стол с шириной \(w\) и высотой \(h\) так, чтобы сторона, соответствующая ширине стола, была параллельна стороне комнаты, соответствующей ее ширине.

К сожалению, иногда невозможно поставить новый стол так, чтобы он не имел общую площадь с уже стоящим в комнате столом (столы могут касаться, но не должны иметь общей площади).

Вы не можете поворачивать столы, но вы можете перемещать первый стол внутри комнаты.

Пример перемещения первого стола в комнате.

На какое минимальное расстояние нужно сдвинуть первый стол так, чтобы в комнату можно было поставить второй стол?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

В первой строке набора входных данных заданы два целых числа \(W\) и \(H\) (\(1 \le W, H \le 10^8\)) — ширина и высота комнаты.

Во второй строке набора входных данных заданы четыре целых числа \(x_1\), \(y_1\), \(x_2\) и \(y_2\) (\(0 \le x_1 < x_2 \le W\); \(0 \le y_1 < y_2 \le H\)) — координаты углов первого стола.

В третьей строке набора входных данных заданы два целых числа \(w\) и \(h\) (\(1 \le w \le W\); \(1 \le h \le H\)) — ширина и высота второго стола.

Выходные данные

Для каждого набора входных данных выведите минимальное расстояние, на которое нужно передвинуть первый стол, или \(-1\), если в любом случае не получится поставить в комнату второй стол.

Ваш ответ будет засчитан как правильный, если его абсолютная или относительная ошибка относительно правильного ответа не превосходит \(10^{-6}\).

Примечание

Стартовая конфигурация первого набора входных данных примера показана на картинке, но перемещение не является оптимальным. Оптимально будет, например, сместить первый стол на вектор \((0, -1)\), чтобы левый нижний угол сместился с \((2, 1)\) на \((2, 0)\). Тогда второй стол можно поставить по координатам \((0, 3)-(4, 5)\).

Во втором наборе входных данных невозможно поставить второй стол в комнату, как бы мы ни перемещали первый.

В третьем наборе входных данных можно сместить стол на вектор \((0, 2)\), чтобы левый нижний угол переместился из \((0, 3)\) в \((0, 5)\).

C. Ряды монет

дп Конструктив Перебор реализация *1300

Алиса и Боб играют в игру на матрице, состоящей из \(2\) строк и \(m\) столбцов. В ячейке в \(i\)-й строке в \(j\)-м столбце лежит \(a_{i, j}\) монет.

Изначально Алиса и Боб стоят в ячейке \((1, 1)\). Они собираются пройти какой-то последовательностью ходов в ячейку \((2, m)\).

Возможные ходы следующие:

  • Пойти направо — из некоторой ячейки \((x, y)\) в \((x, y + 1)\);
  • Пойти вниз — из некоторой ячейки \((x, y)\) в \((x + 1, y)\).

Сначала Алиса делает все свои ходы, пока не достигнет \((2, m)\). Она собирает монеты во всех клетках, которые они посещает (включая стартовую).

Когда Алиса заканчивает, Боб начинает свой путь. Он также делает ходы, чтобы достичь \((2, m)\), и собирает монеты во всех клетках, которые он посетил, а Алиса нет.

Счет в игре равен суммарному количеству монет, которые собрал Боб.

Алиса хочет минимизировать счет. Боб хочет максимизировать счет. Какой будет счет в игре, если оба игрока играют оптимально?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Затем следуют описания \(t\) наборов входных данных.

В первой строке каждого набора записано одно целое число \(m\) (\(1 \le m \le 10^5\)) — количество столбцов в матрице.

В \(i\)-й из следующих \(2\) строк записаны \(m\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,m}\) (\(1 \le a_{i,j} \le 10^4\)) — количество монет в ячейке в \(i\)-м ряду в \(j\)-м столбце матрицы.

Сумма \(m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — счет игры, если оба игрока играют оптимально.

Примечание

Пути для наборов входных данных из примеров изображены ниже. Путь Алисы раскрашен красным, а путь Боба — синим.

D. Скажите палиндромам - нет!

дп Конструктив Перебор Строки *1600

Назовем строку красивой, если в ней нет подстроки длины хотя бы \(2\), которая является палиндромом. Напомним, что палиндром — это строка, читающаяся одинаково от первого символа к последнему и от последнего символа к первому. Например, строки a, bab, acca, bcabcbacb являются палиндромами, а строки ab, abbbaa, cccb — нет.

Определим стоимость строки, как минимальное количество операций, чтобы строка стала красивой, если за одну операцию разрешено изменить любой символ строки на одну из первых \(3\) букв латинского алфавита (в нижнем регистре).

Вам задана строка \(s\) длины \(n\), каждый символ строки — одна из первых \(3\) букв латинского алфавита (в нижнем регистре).

Вам предстоит ответить на \(m\) запросов — вычислите стоимость подстроки строки \(s\) с \(l_i\)-й по \(r_i\)-ю позицию включительно.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — длина строки \(s\) и количество запросов.

Вторая строка содержит строку \(s\), она состоит из \(n\) символов, каждый из которых является одной из первых \(3\) латинских букв.

Следующие \(m\) строк содержат два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — параметры \(i\)-го запроса.

Выходные данные

Для каждого запроса выведите одно целое число — стоимость подстроки строки \(s\) с \(l_i\)-й по \(r_i\)-ю позицию включительно.

Примечание

Рассмотрим запросы в примере из условия.

  • в первом запросе интересующая нас подстрока — baa, ее можно превратить в bac за одну операцию;
  • во втором запросе интересующая нас подстрока — baacb, ее можно превратить в cbacb за две операции;
  • в третьем запросе интересующая нас подстрока — cb, ее можно оставить без изменений;
  • в четвертом запросе интересующая нас подстрока — aa, ее можно превратить в ba за одну операцию.

C. Сжатая скобочная последовательность

Перебор реализация *1800

У Василия есть его любимая скобочная последовательность. Так как последовательность имеет внушительный размер, Василий предоставил вам ее в виде последовательности положительных чисел \(c_1, c_2, \dots, c_n\), где \(c_i\) обозначает количество подряд идущих скобок «(» в случае, если \(i\) — нечетное число, либо количество подряд идущих скобок «)» в случае, если \(i\) — четное число.

К примеру, скобочной последовательности «((())()))» соответствует последовательность \([3, 2, 1, 3]\).

Вам необходимо найти количество подотрезков \([l, r]\) (\(l \le r\)) оригинальной скобочной последовательности, которые являются правильными скобочными последовательностями.

Напомним, что правильной скобочной последовательностью называется скобочная последовательность, которую можно преобразовать в корректное арифметическое выражение путем вставок между ее символами символов «1» и «+». Например, скобочные последовательности «(())()», «()» и «(()(()))» — правильные, а «)(», «(()» и «(()))(» — нет.

Входные данные

Первая строка ввода содержит целое число \(n\) \((1 \le n \le 1000)\) — размер сжатой последовательности.

Вторая строка ввода содержит последовательность целых чисел \(c_1, c_2, \dots, c_n\) \((1 \le c_i \le 10^9)\) — описание сжатой скобочной последовательности.

Выходные данные

Выведите одно целое число — количество отрезков оригинальной скобочной последовательности, которые являются правильными скобочными последовательностями.

Можно показать, что ответ помещается в знаковый 64-битный целочисленный тип данных.

Примечание

В первом тестовом примере описана скобочная последовательность (((()(()))(. В этой скобочной последовательности есть \(5\) отрезков, которые являются правильными скобочными последовательностями:

  1. Отрезок с \(3\) по \(10\) символ: (()(()))
  2. Отрезок с \(4\) по \(5\) символ: ()
  3. Отрезок с \(4\) по \(9\) символ: ()(())
  4. Отрезок с \(6\) по \(9\) символ: (())
  5. Отрезок с \(7\) по \(8\) символ: ()

Во втором тестовом примере описана скобочная последовательность ()))(()(()))).

В третьем тестовом примере описана скобочная последовательность ()()(()).

A. Ezzat и две подпоследовательности

математика Перебор сортировки *800

У Ezzat есть массив целых (возможно, отрицательных) чисел длины \(n\). Он хочет разделить его на две непустые подпоследовательности \(a\) и \(b\) так, чтобы каждый элемент массива принадлежал ровно одной подпоследовательности, и значение \(f(a) + f(b)\) было максимально возможным. Здесь \(f(x)\) обозначает среднее арифметическое всех элементов \(x\).

Последовательность \(x\) является подпоследовательностью \(y\), если \(x\) может быть получена из \(y\) удалением нескольких (возможно, ни одного или всех) элементов.

Среднее арифметическое чисел последовательности это сумма всех чисел последовательности, деленная на их количество.

Например, среднее арифметическое \([1,5,6]\) это \((1+5+6)/3 = 12/3 = 4\), таким образом, \(f([1,5,6]) = 4\).

Входные данные

Во входных данных находятся несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^3\)). Каждый набор входных данных описывается двумя строками.

В первой строке содержится целое число \(n\) (\(2 \le n \le 10^5\)) — размер массива Ezzat.

Во второй строке содержится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем тестам не превосходит \(3\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимальное значение, которое может получить Ezzat.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

В первом примере массив \([3, 1, 2]\). Ниже приведены все способы разбить его на две непустые подпоследовательности:

  • \(a = [3]\), \(b = [1,2]\), значит \(f(a) + f(b) = 3 + 1.5 = 4.5\).
  • \(a = [3,1]\), \(b = [2]\), значит \(f(a) + f(b) = 2 + 2 = 4\).
  • \(a = [3,2]\), \(b = [1]\), значит \(f(a) + f(b) = 2.5 + 1 = 3.5\).
Таким образом, максимальное значение \(4.5\).

Во втором примере массив \([-7, -6, -6]\). Ниже приведены все способы разбить его на две непустые подпоследовательности:

  • \(a = [-7]\), \(b = [-6,-6]\), значит \(f(a) + f(b) = (-7) + (-6) = -13\).
  • \(a = [-7,-6]\), \(b = [-6]\), значит \(f(a) + f(b) = (-6.5) + (-6) = -12.5\).
Таким образом, максимальное значение \(-12.5\).

E. Шахматы в Assiut

интерактив Конструктив Перебор *2800

Это интерактивная задача.

ICPC Assiut Community решили провести уникальное соревнование по шахматам, и вы были выбраны для того, чтобы контролировать ферзя и выслеживать прячущегося короля. Его, в свою очередь, будут контролировать члены ICPC Assiut Community.

Вы играете на шахматной доске \(8\times8\), строки которой нумеруются сверху вниз, а столбцы — слева направо. Клетка в строке \(x\) и столбце \(y\) обозначается как \((x, y)\).

За один ход вы можете переместить ферзя на любую клетку на той же горизонтали, вертикали или любой из двух диагоналей. Например, если ферзь был в клетке (\(4\), \(5\)), вы можете переместиться на (\(q_1\), \(5\)), (\(4\), \(q_1\)), (\(q_1\), \(9-q_1\)) или (\(q_2\), \(q_2+1\)), где (\(1 \le q_1 \le 8\), \(q_1 \ne 4\), \(1 \le q_2 \le 7\), \(q_2 \ne 4\)). Заметьте, что ферзь не может оставаться на месте.

За один ход король может переместиться «Вправо», «Влево», «Вверх», «Вниз», «Вниз-Вправо», «Вниз-Влево», «Вверх-Влево», или «Вверх-Вправо» так, чтобы оставаться на доске. Король не может ходить в клетку, находящуюся на одной горизонтали, вертикали или диагонали с ферзем (включая клетку, где стоит ферзь). Например, если король был на клетке (\(4\), \(5\)), он может сходить в (\(4+k_1\), \(5+k_2\)) где (\(-1 \le k_1,k_2 \le 1\), \((k_1, k_2) \ne (0, 0)\)).

В начале игры вы должны разместить ферзя на любую клетку на доске. После этого король тайно размещается на одной из свободных клеток. Вы не знаете позиции короля. Затем, король и ферзь по очереди делают ходы. Король ходит первый. Ходы короля проходят в одном из возможных направлений («Вправо», «Вниз», «Вверх-Влево», и т.д.). Вам будет известно только направление хода. После этого вы должны совершить ход ферзем. Для этого сообщите клетку, на которую вы хотите сходить. Игра продолжается до тех пор, пока вы не выиграете или у вас не закончатся ходы.

Вы выигрываете, если у короля нет доступных ходов. Вы проигрываете после \(130\) ходов ферзя, если король имеет доступный ход.

Входные данные

В первой строке содержится целое число \(t\) (\(1 \le t \le 60\)) — количество наборов входных данных.

Протокол взаимодействия

В каждом наборе входных данных сначала выведите стартовую позицию ферзя. Если вы поставите его в клетку с королем - вы сразу победите.

После этого вы можете сделать не более \(130\) ходов. Каждый ход делается в формате \(x\) \(y\), где \(x\) и \(y\) — это два целых числа (\(1 \leq x,y \leq 8\)), обозначающих строку и столбец новой позиции ферзя. Ваши ходы должны быть корректными ходами ферзя.

После изначального размещения ферзя и после каждого вашего хода считайте строку \(s\), которая обозначает направление хода короля. Это будет одна из следующих строк: «Right», «Left», «Up», «Down», «Down-Right», «Down-Left», «Up-Left», «Up-Right», или «Done», если вы победили в игре. Вы должны расценивать «Done» как конец очередного набора входных данных.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Если в любой момент времени вы совершите недопустимый ход или сделаете более \(130\) ходов, игра завершится моментально и вы получите вердикт Неправильный ответ.

Примечание

В примере король находится в клетке \((8, 8)\) в начале. Игра проходит следующим образом:

A. Очарованные игрой

математика Перебор *1300

Алиса и Борис играют в теннис.

Теннисный матч состоит из геймов. В каждом гейме один из игроков подаёт, другой — принимает.

Игроки подают по очереди: за геймом, в котором подаёт Алиса, всегда следует гейм, в котором подаёт Борис, и наоборот.

Каждый гейм заканчивается победой одного из игроков. Если гейм выигрывает подающий игрок, говорят, что этот игрок взял подачу. Если принимающий — говорят, что этот игрок сделал брейк.

Известно, что за матч Алиса выиграла \(a\) геймов, а Борис выиграл \(b\) геймов. Неизвестно, кто первый подавал и кто какие геймы выиграл.

Найдите все такие значения \(k\), что за матч Алисы и Бориса могло быть сделано в сумме ровно \(k\) брейков.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Каждая из следующих \(t\) строк описывает один набор входных данных и содержит два целых числа \(a\) и \(b\) (\(0 \le a, b \le 10^5\); \(a + b > 0\)) — число геймов, выигранных Алисой и Борисом, соответственно.

Гарантируется, что сумма значений \(a + b\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки.

В первой строке выведите целое число \(m\) (\(1 \le m \le a + b + 1\)) — число различных значений \(k\) таких, что за матч могло быть сделано ровно \(k\) брейков.

Во второй строке выведите \(m\) различных целых чисел \(k_1, k_2, \ldots, k_m\) (\(0 \le k_1 < k_2 < \ldots < k_m \le a + b\)) — искомые значения \(k\) в возрастающем порядке.

Примечание

В первом наборе входных данных за матч могло быть сделано любое число брейков от \(0\) до \(3\):

  • Алиса берёт подачу, Борис берёт подачу, Алиса берёт подачу: \(0\) брейков;
  • Борис берёт подачу, Алиса берёт подачу, Алиса делает брейк: \(1\) брейк;
  • Борис делает брейк, Алиса делает брейк, Алиса берёт подачу: \(2\) брейка;
  • Алиса делает брейк, Борис делает брейк, Алиса делает брейк: \(3\) брейка.

Во втором наборе входных данных игроки могли либо каждый взять свою подачу (\(0\) брейков), либо обменяться брейками (\(2\) брейка).

В третьем наборе входных данных могло быть сделано либо \(2\), либо \(3\) брейка:

  • Борис берёт подачу, Борис делает брейк, Борис берёт подачу, Борис делает брейк, Борис берёт подачу: \(2\) брейка;
  • Борис делает брейк, Борис берёт подачу, Борис делает брейк, Борис берёт подачу, Борис делает брейк: \(3\) брейка.

B. Верхняя ячейка

дп математика Перебор теория чисел *1900

Обратите внимание, что ограничение по памяти в этой задаче ниже, чем в других.

У вас есть вертикальная полоска из \(n\) ячеек, последовательно пронумерованных сверху вниз от \(1\) до \(n\).

У вас также есть токен, изначально расположенный в ячейке \(n\). Вы будете двигать токен вверх до тех пор, пока он не окажется в ячейке \(1\).

Пусть в некоторый момент токен находится в ячейке \(x > 1\). Один сдвиг токена может иметь любой из следующих двух видов:

  • Вычитание: вы выбираете целое число \(y\) от \(1\) до \(x-1\) включительно и перемещаете токен из ячейки \(x\) в ячейку \(x - y\).
  • Деление с округлением вниз: вы выбираете целое число \(z\) от \(2\) до \(x\) включительно и перемещаете токен из ячейки \(x\) в ячейку \(\lfloor \frac{x}{z} \rfloor\) (частное от деления \(x\) на \(z\) с округлением вниз).

Найдите число способов, которыми токен может добраться из ячейки \(n\) в ячейку \(1\) за один или более сдвигов, и выведите это число по модулю \(m\). Обратите внимание, что если есть несколько способов переместить токен из одной ячейки в другую за один сдвиг, все эти способы считаются различными (смотрите пояснение к примерам для лучшего понимания).

Входные данные

Единственная строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 4 \cdot 10^6\); \(10^8 < m < 10^9\); \(m\) — простое число) — длину полоски и число, по модулю которого необходимо вычислить ответ.

Выходные данные

Выведите число способов для токена добраться из ячейки \(n\) в ячейку \(1\), по модулю \(m\).

Примечание

В первом тесте есть три способа добраться из ячейки \(3\) в ячейку \(1\) за один сдвиг: с помощью вычитания \(y = 2\), а также с помощью деления на \(z = 2\) или \(z = 3\).

Также есть два способа добраться из ячейки \(3\) в ячейку \(1\) через ячейку \(2\): сначала вычесть \(y = 1\), а потом либо снова вычесть \(y = 1\), либо поделить на \(z = 2\).

Таким образом, всего способов пять.

D1. Mocha и Diana (простая версия)

графы Деревья жадные алгоритмы Конструктив Перебор снм *1400

Это простая версия задачи. Две версии отличаются ограничениями на \(n\). Вы можете делать взломы, только если обе версии задачи решены.

Лесом называется неориентированный граф без циклов (не обязательно связный).

Mocha и Diana — друзья из Чжицзяна, у каждой из них есть лес с вершинами, пронумерованными от \(1\) до \(n\), и они хотят добавить ребра в свои леса с выполнением следующих условий:

  • После добавления ребер каждый из графов остается лесом.
  • Они добавляют одинаковые ребра. Это значит, что если ребро \((u, v)\) добавляется в лес Mocha, то также ребро \((u, v)\) добавляется в лес Diana, и наоборот.

Mocha и Diana хотят знать, какое максимальное количество ребер они могут добавить, и какие ребра им нужно добавлять.

Входные данные

Первая строка содержит три целых числа \(n\), \(m_1\) и \(m_2\) (\(1 \le n \le 1000\), \(0 \le m_1, m_2 < n\)) — количество вершин и начальное количество ребер в лесе Mocha и в лесе Diana, соответственно.

Каждая из следующих \(m_1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра в лесе Mocha.

Каждая из следующих \(m_2\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра в лесе Diana.

Выходные данные

Первая строка содержит одно целое число \(h\) — максимальное количество ребер, которое можно добавить в каждый из лесов Mocha и Diana.

Каждая из следующих \(h\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра, которые нужно добавить.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере нельзя добавить ни одно ребро.

Во втором примере начальные леса выглядят следующим образом.

Можно добавить ребро \((2, 4)\).

D2. Mocha и Diana (сложная версия)

графы Деревья жадные алгоритмы Конструктив Перебор поиск в глубину и подобное снм *2500

Это сложная версия задачи. Две версии отличаются ограничениями на \(n\). Вы можете делать взломы, только если обе версии задачи решены.

Лесом называется неориентированный граф без циклов (не обязательно связный).

Mocha и Diana — друзья из Чжицзяна, у каждой из них есть лес с вершинами, пронумерованными от \(1\) до \(n\), и они хотят добавить ребра в свои леса с выполнением следующих условий:

  • После добавления ребер каждый из графов остается лесом.
  • Они добавляют одинаковые ребра. Это значит, что если ребро \((u, v)\) добавляется в лес Mocha, то также ребро \((u, v)\) добавляется в лес Diana, и наоборот.

Mocha и Diana хотят знать, какое максимальное количество ребер они могут добавить, и какие ребра им нужно добавлять.

Входные данные

Первая строка содержит три целых числа \(n\), \(m_1\) и \(m_2\) (\(1 \le n \le 10^5\), \(0 \le m_1, m_2 < n\)) — количество вершин и начальное количество ребер в лесе Mocha и в лесе Diana, соответственно.

Каждая из следующих \(m_1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра в лесе Mocha.

Каждая из следующих \(m_2\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра в лесе Diana.

Выходные данные

Первая строка содержит одно целое число \(h\) — максимальное количество ребер, которое можно добавить в каждый из лесов Mocha и Diana.

Каждая из следующих \(h\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра, которые нужно добавить.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере нельзя добавить ни одно ребро.

Во втором примере начальные леса выглядят следующим образом.

Можно добавить ребро \((2, 4)\).

A. Сообщение

Перебор *1700

Доктор Мориарти посылает сообщение Шерлоку Холмсу. В его распоряжении имеется строка s.

Строка p называется подстрокой строки s, если ее можно прочитать, начиная с некоторой позиции в строке s. Например, у строки «aba» есть шесть подстрок: «a», «b», «a», «ab», «ba», «aba».

Доктор Мориарти планирует вырезать из строки s некоторую подстроку, назовем ее t. Потом он должен ноль или более раз изменить вырезанную подстроку t. В результате должна получиться фиксированная строка u (именно ее нужно отправить Шерлоку Холмсу). За одно изменение считается одно из следующих действий:

  • Вставить одну букву с любого конца строки.
  • Удалить одну букву с любого конца строки.
  • Заменить одну любую букву на любую другую.

Мориарти очень умен, поэтому после выбора какой-то подстроки t он всегда делает минимальное количество изменений, чтобы получить u.

Помогите Мориарти выбрать среди всех подстрок строки s наилучшую подстроку t такую, что количество сделанных им изменений для получения из нее строки u будет минимально.

Входные данные

В первой строке дана непустая строка s, состоящая из строчных букв латинского алфавита. Во второй строке дана непустая строка u, состоящая из строчных букв латинского алфавита. Длины обоих строк находятся в пределах от 1 до 2000 включительно.

Выходные данные

Выведите единственное число — минимальное количество изменений, которые придется выполнить доктору Мориарти с подстрокой, которую Вы выберете.

Примечание

В первом примере Мориарти может взять любую подстроку длины 3, и она будет равна требуемому сообщению u, так что никаких изменений Мориарти делать не придется.

Во втором примере надо взять подстроку, состоящую из символов со второго по четвертый («bca») или с пятого по шестой («bc»). Тогда придется сделать всего одно изменение: заменить или добавить последний символ.

В третьем примере исходная строка s не содержит ни одного символа, который должен быть в сообщении, так что, какую подстроку не возьми, придется сделать как минимум 7 изменений, чтобы получить требуемое сообщение.

E. Оладьи миссис Хадсон

дп Перебор *3000

Миссис Хадсон давно не пекла свои знаменитые оладьи, и вот, наконец, решила испечь их вновь. Недавно она узнала m новых рецептов, и ей не терпится их опробовать. Эти рецепты основываются на n особых приправах. На кухне у миссис Хадсон все эти приправы лежат в баночках, пронумерованных целыми числами от 0 до n - 1 (каждая приправа лежит в своей баночке). На каждой баночке также написана цена соответствующей приправы — некоторое целое число ai.

Для i-ого рецепта оладий известно три величины: di, si, ci. Здесь di и ci — целые числа, а siшаблон некоторого целого числа, записанного в системе счисления с основанием di. Шаблон содержит цифры, латинские буквы (для обозначения цифр больше девяти) и знаки вопроса. Число x в di-ичной системе счисления подходит под шаблон si, если в шаблоне можно заменить знаки вопроса на цифры и буквы так, чтобы получилось число x (лидирующие нули не учитываются при сравнении). Более формально: каждый знак вопроса нужно заменить ровно одной цифрой или буквой. Если после замены всех вопросов получилось число с лидирующими нулями, эти нули можно отбросить. Например, число 40A9875 в 11-ичной системе счисления подходит под шаблон «??4??987?», а число 4A9875 — не подходит.

Чтобы приготовить оладьи по i-ому рецепту, необходимо взять все баночки, номера которых, переведенные в di-ичную систему счисления, подходят под шаблон si. Контрольным числом рецепта (zi) называется сумма числа ci и произведения цен всех взятых баночек. Более формально: (где j — все такие числа, которые в системе счисления с основанием di подходят под шаблон si). Если ни одна из баночек не подходит под шаблон, то произведение равно 1, а контрольное число равно ci + 1.

Миссис Хадсон не так интересны сами контрольные числа, как их минимальные простые делители. Ваша задача — найти для каждого рецепта i минимальный простой делитель числа zi. Если этот делитель больше 100, то его искать не требуется — выведите -1.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 104). Во второй строке через пробел перечислены цены приправ a0, a1, ..., an - 1, где ai — целое число (1 ≤ ai ≤ 1018).

В третьей строке записано единственное целое число m (1 ≤ m ≤ 3·104) — количество рецептов, которые узнала миссис Хадсон.

В следующих m строках описаны рецепты, по одному на каждой строке. Сначала задано целое число di, записанное в десятичной системе исчисления (2 ≤ di ≤ 16). Далее, через пробел, записан шаблон si — строка длиной от 1 до 30 включительно, состоящая из цифр от «0» до «9», букв от «A» до «F» и знаков «?». Буквы от «A» до «F» следует считать цифрами от 10 до 15 соответственно. Гарантируется, что все цифры шаблона (в том числе, обозначаемые буквами) строго меньше, чем di. Далее, через пробел, задано целое число ci, записанное в десятичной системе исчисления (1 ≤ ci ≤ 1018).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Выходные данные

Для каждого рецепта посчитайте, на какое минимальное простое число делится контрольное число в этом рецепте, и выведите это простое число в отдельной строке. Если это число окажется больше 100, выведите -1.

Примечание

В первом тесте подходит любой однозначный номер в двоичной системе исчисления. Банка всего одна и ее цена равна 1, число c тоже равно 1, контрольное число равна 2. Минимальный простой делитель числа 2 равен 2.

Во втором тесте есть 4 баночки с номерами от 0 до 3, и цены равны 2, 3, 5 и 7, соответственно — первые четыре простых числа. Во всех рецептах номера должны быть двухзначные. В первом рецепте вторая цифра обязательно 0, во втором — вторая цифра обязательно 1, в третьем варианте — первая цифра обязательно 0, в четвертом — первая цифра обязательно 1. Следовательно, контрольные числа получаются: в первом варианте 2 × 5 + 11 = 21 (минимальный простой делитель — 3); во втором варианте 3 × 7 + 13 = 44 (минимальный простой делитель — 2); в третьем варианте 2 × 3 + 17 = 23 (минимальный простой делитель — 23) и, наконец, в четвертом варианте 5 × 7 + 19 = 54 (минимальный простой делитель — 2).

В третьем тесте номер должен быть четырнадцатизначным числом в шестандцатиричной системе исчисления. Номер 0 (номер единственной баночки) подходит, контрольное число будет будет равна 1018 + 1. Минимальный простой делитель этого числа равен 101, вывести надо -1.

F1. Ближайшее красивое число (упрощённая версия)

Бинарный поиск битмаски жадные алгоритмы Конструктив Перебор поиск в глубину и подобное *1900

Это упрощённая версия задачи F2. Они отличаются только ограничениями (F1: \(k \le 2\), F2: \(k \le 10\)).

Дано число \(n\). Найдите минимальное целое число \(x\) такое, что \(x \ge n\) и \(x\) является \(k\)-красивым числом.

Число называется \(k\)-красивым, если в его десятичной записи, не содержащей лидирующих нулей, встречается не более \(k\) различных цифр. Например, если \(k = 2\), числа \(3434443\), \(55550\), \(777\) и \(21\) являются \(k\)-красивыми, а числа \(120\), \(445435\) и \(998244353\) — нет.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(1 \le n \le 10^9\), \(1 \le k \le 2\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(x\) — минимальное целое \(k\)-красивое число, так чтобы \(x \ge n\).

F2. Ближайшее красивое число (усложнённая версия)

битмаски дп жадные алгоритмы Конструктив Перебор поиск в глубину и подобное *2100

Это усложнённая версия задачи F1. Они отличаются только ограничениями (F1: \(k \le 2\), F2: \(k \le 10\)).

Дано число \(n\). Найдите минимальное целое число \(x\) такое, что \(x \ge n\) и \(x\) является \(k\)-красивым числом.

Число называется \(k\)-красивым, если в его десятичной записи, не содержащей лидирующих нулей, встречается не более \(k\) различных цифр. Например, если \(k = 2\), числа \(3434443\), \(55550\), \(777\) и \(21\) являются \(k\)-красивыми, а числа \(120\), \(445435\) и \(998244353\) — нет.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(1 \le n \le 10^9\), \(1 \le k \le 10\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(x\) — минимальное целое \(k\)-красивое число, так чтобы \(x \ge n\).

A. Простая странная сортировка

Перебор реализация сортировки *800

У вас есть перестановка — массив \(a = [a_1, a_2, \ldots, a_n]\) из различных целых чисел от \(1\) до \(n\). Длина перестановки \(n\) нечётна.

Рассмотрим следующий алгоритм сортировки перестановки по возрастанию.

Вспомогательная процедура алгоритма, \(f(i)\), принимает на вход индекс \(i\) (\(1 \le i \le n-1\)) и делает следующее. Если \(a_i > a_{i+1}\), значения \(a_i\) и \(a_{i+1}\) меняются местами. В противном случае перестановка остаётся без изменений.

Алгоритм состоит из итераций, пронумерованных последовательными целыми числами, начиная с \(1\). На \(i\)-й итерации алгоритм делает следующее:

  • если \(i\) нечётно, вызываются \(f(1), f(3), \ldots, f(n - 2)\);
  • если \(i\) чётно, вызываются \(f(2), f(4), \ldots, f(n - 1)\).

Можно доказать, что после конечного числа итераций перестановка станет отсортирована по возрастанию.

Через сколько итераций это впервые произойдёт?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 999\); \(n\) нечётно) — длину перестановки.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — саму перестановку.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(999\).

Выходные данные

Для каждого набора входных данных выведите число итераций, после которого заданная перестановка впервые окажется отсортирована по возрастанию.

Если заданная перестановка уже отсортирована, выведите \(0\).

Примечание

В первом наборе входных данных перестановка будет меняться следующим образом:

  • после \(1\)-й итерации: \([2, 3, 1]\);
  • после \(2\)-й итерации: \([2, 1, 3]\);
  • после \(3\)-й итерации: \([1, 2, 3]\).

Во втором наборе входных данных перестановка будет меняться следующим образом:

  • после \(1\)-й итерации: \([4, 5, 1, 7, 2, 3, 6]\);
  • после \(2\)-й итерации: \([4, 1, 5, 2, 7, 3, 6]\);
  • после \(3\)-й итерации: \([1, 4, 2, 5, 3, 7, 6]\);
  • после \(4\)-й итерации: \([1, 2, 4, 3, 5, 6, 7]\);
  • после \(5\)-й итерации: \([1, 2, 3, 4, 5, 6, 7]\).

В третьем наборе входных данных перестановка уже отсортирована, поэтому ответ равен \(0\).

D1. Верхняя ячейка (упрощенная версия)

дп математика Перебор Структуры данных теория чисел *1700

Эта версия задачи отличается от следующей только ограничением на \(n\).

Обратите внимание, что ограничение по памяти в этой задаче ниже, чем в других.

У вас есть вертикальная полоска из \(n\) ячеек, последовательно пронумерованных сверху вниз от \(1\) до \(n\).

У вас также есть токен, изначально расположенный в ячейке \(n\). Вы будете двигать токен вверх до тех пор, пока он не окажется в ячейке \(1\).

Пусть в некоторый момент токен находится в ячейке \(x > 1\). Один сдвиг токена может иметь любой из следующих двух видов:

  • Вычитание: вы выбираете целое число \(y\) от \(1\) до \(x-1\) включительно и перемещаете токен из ячейки \(x\) в ячейку \(x - y\).
  • Деление с округлением вниз: вы выбираете целое число \(z\) от \(2\) до \(x\) включительно и перемещаете токен из ячейки \(x\) в ячейку \(\lfloor \frac{x}{z} \rfloor\) (частное от деления \(x\) на \(z\) с округлением вниз).

Найдите число способов, которыми токен может добраться из ячейки \(n\) в ячейку \(1\) за один или более сдвигов, и выведите это число по модулю \(m\). Обратите внимание, что если есть несколько способов переместить токен из одной ячейки в другую за один сдвиг, все эти способы считаются различными (смотрите пояснение к примерам для лучшего понимания).

Входные данные

Единственная строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\); \(10^8 < m < 10^9\); \(m\) — простое число) — длину полоски и число, по модулю которого необходимо вычислить ответ.

Выходные данные

Выведите число способов для токена добраться из ячейки \(n\) в ячейку \(1\), по модулю \(m\).

Примечание

В первом тесте есть три способа добраться из ячейки \(3\) в ячейку \(1\) за один сдвиг: с помощью вычитания \(y = 2\), а также с помощью деления на \(z = 2\) или \(z = 3\).

Также есть два способа добраться из ячейки \(3\) в ячейку \(1\) через ячейку \(2\): сначала вычесть \(y = 1\), а потом либо снова вычесть \(y = 1\), либо поделить на \(z = 2\).

Таким образом, всего способов пять.

B. Scenes From a Memory

Конструктив математика Перебор реализация теория чисел *1000

Во время сеанса гипноза Николас неожиданно вспомнил целое положительное число \(n\), не содержащее нулей в десятичной записи.

Вскоре, когда он уже вернулся домой, ему стало интересно: какое максимальное количество цифр можно удалить из числа так, чтобы оно стало не простым, то есть либо составным, либо равным единице? Помогите ему найти ответ!

Для некоторых чисел сделать это невозможно: например, для числа \(53\) невозможно удалить некоторые из его цифр, чтобы получить не простое целое число. Однако, для всех \(n\) в тестах этой задачи гарантируется, что можно удалить некоторые из их цифр, чтобы получить не простое число.

Из числа нельзя удалять все цифры.

Простым называется число, которое не имеет никаких делителей, кроме единицы и самого себя. Составным называется число, которое имеет более двух делителей. \(1\) не является ни простым, ни составным числом.

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находится одно целое положительное число \(k\) (\(1 \le k \le 50\)) — количество цифр в числе.

Во второй строке каждого набора входных данных находится целое положительное число \(n\), не содержащее нулей в десятичной записи (\(10^{k-1} \le n < 10^{k}\)). Гарантируется, что из числа можно удалить менее, чем \(k\) цифр, чтобы оно стало не простым.

Гарантируется, что сумма \(k\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите в отдельных двух строках выведите два числа: количество цифр, которое вы оставили в первой строке, и оставшееся после удалений число во второй.

Если существует несколько правильных вариантов ответа, вы можете вывести любой.

Примечание

В первом наборе входных данных нельзя удалить \(2\) цифры из числа \(237\), так как все числа \(2\), \(3\) и \(7\) являются простыми. Однако вы можете удалить \(1\) цифру, получив число \(27 = 3^3\).

Во втором наборе входных данных можно удалить все цифры, кроме одной, так как \(4 = 2^2\) — составное число.

E. Восстановление турнирной таблицы

meet-in-the-middle битмаски Перебор реализация хэши *2600

\(2^k\) команд участвуют в плей-офф турнире. Турнир состоит из \(2^k - 1\) игры. Они проводятся следующим образом: во-первых, команды делятся на пары: команда \(1\) играет против команды \(2\), команда \(3\) играет против команды \(4\) (именно в таком порядке) и так далее (таким образом, в этой фазе будет сыграно \(2^{k-1}\) игры). Когда команда проигрывает игру, она выбывает, и каждая игра приводит к выбыванию одной команды (нет ничьих). После этого остается \(2^{k-1}\) команд. Если остается только одна команда, она объявляется чемпионом; в противном случае играется еще \(2^{k-2}\) игр: в первой из них победитель игры «\(1\) против \(2\)» играет против победителя игры «\(3\) против \(4\)», затем победитель игры «\(5\) против \(6\)» играет против победителя игры «\(7\) против \(8\)» и так далее. Этот процесс повторяется до тех пор, пока не останется только одна команда.

Место команды в турнире зависит от того, в какой фазе турнира она выбыла:

  • команда-победитель турнира занимает место \(1\);
  • команда, выбывшая в финале, занимает место \(2\);
  • обе команды, выбывшие в полуфинале, занимают место \(3\);
  • все команды, выбывшие в четвертьфинале, занимают место \(5\);
  • все команды, выбывшие в 1/8 финала, занимают место \(9\), и так далее.

Например, на этой картинке показан возможный ход турнира при \(k = 3\), а также итоговые места команд при таком ходе турнира:

После окончания турнира, который проходил по этим правилам, его результаты были закодированы следующим образом. Пусть \(p_i\) — место, которое заняла \(i\)-я команда. Хэш турнира \(h\) считается по формуле \(h = (\sum \limits_{i=1}^{2^k} i \cdot A^{p_i}) \bmod 998244353\), где \(A\) — некоторое заданное целое число.

К сожалению, из-за сбоя системы почти вся информация о прошедшем турнире была утеряна. Остались только значения \(k\), \(A\) и \(h\). Вам нужно по этим трем числам восстановить, какое место заняла какая команда (если это вообще возможно).

Входные данные

В единственной строке заданы три числа \(k\), \(A\) и \(h\) (\(1 \le k \le 5\); \(100 \le A \le 10^8\); \(0 \le h \le 998244352\)).

Выходные данные

Если распределения команд по местам, удовлетворяющего всем требованиям, не существует, выведите \(-1\).

Иначе выведите \(2^k\) чисел, \(i\)-е из которых должно быть равно \(p_i\) (месту, занятому \(i\)-й командой). Обратите внимание: ваш ответ должен быть корректным вариантом результатов турнира, проводимого по описанным правилам; кроме того, структура турнира является фиксированной (например, команды \(1\) и \(2\) всегда играют между собой в первой фазе турнира). Если существует несколько способов восстановить места, занятые командами, выведите любой из них.

Примечание

Турнир из первого примера описан на картинке в условии.

Для третьего примера, если выбрать расстановку команд по местам \([1, 2, 3, 3]\) (команда \(1\) занимает место \(1\), команда \(2\) занимает место \(2\), команды \(3\) и \(4\) занимают место \(3\)), можно получить хэш турнира, равный \(7020100\) (при \(A = 100\)). Однако такое распределение мест не может быть результатом турнира, потому что команды \(1\) и \(2\) обязательно должны играть друг с другом в полуфинале, поэтому они не могут занять два первых места.

F. Палиндромный гамильтонов путь

графы дп Перебор поиск в глубину и подобное хэши *3000

Задан простой неориентированный граф с \(n\) вершинами, \(n\) четно. Вы планируете написать одну букву на каждой вершине. Каждая буква должна быть одной из первых \(k\) букв латинского алфавита.

Путь в графе называется гамильтоновым, если он посещает каждую вершину ровно один раз. Строка называется палиндромной, если она читается одинаково слева направо и справа налево. Путь в графе называется палиндромным, если при выписывании букв с вершин в порядке пути получается палиндромная строка.

Строка длины \(n\) хорошая, если:

  • каждая буква — это одна из первых \(k\) латинского алфавита;
  • если написать \(i\)-ю букву строки на \(i\)-й вершине графа, то в графе будет существовать палиндромный гамильтонов путь.

Обратите внимание, что путь не обязан проходить по вершинам в порядке \(1, 2, \dots, n\).

Посчитайте количество хороших строк.

Входные данные

В первой строке записаны три целых числа \(n\), \(m\) and \(k\) (\(2 \le n \le 12\); \(n\) четно; \(0 \le m \le \frac{n \cdot (n-1)}{2}\); \(1 \le k \le 12\)) — количество вершин в графе, количество ребер в графе и количество первых букв алфавита, которые можно использовать.

В каждой из следующих \(m\) строк записаны по два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\); \(v \neq u\)) — ребра графа. Граф не содержит кратных ребер и петель.

Выходные данные

Выведите одно целое число — количество хороших строк.

A. Результат игры

Перебор *800

Шерлок Холмс и доктор Ватсон сыграли в некоторую игру на клетчатой доске размером n × n. В течение этой игры они ставили в клетки доски числа по неизвестным для нас хитрым правилам. Но вот игра закончена, и на каждой клетке доски стоит ровно одно число. Чтобы понять, кто из них выиграл, надо подсчитать количество выигрышных клеток. Клетка считается выигрышной, если сумма чисел в клетках, стоящих с ней на одной вертикали (включая ее) строго больше, чем сумма чисел в клетках, стоящих с ней на одной горизонтали (включая ее).

Например, пусть игра завершилась таким образом. Тогда фиолетовая клетка выигрышная, потому что сумма чисел в ее вертикали равна 8 + 3 + 6 + 7 = 24, а сумма чисел в ее горизонтали равна 9 + 5 + 3 + 2 = 19, и 24 > 19.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 30). В каждой из следующих n строк через пробел даны n целых чисел. В i-ой строке j-ое число означает число, стоящее на доске на j-той вертикали, i-той горизонтали. Все числа в таблице целые и находятся в пределах от 1 до 100.

Выходные данные

Выведите единственное число — количество выигрышных клеток.

Примечание

Во втором примере выигрышные клетки — верхние две.

В третьем примере выигрышные три левые клетки в двух средних рядах — всего 6 штук:

5 7 8 4
9 5 3 2
1 6 6 4
9 5 7 3

D. Лотерея

*особая задача Конструктив математика Перебор реализация *1800

Соревнование Kotlin Heroes близится к завершению. В этот раз в соревновании участвовало \(n\) программистов. И теперь организаторы думают над тем, как развлечь еще и зрителей. Один из возможных вариантов — устроить лотерею. Но для начала нужно провести опрос среди зрителей.

В общем, организаторы опросили \(m\) зрителей, каждому задали два вопроса:

  1. Кто займет первое место?
  2. Кто займет последнее место?

Получив все ответы, организаторы присвоили всем зрителям места на основании того, скольких программистов они угадали. Предположим, что \(c_2\) зрителей правильно угадали и первое и последнее место, \(c_1\) зрителей угадали только первое или только последнее место, и \(c_0\) зрителей не угадали никого. Тогда все \(c_2\) зрителей получат \(1\)-е место, все зрители с одним правильным местом получат место \(c_2 + 1\), а все остальные — место \(c_2 + c_1 + 1\).

Вы были одним из опрашиваемых зрителей. Кроме того, как один из организаторов, вы можете смотреть результаты опроса, но не результаты соревнования. Определите, какое наихудшее место вы можете занять согласно системе ранжирования организаторов?

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(2 \le n \le 1000\); \(1 \le m \le 2 \cdot 10^5\)) — количество программистов, участвовавших в соревновании, и количество опрошенных зрителей.

В следующих \(m\) строках заданы ответы зрителей. В \(i\)-й строке заданы два целых числа \(f_i\) и \(l_i\) (\(1 \le f_i, l_i \le n\); \(f_i \ne l_i\)) — индексы программистов, кто займет первое и последнее места по мнению \(i\)-го зрителя.

Для простоты, ваш ответ всегда первый, то есть ваш ответ — это \(f_1\) и \(l_1\).

Выходные данные

Выведите одно целое число — худшее место, которое вы можете получить согласно системе ранжирования организаторов (чем больше место, тем хуже).

Примечание

В первом примере, если второй программист займет первое место, а первый программист — последнее, то у вас будет \(0\) правильных ответов в то время, как у других двух зрителей — \(2\) правильных ответа. А потому ваше место (в худшем случае) будет равно \(c_2 + c_1 + 1\) \(=\) \(2 + 0 + 1 = 3\).

Во втором примере, если, например, третий программист займет первое место, а второй программист — последнее место, то у вас будет \(1\) правильный ответ. У зрителей \(2\), \(4\) и \(5\) будет \(2\) правильных ответа, у зрителя \(6\) — \(1\) правильный ответ, и у зрителя \(3\) — \(0\) правильных ответов. В результате ваше место будет равно \(c_2 + 1\) \(=\) \(3 + 1 = 4\). (Заметим, что у зрителя \(6\) также будет место \(4\)).

A. Книга

Бинарный поиск графы дп Перебор реализация сортировки Структуры данных *1800

У вас есть книга, в которой \(n\) глав.

В начале каждой главы перечислен список других глав, которые нужно понимать для понимания написанного в этой главе. Чтобы понять главу, нужно прочитать эту главу после того, как вы поняли все главы из данного списка.

Сейчас ни одна глава книги не понятна вам. Вы планируете читать книгу с начала до конца по кругу до тех пор, пока не поймете все главы. Обратите внимание, что если вы читаете некоторую главу, но еще не понимаете какие-то из необходимых для ее понимания глав, то вы не можете понять эту главу.

Определите, сколько раз вам нужно будет прочитать всю книгу, чтобы понять все главы, или определите, что есть главы, которые вы никогда не поймете, сколько бы раз вы не прочитали книгу.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2\cdot10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит \(n\) (\(1 \le n \le 2\cdot10^5\)) — количество глав.

Далее следуют \(n\) строк. \(i\)-я из этих строк начинается с целого числа \(k_i\) (\(0 \le k_i \le n-1\)) — количества глав, которые требуется понимать для понимания \(i\)-й главы. Далее следуют \(k_i\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i, k_i}\) (\(1 \le a_{i, j} \le n, a_{i, j} \ne i, a_{i, j} \ne a_{i, l}\) для \(j \ne l\)) — главы, которые нужно понимать для понимания \(i\)-й главы.

Гарантируется, что сумма значений \(n\) и сумма значений \(k_i\) по всем наборам входных данных не превосходят \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных, если вы можете понять все главы, выведите, сколько раз вам нужно прочитать книгу целиком, иначе выведите \(-1\).

Примечание

В первом примере с первого прочтения вы поймете главы \(\{2, 4\}\), а со второго — главы \(\{1, 3\}\).

Во втором примере для понимания любой главы нужно сначала понимать какую-то другую, поэтому невозможно понять всю книгу.

В третьем примере для понимания любой главы нужно понимать только более ранние, поэтому можно понять всю книгу за одно прочтение.

В четвертом примере вы поймете главы \(\{2, 3, 4\}\) с первого прочтения, и главу \(1\) со второго.

В пятом примере вы будем понимать главы по одной за прочтение, с \(5\)-й по \(1\)-ю.

B. Xor трех

жадные алгоритмы Конструктив Перебор *2500

У вас есть последовательность \(a\) длины \(n\), состоящая из цифр \(0\) и \(1\).

Вы можете выполнять следующую операцию над этой последовательностью:

  • выбрать индекс \(i\) от \(1\) до \(n-2\) (включительно);
  • одновременно заменить значения \(a_{i}\), \(a_{i+1}\), \(a_{i+2}\) на \(a_{i} \oplus a_{i+1} \oplus a_{i+2}\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.
Найдите последовательность из не более чем \(n\) операций, после которой все элементы \(a\) будут равны \(0\), или определите, что это невозможно.

Можно показать, что если существует последовательность операций некоторой длины такая, что после ее выполнения все элементы \(a\) будут равны \(0\), то существует и последовательность длины не более \(n\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(3 \le n \le 2\cdot10^5\)) — длину \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i = 0\) или \(a_i = 1\)) — элементы \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных:

  • если нет способа сделать все элементы \(a\) равными \(0\), выполнив описанную операцию несколько раз, выведите «NO»;
  • в противном случае в первой строке выведите «YES», во второй строке выведите \(k\) (\(0 \le k \le n\)) — количество операций над \(a\) в вашем решении, а затем в третьей строке выведите последовательность \(b_1, b_2, \dots, b_k\) (\(1 \le b_i \le n - 2\)) — индексы, которые вы выбираете.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере последовательность содержит только числа \(0\), поэтому ничего не нужно делать.

Во втором примере мы можем преобразовать \([1, 1, 1, 1, 0]\) в \([1, 1, 0, 0, 0]\), а затем в \([0, 0, 0, 0, 0]\), сначала выполнив операцию, начиная с третьего элемента \(a\), а потом начиная с первого элемента \(a\).

В третьем примере независимо от того, сделаем ли мы первую операцию, начиная с первого или второго элемента \(a\), мы получим \([1, 1, 1, 1]\), что не может быть преобразовано в \([0, 0, 0, 0]\).

D. Самый сильный билд

Бинарный поиск графы жадные алгоритмы Перебор поиск в глубину и подобное реализация Структуры данных хэши *2000

Иван играет в очередную roguelike компьютерную игру. В игре он управляет одним героем. У героя есть \(n\) слотов для экипировки предметов. Для \(i\)-го слота есть список из \(c_i\) предметов, \(j\)-й из них увеличивает силу героя на \(a_{i,j}\). Предметы для каждого из слотов попарно различные и упорядочены по возрастанию увеличения силы. То есть, \(a_{i,1} < a_{i,2} < \dots < a_{i,c_i}\).

В каждый слот Иван выбирает ровно один предмет. Пусть в \(i\)-й слот он выбрал \(b_i\)-й предмет из соответствующего списка. Последовательность выборов \([b_1, b_2, \dots, b_n]\) называется билдом.

Сила билда — это сумма увеличений силы предметов в нем. Некоторые билды в игре запрещены. Задан список из \(m\) попарно различных запрещенных билдов. Гарантируется, что хотя бы один билд не запрещен.

Какой билд среди не запрещенных в игре имеет максимальную силу? Если есть несколько билдов с максимальной силой, выведите любой из них.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 10\)) — количество слотов экипировки.

В \(i\)-й из следующих \(n\) строк содержится описание предметов для \(i\)-го слота. Сначала одно целое число \(c_i\) (\(1 \le c_i \le 2 \cdot 10^5\)) — количество предметов для \(i\)-го слота. Затем \(c_i\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,c_i}\) (\(1 \le a_{i,1} < a_{i,2} < \dots < a_{i,c_i} \le 10^8\)).

Сумма \(c_i\) не превосходит \(2 \cdot 10^5\).

В следующей строке записано одно целое число \(m\) (\(0 \le m \le 10^5\)) — количество запрещенных билдов.

В каждой из следующих \(m\) строк содержится описание запрещенного билда — последовательность из \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le c_i\)).

Билды попарно различные, и существует хотя бы один не запрещенный билд.

Выходные данные

Выведите билд с максимальной силой среди не запрещенных в игре. Если есть несколько билдов с максимальной силой, выведите любой из них.

D. Divisible by Twenty-Five

дп Перебор поиск в глубину и подобное *1800

Mr. Chanek has an integer represented by a string \(s\). Zero or more digits have been erased and are denoted by the character _. There are also zero or more digits marked by the character X, meaning they're the same digit.

Mr. Chanek wants to count the number of possible integer \(s\), where \(s\) is divisible by \(25\). Of course, \(s\) must not contain any leading zero. He can replace the character _ with any digit. He can also replace the character X with any digit, but it must be the same for every character X.

As a note, a leading zero is any 0 digit that comes before the first nonzero digit in a number string in positional notation. For example, 0025 has two leading zeroes. An exception is the integer zero, (0 has no leading zero, but 0000 has three leading zeroes).

Input

One line containing the string \(s\) (\(1 \leq |s| \leq 8\)). The string \(s\) consists of the characters 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, _, and X.

Output

Output an integer denoting the number of possible integer \(s\).

Note

In the first example, the only possible \(s\) is \(25\).

In the second and third example, \(s \in \{100, 200,300,400,500,600,700,800,900\}\).

In the fifth example, all possible \(s\) will have at least one leading zero.

J. Jeopardy of Dropped Balls

Бинарный поиск Перебор реализация снм *1500

Mr. Chanek has a new game called Dropping Balls. Initially, Mr. Chanek has a grid \(a\) of size \(n \times m\)

Each cell \((x,y)\) contains an integer \(a_{x,y}\) denoting the direction of how the ball will move.

  • \(a_{x,y}=1\) — the ball will move to the right (the next cell is \((x, y + 1)\));
  • \(a_{x,y}=2\) — the ball will move to the bottom (the next cell is \((x + 1, y)\));
  • \(a_{x,y}=3\) — the ball will move to the left (the next cell is \((x, y - 1)\)).

Every time a ball leaves a cell \((x,y)\), the integer \(a_{x,y}\) will change to \(2\). Mr. Chanek will drop \(k\) balls sequentially, each starting from the first row, and on the \(c_1, c_2, \dots, c_k\)-th (\(1 \leq c_i \leq m\)) columns.

Determine in which column each ball will end up in (position of the ball after leaving the grid).

Input

The first line contains three integers \(n\), \(m\), and \(k\) (\(1 \leq n, m \leq 1000\), \(1 \leq k \leq 10^5\)) — the size of the grid and the number of balls dropped by Mr. Chanek.

The \(i\)-th of the next \(n\) lines contains \(m\) integers \(a_{i,1},a_{i,2},\ldots,a_{i,m}\) (\(1 \leq a_{i,j} \leq 3\)). It will satisfy \(a_{i, 1} \ne 3\) and \(a_{i, m} \ne 1\).

The next line contains \(k\) integers \(c_1, c_2, \ldots, c_k\) (\(1 \leq c_i \leq m\)) — the balls' column positions dropped by Mr. Chanek sequentially.

Output

Output \(k\) integers — the \(i\)-th integer denoting the column where the \(i\)-th ball will end.

Note

In the first example, the first ball will drop as follows. Note that the cell \((1, 1)\) will change direction to the bottom direction.

The second and third balls will drop as follows.

All balls will be dropped from the first row and on the \(c_1, c_2, \dots, c_k\)-th columns respectively. A ball will stop dropping once it leaves the grid.

J. Just Kingdom

Перебор поиск в глубину и подобное Структуры данных *3100

The Just Kingdom is ruled by a king and his \(n\) lords, numbered \(1\) to \(n\). Each of the lords is a vassal of some overlord, who might be the king himself, or a different lord closer to the king. The king, and all his lords, are just and kind.

Each lord has certain needs, which can be expressed as a certain amount of money they need. However, if a lord, or the king, receives any money, they will first split it equally between all their vassals who still have unmet needs. Only if all the needs of all their vassals are met, they will take the money to fulfill their own needs. If there is any money left over, they will return the excess to their overlord (who follows the standard procedure for distributing money).

At the beginning of the year, the king receives a certain sum of tax money and proceeds to split it according to the rules above. If the amount of tax money is greater than the total needs of all the lords, the procedure guarantees everybody's needs will be fulfilled, and the excess money will be left with the king. However, if there is not enough money, some lords will not have their needs met.

For each lord, determine the minimum amount of tax money the king has to receive so that this lord's needs are met.

Input

The first line of the input contains the number of lords \(n\) (\(0 \le n \le 3 \cdot 10^5\)). Each of the next \(n\) lines describes one of the lords. The \(i\)-th line contains two integers: \(o_i\) (\(0 \le o_i < i\)) — the index of the overlord of the \(i\)-th lord (with zero meaning the king is the overlord), and \(m_i\) (\(1 \le m_i \le 10^6\)) — the amount of money the \(i\)-th lord needs.

Output

Print \(n\) integer numbers \(t_i\). The \(i\)-th number should be the minimum integer amount of tax money the king has to receive for which the needs of the \(i\)-th lord will be met.

Note

In the sample input, if the king receives \(5\) units of tax money, he will split it equally between his vassals — the lords \(1\), \(3\), and \(5\), with each receiving \(\frac{5}{3}\) of money.

Lord \(1\) will split the money equally between his vassals — \(2\) and \(4\), with each receiving \(\frac{5}{6}\). Lord \(5\) will keep the money (having no vassals). Lord \(3\) will keep \(1\) unit of money, and give the remaining \(\frac{2}{3}\) to the king. The king will then split the \(\frac{2}{3}\) between the vassals with unmet needs — \(1\) and \(5\), passing \(\frac{1}{3}\) to each. Lord \(5\) will keep the extra cash (now having a total of \(2\), still not enough to meet his needs). Lord \(1\) will split it equally between his vassals, and the extra \(\frac{1}{6}\) will be enough to meet the needs of lord \(4\).

K. Kingdom of Islands

графы Перебор реализация *2800

The Kingdom of Islands consists of \(p\) islands. As the king, you rule over the whole kingdom, while each island is ruled over by one or several jarls under your rule. In total, there are \(n\) jarls under your jurisdiction.

Each island of the kingdom has its own strong traditions, so jarls that rule over the same island support each other and never have conflicts. The downsides of such strength are cultural conflicts between people inhabiting different islands. Thus, two jarls that rule over different islands are in conflict.

However, recent years brought a few changes to traditional relations between the jarls. To your knowledge, there are exactly \(k\) pairs of jarls such that relationships between two jarls in the pair are different from the traditional. That is, if two jarls of the pair you know rule over the same island, these jarls are in conflict. If they rule over different islands, then they overcome cultural disagreement and there is no conflict between them anymore.

As a true responsible king, you are worried about whether the kingdom is close to a major conflict. In order to estimate the current situation, you would like to find the largest possible group of jarls such that every two jarls in the group are in conflict.

Input

The first line of the input consists of two integers \(p\) and \(n\) (\(1 \le p \le n \le 10^5\); \(1 \le p \le 10^4\)).

The second line consists of \(n\) integers \(s_1, s_2, \ldots, s_n\) (\(1 \le s_i \le p\)). The integer \(s_i\) denotes that the \(i\)-th jarl rules over the island number \(s_i\). It is guaranteed that each island is ruled by at least one jarl.

The third line consists of a single integer \(k\) (\(0 \le k \le 20\)).

Then \(k\) lines follow. The \(j\)-th of these lines consists of two distinct integers \(a_j\) and \(b_j\) (\(1 \le a_j < b_j \le n\)), denoting that the relation between the \(a_j\)-th jarl and the \(b_j\)-th jarl differs from traditional. It is guaranteed that no pair of jarls appears twice in this list.

Output

In the first line print a single integer \(q\) between \(1\) and \(n\) — the largest possible number of jarls in a pairwise conflicting group. In the second line print \(q\) distinct integers between \(1\) and \(n\) — the numbers of jarls in the group. The numbers of jarls can be printed in any order.

Note

The conflict graph for the last sample testcase is given below. Each circle represents an island.

F. Стабилизируй массив (И-версия)

графы кратчайшие пути математика Перебор теория чисел *1700

Задан массив из нулей и единиц \(a[0 \ldots n - 1] = [a_0, a_1, \ldots, a_{n - 1}]\). Обратите внимание, что в этой задаче, в отличие от остальных, индексы массива нумеруются с нуля, а не с единицы.

За один шаг массив \(a\) заменяется на другой массив длины \(n\) по следующим правилам:

  1. Сначала строится новый массив \(a^{\rightarrow d}\) — циклический сдвиг массива \(a\) вправо на \(d\) ячеек. Элементы этого массива определяются как \(a^{\rightarrow d}_i = a_{(i + n - d) \bmod n}\), где \((i + n - d) \bmod n\) — остаток от деления \(i + n - d\) на \(n\).

    Таким образом весь массив \(a^{\rightarrow d}\) можно записать как \(\)a^{\rightarrow d} = [a_{n - d}, a_{n - d + 1}, \ldots, a_{n - 1}, a_0, a_1, \ldots, a_{n - d - 1}]\(\)

  2. Затем каждый элемент массива \(a_i\) заменяется на \(a_i \,\&\, a^{\rightarrow d}_i\), где \(\&\) — операция логического «И».

Например, если \(a = [0, 0, 1, 1]\) и \(d = 1\), то \(a^{\rightarrow d} = [1, 0, 0, 1]\), и значение \(a\) после первого шага будет равно \([0 \,\&\, 1, 0 \,\&\, 0, 1 \,\&\, 0, 1 \,\&\, 1]\), то есть \([0, 0, 0, 1]\).

Процесс завершается, когда массив перестает меняться. Для заданного массива \(a\) определите, будет ли он состоять из одних нулей по окончании процесса. Если да, то также найдите количество шагов, которое процесс совершит до своего завершения.

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

В следующих \(2t\) строках даны описания наборов входных данных.

В описании каждого набора входных данных первая строка содержит два целых числа: \(n\) (\(1 \le n \le 10^6\)) — размер массива, и \(d\) (\(1 \le d \le n\)) — размер сдвига массива на каждом шаге. Во второй строке описания через пробел записаны \(n\) чисел \(a_i\) (\(0 \le a_i \le 1\)) — элементы исходного массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите одно целое число — количество шагов, после которого массив впервые станет состоять из всех нулей. Если же после завершения процесса в массиве все еще будут присутствовать единицы, выведите -1.

Примечание

В третьем наборе входных данных из примера с массивом будут происходить следующие изменения:

  1. В начале \(a = [1, 1, 0, 1, 0]\), и \(a^{\rightarrow 2} = [1, 0, 1, 1, 0]\). Их поэлементное «И» равно \(\)[1 \,\&\, 1, 1 \,\&\, 0, 0 \,\&\, 1, 1 \,\&\, 1, 0 \,\&\, 0] = [1, 0, 0, 1, 0]\(\)
  2. Теперь \(a = [1, 0, 0, 1, 0]\), тогда \(a^{\rightarrow 2} = [1, 0, 1, 0, 0]\). Их поэлементное «И» равно \(\)[1 \,\&\, 1, 0 \,\&\, 0, 0 \,\&\, 1, 1 \,\&\, 0, 0 \,\&\, 0] = [1, 0, 0, 0, 0]\(\)
  3. И, наконец, при \(a = [1, 0, 0, 0, 0]\) получаем \(a^{\rightarrow 2} = [0, 0, 1, 0, 0]\). Их поэлементное «И» равно \(\)[1 \,\&\, 0, 0 \,\&\, 0, 0 \,\&\, 1, 0 \,\&\, 0, 0 \,\&\, 0] = [0, 0, 0, 0, 0]\(\)
Таким образом, ответ — \(3\) итерации.

В четвертом наборе входных данных массив не будет изменяться при сдвиге на \(2\) вправо, потому что каждый элемент будет вычисляться как \(0 \,\&\, 0\) или \(1 \,\&\, 1\). Таким образом, единицы останутся на своих местах, и ответ — -1, массив никогда не будет состоять только из нулей.

D. Ледяные скульптуры

*особая задача Перебор теория чисел *1300

Берляндский университет готовится встретить юбилей — ему исполняется 256 лет! Специально назначенный проректор по празднованию готовится украсить университетский городок. В центре городка были воздвигнуты n ледяных скульптур. Скульптуры расположены по кругу на равном расстоянии друг от друга, то есть образуют правильный n-угольник. Они пронумерованы по порядку по часовой стрелке числами от 1 до n.

На сайте университета уже успело состояться голосование, по результатам которого каждая скульптура получила характеристику ti — степень своей привлекательности. Величины ti могут быть положительными, нулевыми или отрицательными.

Пришедший оценить работу ректор университета отметил, что, возможно, работа выполнена не идеально. Он предложил растопить некоторые скульптуры так, что:

  • оставшиеся скульптуры будут образовывать правильный многоугольник (с количеством вершин от 3 до n),
  • сумма величин ti для оставшихся скульптур будет максимальна.

Помогите проректору по празднованию произвести анализ замечания — найдите максимальное значение суммы ti, которое может быть получено таким способом. Разрешается не растапливать скульптуры вообще. Передвигать скульптуры нельзя.

Входные данные

В первой строке входных данных записано целое число n (3 ≤ n ≤ 20000) — первоначальное количество скульптур. Вторая строка содержит последовательность целых чисел t1, t2, ..., tn, ti — степень привлекательности i-ой скульптуры ( - 1000 ≤ ti ≤ 1000). Числа в строке разделяются пробелами.

Выходные данные

Выведите искомую максимальную сумму привлекательностей скульптур.

Примечание

В первом примере наиболее оптимально оставить скульптуры через одну, то есть оставить скульптуры с привлекательностями: 2, 4, 5 и 3.

A. Портал

дп жадные алгоритмы Перебор реализация Структуры данных *1700

CQXYM нашел прямоугольник \(A\) размера \(n \times m\), состоящий из \(n\) строк и \(m\) столбцов. Каждый блок прямоугольника либо является обсидиановым блоком, либо пуст. За одну операцию CQXYM может заменить обсидиановый блок пустым или пустой — обсидиановым.

Прямоугольник \(M\) размера \(a \times b\) называется порталом тогда и только тогда, когда он удовлетворяет следующим условиям:

  • \(a \geq 5,b \geq 4\).
  • Для всех \(1 < x < a\), блоки \(M_{x,1}\) и \(M_{x,b}\) обсидиановые.
  • Для всех \(1 < x < b\), блоки \(M_{1,x}\) и \(M_{a,x}\) обсидиановые.
  • Для всех \(1<x<a,1<y<b\), блок \(M_{x,y}\) пустой.
  • \(M_{1, 1}, M_{1, b}, M_{a, 1}, M_{a, b}\) могут быть любого типа.

Обратите внимание, что портал имеет \(a\) строк и \(b\) столбцов (не \(b\) строк и \(a\) столбцов).

CQXYM хочет узнать, за какое минимальное число операций один из подпрямоугольников можно сделать порталом.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(t \geq 1\)) — количество наборов входных данных.

Для каждого набора входных данных в первой строке содержатся два целых числа \(n\) и \(m\) (\(5 \le n \le 400\), \(4 \le m \le 400\)).

Далее следуют \(n\) строк по \(m\) символов \(0\) или \(1\) в каждой. Если \(j\)-й символ \(i\)-й строки равен \(0\), блок \(A_{i,j}\) пуст. В противном случае блок \(A_{i,j}\) обсидиановый.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(400\).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(400\).

Выходные данные

Выведите \(t\) ответов, по одному на строке.

Примечание

В первом тестовом случае портал в итоге выглядит следующим образом:


1110
1001
1001
1001
0111

B. Курс математики

Деревья дп Комбинаторика Перебор *2600

Пусть \(c_1, c_2, \ldots, c_n\) — перестановка чисел \(1, 2, \ldots, n\). Рассмотрим все подотрезки этой перестановки, содержащие число \(x\). Для фиксированного числа \(m\) скажем, что \(x\) хорошее, если среди максимумов на данных отрезках встречается ровно \(m\) различных значений.

Cirno изучает математику, и учитель просит ее найти количество перестановок длины \(n\) с ровно \(k\) хорошими числами.

К сожалению, Cirno не сильна в математике и не может ответить на этот вопрос. Поэтому она просит вас о помощи.

Поскольку ответ может быть очень большим, вам нужно только сообщить ей количество перестановок по модулю \(p\).

Перестановкой является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Последовательность \(a\) является подотрезком \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Единственная строка входных данных содержит четыре целых числа \(n, m, k, p\) (\(1 \le n \le 100, 1 \le m \le n, 1 \le k \le n, 1 \le p \le 10^9\)).

Выходные данные

Выведите количество перестановок по модулю \(p\).

Примечание

В первом тестовом случае четырьмя перестановками являются \([1, 3, 2, 4]\), \([2, 3, 1, 4]\), \([4, 1, 3, 2]\) и \([4, 2, 3, 1]\).

Возьмем перестановку \([1, 3, 2, 4]\) в качестве примера:

Для числа \(1\) все подотрезки, содержащие его, являются: \([1]\), \([1, 3]\), \([1, 3, 2]\) и \([1, 3, 2, 4]\), и есть три разных максимума \(1\), \(3\) и \(4\).

Аналогично, для числа \(3\) существуют два разных максимума \(3\) и \(4\). Для числа \(2\) существует три разных максимума \(2\), \(3\) и \(4\). А для числа \(4\) есть только один, то есть сам по себе \(4\).

C. Техническое обслуживание поездов

Перебор реализация Структуры данных *2200

Кавасиро Нитори — талантливый инженер. Поэтому ее назначили ответственной по обслуживанию поездов.

Всего существуют \(n\) моделей поездов, и в депо, в котором работает Нитори, в любой момент времени будет не более одного поезда каждой модели. Изначально в депо нет поездов, и в каждый из следующих \(m\) дней либо один поезд будет добавлен в депо, либо один поезд будет убран из депо. Когда добавляется поезд \(i\)-й модели в день \(t\), он будет работать \(x_i\) дней (включая день \(t\)), затем будет на ремонте в течение \(y_i\) дней, затем опять работать \(x_i\) дней, и так далее до тех пор, пока его не уберут из депо.

Чтобы следить за обслуживанием было проще, Нитори просит вас посчитать для каждого из дней, сколько поездов будут на ремонте в этот день.

В день, когда поезд убирают, он не считается находящимся в ремонте.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n,m \le 2 \cdot 10^5\)).

Каждая \(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i,y_i\) (\(1 \le x_i,y_i \le 10^9\)).

Далее следуют \(m\) строк, содержащих два целых числа \(op\) и \(k\) (\(1 \le k \le n\), \(op = 1\) или \(op = 2\)). Если \(op=1\), это означает, что в этот день добавляется поезд \(k\)-й модели, иначе поезд модели \(k\) убирают. Гарантируется, что когда добавляется поезд модели \(x\), в депо нет поездов такой модели, а когда поезд модели \(x\) убирают, в депо есть такой поезд.

Выходные данные

Выведите \(m\) строк, каждая \(i\)-я из которых содержит одно целое число, обозначающее количество поездов, находящихся на ремонте в \(i\)-й день.

Примечание

Рассмотрим первый пример.

Первый день: Нитори добавляет поезд модели \(3\). Работает только поезд модели \(3\), и ни один поезд не находится в ремонте.

Второй день: Нитори добавляет поезд модели \(1\), поезд модели \(1\) работает, а поезд модели \(3\) находится в ремонте.

Третий день: Нитори убирает поезд модели \(1\). Ситуация такая же, как и в первый день.

Четвертый день: Нитори убирает поезд модели \(3\). Нет ни одного поезда.

D. Подпоследовательность

Деревья дп жадные алгоритмы Перебор разделяй и властвуй *2900

У Алисы есть целочисленная последовательность \(a\) длины \(n\) и все ее элементы различны. Она выбирает из \(a\) подпоследовательность длины \(m\) и определяет ценность подпоследовательности \(a_{b_1},a_{b_2},\ldots,a_{b_m}\) как \(\)\sum_{i = 1}^m (m \cdot a_{b_i}) - \sum_{i = 1}^m \sum_{j = 1}^m f(\min(b_i, b_j), \max(b_i, b_j)),\(\) где \(f(i, j)\) обозначает \(\min(a_i, a_{i + 1}, \ldots, a_j)\).

Алиса хочет, чтобы вы помогли ей максимизировать ценность выбираемой подпоследовательности.

Последовательность \(s\) является подпоследовательностью \(t\), если \(s\) может быть получена из \(t\) удалением нескольких (возможно, ни одного или всех) элементов.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le m \le n \le 4000\)).

Во второй строке записано \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i < 2^{31}\)).

Выходные данные

Выведите максимальное значение, которое может получить Алиса.

Примечание

В первом примере Алиса может выбрать подпоследовательность \([15, 2, 18, 13]\), которая имеет ценность \(4 \cdot (15 + 2 + 18 + 13) - (15 + 2 + 2 + 2) - (2 + 2 + 2 + 2) - (2 + 2 + 18 + 12) - (2 + 2 + 12 + 13) = 100\).

Во втором примере существует множество подпоследовательностей ценности \(176\), одна из них — \([9, 7, 12, 20, 18]\).

E. Строительство железных дорог

графы Конструктив кратчайшие пути Перебор Структуры данных *3400

Поскольку железнодорожная система в Генсоке часто перегружена, инженер-энтузиастка Кавасиро Нитори планирует построить больше железных дорог, чтобы уменьшить заторы.

В Генсоке есть \(n\) станций, пронумерованных от \(1\) до \(n\), и \(m\) железных дорог с двусторонним движением. Каждая железная дорога с двусторонним движением соединяет две разные станции и имеет положительную целочисленную длину \(d\). Никакие две железные дороги не соединяют одни и те же станции. Среди \(n\) станций станция \(1\) является главной. Вы можете добраться до любой станции от любой другой пользуясь только дорогами с двусторонним движением.

Из-за технологических ограничений Нитори может строить только односторонние железные дороги. Их длина также может быть произвольным целым положительным числом. Строительство железной дороги в один конец от станции \(u\) будет стоить \(w_u\) единиц ресурсов независимо от станции назначения.

Чтобы уменьшить заторы, Нитори планирует, что после строительства из станции \(1\) в любую другую станцию должно быть хотя бы два различных кратчайших пути, не имеющие общих станций, кроме станции \(1\) и конечной станции. Кроме того, Нитори не хочет изменять длину кратчайшего пути от станции \(1\) до любой другой станции.

В силу разных причин стоимость строительства новой железной дороги иногда может расти бесконтрольно. Произойдут \(q\) событий, где \(i\)-е событие увеличивает стоимость постройки односторонних дорог из станции \(k_i\) на \(x_i\).

Для экономии ресурсов Нитори хочет, чтобы вы помогли ей рассчитать минимальную стоимость строительства железной дороги до всех событий и после каждого из них.

Входные данные

Первая строка входных данных содержит три целых числа \(n\), \(m\), \(q\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le m \le 3 \cdot 10^5\), \(0 \le q \le 2\cdot10^5\)).

Вторая строка содержит \(n\) целых чисел \(w_1,w_2,\ldots,w_n\) (\(1 \le w_i \le 10^9\)).

Каждая из следующих \(m\) строк содержит три целых числа \(u\), \(v\), \(d\) (\(1 \le u,v \le n\), \(u \ne v\), \(1 \le d \le 10^9\)), описывающие двустороннюю железную дорогу между станциями \(u\) и \(v\) длины \(d\).

\(i\)-я из следующих \(q\) строк содержит два целых числа \(k_i,x_i\) (\(1 \le k_i \le n, 1 \le x_i \le 4 \times 10^8\)) — описание событий.

Выходные данные

Выведите \(q+1\) строк, где \(i\)-я строка содержит одно целое число, равное минимальной стоимости строительства железной дороги после \(i-1\)-го события (\(0\)-е событие — ни одного события не произошло).

Примечание

Во втором тестовом примере Нитори может строить железные дороги следующим образом: \(1 \rightarrow 2\), \(1 \rightarrow 3\), \(1 \rightarrow 4\), \(2 \rightarrow 8\). Стоимость в таком случае составит \(14 + 14 + 14 + 4 = 46\).

C. Баба Капа вяжет шарф

жадные алгоритмы Перебор Строки Структуры данных *1200

Баба Капа решила связать шарф и попросила Деда Шера сделать для него шаблон, представляющий собой строку из строчных букв латинского алфавита. Деда Шер написал строку \(s\) длины \(n\).

Баба Капа хочет связать красивый шарф, а по ее мнению красивый шарф можно связать только из строки, являющейся палиндромом. Она хочет изменить шаблон, написанный Дедой Шером, но, чтобы его сильно не обидеть, она выберет одну любую строчную букву латинского алфавита и уберет какие-то (на свой выбор, возможно никакие или все) вхождения этой буквы в строку \(s\).

При этом она хочет, чтобы количество удаленных из шаблона символов было как можно меньше. Помогите ей и скажите, какое минимальное количество символов она может удалить, чтобы строка \(s\) стала палиндромом, или скажите, что это невозможно. Заметьте, что она может удалять только символы, равные одной букве, которую она выбрала.

Строка называется палиндромом, если она одинаково читается слева направо и справа налево. Например, строки 'kek', 'abacaba', 'r' и 'papicipap' — палиндромы, а строки 'abb' и 'iq' — нет.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Следующие \(2 \cdot t\) строк содержат описание наборов входных данных. Описание каждого набора входных данных состоит из двух строк.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — длину строки.

Вторая строка описания каждого набора входных данных содержит строку \(s\) из \(n\) строчных букв латинского алфавита.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество символов, которое потребуется удалить Бабе Капе, чтобы строка стала палиндромом, если это возможно, а если невозможно, выведите \(-1\).

Примечание

В первом наборе входных данных можно выбрать букву 'a' и удалить ее первое и последнее вхождение, получится строка 'bcaacb', являющаяся палиндромом. Также можно выбрать букву 'b' и удалить все ее вхождения, получится строка 'acaaca', также являющаяся палиндромом.

Во втором наборе входных данных можно показать, что нельзя выбрать букву и удалить какие-то ее вхождения так, чтобы получилась строка-палиндром.

В третьем наборе входных данных можно ничего не удалять, строка и так является палиндромом.

F2. Корней Корнеевич и XOR (сложная версия)

Бинарный поиск дп жадные алгоритмы Перебор *2400

Это более сложная версия задачи с большими ограничениями.

Корней Корнеевич откопал массив \(a\) длины \(n\). Корней Корнеевич недавно прочитал в книге про операцию побитового исключающего «ИЛИ» (XOR), поэтому он захотел поэкспериментировать с ней. Для этого он решил найти все целые \(x \ge 0\) такие, что существует возрастающая подпоследовательность массива \(a\), в которой побитовое исключающее «ИЛИ» ее чисел равно \(x\).

Корней Корнеевич довольно быстро нашел все такие \(x\), и хочет проверить свой результат. Для этого он попросил вас решить эту задачу!

Последовательность \(s\) является подпоследовательностью \(b\), если \(s\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов.

Последовательность \(s_1, s_2, \ldots , s_m\) называется возрастающей, если выполняется неравенство: \(s_1 < s_2 < \ldots < s_m\).

Входные данные

Первая строка содержит единственное целое число \(n\) (\(1 \le n \le 10^6\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 5000\)) — элементы массива \(a\).

Выходные данные

В первой строке выведите единственное число \(k\) — количество найденных вами \(x\).

Во второй строке выходных данных выведите \(k\) целых неотрицательных целых чисел в возрастающем порядке \(x_1, x_2, \ldots x_k\) (\(0 \le x_1 < \ldots < x_k\)) — найденные вами \(x\).

Примечание

В первом наборе входных данных:

  • Чтобы получить значение \(x = 0\) можно выбрать пустую подпоследовательность
  • Чтобы получить значение \(x = 2\) можно выбрать подпоследовательность \([2]\)
  • Чтобы получить значение \(x = 4\) можно выбрать подпоследовательность \([4]\)
  • Чтобы получить значение \(x = 6\) можно выбрать подпоследовательность \([2, 4]\)

C. String Manipulation 1.0

*особая задача Бинарный поиск Перебор Строки Структуры данных *1400

На одном популярном интернет-ресурсе разработали необычный механизм редактирования имени пользователя. Менять имя пользователя можно только удалением из него некоторых символов: чтобы изменить текущее имя s, пользователь может выбрать число p и символ c и удалить p-е вхождение символа c из имени. После того как пользователь изменил своё имя, отменить это изменение он не может.

Например, имя «arca» можно изменить, удалив второе вхождение символа «a», и получится «arc».

Поликарп узнал, что изначально некий пользователь зарегистрировался под именем t, где t представляет собой строку s, записанную k раз подряд. Также Поликарпу известна последовательность изменений имени этого пользователя. Помогите Поликарпу выяснить итоговое имя пользователя.

Входные данные

В первой строке содержится целое число k (1 ≤ k ≤ 2000). Во второй строке записана непустая строка s, состоящая из строчных букв латинского алфавита, длиной не более 100 символов. В третьей строке записано целое число n (0 ≤ n ≤ 20000) — количество изменений имени. В следующих n строках записаны сами изменения, по одному изменению в строке. Изменения записаны в виде «pi ci» (без кавычек), где pi (1 ≤ pi ≤ 200000) — номер вхождения буквы ci, ci — строчная буква латинского алфавита. Гарантируется, что операции корректные, то есть удаляемая буква всегда существует, и в результате операций из имени удалятся не все буквы. Вхождения букв нумеруются начиная с 1.

Выходные данные

Выведите единственную строку — итоговое имя пользователя после применения всех операций изменения.

Примечание

Рассмотрим первый пример. Изначально у нас будет имя «bacbac»; после первой операции оно превратится в «bacbc», после второй — в «acbc», и, наконец, после третьей — в «acb».

D. Палиндромные пары

*особая задача дп Перебор Строки *1500

Дана непустая строка s, состоящая из строчных латинских букв. Найдите количество пар непересекающихся подстрок-палиндромов этой строки.

Более формально: найдите количество четверок (a, b, x, y) таких, что 1 ≤ a ≤ b < x ≤ y ≤ |s| и подстроки s[a... b], s[x... y] являются палиндромами.

Палиндромом называется строка, которая одинаково читается слева направо и справа налево. Например, строки «abacaba», «z», «abba» — палиндромы.

Подстрокой s[i... j] (1 ≤ i ≤ j ≤ |s|) строки s = s1s2... s|s| называется строка, равная sisi + 1... sj. Например, подстрока s[2...4] строки s = «abacaba» равна «bac».

Входные данные

В первой строке записана непустая строка s, состоящая из строчных букв латинского алфавита ('a' ... 'z'). Длина строки s не более 2000 символов.

Выходные данные

Выведите единственное число — количество пар непересекающихся подстрок-палиндромов заданной строки.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

D2. Половина одинаковых

математика Перебор теория чисел *1900

Эта задача является усложнённой версией задачи D1, но при этом имеет существенные отличия, поэтому прочитайте условие полностью.

У Поликарпа есть массив из \(n\) (\(n\) — чётное число) целых чисел \(a_1, a_2, \dots, a_n\). Поликарп задумал положительное целое число \(k\). После этого Поликарп стал совершать над массивом операции следующего вида: взять произвольный индекс \(i\) (\(1 \le i \le n\)) и уменьшить число \(a_i\) на \(k\).

После того, как Поликарп совершил некоторое (возможно, нулевое) количество таких операций, оказалось, что не менее половины чисел в массиве стали одинаковыми. Найдите максимальное \(k\), при котором такая ситуация возможна, или выведите \(-1\), если такое число может быть сколь угодно большим.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит одно целое чётное число \(n\) (\(4 \le n \le 40\)) (\(n\) — чётное число). Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots a_n\) (\(-10^6 \le a_i \le 10^6\)).

Гарантируется, что сумма всех \(n\), заданных во входных данных, не превосходит \(100\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число \(k\) (\(k \ge 1\)) — максимальное возможное число, которое Поликарп использовал в операциях над массивом, или \(-1\), если такое число может быть сколь угодно большим.

E. Садовник и дерево

Деревья жадные алгоритмы Перебор поиск в глубину и подобное реализация Структуры данных *1600

Дерево — это неориентированный связный граф, в котором отсутствуют циклы. В этой задаче речь идет о некорневых деревьях.

Лист дерева — это вершина, которая соединена не более чем с одной другой вершиной.

Садовник Виталий вырастил дерево из \(n\) вершин. Он решил подстричь дерево. Для этого он совершает несколько операций. За одну операцию он удаляет все листья дерева.

Пример дерева.

Например, рассмотрим дерево, изображённое на рисунке выше. На рисунке ниже приведён результат применения к дереву ровно одной операции.

Результат применения операции «удалить все листья».

Обратите внимание на особенные случаи применения операций:

  • применение операции к пустому дереву (из \(0\) вершин) не меняет его;
  • применение операции к дереву из одной вершины приводит к удалению этой вершины (т. е. одна эта вершина считается листом);
  • применение операции к дереву из двух вершин приводит к удалению обеих вершин (обе вершины считаются листьями).

Виталий применил к дереву последовательно \(k\) операций. Сколько вершин в нём осталось?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Перед каждым набором входных данных расположена пустая строка.

Каждый набор данных состоит из нескольких строк. Первая строка набора данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 4 \cdot 10^5\), \(1 \le k \le 2 \cdot 10^5\)) — количество вершин в дереве и количество операций. Далее идут \(n - 1\) строк, каждая содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — две вершины, которые соединены ребром. Гарантируется, что заданный граф является деревом, в нём отсутствуют петли и кратные рёбра. Гарантируется, что сумма \(n\) из всех наборов входных данных не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число — количество вершин, которое осталось в дереве после применения \(k\) операций.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе задано дерево из двух вершин. К нему применяются \(200000\) операций. Первая удаляет обе вершины, остальные операции не изменяют дерево.

В третьем наборе входных данных дано дерево из трёх вершин. В результате применения первой операции в нём остаётся всего \(1\) вершина (с номером \(2\)), в результате второй операции дерево становится пустым.

C. Сделай их равными

жадные алгоритмы математика Перебор Строки *1200

У Теофаниса есть строка \(s_1 s_2 \dots s_n\) и символ \(c\). Он хочет сделать все символы своей строки равными \(c\), используя наименьшее количество операций.

За одну операцию, он может выбрать число \(x\) (\(1 \le x \le n\)) и для каждой позиции \(i\), где \(i\) не делится на \(x\), заменить \(s_i\) на \(c\).

Определите наименьшее количество операций, для того чтобы сделать все символы строки равными \(c\) и соответствующие \(x\)-ы, которые нужно выбрать.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора заданы целое число \(n\) (\(3 \le n \le 3 \cdot 10^5\)) и строчная буква латинского алфавита \(c\) — длина строки \(s\) и буква, из которой должна состоять строка в результате.

Во второй строке каждого набора задана строка \(s\) из строчных букв латинского алфавита — первоначальная строка.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, сначала выведите одно целое число \(m\) — наименьшее количество операций для того, чтобы сделать все символы равными \(c\).

Далее выведите \(m\) целых чисел \(x_1, x_2, \dots, x_m\) (\(1 \le x_j \le n\)) — \(x\)-ы, которые нужно использовать в заданном порядке.

Можно доказать, что при заданных ограничениях ответ всегда существует. Если существует несколько ответов, выведите любой.

Примечание

Опишем, что происходит в третьем наборе входных данных:

  1. \(x_1 = 2\): выбираем все позиции, которые не делятся на \(2\), и заменяем их, т. е. bzyx \(\rightarrow\) bzbx;
  2. \(x_2 = 3\): выбираем все позиции, которые не делятся на \(3\), и заменяем их, т. е. bzbx \(\rightarrow\) bbbb.

E2. Раскраска кубика Рубика (сложная версия)

Деревья дп математика Перебор реализация *2300

Это сложная версия задачи. Различие состоит в том, что в этой версии есть вершины с уже зафиксированными цветами.

Теофанис ужасно проголодался и хочет, наконец, отведать своего любимого блюда, шефталью. Но сначала ему нужно закончить с домашней работой. Поможете ли вы ему в решении данной задачи?

Вам задано идеальное двоичное дерево из \(2^k - 1\) вершин — двоичное дерево, в котором у всех вершин \(i\) от \(1\) по \(2^{k - 1} - 1\) есть ровно два сына: вершины \(2i\) и \(2i + 1\). У вершин с \(2^{k - 1}\) по \(2^k - 1\) нет детей. Вы хотите покрасить его вершины в \(6\) цветов кубика Рубика (белый, зеленый, красный, синий, оранжевый и желтый).

Назовем раскраску хорошей, если все ребра дерева соединяют вершины, цвета которых являются соседними цветами кубика Рубика.

Изображение кубика Рубика и его развертка.

Формально говоря:

  • соседними к белой вершине не могут быть белые и желтые вершины;
  • соседними к желтой вершине не могут быть белые и желтые вершины;
  • соседними к зеленой вершине не могут быть зеленые и синие вершины;
  • соседними к синей вершине не могут быть зеленые и синие вершины;
  • соседними к красной вершине не могут быть красные и оранжевые вершины;
  • соседними к оранжевой вершине не могут быть красные и оранжевые вершины.

Однако, есть \(n\) особых вершин в дереве, цвета которых уже зафиксированы.

Вам нужно посчитать количество хороших раскрасок двоичного дерева. Две раскраски считаются различными, если существует вершина, цвет которой в них различается.

Так как ответ может быть слишком большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке задано одно целое число \(k\) (\(1 \le k \le 60\)) — количество уровней в идеальном двоичном дереве, которое вам нужно раскрасить.

Во второй строке задано одно целое число \(n\) (\(1 \le n \le \min(2^k - 1, 2000)\)) — количество вершин, цвета которых уже выбраны.

В следующих \(n\) строках заданы целое число \(v\) (\(1 \le v \le 2^k - 1\)) и строка \(s\) — номер вершины и ее цвет (\(s\) является одной из следующих строк: white, yellow, green, blue, red или orange).

Гарантируется, что каждая вершина \(v\) появляется во входных данных не более одного раза.

Выходные данные

Выведите одно целое число — количество различных раскрасок по модулю \(10^9+7\).

Примечание

На изображении ниже вы можете видеть одну из корректных раскрасок для первого примера.

A. Компьютерная игра

дп Перебор поиск в глубину и подобное реализация *800

Монокарп играет в компьютерную игру. Сейчас он хочет пройти первый уровень этой игры.

Уровень — это прямоугольное клеточное поле из \(2\) строк и \(n\) столбцов. Персонаж Монокарпа изначально стоит в клетке \((1, 1)\) — на пересечении \(1\) строки и \(1\) столбца.

Персонаж Монокарпа за одно действие может переместиться из одной клетки в другую, если они — соседние по стороне и/или углу. Формально, из клетки \((x_1, y_1)\) можно за одно действие переместиться в клетку \((x_2, y_2)\), если \(|x_1 - x_2| \le 1\) и \(|y_1 - y_2| \le 1\). Очевидно, выходить за границы уровня нельзя.

На некоторых клетках находятся ловушки. Если персонаж Монокарпа оказывается в такой клетке, он умирает, и игра заканчивается.

Чтобы пройти уровень, персонаж Монокарпа должен оказаться в клетке \((2, n)\) — на пересечении строки \(2\) и столбца \(n\).

Помогите Монокарпу определить, можно ли пройти уровень.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют сами наборы входных данных, каждый из которых состоит из трех строк.

В первой строке задано одно целое число \(n\) (\(3 \le n \le 100\)) — количество столбцов.

Далее следуют две строки, описывающие уровень. \(i\)-я из этих строк описывает \(i\)-ю строку уровня — строка состоит из символов 0 и 1. Символ 0 соответствует безопасной клетке, символ 1 — клетке с ловушкой.

Дополнительное ограничение на входные данные: клетки \((1, 1)\) и \((2, n)\) — безопасные.

Выходные данные

Для каждого набора входных данных выведите YES, если уровень можно пройти, и NO, если нельзя.

Примечание

Рассмотрим пример из условия.

Возможный путь в первом наборе входных данных: \((1, 1) \rightarrow (2, 2) \rightarrow (2, 3)\).

Возможный путь во втором наборе входных данных: \((1, 1) \rightarrow (1, 2) \rightarrow (2, 3) \rightarrow (2, 4)\).

Возможный путь в четвертом наборе входных данных: \((1, 1) \rightarrow (2, 2) \rightarrow (1, 3) \rightarrow (2, 4) \rightarrow (1, 5) \rightarrow (2, 6)\).

B. Деление на группы

Перебор реализация *1000

На первое собрание кружка по программированию Берляндского ГУ пришли \(n\) студентов (\(n\) — четно). Было решено поделить всех студентов на две группы. У каждой группы будет ровно по одному занятию в неделю в один из будних дней (понедельник, вторник, среда, четверг или пятница), причем дни занятий у каждой группы должны быть разными. Также было решено, что количество студентов в каждой группе должно быть одинаковым.

Каждый из студентов заполнил форму, в которой отметил дни недели, в которые ему было бы удобно посещать занятия.

Перед вами стоит задача определить, возможно ли выбрать два различных будних дня в неделю, в которые будут проходить занятия у каждой из групп, а также поделить всех студентов на две группы таким образом, чтобы каждый из студентов занимался в один из тех дней, в который ему удобно, при этом количество студентов в каждой из групп должно быть одинаковым.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания \(t\) наборов входных данных.

В первой строке каждого набора входных данных записано одно четное целое число \(n\) (\(2 \le n \le 1\,000\)) — количество студентов.

В \(i\)-й из следующих \(n\) строк следует \(5\) целых чисел \(0\) или \(1\), причем \(j\)-е число равно \(1\), если \(i\)-му студенту удобно ходить на занятия в \(j\)-й будний день, или \(j\)-е число равно \(0\), если \(i\)-му студенту неудобно ходить на занятия в \(j\)-й будний день.

Гарантируется, что каждый из студентов хочет ходить на занятия хотя бы в один из будних дней. Гарантируется, что сумма количества студентов по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите ответ. Если возможно разделить всех студентов на две равные группы и выбрать дни для занятий так, чтобы всем студентам было удобно, выведите «YES» (без кавычек). В противном случае выведите «NO» (без кавычек).

Примечание

В первом наборе входных данных возможно распределить студентов так, чтобы удовлетворить всем описанным условиям. Для этого в одну группу нужно распределить первого и третьего студентов, которые будут заниматься в четверг, то есть в четвертый будний день, а в другую группу — второго и четвертого студентов, которые будут заниматься во вторник, то есть во второй будний день.

Во втором наборе входных данных невозможно разделить студентов на группы так, чтобы группы занимались в разные будние дни.

E. Лестницы

дп Комбинаторика математика Перебор поиск в глубину и подобное реализация Структуры данных *2100

Дана матрица, состоящая из \(n\) строк и \(m\) столбцов. Строки пронумерованы сверху вниз, столбцы пронумерованы слева направо.

Ячейки данной матрицы могут быть свободными или заблокированными.

Назовем путь в матрице лестницей, если он:

  • начинается и заканчивается в свободной ячейке;
  • посещает только свободные ячейки;
  • имеет одну из двух возможных структур:
    1. вторая ячейка лежит на \(1\) справа от первой, третья — на \(1\) снизу от второй, четвертая — на \(1\) справа от третьей, и так далее;
    2. вторая ячейка лежит на \(1\) снизу от первой, третья — на \(1\) справа от второй, четвертая — на \(1\) снизу от третьей, и так далее.

В частности, путь, состоящий из одной ячейки, считается лестницей.

Некоторые примеры лестниц:

Изначально все ячейки в матрице свободные.

Требуется обработать \(q\) запросов, каждый из которых переключает состояние одной ячейки. То есть, если клетка в данный момент свободна, то делает ее заблокированной, а если заблокирована, то делает ее свободной.

После каждого запроса требуется вывести количество различных лестниц. Две лестницы считаются различными, если существует такая ячейка, которая входит в один путь и не входит в другой.

Входные данные

В первой строке записаны три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 1000\); \(1 \le q \le 10^4\)) — размерности матрицы и количество запросов.

В каждой из следующих \(q\) строк записаны два целых числа \(x\) и \(y\) (\(1 \le x \le n\); \(1 \le y \le m\)) — описание очередного запроса.

Выходные данные

Выведите \(q\) целых чисел — \(i\)-е число должно быть равно количеству различных лестниц в матрице после \(i\) запросов. Две лестницы считаются различными, если существует такая ячейка, которая входит в один путь и не входит в другой.

F. ПСП

Бинарный поиск битмаски дп Перебор Структуры данных *2400

Правильная скобочная последовательность (или, коротко, ПСП) — это скобочная последовательность, которую можно превратить в корректное арифметическое выражение, вставив символы «1» и «+» между исходными символами. Например:

  • скобочные последовательности «()()» и «(())» — правильные (из них можно получить выражения «(1)+(1)» и «((1+1)+1)»);
  • скобочные последовательности «)(», «(» и «)» — неправильные.

Обозначим конкатенацию двух строк \(x\) и \(y\) как \(x+y\). Например, «()()» \(+\) «)(» \(=\) «()())(».

У вас есть \(n\) скобочных последовательностей \(s_1, s_2, \dots, s_n\). Вы можете переставить эти строки в любом порядке (можно переставлять только сами строки, но не символы в них).

Ваша задача — переставить строки в таком порядке, чтобы у строки \(s_1 + s_2 + \dots + s_n\) было как можно больше непустых префиксов, являющихся ПСП.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 20\)).

Далее следуют \(n\) строк, \(i\)-я из которых содержит \(s_i\) — скобочную последовательность (строку, состоящую из символов «(» и/или «)». Все последовательности \(s_i\) непустые, их суммарная длина не превосходит \(4 \cdot 10^5\).

Выходные данные

Выведите одно число — максимальное количество непустых префиксов, являющихся ПСП, у строки \(s_1 + s_2 + \dots + s_n\), если вы переставите строки \(s_1, s_2, \dots, s_n\) оптимальным образом.

Примечание

В первом примере из условия можно склеить строки следующим образом: «(» \(+\) «)» \(=\) «()», у полученной строки будет один префикс, являющийся ПСП: «()».

Во втором примере из условия можно склеить строки следующим образом: «(» \(+\) «)» \(+\) «()()())» \(+\) «(» \(=\) «()()()())(», у полученной строки будет четыре префикса, являющихся ПСП: «()», «()()», «()()()», «()()()()».

В третьем и в четвертом примере всего по одной строке, поэтому поменять порядок строк невозможно.

G. Shortest path

геометрия кратчайшие пути математика Перебор *2700

You are given \(N\) points on an infinite plane with the Cartesian coordinate system on it. \(N-1\) points lay on one line, and one point isn't on that line. You are on point \(K\) at the start, and the goal is to visit every point. You can move between any two points in a straight line, and you can revisit points. What is the minimum length of the path?

Input

The first line contains two integers: \(N\) (\(3 \leq N \leq 2*10^5\)) - the number of points, and \(K\) (\(1 \leq K \leq N\)) - the index of the starting point.

Each of the next \(N\) lines contain two integers, \(A_i\), \(B_i\) (\(-10^6 \leq A_i, B_i \leq 10^6\)) - coordinates of the \(i-th\) point.

Output

The output contains one number - the shortest path to visit all given points starting from point \(K\). The absolute difference between your solution and the main solution shouldn't exceed \(10^-6\);

Note

The shortest path consists of these moves:

2 -> 5

5 -> 4

4 -> 1

1 -> 3

There isn't any shorter path possible.

J. Bob's Beautiful Array

битмаски жадные алгоритмы Перебор *2600

Bob really likes playing with arrays of numbers. That's why for his birthday, his friends bought him a really interesting machine – an array beautifier.

The array beautifier takes an array \(A\) consisting of \(N\) integers, and it outputs a new array \(B\) of length N that it constructed based on the array given to it. The array beautifier constructs the new array in the following way: it takes two numbers at different indices from the original array and writes their sum to the end of the new array. It does this step \(N\) times - resulting in an output array of length \(N\). During this process, the machine can take the same index multiple times in different steps.

Bob was very excited about the gift that his friends gave him, so he put his favorite array in the machine. However, when the machine finished, Bob was not happy with the resulting array. He misses his favorite array very much, and hopes to get it back.

Given the array that the machine outputted, help Bob find an array that could be the original array that he put in the machine. Sometimes the machine makes mistakes, so it is possible that no appropriate input array exists for the array it has outputted. In such case, let Bob know that his array is forever lost.

Input

The first line contains one positive integer \(N\) (\(2 \leq N \leq 10^3\)) – the length of Bob's array.

The second line contains \(N\) integers \(B_1\), \(B_2\), ..., \(B_N\) (\(1 \leq B_i \leq 10^6\)) – the elements of the array the machine outputted.

Output

If an appropriate input array exists, print "YES", followed by the input array \(A_1\), \(A_2\), ..., \(A_N\) (\(-10^9 \leq A_i \leq 10^9\)) in the next line. Otherwise, print "NO".

F. Party Organization

математика Перебор Теория вероятностей *2300

On the great island of Baltia, there live \(N\) people, numbered from \(1\) to \(N\). There are exactly \(M\) pairs of people that are friends with each other. The people of Baltia want to organize a successful party, but they have very strict rules on what a party is and when the party is successful. On the island of Baltia, a party is a gathering of exactly \(5\) people. The party is considered to be successful if either all the people at the party are friends with each other (so that they can all talk to each other without having to worry about talking to someone they are not friends with) or no two people at the party are friends with each other (so that everyone can just be on their phones without anyone else bothering them). Please help the people of Baltia organize a successful party or tell them that it's impossible to do so.

Input

The first line contains two integer numbers, \(N\) (\(5 \leq N \leq 2*10^5\)) and \(M\) (\(0 \leq M \leq 2*10^5\)) – the number of people that live in Baltia, and the number of friendships. The next \(M\) lines each contains two integers \(U_i\) and \(V_i\) (\(1 \leq U_i,V_i \leq N\)) – meaning that person \(U_i\) is friends with person \(V_i\). Two friends can not be in the list of friends twice (no pairs are repeated) and a person can be friends with themselves (\(U_i \ne V_i\)).

Output

If it's possible to organize a successful party, print \(5\) numbers indicating which \(5\) people should be invited to the party. If it's not possible to organize a successful party, print \(-1\) instead. If there are multiple successful parties possible, print any.

C. Доминантный характер

жадные алгоритмы Перебор реализация Строки *1400

У Ashish есть строка \(s\) длины \(n\), содержащая только символы 'a', 'b' и 'c'.

Он хочет найти длину наименьшей подстроки, которая удовлетворяет следующим условиям:

  • Длина подстроки не меньше чем \(2\)
  • 'a' встречается строго больше раз в этой подстроке, чем 'b'
  • 'a' встречается строго больше раз в этой подстроке, чем 'c'

Ashish занят планированием следующего раунда Codeforces. Помогите ему решить задачу.

Строка \(a\) является подстрокой строки \(b\), если \(a\) можно получить из \(b\), удалив несколько (возможно, ноль или все) символов из начала и несколько (возможно, ноль или все) символов из конца.

Входные данные

Первая строка содержит одно целое число \(t\) \((1 \le t \le 10^{5})\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((2 \le n \le 10^{6})\)  — длину строки \(s\).

Вторая строка каждого набора входных данных содержит строку \(s\), состоящую только из символов 'a', 'b' и 'c'.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^{6}\).

Выходные данные

Для каждого набора входных данных выведите длину наименьшей подстроки, удовлетворяющей заданным условиям, или выведите \(-1\), если такой подстроки нет.

Примечание

Рассмотрим первый набор входных данных. В подстроке «aa», 'a' встречается дважды, а 'b' и 'c' встречаются ноль раз. Поскольку 'a' встречается строго больше раз, чем 'b' и 'c', подстрока «aa» удовлетворяет условию, и ответ равен \(2\). Подстрока «a» также удовлетворяет этому условию, однако ее длина меньше \(2\).

Во втором наборе входных данных можно показать, что ни в одной из подстрок «cbabb» 'a' не встречается строго больше раз, чем 'b' и 'c'.

В третьем наборе входных данных, «cacabccc», длина наименьшей подстроки, удовлетворяющей условиям, равна \(3\).

D. Красно-синяя матрица

Конструктив Перебор реализация сортировки *2400

Дана матрица, состоящая из \(n\) строк и \(m\) столбцов. В \(j\)-й ячейке \(i\)-й строки записано целое число \(a_{ij}\).

Сначала необходимо раскрасить каждую строку матрицы либо в красный, либо в синий цвет, так, чтобы хотя бы одна строка была красная и хотя бы одна строка была синяя.

Затем необходимо выбрать целое число \(k\) (\(1 \le k < m\)) и разрезать матрицу таким образом, что первые \(k\) столбцов становятся отдельной матрицей (левой матрицей) и последние \(m-k\) столбцов становятся отдельной матрицей (правой матрицей).

Раскраска и разрез называются идеальными, если выполняются два условия:

  • в каждой красной ячейке левой матрицы записано число большее, чем в каждой синей ячейке левой матрицы;
  • в каждой синей ячейке правой матрицы записано число большее, чем в каждой красной ячейке правой матрицы.

Найдите любые идеальные раскраску и разрез или скажите, что таких нет.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следуют описания \(t\) наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(m\) (\(2 \le n, m \le 5 \cdot 10^5\); \(n \cdot m \le 10^6\)) — количество строк и столбцов в матрице, соответственно.

В \(i\)-й из следующих \(n\) строк записаны по \(m\) целых чисел \(a_{i1}, a_{i2}, \dots, a_{im}\) (\(1 \le a_{ij} \le 10^6\)).

Сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

На каждый набор входных данных выведите ответ. Если нет идеальных раскраски и разреза, то выведите «NO».

Иначе, сначала выведите «YES». Затем строку, состоящую из \(n\) символов: \(i\)-й символ должен быть 'R', если \(i\)-я строка покрашена в красный и 'B', если в синий. В строке должен быть хотя бы один символ 'R' и хотя бы один символ 'B'. Наконец, выведите целое число \(k\) (\(1 \le k < m\)) — количество столбцов, которые отрезаются слева.

Примечание

Раскраска и разрез для первого набора входных данных:

F. Древесные запросы

Деревья дп Перебор *2800

Дано дерево, состоящее из \(n\) вершин. Напомним, что дерево — это неориентированный ацикличный граф. Корнем данного дерева является вершина \(1\).

Требуется обработать \(q\) запросов. В каждом запросе задается вершина дерева \(v\) и целое число \(k\).

Для обработки запроса можно удалять вершины из дерева в произвольном порядке, кроме корня и вершины \(v\). Когда вершина удаляется, ее дети становятся детьми ее родителя. Требуется обработать запрос так, чтобы максимизировать значение \(c(v) - m \cdot k\) (где \(c(v)\) — это итоговое количество детей вершины \(v\), а \(m\) — это количество удаленных вершин). Выведите максимальное значение, которое можно получить.

Запросы независимые: изменения, произведенные над деревом при обработке запроса, не затрагивают другие запросы.

Входные данные

В первой строке записано одно число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Затем следует \(n-1\) строка, в \(i\)-й из них записаны два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\); \(x_i \ne y_i\)) — концы \(i\)-го ребра. Данные ребра образуют дерево.

В следующей строке записано одно целое \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Затем следуют \(q\) строк, в \(j\)-й из них записаны два целых числа \(v_j\) и \(k_j\) (\(1 \le v_j \le n\); \(0 \le k_j \le 2 \cdot 10^5\)) — параметры \(j\)-го запроса.

Выходные данные

На каждый запрос выведите одно целое число — максимальное значение \(c(v) - m \cdot k\), которое можно получить.

Примечание

Дерево в первом примере показано на следующем изображении:

Ответы на запросы получаются следующим образом:

  1. \(v=1,k=0\): можно удалить вершины \(7\) и \(3\), так, чтобы у вершины \(1\) стало \(5\) детей (вершины \(2\), \(4\), \(5\), \(6\) и \(8\)), и счет равен \(5 - 2 \cdot 0 = 5\);
  2. \(v=1,k=2\): можно удалить вершину \(7\), так, чтобы у вершины \(1\) стало \(4\) ребенка (вершины \(3\), \(4\), \(5\) и \(6\)), и счет равен \(4 - 1 \cdot 2 = 2\).
  3. \(v=1,k=3\): не надо удалять вершины; тогда у вершины \(1\) станет один ребенок (вершина \(7\)), и счет равен \(1 - 0 \cdot 3 = 1\);
  4. \(v=7,k=1\): можно удалить вершину \(3\), так, чтобы у вершины \(7\) стало \(5\) детей (вершины \(2\), \(4\), \(5\), \(6\) и \(8\)), и счет равен \(5 - 1 \cdot 1 = 4\);
  5. \(v=5,k=0\): что бы вы ни делали, у вершины \(5\) не будет детей, поэтому счет равен \(0\);
  6. \(v=7,k=200000\): не надо удалять вершины; тогда у вершины \(7\) станет \(4\) ребенка (вершины \(3\), \(4\), \(5\) и \(6\)), и счет равен \(4 - 0 \cdot 200000 = 4\).

C. Устранение минимума

Перебор сортировки *1000

У Елисея есть массив \(a\), в котором записаны \(n\) целых чисел.

Если массив \(a\) имеет длину строго больше \(1\), то Елисей может применить к нему операцию устранения минимума:

  1. Сначала Елисей находит в массиве минимальное число \(m\). Если есть несколько одинаковых минимальных элементов, Елисей может выбрать любой из них.
  2. Затем выбранный минимальный элемент удаляется из массива. После этого из каждого оставшегося элемента вычитается \(m\).

Таким образом, после каждой операции длина массива уменьшается на \(1\).

Например, если \(a = [1, 6, -4, -2, -4]\), то минимальный элемент в нем равен \(a_3 = -4\), соответственно после этой операции массив станет равен \(a=[1 {- (-4)}, 6 {- (-4)}, -2 {- (-4)}, -4 {- (-4)}] = [5, 10, 2, 0]\).

Поскольку Елисею нравятся большие числа, он хочет, чтобы и в массиве \(a\) числа были как можно больше.

Формально, он хочет добиться того, чтобы минимальное из чисел в массиве \(a\) было максимально возможным (то есть он максимизирует минимум). Для этого он может сколько угодно раз (возможно, ноль) применить к массиву операцию устранения минимума. Обратите внимание, что операцию нельзя применять к массиву длины \(1\).

Помогите ему найти, какое максимальное значение может иметь минимальный элемент массива после применения к массиву нескольких (возможно, ноль) операций устранений минимума.

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

В следующих \(2t\) строках даны описания наборов входных данных.

В описании каждого набора входных данных первая строка содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — исходная длина массива \(a\). Во второй строке описания через пробел перечислены \(n\) целых чисел \(a_i\) (\(-10^9 \leq a_i \leq 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных теста не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите единственное целое число — максимально возможный минимум в \(a\), который можно получить несколькими применениями описанной операции к массиву \(a\).

Примечание

В первом наборе входных данных примера изначальная длина массива \(n = 1\). Поэтому к нему нельзя применять устранение минимума. Таким образом, массив остаётся неизменным и ответ равен \(a_1 = 10\).

Во втором наборе входных данных массив всегда будет состоять только из нулей.

В третьем наборе массив будет принимать состояния \([\color{blue}{-1}, 2, 0] \to [3, \color{blue}{1}] \to [\color{blue}{2}]\). Минимальные элементы выделены \(\color{blue}{\text{синим}}\) цветом. Максимальный из них равен \(2\).

В четвертом наборе массив будет принимать состояния \([2, 10, \color{blue}{1}, 7] \to [\color{blue}{1}, 9, 6] \to [8, \color{blue}{5}] \to [\color{blue}{3}]\). Аналогично, максимальный из минимальных элементов равен \(5\).

F. Робот на доске 2

графы Перебор поиск в глубину и подобное реализация *2300

Робот находится на клетчатой прямоугольной доске размера \(n \times m\) (\(n\) строк, \(m\) столбцов). Строки пронумерованы от \(1\) до \(n\) сверху вниз, столбцы — от \(1\) до \(m\) слева направо.

Робот умеет передвигаться из текущей клетки в одну из четырех соседних с ней по стороне.

На каждой клетке доски написан один из символов 'L', 'R', 'D' или 'U', обозначающий направление движения робота, находящегося в этой клетке — влево, вправо, вниз или вверх, соответственно.

Начать свое движение робот может в любой клетке. После этого он за один ход перемещается в соседнюю по стороне клетку в направлении, указанном на текущей клетке.

  • Если робот перемещается за границу доски, он падает и ломается.
  • Если робот оказывается в клетке, в которой он был ранее, то он ломается (он останавливается и больше не двигается).

Робот может выбрать любую клетку в качестве стартовой. Его цель — совершить максимальное количество команд до поломки или остановки.

Определите, с какой клетки роботу стоит начинать свое движение, чтобы выполнить как можно больше команд. Команда считается успешно выполненной, если робот переместился с той клетки, на которой эта команда была написана (не важно, на другую клетку или за границу доски).

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10000\)) — количество наборов входных данных в тесте.

Перед каждым набором в тесте записана пустая строка. Далее идёт строка, которая содержит целые числа \(n\) и \(m\) (\(1 \le n \le 2000\); \(1 \le m \le 2000\)) — размеры доски. Затем следуют \(n\) строк, \(i\)-я из которых описывает \(i\)-ю строку доски. Каждая из них имеет длину ровно \(m\) и состоит из символов 'L', 'R', 'D' и 'U'.

Гарантируется, что сумма размеров всех досок во входных данных не превосходит \(4\cdot10^6\).

Выходные данные

Для каждого набора входных данных выведите три целых числа \(r\), \(c\) и \(d\) (\(1 \le r \le n\); \(1 \le c \le m\); \(d \ge 0\)), которые обозначают, что роботу следует начать движение из клетки \((r, c)\), чтобы сделать максимальное количество ходов \(d\). Если ответов несколько, то выведите любой из них.

A. Оденьте их скорее!

Бинарный поиск жадные алгоритмы Перебор *1300

В Двумерном королевстве наступили тяжелые времена... Сегодня утром Трехмерное королевство объявило войну Двумерному и в ходе этого (возможно, вооруженного) конфликта решится, кому же все-таки принадлежит прямая.

В Двумерном королевстве есть постоянная армия, состоящая из n человек. Каждый боец прошел специальную регистрацию и указал желаемый размер бронежилета: i-ый боец указал размер ai. Известно, что бойцы люди неприхотливые, поэтому штаб считает, что им комфортно носить любые бронежилеты с размерами от ai - x до ai + y включительно (числа x, y ≥ 0 заданы).

В распоряжении армии Двумерного королевства есть m бронежилетов, размер j-го бронежилета равен bj. Помогите мобилизовать армию Двумерного королевства — оденьте наибольшее возможное количество бойцов армии в бронежилеты. Каждый бронежилет разрешается использовать только один раз. i-ый боец может надеть j-ый бронежилет, если ai - x ≤ bj ≤ ai + y.

Входные данные

В первой строке входных данных записаны четыре целых числа n, m, x и y (1 ≤ n, m ≤ 105, 0 ≤ x, y ≤ 109) — количество бойцов, количество бронежилетов и два числа, характеризующие неприхотливость бойцов, соответственно.

Во второй строке записаны в неубывающем порядке n разделенных единичными пробелами целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — желаемые размеры бронежилетов.

В третьей строке записаны в неубывающем порядке m разделенных единичными пробелами целых чисел b1, b2, ..., bm (1 ≤ bj ≤ 109) — размеры имеющихся в наличии бронежилетов.

Выходные данные

В первой строке выведите единственное целое число k — максимальное количество одетых в бронежилеты бойцов.

В следующих k строках выведите k пар, по одной паре в строке в формате «ui vi» (без кавычек). Пара (ui, vi) означает, что боец с номером ui должен быть одет в бронежилет номер vi. Бойцы и бронежилеты нумеруются, начиная с единицы, в том порядке, в котором они заданы во входных данных. Все номера бойцов в парах должны быть попарно различны, все номера бронежилетов в парах также должны быть попарно различны. Пары можно выводить в любом порядке.

Если существует несколько оптимальных ответов, разрешается вывести любой.

Примечание

В первом примере требуется точное совпадение размеров бронежилетов: первый боец получает первый бронежилет (размер 1), а третий — второй бронежилет (размер 3). В этом примере возможен другой ответ, в котором второй бронежилет достается не третьему, а четвертому бойцу.

Во втором примере размер бронежилета должен отличаться от пожеланий бойца не больше чем на 2 размера, и одеть можно всех бойцов.

E. Медвежатник Поликарп

дп Перебор *2500

У Поликарпа есть t сейфов. Паролем от каждого сейфа является квадратная матрица из десятичных цифр '0' ... '9' (размеры паролей сейфов могут различаться). Увы, Поликарп забыл все пароли, и теперь ему предстоит их восстановить.

Поликарп любит простые числа, поэтому, когда он выбирал матрицы-пароли, он в каждую строку каждой матрицы вписал по простому числу. К своему удивлению, он обнаружил, что все матрицы получились симметричными (то есть после транспонирования остаются неизменными). Сейчас, годы спустя, к своей досаде Поликарп осознал, что он помнит только простые числа pi, записанные в первых строках матриц-паролей.

Для каждого сейфа найдите количество матриц, которые могут быть паролем к нему.

Количество цифр в pi определяет количество строк и столбцов i-ой матрицы. Одно простое число может содержаться сразу в нескольких строках матрицы-пароля или в нескольких матрицах. Простые числа, записанные не в первой строке матрицы, могут иметь ведущие нули.

Входные данные

В первой строке входных данных записано целое число t (1 ≤ t ≤ 30) — количество сейфов. Далее в t строках записаны целые числа pi (10 ≤ pi ≤ 99999), pi — простое число, записанное в первой строке матрицы-пароля для i-ого сейфа. Все pi не содержат ведущих нулей.

Выходные данные

Выведите t чисел, i-ое из которых является количеством матриц, которые могут быть паролем к i-ому сейфу. Числа выводите на отдельных строках.

Примечание

Пример возможной матрицы-пароля для второго сейфа:


239
307
977

Пример возможной матрицы-пароля для четвертого сейфа:


9001
0002
0002
1223

E. AmShZ и G.O.A.T.

Бинарный поиск жадные алгоритмы математика Перебор реализация *2300

Назовем массив из \(k\) целых чисел \(c_1, c_2, \ldots, c_k\) ужасным, если выполняется следующее условие:

  • Пусть \(AVG\) — это \(\frac{c_1 + c_2 + \ldots + c_k}{k}\) (то есть среднее значение всех элементов массива, не обязательно целое). Тогда количество элементов массива, которые больше \(AVG\), должно быть строго больше количества элементов массива, которые меньше \(AVG\). Обратите внимание, что элементы, равные \(AVG\), не учитываются.

    Например, \(c = \{1, 4, 4, 5, 6\}\) является ужасным, потому что \(AVG = 4.0\) и \(5\)-й и \(4\)-й элементы больше \(AVG\), а \(1\)-й элемент меньше \(AVG\).

Назовем массив из \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) плохим, если хотя бы одна из его непустых подпоследовательностей ужасна, и хорошим в противном случае.

Вам дан массив из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Найдите минимальное количество элементов, которые нужно удалить из него, чтобы получить хороший массив.

Массив является подпоследовательностью другого массива, если он может быть получен из него путем удаления нескольких (возможно, нуля или всех) элементов.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — размер \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

В каждом наборе входных данных для любого \(1 \le i \lt n\) гарантируется, что \(a_i \le a_{i+1}\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество элементов, которые нужно удалить из него, чтобы получить хороший массив.

Примечание

В первом примере массив \(a\) уже хороший.

Во втором примере достаточно удалить \(1\), получив массив \([4, 4, 5, 6]\), который является хорошим.

A. Расстояние

Конструктив Перебор *800

Давайте обозначим манхэттенское расстояние между двумя точками \(p_1\) (с координатами \((x_1, y_1)\)) и \(p_2\) (с координатами \((x_2, y_2)\)) как \(d(p_1, p_2) = |x_1 - x_2| + |y_1 - y_2|\). Например, расстояние между двумя точками с координатами \((1, 3)\) и \((4, 2)\) равно \(|1 - 4| + |3 - 2| = 4\).

Вам заданы две точки \(A\) и \(B\). Точка \(A\) имеет координаты \((0, 0)\), точка \(B\) имеет координаты \((x, y)\).

Ваша цель — найти точку \(C\) такую, что:

  • обе координаты \(C\) являются неотрицательными целыми числами;
  • \(d(A, C) = \dfrac{d(A, B)}{2}\) (без округления);
  • \(d(B, C) = \dfrac{d(A, B)}{2}\) (без округления).

Найдите любую точку \(C\), которая удовлетворяет этим условиям, или сообщите, что такой точки не существует.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 3000\)) — количество наборов входных данных.

Каждый набор состоит из одной строки, содержащей два целых числа \(x\) и \(y\) (\(0 \le x, y \le 50\)) — координаты точки \(B\).

Выходные данные

Для каждого набора входных данных выведите ответ в отдельной строке следующим образом:

  • если невозможно найти точку \(C\), удовлетворяющую всем условиям, выведите «-1 -1» (без кавычек);
  • в противном случае выведите два неотрицательных целых числа, не превышающих \(10^6\) — координаты точки \(C\), удовлетворяющей всем условиям. Если существует несколько ответов, выведите любой из них. Можно показать, что если такая точка существует, то можно найти точку с координатами, не превышающими \(10^6\), которая удовлетворяет условиям.
Примечание

Пояснения к некоторым примерам:

  • В первом примере точка \(B\) имеет координаты \((49, 3)\). Если точка \(C\) имеет координаты \((23, 3)\), то расстояние от \(A\) до \(B\) равно \(|49 - 0| + |3 - 0| = 52\), расстояние от \(A\) до \(C\) равно \(|23 - 0| + |3 - 0| = 26\), и расстояние от \(B\) до \(C\) равно \(|23 - 49| + |3 - 3| = 26\).
  • Во втором примере точка \(B\) имеет координаты \((2, 50)\). Если точка \(C\) имеет координаты \((1, 25)\), то расстояние от \(A\) до \(B\) равно \(|2 - 0| + |50 - 0| = 52\), расстояние от \(A\) до \(C\) равно \(|1 - 0| + |25 - 0| = 26\), и расстояние от \(B\) до \(C\) равно \(|1 - 2| + |25 - 50| = 26\).
  • В третьем и четвертом примерах можно показать, что ни одна точка с целочисленными координатами не соответствует условиям.
  • В пятом примере точка \(B\) имеет координаты \((42, 0)\). Если точка \(C\) имеет координаты \((21, 0)\), то расстояние от \(A\) до \(B\) равно \(|42 - 0| + |0 - 0| = 42\), расстояние от \(A\) до \(C\) равно \(|21 - 0| + |0 - 0| = 21\), и расстояние от \(B\) до \(C\) равно \(|21 - 42| + |0 - 0| = 21\).

E. Сообщения

дп жадные алгоритмы Перебор сортировки Теория вероятностей *2000

Монокарп — тьютор группы из \(n\) студентов. Он связывается с ними через конференцию в популярном мессенджере.

Сегодня у Монокарпа был напряженный день — его просили переслать его группе огромное количество объявлений, поэтому ему пришлось написать в конференции очень много сообщений. Монокарп достаточно хорошо знает студентов из группы, поэтому понимает, какое сообщение является важным для каждого студента: Монокарп хочет, чтобы студент \(i\) прочитал сообщение \(m_i\).

Конечно же, никто не будет читать все сообщения. Поэтому Монокарп решил прикрепить некоторые из них. Монокарп может прикрепить любое количество сообщений, и если он хочет, чтобы какое-то сообщение было прочитано, ему стоит прикрепить его — в противном случае никто такое сообщение не прочитает.

К сожалению, даже если сообщение прикреплено, некоторые студенты все равно могут его пропустить. Для каждого студента \(i\) Монокарп знает, что этот студент прочитает не более \(k_i\). Предположим, что Монокарп прикрепляет \(t\) сообщений; если \(t \le k_i\), то \(i\)-й студент прочитает все прикрепленные сообщения; но если \(t > k_i\), \(i\)-й студент выберет ровно \(k_i\) случайных прикрепленных сообщений (все различные подмножества размера \(k_i\) множества прикрепленных сообщений равновероятны) и прочитает только их.

Монокарп хочет максимизировать математическое ожидание количества студентов, которые прочитают необходимые им сообщения (это соответствует количеству таких индексов \(i\), что студент \(i\) прочитает сообщение \(m_i\)). Помогите ему выбрать, какие сообщения прикрепить!

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество студентов в конференции.

Затем следуют \(n\) строк. \(i\)-я строка содержит два целых числа \(m_i\) и \(k_i\) (\(1 \le m_i \le 2 \cdot 10^5\); \(1 \le k_i \le 20\)) — номер сообщения, которое должен прочитать \(i\)-й студент, и максимальное кол-во сообщений, которое \(i\)-й студент может прочитать, соответственно.

Выходные данные

В первой строке выведите одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество сообщений, которые должен прикрепить Монокарп. Во второй строке выведите \(t\) различных целых чисел \(c_1\), \(c_2\), ..., \(c_t\) (\(1 \le c_i \le 2 \cdot 10^5\)) — номера сообщений, которые необходимо прикрепить. Номера сообщений можно выводить в любом порядке.

Если оптимальных ответов несколько, выведите любой из них.

Примечание

Рассмотрим примеры из условия.

  1. В первом примере Монокарп прикрепляет сообщения \(5\) и \(10\).
    • если первый студент прочитает сообщение \(5\), второй студент прочитает сообщения \(5\) и \(10\), и третий студент прочитает сообщения \(5\) и \(10\), количество студентов, которые прочитают соответствующие им сообщения, будет равно \(2\);
    • если первый студент прочитает сообщение \(10\), второй студент прочитает сообщения \(5\) и \(10\), и третий студент прочитает сообщения \(5\) и \(10\), количество студентов, которые прочитают соответствующие им сообщения, будет равно \(3\).

    Поэтому математическое ожидание количества студентов, которые прочитают соответствующие им сообщения, равно \(\frac{5}{2}\).

  2. В первом примере Монокарп прикрепляет сообщение \(10\).
    • если первый студент прочитает сообщение \(10\), второй студент прочитает сообщение \(10\), и третий студент прочитает сообщение \(10\), количество студентов, которые прочитают соответствующие им сообщения, будет равно \(2\).

    Поэтому математическое ожидание количества студентов, которые прочитают соответствующие им сообщения, равно \(2\). Если бы Монокарп прикрепил и сообщение \(5\), и сообщение \(10\), математическое ожидание так же было бы равно \(2\).

  3. В третьем примере математическое ожидание кол-ва студентов, которые прочитают соответствующие им сообщения, равно \(\frac{8}{3}\).
  4. В четвертом примере математическое ожидание кол-ва студентов, которые прочитают соответствующие им сообщения, равно \(2\).

F. Доспехи и оружие

дп жадные алгоритмы кратчайшие пути Перебор *2800

Монокарп играет в компьютерную игру. В этой игре есть \(n\) различных доспехов и \(m\) различных оружий. Если персонаж снаряжен \(i\)-м доспехом и владеет \(j\)-м оружием, его сила обычно равна \(i + j\); но некоторые комбинации доспехов и оружия хорошо сочетаются. Формально существует список \(q\) упорядоченных пар, и если пара \((i, j)\) принадлежит этому списку, сила персонажа, снаряженным \(i\)-м доспехом и владеющего \(j\)-м оружием, составляет не \(i + j\), а \(i + j + 1\).

Изначально персонаж Монокарпа владеет только \(1\)-м доспехом и \(1\)-м оружием. Монокарп может получить новое оружие или новый доспех за один час. Если он хочет получить \(k\)-й доспех или \(k\)-е оружие, он должен обладать комбинацией доспеха и оружия, чья суммарная сила \(k\) или больше. Конечно, после того, как Монокарп получит оружие или доспех, он может использовать его для получения новых доспехов или оружия, но также он может использовать любой из старых доспехов и/или оружия.

Монокарп хочет получить \(n\)-й доспех и \(m\)-е оружие. Какое минимальное количество часов он должен потратить на это?

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n, m \le 2 \cdot 10^5\)) — количество доспехов и количество оружия соответственно.

Вторая строка содержит одно целое число \(q\) (\(0 \le q \le \min(2 \cdot 10^5, nm)\)) — количество комбинаций, которые хорошо сочетаются.

Затем следуют \(q\) строк, \(i\)-я строка содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i \le n\); \(1 \le b_i \le m\)), что означает, что \(a_i\)-й доспех хорошо сочетается с \(b_i\)-м оружием. Все пары \((a_i, b_i)\) различны.

Выходные данные

Выведите одно целое число — минимальное количество часов, которое Монокарп должен потратить на получение как \(n\)-го доспеха, так и \(m\)-го оружия.

Примечание

В первом примере Монокарп может получить самый сильный доспех и самое сильное оружие следующим образом:

  1. Получить \(2\)-е оружие используя \(1\)-й доспех и \(1\)-е оружие;
  2. Получить \(3\)-й доспех используя \(1\)-й доспех и \(2\)-е оружие;
  3. Получить \(4\)-е оружие используя \(3\)-й доспех и \(2\)-е оружие.

Во втором примере Монокарп может получить самый сильный доспех и самое сильное оружие следующим образом:

  1. Получить \(3\)-й доспех используя \(1\)-й доспех и \(1\)-е оружие (они хорошо сочетаются, а значит сила Монокарпа равна не \(2\), а \(3\));
  2. Получить \(4\)-е оружие используя \(3\)-й доспех и \(1\)-е оружие.

A. Divan и магазин

жадные алгоритмы Конструктив Перебор *800

Бизнесмен по имени Divan обожает шоколад! Сегодня он пришёл в магазин, чтобы закупиться им. Как и любой другой бизнесмен, Divan знает цену деньгам, поэтому он считает, что покупать слишком дорогие плитки шоколада не имеет никакого смысла, несмотря на всю его любовь к шоколаду. С другой же стороны, слишком дешёвый шоколад обычно слишком невкусный и вообще непонятно, зачем его покупать, ведь кроме отвращения он ничего не вызывает.

В магазине, в который он пришёл, есть \(n\) различных плиток шоколада, \(i\)-я из которых имеет цену \(a_i\) долларов. Слишком дорогой плиткой шоколада Divan считает такую, что её цена строго выше \(r\) долларов. Слишком дешёвой плиткой шоколада он считает такую, что её цена строго меньше, чем \(l\) долларов. Диван не будет покупать плитку, если она слишком дешёвая или слишком дорогая.

Кроме того, даже если по отдельности плитки шоколада не столь уж и дорогие, Divan, конечно, не собирается всю свою прибыль тратить на них, поэтому он ограничивает свои траты на шоколад \(k\) долларами.

Ваша задача заключается в том, чтобы определить, какое максимальное число плиток шоколада Divan сможет сегодня купить.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора заданы четыре целых числа \(n\), \(l\), \(r\) и \(k\) (\(1 \le n \le 100\), \(1 \le l \le r \le 10^9\), \(1 \le k \le 10^9\)) — количество плиток в магазине, самая низкая и самая высокая цены, по которым Divan готов купить шоколадку, и бюджет, рассчитанный на покупку шоколада соответственно.

Во второй строке набора задана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — цены плиток шоколада в магазине.

Выходные данные

Для каждого набора входных данных выведите единственное число — максимальное количество плиток шоколада, которые Divan сможет купить.

Примечание

В первом примере Divan сможет купить плитки шоколада под номерами \(1\) и \(3\) и потратит на это \(100\) долларов.

Во втором примере Divan сможет купить плитки шоколада под номерами \(3\) и \(4\) и потратит на это \(7\) долларов.

Во третьем примере Divan сможет купить плитки шоколада под номерами \(3\), \(4\) и \(5\), потратив на это \(12\) долларов.

В четвёртом примере Divan не может купить ни одной плитки шоколада, потому что каждую из них он считает либо слишком дешёвой, либо слишком дорогой.

В пятом примере Divan не может купить ни одной плитки шоколада, потому что первую плитку он считает слишком дешёвой, а на вторую и третью ему не хватит выделенного бюджета.

В шестом примере Divan сможет купить все плитки шоколада, которые есть в магазине.

C. Менора

графы жадные алгоритмы математика Перебор *1600

У вас есть особая версия меноры: она состоит из \(n\) свечей и некоторые из них уже зажжены. Мы можем описать, какие из свечей горят, с помощью бинарной строки \(s\), где \(i\)-я свечка горит тогда и только тогда, когда \(s_i=1\).

Первоначально, горящие свечки описаны строкой \(a\). За одну операцию, вы можете выбрать любую горящую в данный момент свечку — выбранная свеча продолжит гореть, а каждая из других свечей изменит свое состояние (если она горела, то потухнет, а если не горела — то загорится).

Вы хотите, чтобы в результате свечи горели так, как описывает строка \(b\). Ваша задача определить, возможно ли это и какое наименьшее количество операций нужно будет совершить.

Входные данные

В первой строке задано одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(1\le n\le 10^5\)) — количество свечей.

Во второй строке каждого набора задана строка \(a\) длины \(n\), состоящая из символов 0 и 1 — первоначально состояние свечей.

В третьей строке задана строка \(b\) длины \(n\), состоящая из символов 0 и 1 — желаемое состояние свечей.

Гарантируется, что сумма \(n\) не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите наименьшее количество операций, чтобы превратить \(a\) в \(b\), или же \(-1\), если это невозможно.

Примечание

В первом наборе входных данных, две строки уже равны, а потому нам не нужно применять ни одной операции.

Во втором наборе, мы можем применить одну операцию, выбрав вторую свечку, и превратить \(01\) в \(11\).

В третьем наборе, невозможно применить ни одной операции, потому что нет ни одной горящей свечи, которую можно выбрать.

В четвертом наборе, мы можем применить следующие операции, чтобы превратить \(a\) в \(b\):

  1. Выберем \(7\)-ю свечу: \(100010{\color{red}1}11\to 011101{\color{red} 1}00\).
  2. Выберем \(2\)-ю свечу: \(0{\color{red} 1}1101100\to 1{\color{red} 1}0010011\).
  3. Выберем \(1\)-ю свечу: \({\color{red}1}10010011\to {\color{red}1}01101100\).

В пятом наборе, мы можем применить следующие операции, чтобы превратить \(a\) в \(b\):

  1. Выберем \(6\)-ю свечу: \(00101{\color{red}1}011\to 11010{\color{red}1}100\)
  2. Выберем \(2\)-ю свечу: \(1{\color{red}1}0101100\to 0{\color{red}1}1010011\)
  3. Выберем \(8\)-ю свечу: \(0110100{\color{red}1}1\to 1001011{\color{red}1}0\)
  4. Выберем \(7\)-ю свечу: \(100101{\color{red}1}10\to 011010{\color{red}1}01\)

C. Репрезентативные края

геометрия математика Перебор реализация *1500

Массив \(a_1, a_2, \ldots, a_n\) называется хорошим, если и только если для любого подотрезка \(1 \leq l \leq r \leq n\), выполняется следующее: \(a_l + a_{l + 1} + \ldots + a_r = \frac{1}{2}(a_l + a_r) \cdot (r - l + 1)\).

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\). За одну операцию вы можете заменить один любой элемент массива на любое вещественное число. Определите минимальное число операций, необходимое, чтобы сделать массив хорошим.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)): количество наборов входных данных.

Далее следуют описания \(t\) наборов входных данных, по две строки на набор.

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 70\)): количество чисел в массиве.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-100 \leq a_i \leq 100\)): изначальный массив.

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальное число элементов, которое нужно заменить, чтобы массив стал хорошим.

Примечание

В первом примере массив хороший изначально.

Во втором примере один из возможных хороших массивов — \([1, 1, \underline{1}, \underline{1}]\) (замененные элементы подчеркнуты).

В третьем примере массив хороший изначальное.

Во четвертом примере один из возможных хороших массивов — \([\underline{-2.5}, -2, \underline{-1.5}, -1, \underline{-0.5}, 0]\).

E. Лексикографически достаточно малая

жадные алгоритмы Перебор Строки Структуры данных *2200

Вам даны две строки \(s\) и \(t\) равной длины \(n\). За одну операцию вы можете поменять местами любые два соседних символа в строке \(s\).

Вам нужно сказать, какое наименьшее количество операций вам потребуется, чтобы строка \(s\) стала лексикографически меньше строки \(t\).

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 10\,000\)): количество тестовых случаев.

Первая строка каждого тестового случая содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Вторая строка каждого тестового случая содержит строку \(s\) из \(n\) строчных букв латинского алфавита.

Третья строка каждого тестового случая содержит строку \(t\) из \(n\) строчных букв латинского алфавита.

Гарантируется, что сумма значений \(n\) по всем тестовым случаям не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового случая в отдельной строке выведите наименьшее количество операций, которое вам потребуется, чтобы строка \(s\) стала лексикографически меньше строки \(t\), или \(-1\), если это невозможно сделать.

F. Трехцветные треугольники

графы математика матрицы Перебор *2900

Вам дан простой неориентированный граф из \(n\) вершин и \(m\) ребер. Ребро \(i\) имеет цвет \(c_i\), который равен \(1\), \(2\) или \(3\), или еще не покрашено (в таком случае \(c_i = -1\)).

Вам нужно покрасить все еще не покрашенные ребра так, чтобы для любых трех попарно соседних вершин \(1 \leq a < b < c \leq n\) цвета ребер \(a \leftrightarrow b\), \(b \leftrightarrow c\) и \(a \leftrightarrow c\) были либо попарно различны, либо все одинаковые. В случае, если не существует подходящей раскраски, вы должны определить это.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10\)): количество наборов входных данных.

Следующие строки содержат описания наборов входных данных.

Первая строка содержит два целых числа \(n\) и \(m\) (\(3 \leq n \leq 64\), \(0 \leq m \leq \min(256, \frac{n(n-1)}{2})\)): количество вершин и ребер в графе.

Каждая из следующих \(m\) строк содержит три целых числа \(a_i\), \(b_i\) и \(c_i\) (\(1 \leq a_i, b_i \leq n\), \(a_i \ne b_i\), \(c_i\) равно \(-1\), \(1\), \(2\) или \(3\)), означающих, что между вершинами \(a_i\) и \(b_i\) существует ребро цвета \(c_i\). Гарантируется, что любая пара вершин соединена не более чем одним ребром.

Выходные данные

Для каждого набора входных данных выведите \(m\) целых чисел \(d_1, d_2, \ldots, d_m\), где \(d_i\) — цвет \(i\)-го ребра в вашей раскраске. Если не существует подходящей раскраски, выведите \(-1\).

B. Задача про НОД

Конструктив математика Перебор теория чисел *900

Дано целое положительное число \(n\). Найдите три различных целых положительных числа \(a\), \(b\), \(c\) таких, что \(a + b + c = n\) и \(\operatorname{gcd}(a, b) = c\), где \(\operatorname{gcd}(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит единственное целое число \(n\) (\(10 \le n \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите три различных целых положительных числа \(a\), \(b\), \(c\), удовлетворяющих требованиям. Если существует несколько решений, вы можете вывести любое. Мы можем показать, что ответ всегда существует.

Примечание

В первом наборе входных данных \(6 + 9 + 3 = 18\) и \(\operatorname{gcd}(6, 9) = 3\).

Во втором наборе входных данных \(21 + 39 + 3 = 63\) и \(\operatorname{gcd}(21, 39) = 3\).

В третьем наборе входных данных \(29 + 43 + 1 = 73\) и \(\operatorname{gcd}(29, 43) = 1\).

F. Сыграем в Шляпу?

жадные алгоритмы Конструктив математика Перебор *2000

Шляпа — игра на скоростное объяснение/отгадывание слов. Это весело. Попробуйте! В этой задаче речь идёт о варианте игры, когда игроки сидят за столом и каждый играет за себя.

\(n\) человек собрались в комнате с \(m\) столами (\(n \ge 2m\)). Они хотят \(k\) раз сыграть в Шляпу. То есть за каждым столом будет сыграно \(k\) игр, каждый игрок примет участие в \(k\) играх.

Для этого на каждую игру они распределяются по столам. Во время каждой игры один игрок играет ровно за одним столом. Разные игры можно играть за разными столами.

Игроки хотят составить наиболее «честное» расписание игр. По этой причине они ищут такое расписание (распределение по столам на каждую игру), что:

  • За любым столом каждый раз играет либо \(\lfloor\frac{n}{m}\rfloor\) человек, либо \(\lceil\frac{n}{m}\rceil\) человек (то есть либо округлённое вниз \(n/m\), либо округлённое вверх \(n/m\)). За одним столом в разные игры может играть разное количество человек.
  • Посчитаем для каждого игрока величину \(b_i\) — количество раз, сколько \(i\)-й игрок сыграл за столом размера \(\lceil\frac{n}{m}\rceil\) (округлённое вверх \(n/m\)). Любые два значения \(b_i\) должны отличаться не более чем на \(1\). Иными словами, для любых двух игроков \(i\) и \(j\) должно быть верно \(|b_i - b_j| \le 1\).

Например, если \(n=5\), \(m=2\) и \(k=2\), то по требованию первого пункта за каждым столом должны играть либо два игрока, либо три игрока. Рассмотрим следующие расписания:

  • Первая игра: за первым столом играют \(1, 2, 3\), а за вторым — \(4, 5\). Вторая игра: за первым столом играют \(5, 1\), а за вторым — \(2, 3, 4\). Это расписание не является «честным», так как \(b_2=2\) (второй игрок два раза играл за большим столом), а \(b_5=0\) (пятый игрок не играл за большим столом).
  • Первая игра: за первым столом играют \(1, 2, 3\), а за вторым — \(4, 5\). Вторая игра: за первым столом играют \(4, 5, 2\), а за вторым — \(1, 3\). Это расписание является «честным», так все \(b=[1,2,1,1,1]\) (любые два значения \(b_i\) отличаются не более чем на \(1\)).

Найдите любое «честное» расписание игр для \(n\) человек, если они играют на \(m\) столах \(k\) игр.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Каждый набор входных данных состоит из одной строки, которая содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 2\cdot10^5\), \(1 \le m \le \lfloor\frac{n}{2}\rfloor\), \(1 \le k \le 10^5\)) — количество человек, столов и игр соответственно.

Гарантируется, что сумма \(nk\) (\(n\) умножить на \(k\)) по всем наборам входных данных теста не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите искомое расписание — последовательность \(k\) блоков по \(m\) строк. Каждый блок соответствует одной игре, строка в блоке — одному столу. В каждую строку выводите количество игроков за столом и номера игроков (числа от \(1\) до \(n\)), кто должен играть за этим столом.

Если искомых расписаний несколько, то выведите любое из них. Можно показать, что искомое решение обязательно существует.

Вы можете выводить дополнительные пустые строки для разделения ответов на разные наборы входных данных.

H. Перестановка и запросы

Перебор разделяй и властвуй Структуры данных *2400

Дана перестановка \(p\) из \(n\) элементов. Перестановка из \(n\) элементов — это массив длины \(n\), в котором каждое целое число от \(1\) до \(n\) встречается ровно по одному разу. Например, \([1, 2, 3]\) и \([4, 3, 5, 1, 2]\) — это перестановки, но \([1, 2, 4]\) и \([4, 3, 2, 1, 2]\) — это не перестановки. Вам нужно выполнить \(q\) запросов.

Есть два типа запросов:

  • \(1\) \(x\) \(y\) — поменять местами \(p_x\) и \(p_y\).
  • \(2\) \(i\) \(k\) — вывести число, которым станет \(i\), если присвоить \(i = p_i\) \(k\) раз.
Входные данные

В первой строке находятся два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^5\)).

Во второй строке находятся \(n\) целых чисел \(p_1, p_2, \dots, p_n\).

В каждой из следующих \(q\) строк находится по три целых числа. Первое число \(t\) (\(1 \le t \le 2\)) – тип запроса. Если \(t = 1\), то следующие два целых числа — это \(x\) и \(y\) (\(1 \le x, y \le n\); \(x \ne y\)) — запрос первого типа. Если \(t = 2\), то следующие два целых числа — это \(i\) и \(k\) (\(1 \le i, k \le n\)) — запрос второго типа.

Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

Для каждого запроса второго типа выведите одно целое число в новой строке — ответ на этот запрос.

Примечание

В первом примере \(p = \{5, 3, 4, 2, 1\}\).

Первый запрос — вывести \(p_3\). Ответ — \(4\).

Второй запрос — вывести \(p_{p_1}\). Ответ — \(1\).

Третий запрос — поменять местами \(p_1\) и \(p_3\). Теперь \(p = \{4, 3, 5, 2, 1\}\).

Четвёртый запрос — вывести \(p_{p_1}\). Ответ — \(2\).

C. BA-строка

дп жадные алгоритмы математика Перебор реализация *1800

Заданы целое число \(k\) и строка \(s\), которая состоит только из символов 'a' (строчная латинская буква) и '*' (звездочка).

Каждая звездочка должна быть заменена на несколько (от \(0\) до \(k\) включительно) строчных латинских букв 'b'. Разные звездочки можно заменить на разные количества букв 'b'.

Результат замены называется BA-строкой.

Две строки \(a\) и \(b\) различные, если у них либо различная длина, либо существует такая позиция \(i\), что \(a_i \neq b_i\).

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).

Рассмотрите все различные BA-строки и найдите из них \(x\)-ю лексикографически наименьшую.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных.

Во первой строке каждого набора входных данных записаны три целых числа \(n\), \(k\) and \(x\) (\(1 \le n \le 2000\); \(0 \le k \le 2000\); \(1 \le x \le 10^{18}\)). \(n\) — это длина строка \(s\).

Во второй строке каждого набора входных данных содержится строка \(s\). Она состоит из \(n\) символов, каждый из них — либо 'a' (строчная латинская буква), либо '*' (звездочка).

Сумма \(n\) по всем наборам входных данных не превосходит \(2000\). В каждом наборе входных данных \(x\) не превосходит количество различных BA-строк. Строка \(s\) содержит хотя бы один символ 'a'.

Выходные данные

На каждый набор входных данных выведите одну строку, состоящую из символов 'b' и 'a' (строчные латинские буквы) — \(x\)-ю лексикографически наименьшую BA-строку.

Примечание

В первом наборе входных данных примера BA-строки, упорядоченные лексикографически, следующие:

  1. a
  2. ab
  3. abb
  4. abbb
  5. abbbb

Во втором наборе входных данных примера BA-строки, упорядоченные лексикографически, следующие:

  1. aa
  2. aba
  3. abba

Обратите внимание, что строка «aba» считается только один раз, хотя и есть два способа заменить звездочки на символы 'b' так, чтобы ее получить.

D. Без сдачи

жадные алгоритмы Конструктив Перебор *2000

Однажды, рано утром, вы решили сходить в магазин неподалеку и купить там пачку чипсов. В магазине продаются чипсы \(n\) разных вкусов. Пачка чипсов с \(i\)-м вкусом стоит \(a_i\) бурлей.

В магазине могут закончиться чипсы каких-то вкусов, а потому вы решили выбрать пачку уже после того как придете в магазин. Однако у данного плана есть две серьезные проблемы:

  1. у вас есть только монеты номиналом \(1\), \(2\) и \(3\) бурля;
  2. так как еще утро, в магазине вас попросят заплатить без сдачи, т. е. если вы выберете пачку чипсов с \(i\)-м вкусом, вы должны будете заплатить ровно \(a_i\) бурлей.

Носить много монет тяжело, а потому вам хочется взять наименьшее суммарное количество монет. Соответственно, вас интересует вопрос: какое наименьшее количество монет вам нужно будет взять с собой, чтобы вы могли расплатиться за пачку чипсов любого вкуса без сдачи?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 100\)) — количество вкусов чипсов в магазине.

Во второй строке каждого запроса заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — стоимости пачек с соответствующими вкусами.

Выходные данные

Для каждого набора входных данных выведите одно число — наименьшее количество монет, которое вам понадобится взять с собой, чтобы купить пачку чипсов любого вкуса без сдачи.

Примечание

В первом наборе входных данных, вы можете, например, взять с собой \(445\) монеты с номиналом \(3\) и \(1\) монету номинала \(2\). Таким образом, вы наберете \(1337 = 445 \cdot 3 + 1 \cdot 2\).

Во втором наборе, вы можете, например, взять \(2\) монеты номинала \(3\) и \(2\) монеты номинала \(2\). Так вы сможете заплатить как ровно \(8 = 2 \cdot 3 + 1 \cdot 2\), так и ровно \(10 = 2 \cdot 3 + 2 \cdot 2\).

В третьем наборе, достаточно взять \(1\) монету номинала \(3\) и \(2\) монеты номинала \(1\).

C. Присвоить или уменьшить

Бинарный поиск жадные алгоритмы Перебор сортировки *1600

Вам задан целочисленный массив \(a_1, a_2, \dots, a_n\) и целое число \(k\).

За один шаг, вы можете

  • либо выбрать некоторый индекс \(i\) и уменьшить \(a_i\) на единицу (сделать \(a_i = a_i - 1\));
  • либо выбрать два индекса \(i\) и \(j\) и присвоить элементу \(a_i\) значение \(a_j\) (сделать \(a_i = a_j\)).

За какое наименьшее количество шагов вы можете сделать сумму массива \(\sum\limits_{i=1}^{n}{a_i} \le k\)? (В массиве разрешены отрицательные элементы).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Во первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le k \le 10^{15}\)) — размер массива \(a\) и верхнее ограничение на сумму.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — сам массив.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите одно число — наименьшее количество шагов для получения \(\sum\limits_{i=1}^{n}{a_i} \le k\).

Примечание

В первом наборе входных данных, вам нужно уменьшить \(a_1\) \(10\) раз, чтобы получить сумму не более \(k = 10\).

Во втором наборе, сумма массива \(a\) уже не превосходит \(69\), а потому вам не нужно ничего менять.

В третьем наборе, вы можете, например:

  1. присвоить \(a_4 = a_3 = 1\);
  2. уменьшить \(a_4\) на единицу, и получить \(a_4 = 0\).
В результате вы получите массив \([1, 2, 1, 0, 1, 2, 1]\) с суммой, не превосходящей \(8\), за \(1 + 1 = 2\) шага.

В четвертом наборе, вы можете, например:

  1. выбрать \(a_7\) и уменьшить его на один \(3\) раза; вы получите \(a_7 = -2\);
  2. выбрать \(4\) элемента \(a_6\), \(a_8\), \(a_9\) и \(a_{10}\) и присвоить им значение \(a_7 = -2\).
В результате вы получите массив \([1, 2, 3, 1, 2, -2, -2, -2, -2, -2]\) с суммой, меньше или равной \(1\), за \(3 + 4 = 7\) шагов.

E. Тест по математике

битмаски жадные алгоритмы Перебор *2200

Петя — учитель по математике. \(n\) его студентов написали тест, состоящий из \(m\) вопросов. Для каждого студента известно на какие вопросы он ответил верно, а на какие нет.

Если студент правильно ответил на \(j\)-й вопрос, он получает \(p_j\) баллов (иначе он получает \(0\) баллов). Причем баллы за вопросы распределены так, что массив \(p\) является перестановкой чисел от \(1\) до \(m\).

Для \(i\)-го студента Петя знает, что он ожидает получить \(x_i\) баллов за тест. Пете стало интересно, насколько неожиданными могут быть результаты. Петя считает, что неожиданность результатов для студентов равна \(\sum\limits_{i=1}^{n} |x_i - r_i|\), где \(r_i\) — количество баллов, которое \(i\)-й студент получил за тест.

Ваша задача — помочь Пете, найти такую перестановку \(p\), для которой неожиданность результатов максимальна. Если оптимальных ответов несколько, выведите любой из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10\); \(1 \le m \le 10^4\)) — количество студентов и количество вопросов соответственно.

Вторая строка содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(0 \le x_i \le \frac{m(m+1)}{2}\)), где \(x_i\) — количество баллов, которое ожидает получить \(i\)-й студент.

Далее следуют \(n\) строк, \(i\)-я строка содержит строку \(s_i\) (\(|s_i| = m; s_{i, j} \in \{0, 1\}\)), где \(s_{i, j}\) равно \(1\), если \(i\)-й студент ответил правильно на \(j\)-й вопрос, и \(0\) в противном случае.

Сумма \(m\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите \(m\) целых чисел — перестановку \(p\), для которой неожиданность результатов максимальна. Если оптимальных ответов несколько, выведите любой из них.

A. Робот-пылесос

математика Перебор реализация *800

Робот-пылесос находится на полу прямоугольной комнаты, ограниченной стенами. Пол можно представить как таблицу из \(n\) строк и \(m\) столбцов. Строки пола пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы от \(1\) до \(m\) слева направо. Клетка на пересечении \(r\)-й строки и \(c\)-го столбца обозначается \((r,c)\). Изначально робот находится в клетке \((r_b, c_b)\).

Каждую секунду робот двигается на \(dr\) строк и \(dc\) столбцов, то за секунду робот передвигается из клетки \((r, c)\) в \((r + dr, c + dc)\). Изначально \(dr = 1\), \(dc = 1\). Если в направлении движения робота находится вертикальная стена (левая или правая), \(dc\) отражается перед движением, новое значение \(dc\) становится \(-dc\). Также, если в направлении движения робота находится горизонтальная стена (верхняя или нижняя), \(dr\) отражается перед движением, новое значение \(dr\) становится \(-dr\).

В начале каждой секунды (в том числе перед первым движением робота) робот очищает все клетки, лежащие в той же строке или в том же столбце, что и робот. В комнате лишь одна грязная клетка \((r_d, c_d)\). Задача робота — очистить эту грязную клетку.

Иллюстрация к первому примеру. Робот обозначен голубой дугой. Красной звездой обозначена грязная клетка. Каждую секунду робот очищает строку и столбец, что показано желтыми линиями.

По данному размеру пола \(n\) и \(m\), начальной позиции робота \((r_b, c_b)\) и позиции грязной клетки \((r_d, c_d)\) найдите, через какое время робот выполнит задачу.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Каждый набор входных данных описывается в одной строке шестью целыми числами \(n\), \(m\), \(r_b\), \(c_b\), \(r_d\) и \(c_d\) (\(1 \le n, m \le 100\), \(1 \le r_b, r_d \le n\), \(1 \le c_b, c_d \le m\)) — размерами комнаты, начальной позицией робота и позицией грязной клетки.

Выходные данные

Для каждого набора входных данных выведите одно целое число — время, необходимое роботу для очистки грязной клетки. Можно показать, что робот всегда очистит грязную клетку за конечное время.

Примечание

В первом примере размер пола равен \(10\times 10\). Начальная позиция робота \((6, 1)\), грязная клетка — \((2, 8)\). Иллюстрация к этому примеру находится в условии задачи.

Во втором примере пол такой же, но начальная позиция робота \((9, 9)\), а грязная клетка — \((1, 1)\). В этом примере робот дойдет точно до грязной клетки и очистит ее.

В третьем примере пол имеет размеры \(9 \times 8\). Начальная позиция робота \((5, 6)\), грязная клетка \((2, 1)\).

В четвертом примере пол имеет размеры \(6 \times 9\). Начальная позиция робота \((2, 2)\), грязная клетка \((5, 8)\).

В последнем примере робот изначально в том же столбце, что и грязная клетка, поэтому он ее сразу очистит.

B. Игра на отрезках

Перебор поиск в глубину и подобное реализация сортировки *1100

Алиса и Боб играют в следующую игру. У Алисы есть набор непересекающихся отрезков целых чисел \(S\), изначально содержащий только один отрезок \([1, n]\). За один ход Алиса выбирает некоторый отрезок \([l, r]\) из набора \(S\), а Боб выбирает некоторое число \(d\) из этого отрезка (\(l \le d \le r\)). Затем Алиса убирает \([l, r]\) из \(S\), и добавляет в \(S\) отрезки \([l, d - 1]\) (если \(l \le d - 1\)) и \([d + 1, r]\) (если \(d + 1 \le r\)). Игра заканчивается, когда \(S\) становится пустым. Можно показать, что количество шагов в такой игре всегда ровно \(n\).

После того, как игра была сыграна, Алиса запомнила все отрезки \([l, r]\), которые она доставала из набора \(S\), но Боб не запомнил ни одного числа, которые он выбирал. Но Боб умный и понимает, что числа \(d\) можно восстановить, используя отрезки, которые помнит Алиса, и просит вас помочь запрограммировать это.

По данному списку отрезков, которые Алиса доставала (\([l, r]\)) восстановите для каждого отрезка число \(d\), которое выбирал Боб.

Можно показать, что по данному списку отрезков всегда существует ровно один способ восстановить числа Боба.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 1000\)).

Каждая из следующих \(n\) строк содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)), обозначающих, что Алиса в какой-то момент игры выбрала отрезок \([l, r]\).

Обратите внимание, что отрезки даны в произвольном порядке.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(1000\), а отрезки в каждом наборе входных данных соответствуют корректной игре.

Выходные данные

Для каждого набора входных данных выведите \(n\) строк. Каждая строка должна содержать три целых числа \(l\), \(r\) и \(d\), обозначающих, что для отрезка Алисы \([l, r]\) Боб выбрал число \(d\).

Вы можете выводить эти строки в любом порядке. Можно показать, что ответ единственный.

Не обязательно выводить пустую строку между различными входными данными. В примере эти пустые строки сделаны только для удобства.

Примечание

В первом примере есть только один отрезок \([1, 1]\). Алиса выбирала только один отрезок \([1, 1]\), и Боб мог выбрать только число \(1\).

Во втором примере \(n = 3\). Изначально в наборе находится один отрезок \([1, 3]\).

  • Алиса выбирает отрезок \([1, 3]\). Боб выбирает число \(1\). Алиса добавляет в набор отрезок \([2, 3]\), и после этого хода это единственный отрезок в наборе.
  • Алиса выбирает отрезок \([2, 3]\). Боб выбирает число \(3\). Алиса добавляет в набор отрезок \([2, 2]\).
  • Алиса выбирает отрезок \([2, 2]\). Боб выбирает число \(2\). Игра заканчивается.

В четвертом наборе игра начинается с \(n = 5\). Изначально в наборе находится только отрезок \([1, 5]\). Ходы в игре показаны в следующей таблице.

Номер ходаОтрезок, выбранный АлисойЧисло, выбранное БобомНабор отрезков после хода
Перед началом\( \{ [1, 5] \} \)
1\([1, 5]\)\(3\)\( \{ [1, 2], [4, 5] \}\)
2\([1, 2]\)\(1\)\( \{ [2, 2], [4, 5] \} \)
3\([4, 5]\)\(5\)\( \{ [2, 2], [4, 4] \} \)
4\([2, 2]\)\(2\)\( \{ [4, 4] \} \)
5\([4, 4]\)\(4\)\( \{ \} \) (пустой набор)

E. Маша-забываша

дп Конструктив Перебор реализация Строки хэши *2000

Маша познакомилась с новым другом и узнала его номер телефона — \(s\). Она хочет как можно скорее запомнить его. Номер телефона — это строка длины \(m\), которая состоит из цифр от \(0\) до \(9\). Допустимо, что телефон начинается с 0.

Маша уже знает \(n\) номеров телефонов (все номера имеют одинаковую длину \(m\)). Ей будет проще запомнить новый номер, если строку \(s\) представить как отрезки уже известных ей номеров. Каждый такой отрезок должен быть длины не менее \(2\), иначе отрезков будет слишком много, и Маша запутается.

Например, Маше нужно запомнить номер: \(s = \) «12345678» и она уже знает \(n = 4\) номера: «12340219», «20215601», «56782022», «12300678». Можно представить \(s\) как \(3\) отрезка: «1234» из первого номера, «56» из второго номера и «78» из третьего номера. Есть и другие способы представления \(s\).

Маша обратилась к вам за помощью, она просит вас разбить строку \(s\) на отрезки длины \(2\) или более из уже известных ей номеров. Если существует несколько возможных ответов, выведите любой из них.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Перед каждым набором в тесте записана пустая строка. Далее идёт строка, которая содержит целые числа \(n\) и \(m\) (\(1 \le n, m \le 10^3\)) — количество номеров, которые знает Маша и количество цифр в каждом номере. Затем следуют \(n\) строк, \(i\)-я из которых описывает \(i\)-й номер, который знает Маша. Следующая строка содержит номер телефона её нового друга \(s\).

Среди заданных \(n+1\) телефонов могут быть дубликаты (одинаковые телефоны).

Гарантируется, что сумма значений \(n \cdot m\) (\(n\) умножить на \(m\)) по всем наборам входных данных в тесте не превосходит \(10^6\).

Выходные данные

Вам нужно вывести ответы на \(t\) запросов. В первой строке ответа должно содержаться одно число \(k\), соответствующее количеству отрезков, на которые вы разбили номер телефона \(s\). Выведите -1, если такого разбиения получить нельзя.

В случае положительного ответа далее должны следовать \(k\) строк, содержащие тройки чисел \(l, r, i\). Такая тройка обозначает, что очередные \(r-l+1\) цифр номера \(s\) равны отрезку (подстроке) с границами \([l, r]\) телефона под номером \(i\). И телефоны и цифры в них нумеруются от \(1\). Обратите внимание, что \(r-l+1 \ge 2\) для всех \(k\) строк.

Примечание

Первый тестовый случай соответствует примеру из условия.

Во втором случае невозможно представить отрезками известных номеров длины 2 или более.

В третьем случае можно получить отрезки «12» и «21» из первого номера телефона.

B. Элементарные частицы

жадные алгоритмы Перебор сортировки *1100

Марсиане активно занимаются межпланетной торговлей. А город Олимп-Сити, известный своим космодромом, давно стал местом, куда поступают товары со всех уголков Галактики. Чтобы перевозить еще больше грузов с далеких планет, марсианам необходимы быстрые космические корабли.

Группа ученых как раз проводит эксперименты, чтобы построить быстрый двигатель для нового космического корабля. В текущем эксперименте участвует последовательность из \(n\) элементарных частиц, где \(i\)-я частица имеет тип \(a_i\).

Назовем подотрезком последовательности частиц (\(a_1, a_2, \dots, a_n\)) последовательность (\(a_l, a_{l+1}, \dots, a_r\)) для некоторой левой границы \(l\) и правой границы \(r\) (\(1 \le l \le r \le n\)). Например, у последовательности \((1\ 4\ 2\ 8\ 5\ 7)\) ее подотрезком при \(l=2\) и \(r=4\) является последовательность \((4\ 2\ 8)\). Также скажем, что два подотрезка являются различными, если хотя бы одна из границ этих подотрезков не совпадает.

Обратите внимание, что подотрезки могут быть одинаковыми как последовательности, но при этом считаться различными. Например, возьмем последовательность \((1\ 1\ 1\ 1\ 1)\) и два подотрезка: один с \(l=1\) и \(r=3\), другой — с \(l=2\) и \(r=4\). Оба подотрезка равны \((1\ 1\ 1)\), но при этом считаются различными, поскольку их левая и правая границы не совпадают.

Ученые хотят провести реакцию и получить два различных подотрезка одинаковой длины. Обозначим эту длину \(k\). При этом полученная пара подотрезков должна быть гармоничной, т. е. для некоторого \(i\) (\(1 \le i \le k\)) должно оказаться так, что типы частиц на \(i\)-й позиции совпадают. Например, пара подотрезков \((1\ 7\ 3)\) и \((4\ 7\ 8)\) гармонична, т. к. у обоих подотрезков на второй позиции стоит \(7\), а пара подотрезков \((1\ 2\ 3)\) и \((3\ 1\ 2)\) — нет.

Чем длиннее получатся гармоничные подотрезки, тем больше шансов, что ученые смогут сконструировать быстрый двигатель. Поэтому они попросили Вас помочь рассчитать максимальную возможную длину гармоничной пары из различных подотрезков.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 150\,000\)) — количество элементарных частиц в последовательности.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 150\,000\)) — типы частиц.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3\cdot10^5\).

Выходные данные

Для каждого теста выведите одно целое число — максимальную возможную длину гармоничной пары из различных отрезков. Если такой пары не существует, требуется вместо этого вывести число \(-1\).

Примечание

Первый пример изображен на рисунке ниже:

Как видно на рисунке, можно выбрать подотрезки \((2\ 1\ 3\ 4)\) и \((3\ 1\ 5\ 2)\), которые образуют гармоничную пару. Их длина равна \(4\), поэтому ответ равен \(4\).

Во втором примере можно взять два отрезка: первый — с \(l=1\) и \(r=5\), а второй — с \(l=2\) и \(r=6\). Как нетрудно видеть, эти отрезки образуют гармоничную пару и при этом считаются различными несмотря на то, что оба равны \((1\ 1\ 1\ 1\ 1)\).

В третьем примере можно заметить, что гармоничный отрезок построить нельзя, и ответ равен \(-1\).

E1. Обновление котов (простая версия)

графы Деревья дп Перебор поиск в глубину и подобное разделяй и властвуй Структуры данных *2500

Это простая версия задачи. Единственным различием между простой и сложной версиями задачи является наличие запросов удаления: они присутствуют лишь в сложной версии.

Компания «Interplanetary Software, Inc.» вместе с компанией «Robots of Cydonia, Ltd.» разработала и выпустила роботов-котов. Эти электронные питомцы умеют мяукать, ловить мышей и всячески развлекать хозяина.

Недавно разработчики из «Interplanetary Software, Inc.» решили выпустить обновление программного обеспечения для этих роботов. После обновления коты должны уметь решать задачи, связанные со скобочными последовательностями. Одна из таких задач приведена ниже.

Сначала немного погрузимся в теорию скобочных последовательностей. Будем рассматривать строки, состоящие из символов «(», «)» и «.». Назовем строку правильной скобочной последовательностью (ПСП), если из нее можно получить пустую строку путем операций удаления одиночных символов «.» либо подряд идущих символов «()». Например, строка «(()(.))» является ПСП, т. к. с ней можно проделать следующую цепочку удалений:

«(()(.))» \(\rightarrow\) «(()())» \(\rightarrow\) «(())» \(\rightarrow\) «()» \(\rightarrow\) «».

Мы получили пустую строку, а это значит, что исходная строка является ПСП. В то же время, строка «)(» не является ПСП, поскольку к ней нельзя применить описанные выше операции удаления.

Будем называть ПСП простой, если эта ПСП непуста, не начинается на «.» и не заканчивается на «.».

Также будем считать, что подстрока строки \(s\) — это ее последовательный подотрезок. В частности, \(s[l\dots r] = s_ls_{l+1}\dots s_r\), где \(s_i\) — \(i\)-й символ строки \(s\).

Теперь перейдем к формулировке задачи. Вам дана строка \(s\), изначально состоящая из символов «(» и «)». Необходимо отвечать на запросы следующего вида.

Даны индексы \(l\) и \(r\) (\(1 \le l < r \le n\)), причем гарантируется, что подстрока \(s[l\dots r]\) — простая ПСП. Требуется найти количество подстрок в \(s[l\dots r]\), которые являются простыми ПСП. Иными словами, необходимо найти количество пар индексов \(i\), \(j\) таких, что \(l \le i < j \le r\) и \(s[i\dots j]\) является простой ПСП.

Вы работаете в «Interplanetary Software, Inc.» и Вам поручили непростое задание: научить котов после обновления решать описанную выше задачу.

Обратите внимание, что в данной версии задачи в строке не может появиться символ «.». Он нужен лишь для сложной версии задачи.

Входные данные

В первой строке входных данных находится два целых числа \(n\) и \(q\) (\(2 \le n \le 3\cdot10^5\), \(1 \le q \le 3\cdot10^5\)) — длина строки и количество запросов.

Во второй строке находится строка \(s\), состоящая из \(n\) символов «(» и «)».

В каждой из следующих \(q\) строк находится по три целых числа \(t\), \(l\) и \(r\) (\(t = 2\), \(1 \le l < r \le n\)) — запросы, которые требуется обработать. Гарантируется, что все запросы корректны и удовлетворяют условию задачи. Обратите внимание, что в данной задаче число \(t\) не используется и всегда равно двум. Оно необходимо для сложной версии задачи.

Выходные данные

Для каждого запроса выведите по одному целому числу в отдельной строке — количество подстрок, которые являются простыми ПСП. Ответы требуется выводить в том же, порядке, в котором приведены сами запросы.

Примечание

Рассмотрим пример из условия.

Ответ на первый запрос равен \(3\), поскольку существует всего три требуемых подстроки: \(s[3\dots6]\), \(s[3\dots4]\) и \(s[5\dots6]\).

Ответ на второй запрос равен \(4\). Подходящие подстроки — \(s[3\dots6]\), \(s[3\dots4]\), \(s[5\dots6]\) и \(s[2\dots7]\).

Ответ на третий запрос равен \(1\). Подходящая подстрока — \(s[8\dots9]\).

Ответ на четвертый запрос равен \(6\). Подходящие подстроки — \(s[3\dots6]\), \(s[3\dots4]\), \(s[5\dots6]\), \(s[2\dots7]\), \(s[8\dots9]\) и \(s[2\dots9]\).

D. Турнир боевого искусства

Бинарный поиск жадные алгоритмы математика Перебор *2100

Монокарп планирует провести соревнование по смешанным единоборствам. В нем будет три весовых категории: легкий вес, средний вес и тяжелый вес. Победитель в каждой категории определяется по системе плей-офф.

В частности, это подразумевает, что количество участников в каждой категории должно быть степенью двойки. Дополнительно в каждой категории должно быть ненулевое количество участников.

\(n\) участников уже зарегистрировались на соревнование, \(i\)-й из них весит \(a_i\). Чтобы разделить участников на категории, Монокарп планирует установить две целых границы весов \(x\) и \(y\) (\(x < y\)).

Все участники с весом строго меньше \(x\) будут считаться легким весов. Все участники с весом больше или равно \(y\), будут считаться тяжелым весом. Все остальные участники будут считаться средним весом.

Возможно, что распределение не сделает количество участников в каждой категории степенью двойки. Оно так же может сделать и пустые категории. Чтобы решить эти проблемы, Монокарп может пригласить любое количество участников в каждую категории.

Обратите внимание, что Монокарп не может выгнать никого из \(n\) участников, которые уже зарегистрировались на соревнование.

Однако, он хочет пригласить как можно меньше дополнительных участников. Помогите Монокарпу выбрать \(x\) и \(y\) таким образом, чтобы суммарное количество необходимых дополнительных участников было как можно меньше. Выведите это количество.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество зарегистрированных участников.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — веса зарегистрированных участников.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее количество дополнительных участников, которых Монокарпу необходимо пригласить после того, как он выберет границы весов \(x\) и \(y\).

Примечание

В первом наборе входных данных Монокарп может выбрать \(x=2\) и \(y=3\). Легкая, средняя и тяжелая весовые категории будут содержать \(2\), \(1\) и \(1\) участников, соответственно. Они все являются степенями двойки, поэтому дополнительных участников не нужно.

Во втором наборе входных данных вне зависимости от выбора \(x\) и \(y\) в одной категории будет \(1\) участник, в остальных — \(0\). Монокарпу придется пригласить \(1\) участника в обе из оставшихся категорий.

В третьем наборе входных данных Монокарп может выбрать \(x=1\) и \(y=2\). Легкая, средняя и тяжелая весовые категории будут содержать \(0\), \(3\) и \(3\) участников, соответственно. В каждую категорию придется пригласить по одному участнику.

В четвертом наборе входных данных Монокарп может выбрать \(x=8\) и \(y=9\). Легкая, средняя и тяжелая весовые категории будут содержать \(8\), \(0\) и \(0\) участников, соответственно. В среднюю и тяжелую категории придется пригласить по одному участнику.

D. Не добавлять

дп математика Перебор теория чисел *1900

Вам дан массив \(a_1, a_2, \dots, a_n\) из \(n\) различных целых чисел. Вы можете выполнять следующую операцию:

  • Выберите два элемента \(a_i\) и \(a_j\) (\(i \ne j\)) такие, что \(\gcd(a_i, a_j)\) не встречается среди элементов массива, и добавьте \(\gcd(a_i, a_j)\) в конец массива. Здесь \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Обратите внимание, что после каждой операции массив меняется, и последующие операции выполняются с новым массивом.

Какое максимальное число раз вы можете выполнить операцию?

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^6\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^6\)). Все \(a_i\) различны.

Выходные данные

Выведите одно целое число — максимальное количество операций, которое можно выполнить с данным массивом.

Примечание

В первом примере один из способов выполнить максимальное число операций такой:

  • Выбрать \(i = 1, j= 5\) и добавить \(\gcd(a_1, a_5) = \gcd(4, 30) = 2\) к массиву.
  • Выбрать \(i = 2, j= 4\) и добавить \(\gcd(a_2, a_4) = \gcd(20, 25) = 5\) к массиву.
  • Выбрать \(i = 2, j= 5\) и добавить \(\gcd(a_2, a_5) = \gcd(20, 30) = 10\) к массиву.

Можно показать, что не существует способа выполнить больше \(3\) операций с массивом.

Во втором примере можно добавить \(3\), затем \(1\), затем \(5\) и \(2\).

A. Скачивание оперативной памяти

жадные алгоритмы Перебор сортировки *800

А вы знали, что вы можете скачать дополнительную оперативную память? Есть магазин с \(n\) разными программами, каждая из которых увеличивает вашу оперативную память (ОЗУ). \(i\)-й программе, увеличивающей ОЗУ, требуется \(a_i\) гигабайт памяти, чтобы выполниться (память занимается временно, как только программа завершит работу, память снова освободится), и после ее использования она увеличит вашу ОЗУ на \(b_i\) гигабайт (навсегда). Каждая программа может быть использована не более одного раза. Изначально у вашего компьютера \(k\) гигабайт оперативной памяти.

Заметьте, что вы не можете использовать программу, увеличивающую ОЗУ, если ей требуется больше гигабайт оперативной памяти, чем есть у вашего компьютера в момент запуска. Вы можете использовать программы, увеличивающие ОЗУ, в любом порядке.

Для вас ОЗУ — самая важная вещь на свете, и поэтому вам очень интересно узнать, какое максимальное количество гигабайт ОЗУ вы сможете получить?

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество тестов. Описание тестовых примеров следует ниже.

Первая строка каждого тестового примера содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 100\), \(1 \le k \le 1000\)). Затем следует две строки, каждая из которых содержит \(n\) целых чисел, описывающих массивы \(a\) и \(b\) (\(1 \le a_i, b_i \le 1000\)).

Выходные данные

Для каждого тестового примера выведите одну строку, содержащую максимально-возможный объем оперативной памяти.

Примечание

В первом наборе входных данных изначально у вас достаточно оперативной памяти только для запуска третьей программы, и после ее использования ваша оперативная память увеличится до \(20\) гигабайт, что позволит вам использовать первую программу и увеличить объем оперативной памяти до \(29\) гигабайт. Единственная оставшаяся программа требует \(30\) гигабайт ОЗУ и ее нельзя будет использовать.

Во втором наборе входных данных вы можете использовать все программы кроме третьей, которые требуют всего \(1\) гигабайт для запуска, чтобы увеличить объем ОЗУ до \(5\) гигабайт, а затем использовать третью программу, чтобы увеличить объем ОЗУ до \(6\) гигабайт.

В третьем наборе входных данных каждая программа требует более \(1\)-го гигабайта ОЗУ для запуска, поэтому объем имеющейся у вас оперативной памяти останется равным \(1\) гигабайту.

D. Большой холодильник

Перебор *2900

Вася хочет купить новый холодильник. Он считает, что холодильник должен быть прямоугольным параллелепипедом с целочисленными длинами ребер. Вася рассчитал, что для повседневного пользования ему понадобится холодильник объема не меньше V. Кроме того, Вася по натуре минималист, поэтому объем должен быть и не больше V — к чему занимать лишнее место в квартире? Определившись с объемом холодильника, Вася столкнулся с новой непростой задачей — чтобы холодильник было проще мыть, при фиксированном объеме V он должен иметь минимальную площадь поверхности.

Объем и площадь поверхности холодильника с ребрами a, b, c равны V = abc и S = 2(ab + bc + ca), соответственно.

Помогите Васе по заданному объему V найти такие целые длины ребер холодильника a, b, c, чтобы объем холодильника был равен V и при этом его площадь поверхности S была минимальна.

Входные данные

В первой строке записано единственное целое число t (1 ≤ t ≤ 500) — количество наборов данных.

Далее следует описание t наборов данных. Каждый набор состоит из одного целого числа V (2 ≤ V ≤ 1018), заданного своим разложением на множители следующим образом.

Пусть V = p1a1p2a2... pkak, где pi — различные простые числа, а ai — положительные целые степени.

Тогда в первой строке описания набора данных записано единственное положительное целое число k — количество различных простых делителей V. В следующих k строках записаны простые числа pi и их степени ai, разделенные пробелом. Все pi различны, все ai > 0.

Выходные данные

Выведите t строк, в i-й строке выведите ответ на i-й набор данных — четыре целых числа, записанные через пробел: минимальная возможная площадь поверхности S и соответствующие длины ребер a, b, c. Если вариантов длин ребер, дающих минимальную площадь, несколько, разрешается вывести любой из них. Длины ребер холодильника разрешается выводить в любом порядке.

Примечание

В первом наборе данных примера объем холодильника V = 23 = 8, и минимальную площадь поверхности дадут ребра одинаковой длины.

Во втором наборе данных объем V = 17, и его можно получить из единственного набора ребер целочисленных длин.

C. Странная контрольная

Бинарный поиск битмаски дп математика Перебор *1600

Игорь учится в 11-м классе. Завтра ему предстоит написать контрольную работу по информатике у самого строгого преподавателя школы — Павла Денисовича.

Игорь заранее знает, как будет проходить контрольная: изначально преподаватель даст каждому ученику, включая Игоря, два целых положительных числа \(a\) и \(b\) (\(a < b\)). Затем ученик может неограниченное количество раз производить с числами следующие операции:

  • \(a := a + 1\) (увеличить \(a\) на \(1\)),
  • \(b := b + 1\) (увеличить \(b\) на \(1\)),
  • \(a := a \ | \ b\) (заменить \(a\) на побитовое ИЛИ \(a\) и \(b\)).

Чтобы получить максимальный балл за контрольную работу, ученику необходимо за минимальное количество операций сделать \(a\) равным \(b\).

Игорь заранее знает, какие числа даст ему учитель, и, конечно же, хочет получить максимальный балл за контрольную работу. Помогите ему понять, какое минимальное количество операций необходимо, чтобы сделать \(a\) равным \(b\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка описания каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(1 \le a < b \le 10^6\)).

Гарантируется, что сумма \(b\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите единственное число — за какое минимальное количество операций можно сделать \(a\) равным \(b\).

Примечание

В первом наборе оптимально применить третью операцию.

Во втором наборе оптимально применить первую операцию три раза подряд.

В третьем наборе оптимально применить вторую операцию и потом третью операцию.

A. Div. 7

Перебор *800

Вам дано целое число \(n\). Поменяйте в нем минимально возможное количество цифр так, чтобы результат был целым числом без ведущих нулей и делился на \(7\).

Если есть несколько оптимальных решений, выведите любое из них. Если заданное число уже делится на \(7\), оставьте его без изменений.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 990\)) — количество наборов входных данных.

Затем следуют сами наборы входных данных, каждый из которых состоит из одной строки, содержащей единственное целое число \(n\) (\(10 \le n \le 999\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число без ведущих нулей — результат ваших изменений (т. е. число, которое делится на \(7\) и отличается от \(n\) в минимальном кол-ве разрядов).

Если есть несколько оптимальных ответов, выведите любой из них. Если заданное число уже делится на \(7\), просто выведите его.

Примечание

В первом наборе входных данных примера из условия \(42\) уже делится на \(7\), поэтому не нужно его менять.

Во втором наборе входных данных примера из условия есть несколько возможных ответов — \(28\), \(21\) или \(63\).

В третьем наборе входных данных примера другие возможные ответы — \(357\), \(371\) и \(378\). Обратите внимание, что вы не можете вывести \(077\) или \(77\).

C. Убийство монстра

математика Перебор *1100

Монокарп играет в компьютерную игру. В игре его персонаж сражается с разными монстрами.

Битва между персонажем и монстром происходит следующим образом. Предположим, что у персонажа изначально \(h_C\) очков здоровья и атака равная \(d_C\); у монстра изначально \(h_M\) очков здоровья и атака равная \(d_M\). Бой состоит из нескольких этапов:

  1. персонаж атакует монстра, уменьшая здоровье монстра на \(d_C\);
  2. монстр атакует персонажа, уменьшая здоровье персонажа на \(d_M\);
  3. персонаж атакует монстра, уменьшая здоровье монстра на \(d_C\);
  4. монстр атакует персонажа, уменьшая здоровье персонажа на \(d_M\);
  5. и так далее, до конца боя.

Бой заканчивается, когда чье-то здоровье становится неположительным (т.е. \(0\) или меньше). Если здоровье монстра становится неположительным, то выигрывает персонаж, в противном случае побеждает монстр.

Персонаж Монокарпа в настоящее время имеет здоровье равное \(h_C\), и атаку равную \(d_C\). Он хочет убить монстра со здоровьем равным \(h_M\), и атакой равной \(d_M\). Перед боем Монокарп может потратить до \(k\) монет на улучшение оружия и/или брони своего персонажа; каждое улучшение стоит ровно одну монету, каждое улучшение оружия увеличивает атаку персонажа на \(w\), а каждое улучшение брони увеличивает здоровье персонажа на \(a\).

Сможет ли персонаж Монокарпа убить монстра, если Монокарп оптимально потратит монеты на апгрейды?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных. Каждый набор входных данных состоит из трех строк:

Первая строка содержит два целых числа \(h_C\) и \(d_C\) (\(1 \le h_C \le 10^{15}\); \(1 \le d_C \le 10^9\)) — здоровье и атака персонажа;

Вторая строка содержит два целых числа \(h_M\) и \(d_M\) (\(1 \le h_M \le 10^{15}\); \(1 \le d_M \le 10^9\)) — здоровье и атака монстра;

Третья строка содержит три целых числа \(k\), \(w\) и \(a\) (\(0 \le k \le 2 \cdot 10^5\); \(0 \le w \le 10^4\); \(0 \le a \le 10^{10}\)) — максимальное количество монет, которые может потратить Монокарп, значение, добавляемое к атаке персонажа при каждом улучшении оружия, и значение, добавляемое к здоровью персонажа при каждом улучшении брони, соответственно.

Сумма \(k\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите YES, если возможно убить монстра, оптимально выбрав улучшения. В противном случае выведите NO.

Примечание

В первом примере Монокарп может потратить одну монету на улучшение оружия (урон станет равным \(5\)), тогда здоровье во время битвы будет изменяться следующим образом: \((h_C, h_M) = (25, 9) \rightarrow (25, 4) \rightarrow (5, 4) \rightarrow (5, -1)\). Битва закончилась победой Монокарпа.

Во втором примере у Монокарпа нет способа победить монстра.

В третьем примере у Монокарпа нет монет, поэтому он не может купить улучшения. Однако изначальных характеристик достаточно, чтобы Монокарп победил.

В четвертом примере у Монокарпа есть \(4\) монет. Чтобы победить монстра, ему необходимо потратить \(2\) монеты на улучшение оружия и \(2\) монеты на улучшение брони.

F. Прибавления Фибоначчи

математика Перебор реализация Структуры данных хэши *2700

One of my most productive days was throwing away 1,000 lines of code.
— Ken Thompson

Прибавление Фибоначчи — это операция на массиве \(X\) целых чисел, параметризованная индексами \(l\) и \(r\). При применении этой операции к \(X_l\) прибавляется \(F_1\), к \(X_{l + 1}\) прибавляется \(F_2\), и так далее, вплоть до числа \(X_r\), которое увеличивается на \(F_{r - l + 1}\).

Здесь \(F_i\) — это \(i\)-е число Фибоначчи (\(F_1 = 1\), \(F_2 = 1\), \(F_{i} = F_{i - 1} + F_{i - 2}\) для \(i > 2\)), и все операции производятся по модулю \(MOD\).

Вам даны массивы \(A\) и \(B\) одинаковой длины. Мы просим вас применить к этим массивам несколько операций прибавления Фибоначчи с разными параметрами. После каждой операции вы должны сообщить, равны ли массивы \(A\) и \(B\) (по модулю \(MOD\)).

Входные данные

В первой строке вводится 3 числа \(n\), \(q\) и \(MOD\) (\(1 \le n, q \le 3\cdot 10^5, 1 \le MOD \le 10^9+7\)) — длина массивов, количество операций и модуль, по которому выполняются все операции.

Во второй строке находится \(n\) чисел — массив \(A\) (\(0 \le A_i < MOD\)).

В третей строке находится \(n\) чисел — массив \(B\) (\(0 \le B_i < MOD\)).

В последующих \(q\) строках находится символ \(c\) и два числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — параметры операции. Символ \(c\), равный «A», означает, что прибавление Фибоначчи нужно применить к массиву \(A\), равный «B» — к массиву \(B\).

Выходные данные

После каждой операции выведите «YES» (без кавычек), если массивы равны, и «NO» иначе. Ответ можно выводить в любом регистре.

Примечание

Пояснение к тесту из условия:

  • Изначально \(A=[2,2,1]\), \(B=[0,0,0]\).
  • После операции «A 1 3»: \(A=[0,0,0]\), \(B=[0,0,0]\) (сложение производится по модулю 3).
  • После операции «A 1 3»: \(A=[1,1,2]\), \(B=[0,0,0]\).
  • После операции «B 1 1»: \(A=[1,1,2]\), \(B=[1,0,0]\).
  • После операции «B 2 2»: \(A=[1,1,2]\), \(B=[1,1,0]\).
  • После операции «A 3 3»: \(A=[1,1,0]\), \(B=[1,1,0]\).

A. Сортировка частей

Перебор сортировки *800

Дан массив \(a\) длины \(n\). Вы можете ровно один раз выбрать число \(len\) от \(1\) до \(n - 1\) включительно, а затем отдельно отсортировать по неубыванию префикс массива длины \(len\) и суффикс массива длины \(n - len\).

Например, если массив \(a = [3, 1, 4, 5, 2]\), и вы выбрали \(len = 2\), то после этого массив станет равен \([1, 3, 2, 4, 5]\).

Может ли оказаться так, что после выполнения этой операции массив окажется не отсортирован по неубыванию?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \leq n \leq 10^4\)) — длина массива. Во второй строке набора задана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если массив может оказаться не отсортирован по неубыванию, выведите «NO» (без кавычек) в противном случае. Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных можно выбрать \(len = 1\), тогда после операции массив будет не отсортирован по неубыванию и равен \([2, 1, 2]\).

Во втором наборе входных данных можно выбрать \(len = 3\), тогда после операции массив будет не отсортирован по неубыванию и равен \([1, 2, 3, 1]\).

В третьем наборе входных данных для всех \(len\) получится отсортированный по неубыванию массив.

B. MEX и массив

дп жадные алгоритмы математика Перебор *1100

Пусть есть массив \(b_1, b_2, \ldots, b_k\). Пусть есть разбиение этого массива на отрезки \([l_1; r_1], [l_2; r_2], \ldots, [l_c; r_c]\), где \(l_1 = 1\), \(r_c = k\), и для любого \(2 \leq i \leq c\) выполнено \(r_{i-1} + 1 = l_i\). Иными словами, каждый элемент массива принадлежит ровно одному отрезку.

Определим стоимость разбиения как \(\)c + \sum_{i = 1}^{c} \operatorname{mex}(\{b_{l_i}, b_{l_i + 1}, \ldots, b_{r_i}\}),\(\) где \(\operatorname{mex}\) множества чисел \(S\) — это минимальное неотрицательное целое число, которое не встречается в множестве \(S\). Иными словами, стоимость разбиения равна количеству отрезков плюс сумма MEX по всем отрезкам. Определим ценность массива \(b_1, b_2, \ldots, b_k\) как максимально возможную стоимость его разбиения.

Дан массив \(a\) размера \(n\). Найдите сумму ценностей всех его подотрезков.

Массив \(x\) является подотрезком \(y\), если \(x\) может быть получен из \(y\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 30\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \leq n \leq 100\)) — длина массива.

Во второй строке набора задана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — элементы массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(100\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — ответ на задачу.

Примечание

Рассмотрим второй набор входных данных:

  • Лучшее разбиение подотрезка \([2, 0, 1]\): \([2], [0, 1]\). Стоимость такого разбиения равна \(2 + \operatorname{mex}(\{2\}) + \operatorname{mex}(\{0, 1\}) = 2 + 0 + 2 = 4\).
  • Лучшее разбиение подотрезка \([2, 0]\): \([2], [0]\). Стоимость такого разбиения равна \(2 + \operatorname{mex}(\{2\}) + \operatorname{mex}(\{0\}) = 2 + 0 + 1 = 3\)
  • Лучшее разбиение подотрезка \([2]\): \([2]\). Стоимость такого разбиения равна \(1 + \operatorname{mex}(\{2\}) = 1 + 0 = 1\).
  • Лучшее разбиение подотрезка \([0, 1]\): \([0, 1]\). Стоимость такого разбиения равна \(1 + \operatorname{mex}(\{0, 1\}) = 1 + 2 = 3\).
  • Лучшее разбиение подотрезка \([0]\): \([0]\). Стоимость такого разбиения равна \(1 + \operatorname{mex}(\{0\}) = 1 + 1 = 2\).
  • Лучшее разбиение подотрезка \([1]\): \([1]\). Стоимость такого разбиения равна \(1 + \operatorname{mex}(\{1\}) = 1 + 0 = 1\).

Суммарная ценность всех подотрезков равна \(4 + 3 + 1 + 3 + 2 + 1 = 14\).

E. Лучшая пара

Бинарный поиск Перебор реализация *2100

Дан массив \(a\) размера \(n\). Пусть \(cnt_x\) — количество элементов исходного массива, равных \(x\). Определим \(f(x, y)\) как \((cnt_x + cnt_y) \cdot (x + y)\).

Также даны \(m\) плохих пар \((x_i, y_i)\). Обратите внимание, что если \((x, y)\) плохая пара, то \((y, x)\) тоже плохая.

Найдите максимальное значение \(f(u, v)\) по всем парам \((u, v)\) таким, что \(u \neq v\), что эта пара не является плохой, а также что числа \(u\) и \(v\) встречаются в массиве \(a\). Гарантируется, что хотя бы одна такая пара существует.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных.

Первая строка набора содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 3 \cdot 10^5\), \(0 \le m \le 3 \cdot 10^5\)) — длину массива и количество плохих пар.

Вторая строка набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива.

\(i\)-я из следующих \(m\) строк содержат два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i < y_i \le 10^9\)) — очередную плохую пару. Гарантируется, что ни одна пара не вводится два раза. Также гарантируется, что \(cnt_{x_i} > 0\) и \(cnt_{y_i} > 0\).

Гарантируется, что в каждом наборе входных данных существует хотя бы одна пара чисел \((u, v)\), \(u \ne v\), не являющаяся плохой, такая, что оба этих числа встречаются в массиве \(a\).

Гарантируется, что сумма \(n\) и сумма \(m\) не превосходят \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — ответ на задачу.

Примечание

В первом тестовом случае в массиве встречаются значения \(3\), \(6\), \(7\).

  • \(f(3, 6) = (cnt_3 + cnt_6) \cdot (3 + 6) = (3 + 2) \cdot (3 + 6) = 45\). Но пара \((3, 6)\) плохая, поэтому её не учитываем.
  • \(f(3, 7) = (cnt_3 + cnt_7) \cdot (3 + 7) = (3 + 1) \cdot (3 + 7) = 40\).
  • \(f(6, 7) = (cnt_6 + cnt_7) \cdot (6 + 7) = (2 + 1) \cdot (6 + 7) = 39\).

Ответ на задачу \(\max(40, 39) = 40\).

E. Красочные запросы

Перебор реализация Структуры данных *2400

У вас есть массив \(a_1,a_2, \dots, a_n\). Каждый элемент изначально имеет значение \(0\) и цвет \(1\). Также вам дано \(q\) запросов, которые нужно обработать:

  • Color \(l\) \(r\) \(c\): Поменять цвет элементов \(a_l,a_{l+1},\cdots,a_r\) на \(c\) (\(1 \le l \le r \le n\), \(1 \le c \le n\)).
  • Add \(c\) \(x\): Прибавить \(x\) к значениям всех элементов \(a_i\) (\(1 \le i \le n\)), имеющих цвет \(c\) (\(1 \le c \le n\), \(-10^9 \le x \le 10^9\)).
  • Query \(i\): Вывести \(a_i\) (\(1 \le i \le n\)).
Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n,q \le 10^6\)) — длину массива \(a\) и количество запросов, которые нужно обработать.

Каждая из следующих \(q\) строк содержит запрос, который задан в формате, описанном в условии задачи.

Выходные данные

Выведите ответы на запросы третьего типа в отдельных строках.

Примечание

Первый тестовый пример описан ниже. Синий, красный и зеленый обозначают цвета \(1\), \(2\) и \(3\) соответственно.

F. Два плаката

жадные алгоритмы Перебор Структуры данных *3200

Вы хотите прорекламировать свой новый бизнес, поэтому собираетесь разместить два плаката на рекламном щите в центре города. Рекламный щит состоит из \(n\) вертикальных панелей шириной \(1\) и различной целочисленной высоты, соединенных горизонтальной перекладиной. \(i\)-я из \(n\) панелей имеет высоту \(h_i\).

Изначально все панели свисают с перекладины (их верхние края лежат на ней), но перед размещением двух постеров разрешается сдвинуть каждую панель вверх на любую целую величину, главное, чтобы она все еще была соединена с перекладиной (нижний край панели лежит под или на ней).

После того, как операции будут сделаны, вы разместите два плаката: один под перекладиной и один над ней. Им не разрешается выходить за перекладину, и они должны полностью располагаться внутри панелей.

Какую максимальную общую площадь могут покрыть два плаката, если вы сделаете оптимальные операции? Заметьте, что вы также можете разместить плакат площади \(0\). Этот случай равносилен размещению одного плаката.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^4\)) — количество вертикальных панелей.

Вторая строка входных данных содержит \(n\) целых чисел \(h_1, h_2, ..., h_n\) (\(1 \le h_i \le 10^{12}\)) — высоты \(n\) вертикальных панелей.

Выходные данные

Выведите единственное целое число — максимальную общая площадь, которую могут покрыть два плаката вместе.

Примечание

В первом тестовом примере мы можем выбрать верхний плакат с площадью \(12\) и нижний плакат с площадью \(6\), как на изображении ниже.

Во втором тестовом примере мы можем покрыть весь рекламный щит, используя один плакат.

D. Минимальный диаметр

Бинарный поиск Перебор *3100

Вам даны n точек на плоскости. Нужно удалить ровно k из них (k < n) так, чтобы диаметр набора оставшихся n - k точек был минимальным. Диаметром набора точек называется максимальное из попарных расстояний между точками набора. Диаметр набора, состоящего из одной точки, равен нулю.

Входные данные

В первой строке входных данных записана пара целых чисел n, k (2 ≤ n ≤ 1000, 1 ≤ k ≤ 30, k < n) — количество точек в наборе и количество точек для удаления, соответственно.

Следующие n строк содержат описание набора точек, по одному описанию в строке. Каждое описание состоит из пары целых чисел xi, yi (0 ≤ xi, yi ≤ 32000) — координат i-ой точки. Точки в наборе могут совпадать.

Выходные данные

Выведите k различных целых чисел от 1 до n — номера точек, которые следует удалить. Точки пронумерованы в порядке их задания во входных данных от 1 до n. Номера можно выводить в любом порядке. Числа выведите в одну строку через пробел. Если решений несколько, выведите любое из них.

A. Великая последовательность

жадные алгоритмы Перебор сортировки *1200

Последовательность положительных целых чисел называется великой для заданного положительного целого числа \(x\), если ее элементы можно разбить на пары так, что одно из чисел в паре при умножении на \(x\) будет равно другому числу в паре. Более формально, последовательность \(a\) длины \(n\) великая для заданного числа \(x\), если \(n\) четно и существует такая перестановка \(p\) размера \(n\), что для любого \(i\) (\(1 \le i \le \frac{n}{2}\)) выполняется, что \(a_{p_{2i-1}} \cdot x = a_{p_{2i}}\).

У Стаса есть последовательность положительных целых чисел \(a\) и положительное целое число \(x\). Помогите ему сделать последовательность великой: найдите минимальное количество положительных целых чисел, которое можно приписать к последовательности \(a\), чтобы она стала великой для числа \(x\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 20\,000\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(x\) (\(1 \le n \le 2 \cdot 10^5\), \(2 \le x \le 10^6\)).

В следующей строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество положительных целых чисел, которое можно добавить к последовательности \(a\), чтобы она стала великой для числа \(x\).

Примечание

В первом наборе входных данных последовательность уже является великой для числа \(4\), потому что числа можно разбить на пары \((1, 4)\), \((4, 16)\). Поэтому можно добавить \(0\) чисел.

Во втором наборе входных данных можно добавить числа \(1\) и \(14\) к последовательности, тогда получившиеся \(8\) чисел можно разбить на пары \((1, 2)\), \((1, 2)\), \((2, 4)\), \((7, 14)\). Меньше чем \(2\) числа добавить невозможно.

C. Анонимность наше все

Бинарный поиск жадные алгоритмы Перебор снм сортировки Структуры данных *2200

В работе врача важно сохранять анонимность своих клиентов и результатов анализов. Результаты теста отправляются каждому лично по электронной почте, но люди очень нетерпеливые и им хочется узнавать результаты сразу.

Именно поэтому в одном центре для сдачи анализов «Девитро» придумали экспериментальный способ сообщать результаты. Пусть всего анализы сдавало \(n\) человек в порядке очереди. Тогда главврач Стас может сделать несколько сообщений, в каждом из которых сообщить, был ли больной человек среди людей в очереди от \(l\)-го до \(r\)-го (включительно) для некоторых значений \(l\) и \(r\).

В процессе Стас будет проверять, насколько хорошо работает эта схема, и будет интересоваться, можно ли однозначно узнать результат анализа \(i\)-го человека по уже сообщенной информации. И если это сделать можно, то болен ли этот человек.

Помогите Стасу протестировать свою схему.

Входные данные

В первой строке находится два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество людей, сдавших анализы и количество запросов.

В каждой из следующих \(q\) строк находится описание запросов. Первое число в строке \(t\) (\(t = 0\) или \(t = 1\)) — тип запроса.

Если \(t = 0\), то дальше в этой строке находятся еще три целых числа \(l, r, x\) (\(1 \le l \le r \le n\), \(x = 0\) или \(x = 1\)). Этот запрос соответствует тому, что Стас сообщает, что среди людей от \(l\)-го до \(r\)-го (включительно) в очереди:

  • был больной, если \(x=1\),
  • не было больного, если \(x=0\).

Если \(t = 1\), то дальше в этой строке находится одно целое число \(j\) (\(1 \le j \le n\)) — номер пациента в очереди, чья конфиденциальность волнует Стаса.

Гарантируется, что все запросы корректны, то есть всегда существует пример очереди длины \(n\), для которой все озвученные результаты (утверждения из запросов, где \(t = 0\)) корректны.

Выходные данные

После каждого вопроса Стаса (запроса с \(t = 1\)) выведите:

  • «NO», если пациент однозначно не болен,
  • «YES», если пациент однозначно болен,
  • «N/A», если по имеющейся информации нельзя однозначно сказать, болен пациент или нет.
Примечание

В первом тесте для первых пяти запросов:

  1. Изначально Стас сообщает, что среди \(4\), \(5\) людей нет больных.
  2. В следующем запросе Стас интересуется конфиденциальностью человека \(5\). Из предыдущего запроса мы знаем, что он однозначно не болен.
  3. В следующем запросе Стас интересуется конфиденциальностью человека \(6\). Мы не знаем про него вообще никакой информации, поэтому он может быть как болен, так и не болен.
  4. Затем Стас сообщает, что среди \(4\), \(5\), \(6\) людей есть больной.
  5. В следующем запросе Стас интересуется конфиденциальностью человека \(6\). Теперь мы можем однозначно сказать, что он болен, потому что из предыдущего запроса среди трех человек болен мог быть только он.

D. Два массива

битмаски жадные алгоритмы Комбинаторика математика Перебор хэши *2700

Стас перешел в новую школу «75-угольник», и на первом же уроке биологии начал умничать, за что его учитель попросил решить задачу по генетике, решение которой сам не знает.

Вам дано \(n\) массивов, \(i\)-й из которых содержит \(m\) различных целых чисел — \(a_{i,1}, a_{i,2},\ldots,a_{i,m}\). Также дан массив положительных целых чисел \(w\) длины \(n\).

Вам надо найти минимальное возможное значение выражения \(w_i + w_j\) среди всех пар целых чисел \((i, j)\) (\(1 \le i, j \le n\)) таких, что среди чисел \(a_{i,1}, a_{i,2},\ldots,a_{i,m}, a_{j,1}, a_{j,2},\ldots,a_{j,m}\) все числа различны.

Входные данные

В первой строке находится два целых числа \(n\), \(m\) (\(2 \leq n \leq 10^5\), \(1 \le m \le 5\)).

В \(i\)-й из следующих \(n\) строк сначала находится \(m\) различных целых чисел \(a_{i,1}, a_{i,2}, \ldots, a_{i,m}\), затем число \(w_i\) (\(1\leq a_{i,j} \leq 10^9\), \(1 \leq w_{i} \leq 10^9\)).

Выходные данные

Выведите единственное число — ответ на задачу.

Если ни одной подходящей пары \((i, j)\) не существует, выведите \(-1\).

Примечание

В первом тесте минимальное значение это \(5 = w_3 + w_4\), так как среди чисел \(\{2, 3, 4, 5\}\) все различны.

Во втором тесте нет ни одной подходящей пары \((i, j)\).

B. Антифибоначчиевы перестановки

Конструктив Перебор реализация *800

Назовем перестановку \(p\) длины \(n\) антифибоначчиевой, если для всех \(i\) (\(3 \le i \le n\)) выполняется \(p_{i-2} + p_{i-1} \ne p_i\). Напомним, что перестановкой называется массив длины \(n\), содержащий каждое целое число от \(1\) до \(n\) ровно один раз.

Ваша задача — для заданного числа \(n\) вывести \(n\) различных антифибоначчиевых перестановок длины \(n\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 48\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 50\)).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк. Каждая строка должна содержать антифибоначчиеву перестановку длины \(n\). В каждом наборе входных данных каждая перестановка должна быть выведена не более одного раза.

Если существует несколько ответов, выведите любой из них. Можно показать, что всегда существует способ найти \(n\) различных антифибоначчиевых перестановок длины \(n\), соблюдая ограничения задачи.

C. Увеличь суммы подотрезков

дп жадные алгоритмы Перебор реализация *1400

Задан массив \(a_1, a_2, \dots, a_n\), состоящий из \(n\) целых чисел. Также дано целое число \(x\).

Пусть \(f(k)\) будет равно максимальной сумме последовательного подмассива \(a\) после применения следующей операции: прибавить \(x\) к элементам на ровно \(k\) различных позициях. Пустой подмассив тоже рассматривается, его сумма равна \(0\).

Обратите внимание, что подмассив не обязан включать в себя все увеличенные элементы.

Посчитайте максимальное значение \(f(k)\) для каждого \(k\) от \(0\) до \(n\) независимо.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

В первой строке каждого набора записано два целых числа \(n\) и \(x\) (\(1 \le n \le 5000\); \(0 \le x \le 10^5\)) — количество элементов массива и значение для прибавления.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^5 \le a_i \le 10^5\)).

Сумма \(n\) по всем наборам целых чисел не превосходят \(5000\).

Выходные данные

На каждый набор входных данных выведите \(n + 1\) целое число — максимальное значение \(f(k)\) для каждого \(k\) от \(0\) до \(n\) независимо.

Примечание

В первом наборе не важно, к каким элементам прибавлять \(x\). Подотрезок с максимальной суммой всегда будет целым массивом. Если увеличить \(k\) элементов на \(x\), к сумме прибавится \(k \cdot x\).

Во втором наборе:

  • Для \(k = 0\) пустой подмассив — это лучший вариант.
  • Для \(k = 1\) наиболее выгодно увеличить элемент на позиции \(3\). Лучшая сумма становится \(-1 + 5 = 4\) для подмассива \([3, 3]\).
  • Для \(k = 2\) наиболее выгодно увеличить элемент на позиции \(3\) и любой другой элемент. Лучшая сумма останется \(4\) для подотрезка \([3, 3]\).
  • Для \(k = 3\) необходимо увеличить все элементы. Лучшая сумма становится \((-2 + 5) + (-7 + 5) + (-1 + 5) = 5\) для подотрезка \([1, 3]\).

E. Расширь маршрут

Комбинаторика математика Перебор реализация Структуры данных *1900

Задана сетка размера \(n \times n\). Строки пронумерованы сверху вниз от \(1\) до \(n\), столбцы пронумерованы слева направо от \(1\) до \(n\).

Робот расположен в клетке \((1, 1)\). Он может делать два типа ходов:

  • D — перейти на одну клетку вниз;
  • R — перейти на одну клетку вправо.

Роботу запрещено выходить за пределы поля.

Дана последовательность ходов \(s\) — изначальный маршрут робота. Этот маршрут не ведет робота за пределы поля.

Вам разрешено провести произвольное количество изменений строки (возможно, ноль). За одно изменение можно раздвоить один ход в последовательности. То есть, заменить одно вхождение D на DD или одно вхождение R на RR.

Посчитайте количество клеток таких, что существует хотя бы одна последовательность изменений, после применения которой робот посетит эту клетку на измененном маршруте и не выйдет за пределы поля.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора записаны два целых числа \(n\) (\(2 \le n \le 10^8\)) — количество строк и столбцов.

Во второй строке каждого набор записана непустая строка \(s\), состоящая только из символов D и R, — изначальный маршрут робота. Этот маршрут не ведет робота за пределы поля.

Суммарная длина строк \(s\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — количество клеток таких, что существует хотя бы одна последовательность изменений, после применения которой робот посетит эту клетку на измененном маршруте и не выйдет за пределы поля.

Примечание

В первом наборе входных данных достаточно рассмотреть следующие измененные маршруты:

  • RD \(\rightarrow\) RRD \(\rightarrow\) RRRD \(\rightarrow\) RRRDD \(\rightarrow\) RRRDDD — этот маршрут посещает клетки \((1, 1)\), \((1, 2)\), \((1, 3)\), \((1, 4)\), \((2, 4)\), \((3, 4)\) и \((4, 4)\);
  • RD \(\rightarrow\) RRD \(\rightarrow\) RRDD \(\rightarrow\) RRDDD — этот маршрут посещает клетки \((1, 1)\), \((1, 2)\), \((1, 3)\), \((2, 3)\), \((3, 3)\) и \((4, 3)\);
  • RD \(\rightarrow\) RDD \(\rightarrow\) RDDD — этот маршрут посещает клетки \((1, 1)\), \((1, 2)\), \((2, 2)\), \((3, 2)\) и \((4, 2)\).

Таким образом, клетки, которые посещены на хотя бы одном измененном маршруте: \((1, 1)\), \((1, 2)\), \((1, 3)\), \((1, 4)\), \((2, 2)\), \((2, 3)\), \((2, 4)\), \((3, 2)\), \((3, 3)\), \((3, 4)\), \((4, 2)\), \((4, 3)\) и \((4, 4)\).

Во втором примере, нет способа изменить последовательность так, чтобы робот не вышел за пределы поля. Поэтому все посещенные клетки — это те, которые посещены на маршруте DRDRDRDR.

В третьем примере клетки, которые посещены на хотя бы одном измененном маршруте: \((1, 1)\), \((2, 1)\) и \((3, 1)\).

Клетки для всех наборов:

B. Качество против количества

жадные алгоритмы Конструктив Перебор сортировки *800

\( \def\myred#1{\color{red}{\underline{\bf{#1}}}} \def\myblue#1{\color{blue}{\overline{\bf{#1}}}} \) \(\def\RED{\myred{\unicode{1050}\unicode{1088}\unicode{1072}\unicode{1089}\unicode{1085}\unicode{1099}\unicode{1081}}} \def\BLUE{\myblue{\unicode{1057}\unicode{1080}\unicode{1085}\unicode{1080}\unicode{1081}}}\)

Вам дана последовательность из \(n\) неотрицательных целых чисел \(a_1, a_2, \ldots, a_n\). Изначально все элементы непокрашены. Вы можете покрасить каждое число в \(\RED\) или \(\BLUE\) (но не в оба) или оставить его непокрашенным.

Обозначим за \(\text{Count}(c)\) количество элементов последовательности, покрашенных в \(c\), а за \(\text{Sum}(c)\) — сумму этих чисел.

Например, если данная последовательность равна \([2, 8, 6, 3, 1]\), и она покрашена следующим образом: \([\myblue{2}, 8, \myred{6}, \myblue{3}, 1]\) (где \(6\) покрашена красным, \(2\) и \(3\) покрашены синим, \(1\) и \(8\) непокрашены), то \(\text{Sum}(\RED)=6\), \(\text{Sum}(\BLUE)=2+3=5\), \(\text{Count}(\RED)=1\) и \(\text{Count}(\BLUE)=2\).

Определите, можно ли покрасить последовательность так, чтобы \(\text{Sum}(\RED) > \text{Sum}(\BLUE)\) и \(\text{Count}(\RED) < \text{Count}(\BLUE)\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строка находится одно целое число \(n\) (\(3\le n\le 2\cdot 10^5\)) — длину последовательности.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0\le a_i\le 10^9\)) — данная последовательность.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите YES, если возможно раскрасить данную последовательность, удовлетворив заданные ограничения, и NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут считаться положительным ответом).

Примечание

В первом примере нет способа раскрасить элементы заданным образом. Например, если раскрасить последовательность следующим образом: \([\myblue{1},\myblue{2},\myred{3}]\) (где \(3\) покрашена красным, \(1\) и \(2\) покрашены синим), то \(\text{Count}(\RED)=1 < \text{Count}(\BLUE)=2\), но \(\text{Sum}(\RED)=3 \ngtr \text{Sum}(\BLUE)=3\). Поэтому это не является корректным способом раскрасить последовательность.

Во втором примере один из возможных способов раскрасить последовательность показан в условии. Легко видеть, что \(\text{Sum}(\RED)=6 > \text{Sum}(\BLUE)=5\), а также \(\text{Count}(\RED)=1 < \text{Count}(\BLUE)=2\).

В третьем примере можно показать, что нет способа раскрасить последовательность правильным образом. Например, если раскрасить последовательность следующим образом: \([\myred{3},\myred{5},\myblue{4}, \myblue{2}]\) (где \(3\) и \(5\) покрашены красным, \(4\) и \(2\) покрашены синим), то \(\text{Sum}(\RED) = 8 > \text{Sum}(\BLUE) = 6\), но \(\text{Count}(\RED) = 2 \nless \text{Count}(\BLUE) = 2\). Поэтому это не является корректным способом раскрасить последовательность.

В четвертом примере можно показать, что нет способа раскрасить последовательность правильным образом.

C. Факториалы и степени двойки

битмаски дп Конструктив математика Перебор *1500

Число называется сильным, если оно является степенью двойки или факториалом. Другими словами, число \(m\) сильное, если существует неотрицательное целое число \(d\) такое, что \(m=2^d\) или \(m=d!\), где \(d!=1\cdot 2\cdot \ldots \cdot d\) (в частности, \(0! = 1\)). Например, \(1\), \(4\) и \(6\) являются сильными, потому что \(1=1!\), \(4=2^2\), \(6=3!\), а \(7\), \(10\) или \(18\) не являются.

Вам дано положительное число \(n\). Найдите минимальное число \(k\) такое, что \(n\) можно представить в виде суммы \(k\) различных сильных чисел, или определите, что такого \(k\) не существует.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Описание одного набора входных данных содержит одно целое число \(n\) (\(1\le n\le 10^{12}\)).

Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке.

Если \(n\) не может быть представлено как сумма различных сильных чисел, выведите \(-1\).

Иначе выведите одно положительное число — минимально возможное число \(k\).

Примечание

В первом примере \(7\) может быть представлена как \(7=1+6\), где \(1\) и \(6\) являются сильными. Так как \(7\) не является сильным числом, мы знаем, что минимальное значение \(k\) в этом случае \(k=2\).

Во втором примере один из способов разложить \(11\) в сумму трех сильных чисел такой: \(11=1+4+6\). Можно показать, что нельзя представить \(11\) в виде суммы двух или менее сильных чисел.

В третьем примере \(240\) может быть представлено как \(240=24+32+64+120\). Обратите внимание, что \(240=120+120\) не является корректным представлением, т. к. сильные числа должны быть различны.

В четвертом примере \(17179869184=2^{34}\), поэтому \(17179869184\) является сильным числом, и минимальное \(k\) в этом случае \(k=1\).

E. Степенная таблица

дп математика Перебор теория чисел *2200

У вас есть прямоугольная таблица размера \(n\times m\) (\(n\) строк, \(m\) столбцов). \(n\) строк пронумерованы от \(1\) до \(n\) сверху вниз, а \(m\) столбцов пронумерованы от \(1\) до \(m\) слева направо.

Клетка на пересечении строки \(i\) и столбца \(j\) содержит число \(i^j\) (число \(i\), возведенное в степень \(j\)). Например, если \(n=3\) и \(m=3\), то таблица выглядит следующим образом:

Найдите количество различных чисел в таблице.

Входные данные

Единственная строка содержит два целых числа \(n\) и \(m\) (\(1\le n,m\le 10^6\)) — количество строк и количество столбцов.

Выходные данные

Выведите одно целое число: количество различных целых чисел в таблице.

Примечание

В условии показана таблице из первого примера. В этом случае \(7\) различных чисел: \(1\), \(2\), \(3\), \(4\), \(8\), \(9\) и \(27\).

Во втором примере таблица следующая:

В ней \(5\) различных чисел: \(1\), \(2\), \(4\), \(8\) и \(16\).

В третьем примере таблица следующая:

В ней \(6\) различных чисел: \(1\), \(2\), \(3\), \(4\), \(9\) и \(16\).

B. Мадока и элегантный подарок

графы Конструктив Перебор реализация *1200

Отец Мадоки достиг отметки в \(1\) миллион подписчиков на Mathub! В честь этого вебсайт решил отправить ему персонализированную награду — Битовую Кнопку Mathub!

Награда представляет из себя таблицу из \(n\) строк и \(m\) столбцов, в каждой клетке которой записано число \(0\) или \(1\). Изучив таблицу, она вывела следующие характеристики:

  • Подпрямоугольник \(A\) лежит в подпрямоугольнике \(B\), если нет клетки, которая лежит внутри \(A\), но при этом не лежит внутри \(B\).
  • Два подпрямоугольника пересекаются, если найдется клетка, лежащая внутри обоих подпрямоугольников.
  • Подпрямоугольник называется чёрным, если в нём нет клетки со значением \(0\).
  • Подпрямоугольник называется красивым, если он чёрный и не лежит в каком-то другом чёрном подпрямоугольнике.
  • Таблица называется элегантной, если никакие два красивых подпрямоугольника не пересекаются.

Например, на первой картинке красный подпрямоугольник является красивым, а на второй нет, так как он лежит внутри фиолетового подпрямоугольника.

Помогите Мадоке определить, является ли таблица элегантной.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(n, m\) (\(1 \le n, m \le 100\)) — размеры таблицы.

Далее следуют \(n\) строк длины \(m\), состоящих из нулей и единиц — описание таблицы.

Гарантируется, что сумма значений \(n\) и сумма значений \(m\) по всем наборам входных данных не превосходят \(777\).

Выходные данные

Для каждого набора входных данных выведите «YES», если данная таблица является элегантной. Иначе, выведите «NO».

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

Во втором наборе входных данных таблица не элегантная, поскольку красный красивый подпрямоугольник пересекается с фиолетовым.

В четвертом наборе входных данных таблица не элегантная, поскольку красный красивый подпрямоугольник пересекается с фиолетовым.

B. Целостный массив

Конструктив математика Перебор Структуры данных *1800

Дан массив \(a\) из \(n\) целых положительных чисел, пронумерованных от \(1\) до \(n\). Назовём массив целостным, если для любых двух, не обязательно различных, чисел \(x\) и \(y\) из этого массива, для которых \(x \ge y\), число \(\left \lfloor \frac{x}{y} \right \rfloor\) (частное от деления \(x\) на \(y\) с округлением вниз) тоже лежит в этом массиве.

Известно, что в массиве \(a\) все числа не превосходят \(c\). Ваша задача — проверить, является ли данный массив целостным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(c\) (\(1 \le n \le 10^6\), \(1 \le c \le 10^6\)) — размер массива \(a\) и ограничение на числа в массиве.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le c\)) — элементы массива \(a\).

Пусть \(N\) обозначает сумму значений \(n\) по всем наборам входных данных, а \(C\) — сумму значений \(c\) по всем наборам входных данных. Гарантируется, что \(N \le 10^6\) и \(C \le 10^6\).

Выходные данные

Для каждого набора входных данных выведите Yes, если массив является целостным, и No иначе.

Примечание

В первом наборе входных данных нетрудно заметить, что массив является целостным:

  • \(\left \lfloor \frac{1}{1} \right \rfloor = 1\), \(a_1 = 1\), число встречается в массиве
  • \(\left \lfloor \frac{2}{2} \right \rfloor = 1\)
  • \(\left \lfloor \frac{5}{5} \right \rfloor = 1\)
  • \(\left \lfloor \frac{2}{1} \right \rfloor = 2\), \(a_2 = 2\), число встречается в массиве
  • \(\left \lfloor \frac{5}{1} \right \rfloor = 5\), \(a_3 = 5\), число встречается в массиве
  • \(\left \lfloor \frac{5}{2} \right \rfloor = 2\), \(a_2 = 2\), число встречается в массиве

Таким образом, условие выполнено, массив является целостным.

Во втором наборе входных данных достаточно заметить, что

\(\left \lfloor \frac{7}{3} \right \rfloor = \left \lfloor 2\frac{1}{3} \right \rfloor = 2\), этого числа нет в массиве \(a\), поэтому он не является целостным.

В третьем наборе входных данных \(\left \lfloor \frac{2}{2} \right \rfloor = 1\), но в массиве есть только число \(2\), поэтому он не является целостным.

C. Еще одна строковая задача

Бинарный поиск дп математика Перебор Строки *1600

Строка называется бинарной, если она состоит только из символов «0» и «1».

Строка v называется подстрокой строки w, если она имеет ненулевую длину, и ее можно прочитать, начиная с некоторой позиции, в строке w. Например, у строки «010» есть шесть подстрок: «0», «1», «0», «01», «10», «010». Две подстроки считаются различными, если их позиции вхождения различны. Другими словами, каждую подстроку нужно учитывать столько раз, сколько она встречается.

Дана бинарная строка s. Ваша задача — найти количество ее подстрок, содержащих ровно k единиц.

Входные данные

В первой строке записано единственное целое число k (0 ≤ k ≤ 106). Во второй строке записана непустая бинарная строка s. Длина s не превосходит 106 символов.

Выходные данные

Выведите одно целое число — количество подстрок данной строки, содержащих ровно k символов «1».

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Примечание

В первом примере искомые подстроки: «1», «1», «10», «01», «10», «010».

Во втором примере искомые подстроки: «101», «0101», «1010», «01010».

E. Совместимые числа

битмаски дп Перебор поиск в глубину и подобное *2200

Два целых числа x и y называются совместимыми, если результат их побитового «И» равен нулю, то есть a & b = 0. Например, числа 90 (10110102) и 36 (1001002) совместимы, так как 10110102 & 1001002 = 02, а числа 3 (112) и 6 (1102) несовместимы, так как 112 & 1102 = 102.

Вам дан массив целых чисел a1, a2, ..., an. Требуется определить для каждого элемента массива, совместим ли этот элемент с каким-либо другим элементом из данного массива. В случае положительного ответа также требуется найти любой подходящей элемент.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 106) — количество элементов в данном массиве. Во второй строке через пробел записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 4·106) — элементы данного массива. Числа в массиве могут повторяться.

Выходные данные

Выведите n целых чисел ansi. Если ai не совместимо ни с каким другим элементом данного массива a1, a2, ..., an, то ansi должно быть равно -1. Иначе ansi — любое такое число, что ai & ansi = 0, и при этом ansi содержится в массиве a1, a2, ..., an.

D. Петя и циклические сдвиги

Конструктив математика Перебор реализация *1300

У Пети изначально был массив \(a\) целых чисел от \(1\) до \(n\), где \(a[i]=i\).

Он последовательно произвёл \(n\) операций. В итоге он получил новое состояние массива \(a\).

На \(i\)-й операции Петя выбирал первые \(i\) элементов массива и произвольное количество раз совершал их циклический сдвиг вправо (элементы с номерами \(i+1\) и больше оставались на своих местах). Один циклический сдвиг вправо — это такое преобразование, что массив \(a=[a_1, a_2, \dots, a_n]\) станет равен \(a = [a_i, a_1, a_2, \dots, a_{i-2}, a_{i-1}, a_{i+1}, a_{i+2}, \dots, a_n]\).

Например, если \(a = [5,4,2,1,3]\) и \(i=3\) (то есть это третья операция), то в результате этой операции он мог получить любой из трёх массивов:

  • \(a = [5,4,2,1,3]\) (делает \(0\) циклических сдвигов или любое количество, которое делится на \(3\));
  • \(a = [2,5,4,1,3]\) (делает \(1\) циклический сдвиг или любое количество, которое имеет остаток \(1\) при делении на \(3\));
  • \(a = [4,2,5,1,3]\) (делает \(2\) циклических сдвига или любое количество, которое имеет остаток \(2\) при делении на \(3\)).

Рассмотрим пример. Пусть \(n=6\), то есть изначально \(a=[1,2,3,4,5,6]\). Возможный вариант развития событий описан ниже.

  • \(i=1\): сколько бы циклических сдвигов Петя не производил, массив \(a\) не изменится.
  • \(i=2\): допустим Петя решил сделать \(1\) циклический сдвиг, тогда массив примет вид \(a = [\textbf{2}, \textbf{1}, 3, 4, 5, 6]\).
  • \(i=3\): допустим Петя решил сделать \(1\) циклический сдвиг, тогда массив примет вид \(a = [\textbf{3}, \textbf{2}, \textbf{1}, 4, 5, 6]\).
  • \(i=4\): допустим Петя решил сделать \(2\) циклических сдвига, тогда массив примет вид \(a = [\textbf{1}, \textbf{4}, \textbf{3}, \textbf{2}, 5, 6]\).
  • \(i=5\): допустим Петя решил сделать \(0\) циклических сдвигов, тогда массив не изменится.
  • \(i=6\): допустим Петя решил сделать \(4\) циклических сдвига, тогда массив примет вид \(a = [\textbf{3}, \textbf{2}, \textbf{5}, \textbf{6}, \textbf{1}, \textbf{4}]\).

Вам задано финальное состояние массива \(a\) после всех \(n\) операций. Определите, существует ли способ выполнения операций, который приведёт к этому результату. В случае положительного ответа найдите количество циклических сдвигов, которое могло быть сделано во время каждой из \(n\) операций.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора содержит одно целое число \(n\) (\(2 \le n \le 2\cdot10^3\)) — длина массива \(a\).

В следующей строке задано финальное состояние массива \(a\): записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)). Все \(a_i\) — различны.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2\cdot10^3\).

Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке.

Выведите -1, если заданное финальное значение \(a\) нельзя получить, производя произвольное количество циклических сдвигов на каждой операции. Иначе выведите \(n\) неотрицательных целых чисел \(d_1, d_2, \dots, d_n\) (\(d_i \ge 0\)), где \(d_i\) обозначает, что во время \(i\)-й операции первые \(i\) элементов массива были циклически сдвинуты вправо \(d_i\) раз.

Если возможных ответов несколько выведите тот, где суммарное количество сдвигов минимально (то есть сумма значений \(d_i\) наименьшая). Если таких ответов несколько, то выведите любой из них.

Примечание

Первый набор входных данных совпадает с примером из условия.

Второй набор входных данных как видно несложный. Заметим, что ответ \([3, 2, 1]\) также даёт ту же перестановку, но так как суммарное количество сдвигов \(3+2+1\) больше \(0+0+1\), то такой ответ не является правильным.

C. Отказоустойчивая сеть

Перебор реализация Структуры данных *1500

В компьютерном классе стоят два ряда компьютеров. В каждом ряду ровно по \(n\) компьютеров и у компьютеров есть своя классификация. Компьютеры в первом ряду имеют классы \(a_1, a_2, \dots, a_n\), а компьютеры во втором ряду — \(b_1, b_2, \dots, b_n\).

Первоначально, все пары соседних компьютеров в каждом ряду соединены кабелем (пары \((i, i + 1)\) для всех \(1 \le i < n\)), а потому ряды образуют две независимые компьютерные сети.

Ваша задача — объединить их в одну общую сеть посредством соединения одной или более пар компьютеров с разных рядов. Соединение \(i\)-го компьютера с первого ряда и \(j\)-го компьютера второго ряда стоит \(|a_i - b_j|\).

Вы можете соединять один компьютер с несколькими другими, но вам нужно обеспечить хотя бы базовую отказоустойчивость: вам нужно соединить компьютеры таким образом, чтобы сеть осталась цельной, даже если один из компьютеров будет уничтожен. Другими словами, какой бы один компьютер не был выведен из строя, сеть не развалится на несколько несвязанных частей.

Чему равна наименьшая стоимость построить отказоустойчивую сеть?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество компьютеров в каждом ряду.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — классы компьютеров в первом ряду.

В третьей строке заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)) — классы компьютеров во втором ряду.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальную суммарную стоимость построить отказоустойчивую сеть.

Примечание

В первом наборе входных данных, выгодно соединить четыре пары компьютеров:

  1. компьютер \(1\) на первом ряду и компьютер \(2\) на втором ряду: стоимость равна \(|1 - 4| = 3\);
  2. компьютер \(3\) на первом ряду и компьютер \(2\) на втором ряду: стоимость \(|1 - 4| = 3\);
  3. компьютер \(2\) на первом ряду и компьютер \(1\) на втором ряду: стоимость \(|10 - 20| = 10\);
  4. компьютер \(2\) на первом ряду и компьютер \(3\) на втором ряду: стоимость \(|10 - 25| = 15\);
В сумме, \(3 + 3 + 10 + 15 = 31\).

Во втором наборе, выгодно соединить \(1\) на первом ряду и \(1\) на втором ряду, а также \(4\) на первом ряду и \(4\) на втором.

E. Сумма паросочетаний

жадные алгоритмы Комбинаторика Конструктив математика Паросочетания Перебор поиск в глубину и подобное *2600

Обозначим размер максимального паросочетания в графе \(G\) как \(\mathit{MM}(G)\).

Задан двудольный граф. Вершины первой доли пронумерованы от \(1\) до \(n\). Вершины второй доли пронумерованы от \(n+1\) до \(2n\). Степень каждой вершины равна \(2\).

Для четверки целых чисел \((l, r, L, R)\), где \(1 \le l \le r \le n\) и \(n+1 \le L \le R \le 2n\), определим \(G'(l, r, L, R)\) как граф, который состоит из всех вершин заданного графа, которые находятся либо в отрезке \([l, r]\), либо в отрезке \([L, R]\), и всех ребер заданного графа таких, что вершины их концов принадлежат одному из этих отрезков. Другими словами, чтобы получить граф \(G'(l, r, L, R)\) из изначального графа, надо удалить все вершины \(i\) такие, что \(i \notin [l, r]\) и \(i \notin [L, R]\), и все инцидентные им ребра.

Посчитайте сумму \(\mathit{MM}(G(l, r, L, R))\) по всем наборам целых чисел \((l, r, L, R)\) таких, что \(1 \le l \le r \le n\) and \(n+1 \le L \le R \le 2n\).

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 1500\)) — количество вершин в каждой доле.

Затем следует \(2n\) строке, в каждой записано ребро графа. В \(i\)-й строке записано два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le n\); \(n + 1 \le y_i \le 2n\)) — концы \(i\)-го ребра.

В графе нет кратных ребер, и у каждой вершины ровно два инцидентных ребра.

Выходные данные

Выведите одно целое число — сумму \(\mathit{MM}(G(l, r, L, R))\) по всем наборам целых чисел \((l, r, L, R)\), у которых \(1 \le l \le r \le n\) и \(n+1 \le L \le R \le 2n\).

F. Tower Defense

Бинарный поиск Перебор Структуры данных *3000

Монокарп играет в игру в жанре tower defense. Уровень в этой игре может быть представлен как ось OX, на которой в каждой целочисленной точке от \(1\) до \(n\) стоит башня.

У башни в \(i\)-й точке вместимость маны равна \(c_i\), а скорость восстановления маны равна \(r_i\). В самом начале, до секунды \(0\), у каждой башни полная мана. Если в конце какой-то секунды у \(i\)-й башни \(x\) маны, то к началу следующей секунды становится \(\mathit{min}(x + r_i, c_i)\) маны.

На уровне появляются \(q\) монстров. \(j\)-й монстр появляется в точке \(1\) в начале \(t_j\)-й секунды и имеет \(h_j\) здоровья. Каждый монстр двигается со скоростью \(1\) точка в секунду в направлении увеличения координаты.

Когда монстр проходит мимо башни, башня наносит ему \(\mathit{min}(H, M)\) урона, где \(H\) — это текущий запас здоровья монстра, а \(M\) — текущий запас маны башни. Это количество вычитается из здоровья монстра и из маны башни.

К сожалению, некоторые монстры могут пройти мимо всех \(n\) башен и остаться живыми. Монокарп хочет знать, какой суммарный запас здоровья будет у монстров после того, как они пройдут мимо всех башен.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество башен.

В \(i\)-й из следующих \(n\) строк записаны два целых числа \(c_i\) и \(r_i\) (\(1 \le r_i \le c_i \le 10^9\)) — вместимость мана и скорость восстановления маны у \(i\)-й башни.

В следующей строке записано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество монстров.

В \(j\)-й из следующих \(q\) строк записаны два целых числа \(t_j\) и \(h_j\) (\(0 \le t_j \le 2 \cdot 10^5\); \(1 \le h_j \le 10^{12}\)) — время, когда появляется \(j\)-й монстр, и его здоровье.

Монстры перечислены в порядке увеличения времени появления, поэтому \(t_j < t_{j+1}\) для всех \(1 \le j \le q-1\).

Выходные данные

Выведите одно целое число — суммарный запас здоровья у монстров, который будет после того, как они пройдут мимо всех башен.

A. Целочисленные действия

математика Перебор *800

На координатной плоскости лежит фишка в точке с координатами \((0, 0)\). За одно действие фишку можно передвинуть из точки \((x_1, y_1)\) в точку \((x_2, y_2)\), если евклидово расстояние между двумя этими точками является целым числом (т.е. \(\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}\) является целым).

Ваша задача — определить минимальное количество операций, чтобы передвинуть фишку из точки \((0, 0)\) в точку \((x, y)\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 3000\)) — количество наборов входных данных.

Единственная строка каждого набора содержит два целых числа \(x\) и \(y\) (\(0 \le x, y \le 50\)) — координаты точки назначения.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, чтобы передвинуть фишку из точки \((0, 0)\) в точку \((x, y)\).

Примечание

В первом примере достаточно одного действия \((0, 0) \rightarrow (8, 6)\). \(\sqrt{(0-8)^2+(0-6)^2}=\sqrt{64+36}=\sqrt{100}=10\) является целым числом.

Во втором примере фишка уже находится в точке назначения.

В третьем примере фишку можно двигать следующим образом: \((0, 0) \rightarrow (5, 12) \rightarrow (9, 15)\). \(\sqrt{(0-5)^2+(0-12)^2}=\sqrt{25+144}=\sqrt{169}=13\) и \(\sqrt{(5-9)^2+(12-15)^2}=\sqrt{16+9}=\sqrt{25}=5\) являются целыми числами.

D. Для геймеров. От геймеров.

Бинарный поиск жадные алгоритмы математика Перебор сортировки *2000

Монокарп играет в стратегическую игру. В игре он собирает отряд для борьбы с монстрами. Перед каждой битвой у Монокарпа есть \(C\) монет, которые он может потратить на свой отряд.

Перед началом каждой битвы в его отряде никого нет. Монокарп выбирает один тип воинов и набирает не больше воинов этого типа, чем он может себе позволить за \(C\) монет.

Существует \(n\) типов воинов. Каждый тип воинов имеет три параметра:

  • \(c_i\) — стоимость одного воина \(i\)-го типа;
  • \(d_i\) — урон, который наносит один воин \(i\)-го типа за секунду;
  • \(h_i\) — здоровье одного воина \(i\)-го типа.

Монокарпу придется сразиться с \(m\) монстрами. У каждого монстра есть два параметра:

  • \(D_j\) — урон, который наносит \(j\)-й монстр за секунду;
  • \(H_j\) — здоровье \(j\)-го монстра.

Монокарп сражается только с \(j\)-м монстром во время \(j\)-й битвы. Он хочет, чтобы все его воины остались в живых. И отряд Монокарпа, и монстр атакуют одновременно и непрерывно. Таким образом, Монокарп выигрывает битву тогда и только тогда, когда его отряд убивает монстра строго быстрее, чем монстр убивает одного из его воинов. Время сравнивается без округления.

Для каждого монстра Монокарп хочет знать минимальное количество монет, которое он должен потратить, чтобы убить этого монстра. Если это количество больше, чем \(C\), то сообщите, что убить этого монстра невозможно.

Входные данные

В первой строке записаны два целых числа \(n\) и \(C\) (\(1 \le n \le 3 \cdot 10^5\); \(1 \le C \le 10^6\)) — количество типов воинов и количество монет у Монокарпа перед каждой битвой.

В \(i\)-й из следующих \(n\) строк записаны три целых числа \(c_i, d_i\) и \(h_i\) (\(1 \le c_i \le C\); \(1 \le d_i, h_i \le 10^6\)).

В следующей строке записано одно целое число \(m\) (\(1 \le m \le 3 \cdot 10^5\)) — количество монстров, с которыми придется сразиться Монокарпу.

В \(j\)-й из следующих \(m\) строк записаны два целых числа \(D_j\) и \(H_j\) (\(1 \le D_j \le 10^6\); \(1 \le H_j \le 10^{12}\)).

Выходные данные

Выведите \(m\) целых чисел. Для каждого монстра выведите минимальное количество монет, которое Монокарп должен потратить, чтобы убить этого монстра. Если это количество больше, чем \(C\), то выведите \(-1\).

Примечание

Рассмотрим первого монстра из первого примера.

Монокарп не может взять одного воина первого типа, потому что и ему, и монстру потребуется \(0.75\) секунды, чтобы убить друг друга. Он может взять двух воинов стоимостью \(6\) монет и убить монстра за \(0.375\) секунду.

Монокарп может взять одного воина второго типа, потому что он убивает монстра за \(0.6\) секунды, а монстр убивает его за \(0.625\) секунды. Воин быстрее. Таким образом, достаточно \(5\) монет.

Монокарпу понадобится как минимум три воина третьего типа, чтобы убить первого монстра, что будет стоить \(30\) монет.

Монокарп потратит меньше всего монет, если выберет второй тип воинов и возьмет одного воина этого типа.

D2. 388535 (усложненная версия)

битмаски математика Перебор Структуры данных *2300

Это усложненная версия этой задачи. Различия между ограничениями в версиях выделены красным цветом. Вы можете совершать взломы, только если решили обе версии.

Марин и Годзё играют в прятки с массивом.

Сначала Годзё выполняет следующую последовательность действий:

  • Во-первых, Годзё выбирает \(2\) целых числа \(l\) и \(r\) такие, что \(l \leq r\).
  • Затем Годзё составляет массив \(a\) длины \(r-l+1\), который является перестановкой массива \([l,l+1,\ldots,r]\).
  • Наконец, Годзё выбирает секретное целое число \(x\) и присваивает в элемент \(a_i\) значение \(a_i \oplus x\) для всех \(i\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Марин даются значения \(l,r\) и финальный массив \(a\). Её цель — найти секретное число \(x\). Можете ли вы помочь Марин?

Заметим, что значение \(x\) не всегда можно определить однозначно. В этом случае найдите любое возможное \(x\), которое приводит к заданному финальному значению массива \(a\).

Входные данные

В первой строке находится целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных.

В первой строке каждого набора входных данных находятся два целых числа \(l\) и \(r\) (\(\color{red}{\boldsymbol{0} \boldsymbol{\le} \boldsymbol{l}} \le r < 2^{17}\)).

Вторая строка содержит \(r - l + 1\) целое число \(a_1,a_2,\ldots,a_{r-l+1}\) (\(0 \le a_i < 2^{17}\)). Гарантируется, что данный массив \(a\) может быть получен с помощью шагов, выполняемых Годзё.

Гарантируется, что сумма значений \(r - l + 1\) по всем наборам входных данных не превосходит \(2^{17}\).

Выходные данные

Для каждого набора входных данных выведите \(x\). Если ответов несколько, то выведите любой из них.

Примечание

В первом примере начальное значение массива имеет вид \([7, 6, 5, 4]\).

Во втором примере начальное значение массива имеет вид \([4, 7, 6, 5]\).

В третьем примере начальное значение массива имеет вид \([3, 1, 2]\).

F. Дзюдзю и бинарная строка

жадные алгоритмы Конструктив математика Перебор *2700

Красота бинарной строки — это количество в ней \(\texttt{1}\), делённое на длину строки. Например, красота строки \(\texttt{01101}\) равна \(\frac{3}{5}\).

У Дзюдзю есть бинарная строка \(s\) длины \(n\). Она хочет выбрать некоторые непересекающиеся подотрезки \(s\) так, чтобы их конкатенация имела длину \(m\) и такую же красоту, как и строка \(s\).

Более формально, она хочет найти два массива \(l\) и \(r\) равной длины \(k\) таких, что \(1 \leq l_1 \leq r_1 < l_2 \leq r_2 < \ldots < l_k \leq r_k \leq n\), а также:

  • \(\sum\limits_{i=1}^k (r_i - l_i + 1) = m\);
  • Красота \(s[l_1,r_1]+s[l_2,r_2]+\ldots+s[l_k,r_k]\) в точности равна красоте \(s\), где \(s[x, y]\) обозначает подотрезок \(s_x s_{x+1} \ldots s_y\), а \(+\) обозначает конкатенацию строк.
Дзюдзю не любит разделять строки на много частей, поэтому она также хочет минимизировать значение \(k\). Найдите минимальное значение \(k\) такое, что существуют массивы \(l\) и \(r\), удовлетворяющие ограничениям выше, или определите, что подходящих массивов \(l\) и \(r\) не существует ни при каком \(k\).
Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \leq m \leq n \leq 2 \cdot 10^5\)).

Вторая строка каждого набора содержит бинарную строку \(s\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если не существует подходящих \(l\) и \(r\), выведите \(-1\).

Иначе выведите \(k + 1\) строку.

В первой строке выведите число \(k\) (\(1 \leq k \leq m\)) — минимальное количество требуемых подотрезков.

Затем выведите \(k\) строк, \(i\)-я строка должна содержать \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq n\)) — границы \(i\)-го подотрезка. Обратите внимание, что вы должны выводить подотрезки так, чтобы выполнялось неравенство \(l_1 \leq r_1 < l_2 \leq r_2 < \ldots < l_k \leq r_k\).

Примечание

В первом примере красота \(\texttt{0011}\) равна красоте \(\texttt{01}\).

Во втором примере красота \(\texttt{11000011}\) равна \(\frac{1}{2}\) и не существует подотрезка длины \(6\) с такой же красотой. Поэтому мы должны использовать \(2\) непересекающихся подотрезка \(\texttt{10}\) и \(\texttt{0011}\).

В третьем примере есть \(8\) способов разбить строку таким образом, что \(\sum\limits_{i=1}^k (r_i - l_i + 1) = 3\), но ни в одном из них конкатенация не будет иметь такую же красоту, как \(\texttt{0101}\).

В последнем примере мы не должны разбивать строку.

C. Империя на прямой

Бинарный поиск дп жадные алгоритмы математика Перебор реализация *1500

Вы — амбициозный король, который хочет быть Императором Действительных чисел. Но перед этим вам нужно стать Императором Целых чисел.

Рассмотрим числовую ось. Столица вашей империи изначально находится в точке \(0\). На прямой есть \(n\) незахваченных королевств в позициях \(0<x_1<x_2<\ldots<x_n\). Вы хотите захватить все эти королевства.

Вы можете делать два вида действий:

  • Вы можете переместить свою столицу (пусть ее текущая координата \(c_1\)) в любое захваченное королевство (пусть его позиция \(c_2\)), стоимость такого действия \(a\cdot |c_1-c_2|\).
  • Вы можете из текущей столицы (пусть ее текущая координата \(c_1\)) захватить королевство (пусть его позиция \(c_2\)), стоимость такого действия \(b\cdot |c_1-c_2|\). Вы не можете захватывать королевство, если между вашей столицей и целью есть другие незахваченные королевства.

Обратите внимание, что вы не можете расположить столицу в точке, где нет королевства. Другими словами, в любой момент времени ваша столица может быть только в точке \(0\) или в \(x_1,x_2,\ldots,x_n\). Также обратите внимание, что захват королевства не изменяет положение вашей столицы.

Выведите минимальную суммарную стоимость захвата всех королевств. Ваша столица может оказаться в итоге в любой точке.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит \(3\) целых числа \(n\), \(a\) и \(b\) (\(1 \leq n \leq 2 \cdot 10^5\); \(1 \leq a,b \leq 10^5\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(x_1, x_2, \ldots, x_n\) (\(1 \leq x_1 < x_2 < \ldots < x_n \leq 10^8\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: минимальную стоимость захвата всех королевств.

Примечание

Ниже приведена оптимальная последовательность действий для второго примера:

  1. Захватить королевство в точке \(1\), стоимость \(3\cdot(1-0)=3\).
  2. Переместить столицу в королевство в точке \(1\), стоимость \(6\cdot(1-0)=6\).
  3. Захватить королевство в точке \(5\), стоимость \(3\cdot(5-1)=12\).
  4. Переместить столицу в королевство в точке \(5\), стоимость \(6\cdot(5-1)=24\).
  5. Захватить королевство в точке \(6\), стоимость \(3\cdot(6-5)=3\).
  6. Захватить королевство в точке \(21\), стоимость \(3\cdot(21-5)=48\).
  7. Захватить королевство в точке \(30\), стоимость \(3\cdot(30-5)=75\).

Суммарная стоимость \(3+6+12+24+3+48+75=171\). Нельзя получить меньшую стоимость.

E. AND-MEX-прогулка

битмаски графы Конструктив Перебор поиск в глубину и подобное снм *2200

Вам дан неориентированный связный граф из \(n\) вершин и \(m\) взвешенных ребер. Прогулкой от вершины \(u\) до вершины \(v\) называется последовательность вершин \(p_1,p_2,\ldots,p_k\) (не обязательно различных), начинающаяся в вершине \(u\) и заканчивающаяся в вершине \(v\), такая что \(p_i\) и \(p_{i+1}\) соединены ребром для всех \(1 \leq i < k\).

Определим длину прогулки следующим образом: выпишем веса ребер в порядке следования в массив. Затем выпишем побитовое И каждого непустого префикса этого массива. Длиной прогулки называется MEX этих значений.

Более формально, пусть веса ребер это \([w_1,w_2,\ldots,w_{k-1}]\), где \(w_i\) — вес ребра между \(p_i\) и \(p_{i+1}\). Тогда длина прогулки равна \(\mathrm{MEX}(\{w_1,\,w_1\& w_2,\,\ldots,\,w_1\& w_2\& \ldots\& w_{k-1}\})\), где \(\&\) обозначает операцию побитового И.

Вы должны обработать \(q\) запросов вида u v. Для каждого запроса найдите минимально возможную длину пути из \(u\) в \(v\).

MEX (минимальное отсутствующее) множества чисел — наименьшее неотрицательное число, отсутствующее в этом множестве. Например:

  • MEX множества \(\{2,1\}\) равен \(0\), т. к. \(0\) отсутствует в множестве.
  • MEX множества \(\{3,1,0\}\) равен \(2\), т. к. \(0\) и \(1\) присутствуют в множестве, а \(2\) — нет.
  • MEX множества \(\{0,3,1,2\}\) равен \(4\), т. к. \(0\), \(1\), \(2\) и \(3\) присутствуют в множестве, а \(4\) отсутствует.
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^5\); \(n-1 \leq m \leq \min{\left(\frac{n(n-1)}{2},10^5\right)}\)).

Каждая из следующих \(m\) строк содержит три целых числа \(a\), \(b\) и \(w\) (\(1 \leq a, b \leq n\), \(a \neq b\); \(0 \leq w < 2^{30}\)), обозначающих неориентированное ребро между вершинами \(a\) и \(b\) веса \(w\). Гарантируется, что не существует петель и кратных ребер, а также что граф связный.

Следующая строка содержит одно целое число \(q\) (\(1 \leq q \leq 10^5\)).

Каждая из следующих \(q\) строк содержит два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\), \(u \neq v\)) — описание запроса.

Выходные данные

Для каждого запроса выведите одно целое число — ответ на запрос.

Примечание

Ниже находится пояснение к первому примеру.

Граф из первого примера.

Идна из возможных прогулок в первом запросе:

\(\)1 \overset{5}{\rightarrow} 3 \overset{3}{\rightarrow} 2 \overset{1}{\rightarrow} 1 \overset{5}{\rightarrow} 3 \overset{1}{\rightarrow} 4 \overset{2}{\rightarrow} 5.\(\)

Массив весов равен \(w=[5,3,1,5,1,2]\). Если мы возьмем побитовое И для всех префиксов, мы получим множество \(\{5,1,0\}\). MEX этого множества равен \(2\). Нельзя получить прогулку меньшей длины.

D. Максимальное произведение наносит ответный удар

математика Перебор реализация *1600

Дан массив \(a\), состоящий из \(n\) целых чисел. Для каждого \(i\) (\(1 \le i \le n\)) верно неравенство: \(-2 \le a_i \le 2\).

Вы можете удалить любое количество (возможно, \(0\)) элементов из начала массива и любое количество (возможно, \(0\)) элементов из конца массива. При этом разрешается удалить весь массив.

Вам нужно ответить на вопрос: сколько элементов нужно удалить из начала массива и сколько элементов нужно удалить из конца массива, чтобы в результате получился массив, произведение элементов которого максимально. Если существует более одного способа получить массив с максимальным произведением элементов, разрешается вывести любой из них.

Произведение чисел на пустом массиве (массиве длины \(0\)) следует считать равным \(1\).

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину массива \(a\).

В следующей строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(|a_i| \le 2\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два неотрицательных целых числа \(x\) и \(y\) (\(0 \le x + y \le n\)) — такие, что произведение чисел массива после удаления \(x\) элементов с начала и \(y\) элементов с конца, будет максимальным.

Если есть несколько способов получения максимального произведения, разрешается вывести любой. Произведение чисел на пустом массиве считать равным \(1\).

Примечание

В первом наборе входных данных примера максимальное значение произведения равно \(2\). Таким образом, можно либо удалить три первых элемента (получим массив \([2]\)), либо два последних и один первый элементы (также получим массив \([2]\)), либо два последних (получим массив \([1, 2]\)). Таким образом, в первом наборе подходят ответы: «3 0», «1 2» или «0 2».

Во втором наборе максимальное значение произведения равно \(1\). Тогда можно удалить все элементы из массива, так как значение произведения на пустом массиве будет равно \(1\). Таким образом, подходит ответ «3 0», но есть и другие возможные ответы.

В третьем наборе можно удалить два первых элемента массива. Тогда получим массив: \([-2, 2, -1]\). Произведение элементов полученного массива равно: \((-2) \cdot 2 \cdot (-1) = 4\). Это значение является максимально возможным из тех, которые можно получить. Таким образом, для этого набора входных данных подходит ответ «2 0».

E. Матрица и сдвиги

жадные алгоритмы Конструктив Перебор реализация *1600

Вам задана двоичная матрица \(A\) размера \(n \times n\). Строки пронумерованы сверху вниз от \(1\) до \(n\), столбцы пронумерованы слева направо от \(1\) до \(n\). Ячейка, находящаяся на пересечении строки \(i\) и столбца \(j\) называется \(A_{ij}\). Рассмотрим набор из \(4\) операций:

  1. Циклически сдвинуть все строки вверх. Строка с номером \(i\) будет записана на место строки \(i-1\) (\(2 \le i \le n\)), строка с номером \(1\) будет записана на место строки \(n\).
  2. Циклически сдвинуть все строки вниз. Строка с номером \(i\) будет записана на место строки \(i+1\) (\(1 \le i \le n - 1\)), строка с номером \(n\) будет записана на место строки \(1\).
  3. Циклически сдвинуть все столбцы влево. Столбец с номером \(j\) будет записан на место столбца \(j-1\) (\(2 \le j \le n\)), столбец с номером \(1\) будет записан на место столбца \(n\).
  4. Циклически сдвинуть все столбцы вправо. Столбец с номером \(j\) будет записан на место столбца \(j+1\) (\(1 \le j \le n - 1\)), столбец с номером \(n\) будет записан на место столбца \(1\).
Слева изображена матрица \(3 \times 3\) до применения к ней операции \(3\), справа — после.

Вы можете провести над матрицей произвольное (возможно, нулевое) количество операций, операции можно проводить в любом порядке.

После этого вы можете осуществить произвольное (возможно, нулевое) количество новых xor-операций:

  • Выбрать любую ячейку \(A_{ij}\) и записать в нее значение выражения \(A_{ij} \oplus 1\). Другими словами, в ячейку \(A_{ij}\) необходимо будет записать значение \((A_{ij} + 1) \bmod 2\).

Каждое применение этой xor-операции стоит один бурль. Заметим, что \(4\) операции сдвигов — бесплатные. Эти \(4\) операции можно проводить только до осуществления xor-операций.

Выведите минимальное количество бурлей, сколько придётся заплатить, чтобы сделать матрицу \(A\) единичной. Единичной называется такая матрица, на главной диагонали которой стоят единицы, а остальные её элементы являются нулями (то есть, \(A_{ij} = 1\) при \(i = j\) и \(A_{ij} = 0\) иначе).

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных. Перед каждым набором входных данных во входных данных записана пустая строка.

В первой строке каждого набора входных данных записано единственное число \(n\) (\(1 \le n \le 2000\))

Затем следует \(n\) строк, каждая из которых содержит ровно \(n\) символов и состоит только из нулей и единиц. Эти строки описывают значения в ячейках матрицы.

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных не превышает \(4 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество бурлей, сколько придётся заплатить, чтобы сделать матрицу \(A\) единичной. Иными словами, выведите минимальное количество xor-операций, которое потребуется совершить после применения циклических сдвигов к матрице, для того, чтобы матрица \(A\) стала единичной.

Примечание

В первом наборе входных данных можно действовать следующим образом: сначала циклически сдвинуть все строки вниз, тогда на главной диагонали матрицы будут стоять одни единицы. Затем необходимо будет применить xor-операцию к единственной единице, которая окажется не на главной диагонали.

Во втором наборе входных данных можно получить единичную матрицу, дважды применив к матрице операцию \(2\) — циклический сдвиг строк вверх.

F1. Перспективные подстроки (простая версия)

математика Перебор реализация Строки *1700

Это простая версия задачи F. Единственное различие между простой и сложной версиями заключается в ограничениях.

Будем называть непустую строку сбалансированной, если она содержит одинаковое количество знаков плюс и минус. Например: строки «+--+» и «++-+--» являются сбалансированными, а строки «+--», «--» и «» не являются сбалансированными.

Будем называть строку перспективной, если строку можно сделать сбалансированной при помощи нескольких(возможно нуля) применений следующей операции:

  • заменим два соседних знака минуса на один знак плюс.

В частности, всякая сбалансированная строка является перспективной. Однако обратное неверно: не всякая перспективная строка — сбалансирована.

Например: строка «-+---» является перспективной, так как можно заменить два соседних минуса на плюс и получить сбалансированную строку «-++-», либо получить другую сбалансированную строку «-+-+».

Сколько непустых подстрок данной строки \(s\) являются перспективными? Каждая непустая перспективная подстрока должна быть учтена в ответе столько раз, сколько раз она встречается в строке \(s\).

Напомним, что подстрока — это последовательность подряд идущих символов строки. Например, для строки «+-+» её подстроками являются строки «+-», «-+», «+», «+-+» (строка является подстрокой самой себя) и некоторые другие. Но следующие строки её подстроками не являются: «--», «++», «-++».

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке дано число \(n\) (\(1 \le n \le 3000\)) — длина строки \(s\).

Во второй строке набора дана строка \(s\) длины \(n\), состоящая только из знаков «+» и «-».

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3000\).

Выходные данные

Для каждого набора входных данных выведите единственное число — количество непустых перспективных подстрок строки \(s\). Каждая непустая перспективная подстрока должна быть учтена в ответе столько раз, сколько раз она встречается в строке \(s\).

Примечание

Ниже перечислены перспективные подстроки для первых трёх наборов входных данных примера:

  1. \(s[1 \dots 2]\)+-», \(s[2 \dots 3]\)-+»;
  2. \(s[1 \dots 2]\)-+», \(s[2 \dots 3]\)+-», \(s[1 \dots 5]\)-+---», \(s[3 \dots 5]\)---»;
  3. \(s[1 \dots 3]\)---», \(s[2 \dots 4]\)---».

B. Получение нуля

битмаски графы дп жадные алгоритмы кратчайшие пути Перебор поиск в глубину и подобное *1300

Предположим, у вас есть целое число \(v\). За одну операцию вы можете:

  • либо присвоить \(v = (v + 1) \bmod 32768\)
  • либо присвоить \(v = (2 \cdot v) \bmod 32768\).

Вам заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\). Какое минимальное количество операций необходимо, чтобы сделать каждое \(a_i\) равным \(0\)?

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 32768\)) — количество чисел.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i < 32768\)).

Выходные данные

Выведите \(n\) чисел: \(i\)-е число должно равняться минимальному количеству операций, чтобы сделать \(a_i\) равным \(0\).

Примечание

Рассмотрим каждый \(a_i\):

  • \(a_1 = 19\). Вы можете, сначала, увеличить его на единицу и получить \(20\), а потом умножить его на два \(13\) раз. Вы получите \(0\) за \(1 + 13 = 14\) шагов.
  • \(a_2 = 32764\). Вы можете увеличить число на единицу \(4\) раза: \(32764 \rightarrow 32765 \rightarrow 32766 \rightarrow 32767 \rightarrow 0\).
  • \(a_3 = 10240\). Вы можете умножить его на два \(4\) раза: \(10240 \rightarrow 20480 \rightarrow 8192 \rightarrow 16384 \rightarrow 0\).
  • \(a_4 = 49\). Вы можете умножить его на два \(15\) раз.

E. Узкие компоненты

Деревья дп математика Перебор снм Структуры данных *2500

Задана матрица \(a\), состоящая из \(3\) строк и \(n\) столбцов. Каждая клетка матрицы либо свободна, либо занята.

Свободная клетка \(y\) достижима из свободной клетки \(x\), если выполняется хотя бы одно из следующих условий:

  • \(x\) и \(y\) имеют общую сторону;
  • существует такая свободная клетка \(z\), что \(z\) достижима из \(x\), а \(y\) достижима из \(z\).

Компонента связности — это такой набор свободных клеток матрицы, что все клетки в нем достижимы друг из друга, а добавление любой другой свободной клетки в него нарушает это правило.

К матрице задаются \(q\) запросов. Запросы следующего вида:

  • \(l\) \(r\) — посчитайте количество компонент связности матрицы, состоящей из столбцов с \(l\) по \(r\) матрицы \(a\) включительно.

Выведите ответы на все запросы.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — количество столбцов матрицы \(a\).

В \(i\)-й из следующих трех строк описывается \(i\)-я строка матрицы \(a\) — строка, состоящая из \(n\) символов. Каждый символ — это либо \(1\) (обозначающий свободную клетку), либо \(0\) (обозначающий занятую клетку).

В следующей строке записано одно целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

В \(j\)-й из следующих \(q\) строк записаны два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j \le r_j \le n\)) — описание \(j\)-го запроса.

Выходные данные

Выведите \(q\) целых чисел — \(j\)-е значение должно быть равно количеству компонент связности матрицы, состоящей из столбцов с \(l_j\) по \(r_j\) матрицы \(a\) включительно.

A. Organizing SWERC

Перебор реализация

Gianni, SWERC's chief judge, received a huge amount of high quality problems from the judges and now he has to choose a problem set for SWERC.

He received \(n\) problems and he assigned a beauty score and a difficulty to each of them. The \(i\)-th problem has beauty score equal to \(b_i\) and difficulty equal to \(d_i\). The beauty and the difficulty are integers between \(1\) and \(10\).

If there are no problems with a certain difficulty (the possible difficulties are \(1,2,\dots,10\)) then Gianni will ask for more problems to the judges.

Otherwise, for each difficulty between \(1\) and \(10\), he will put in the problem set one of the most beautiful problems with such difficulty (so the problem set will contain exactly \(10\) problems with distinct difficulties). You shall compute the total beauty of the problem set, that is the sum of the beauty scores of the problems chosen by Gianni.

Input

Each test contains multiple test cases. The first line contains an integer \(t\) (\(1\le t\le 100\)) — the number of test cases. The descriptions of the \(t\) test cases follow.

The first line of each test case contains the integer \(n\) (\(1\le n\le 100\)) — how many problems Gianni received from the judges.

The next \(n\) lines contain two integers each. The \(i\)-th of such lines contains \(b_i\) and \(d_i\) (\(1\le b_i, d_i\le 10\)) — the beauty score and the difficulty of the \(i\)-th problem.

Output

For each test case, print the total beauty of the problem set chosen by Gianni. If Gianni cannot create a problem set (because there are no problems with a certain difficulty) print the string MOREPROBLEMS (all letters are uppercase, there are no spaces).

Note

In the first test case, Gianni has received only \(3\) problems, with difficulties \(3, 4, 7\) which are not sufficient to create a problem set (for example because there is not a problem with difficulty \(1\)).

In the second test case, Gianni will create a problem set by taking the problems \(2\), \(3\), \(4\), \(5\), \(7\), \(8\), \(9\), \(10\), \(11\) (which have beauty equal to \(10\) and all difficulties from \(1\) to \(9\)) and one of the problems \(1\) and \(6\) (which have both beauty \(3\) and difficulty \(10\)). The total beauty of the resulting problem set is \(10\cdot 9 + 3 = 93\).

H. Boundary

математика Перебор

Bethany would like to tile her bathroom. The bathroom has width \(w\) centimeters and length \(l\) centimeters. If Bethany simply used the basic tiles of size \(1 \times 1\) centimeters, she would use \(w \cdot l\) of them.

However, she has something different in mind.

  • On the interior of the floor she wants to use the \(1 \times 1\) tiles. She needs exactly \((w-2) \cdot (l-2)\) of these.
  • On the floor boundary she wants to use tiles of size \(1 \times a\) for some positive integer \(a\). The tiles can also be rotated by \(90\) degrees.

For which values of \(a\) can Bethany tile the bathroom floor as described? Note that \(a\) can also be \(1\).

Input

Each test contains multiple test cases. The first line contains an integer \(t\) (\(1\le t\le 100\)) — the number of test cases. The descriptions of the \(t\) test cases follow.

Each test case consist of a single line, which contains two integers \(w\), \(l\) (\(3 \leq w, l \leq 10^{9}\)) — the dimensions of the bathroom.

Output

For each test case, print an integer \(k\) (\(0\le k\)) — the number of valid values of \(a\) for the given test case — followed by \(k\) integers \(a_1, a_2,\dots, a_k\) (\(1\le a_i\)) — the valid values of \(a\). The values \(a_1, a_2, \dots, a_k\) have to be sorted from smallest to largest.

It is guaranteed that under the problem constraints, the output contains at most \(200\,000\) integers.

Note

In the first test case, the bathroom is \(3\) centimeters wide and \(5\) centimeters long. There are three values of \(a\) such that Bethany can tile the floor as described in the statement, namely \(a=1\), \(a=2\) and \(a=3\). The three tilings are represented in the following pictures.

I. Ice Cream Shop

Перебор реализация сортировки

On a beach there are \(n\) huts in a perfect line, hut \(1\) being at the left and hut \(i+1\) being \(100\) meters to the right of hut \(i\), for all \(1 \le i \le n - 1\). In hut \(i\) there are \(p_i\) people.

There are \(m\) ice cream sellers, also aligned in a perfect line with all the huts. The \(i\)-th ice cream seller has their shop \(x_i\) meters to the right of the first hut. All ice cream shops are at distinct locations, but they may be at the same location as a hut.

You want to open a new ice cream shop and you wonder what the best location for your shop is. You can place your ice cream shop anywhere on the beach (not necessarily at an integer distance from the first hut) as long as it is aligned with the huts and the other ice cream shops, even if there is already another ice cream shop or a hut at that location. You know that people would come to your shop only if it is strictly closer to their hut than any other ice cream shop.

If every person living in the huts wants to buy exactly one ice cream, what is the maximum number of ice creams that you can sell if you place the shop optimally?

Input

The first line contains two integers \(n\) and \(m\) (\(2 \le n \le 200\,000\), \(1 \le m \le 200\,000\)) — the number of huts and the number of ice cream sellers.

The second line contains \(n\) integers \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le 10^9\)) — the number of people in each hut.

The third line contains \(m\) integers \(x_1, x_2, \ldots, x_m\) (\(0 \le x_i \le 10^9\), \(x_i \ne x_j\) for \(i \ne j\)) — the location of each ice cream shop.

Output

Print the maximum number of ice creams that can be sold by choosing optimally the location of the new shop.

Note

In the first sample, you can place the shop (coloured orange in the picture below) \(150\) meters to the right of the first hut (for example) so that it is the closest shop to the first two huts, which have \(2\) and \(5\) people, for a total of \(7\) sold ice creams.

In the second sample, you can place the shop \(170\) meters to the right of the first hut (for example) so that it is the closest shop to the last two huts, which have \(7\) and \(8\) people, for a total of \(15\) sold ice creams.

O. Circular Maze

графы Перебор поиск в глубину и подобное реализация

You are given a circular maze such as the ones shown in the figures.

Determine if it can be solved, i.e., if there is a path which goes from the center to the outside of the maze which does not touch any wall. The maze is described by \(n\) walls. Each wall can be either circular or straight.
  • Circular walls are described by a radius \(r\), the distance from the center, and two angles \(\theta_1, \theta_2\) describing the beginning and the end of the wall in the clockwise direction. Notice that swapping the two angles changes the wall.
  • Straight walls are described by an angle \(\theta\), the direction of the wall, and two radii \(r_1 < r_2\) describing the beginning and the end of the wall.

Angles are measured in degrees; the angle \(0\) corresponds to the upward pointing direction; and angles increase clockwise (hence the east direction corresponds to the angle \(90\)).

Input

Each test contains multiple test cases. The first line contains an integer \(t\) (\(1\le t\le 20\)) — the number of test cases. The descriptions of the \(t\) test cases follow.

The first line of each test case contains an integer \(n\) (\(1 \leq n \leq 5000\)) — the number of walls.

Each of the following \(n\) lines each contains a character (C for circular, and S for straight) and three integers:

  • either \(r, \theta_1, \theta_2\) (\(1 \leq r \leq 20\) and \(0 \leq \theta_1,\theta_2 < 360\) with \(\theta_1 \neq \theta_2\)) if the wall is circular,
  • or \(r_1\), \(r_2\) and \(\theta\) (\(1 \leq r_1 < r_2 \leq 20\) and \(0 \leq \theta < 360\)) if the wall is straight.

It is guaranteed that circular walls do not overlap (but two circular walls may intersect at one or two points), and that straight walls do not overlap (but two straight walls may intersect at one point). However, circular and straight walls can intersect arbitrarily.

Output

For each test case, print YES if the maze can be solved and NO otherwise.

Note

The two sample test cases correspond to the two mazes in the picture.

E. МинимизатOR

битмаски жадные алгоритмы Перебор разделяй и властвуй реализация Структуры данных *2500

Дан массив \(a\) из \(n\) неотрицательных целых чисел, пронумерованных от \(1\) до \(n\).

Назовём стоимостью массива \(a\) величину, равную \(\displaystyle \min_{i \neq j} a_i | a_j\), где \(|\) обозначает операцию побитового ИЛИ.

Есть \(q\) запросов. Каждый запрос состоит из двух чисел \(l\) и \(r\) (\(l < r\)). Для каждого запроса необходимо вывести стоимость массива \(a_{l}, a_{l + 1}, \ldots, a_{r}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^{30}\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк содержит два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j < r_j \le n\)) — описание \(j\)-го запроса.

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) чисел, где \(j\)-е число равно стоимости массива \(a_{l_j}, a_{l_j + 1}, \ldots, a_{r_j}\).

Примечание

В первом наборе входных данных массив \(a\) выглядит так:

\(110_2, 001_2, 011_2, 010_2, 001_2\).

Поэтому ответы на запросы будут следующими:

  • \([1; 2]\): \(a_1 | a_2 = 110_2 | 001_2 = 111_2 = 7\);
  • \([2; 3]\): \(a_2 | a_3 = 001_2 | 011_2 = 011_2 = 3\);
  • \([2; 4]\): \(a_2 | a_3 = a_3 | a_4 = a_2 | a_4 = 011_2 = 3\);
  • \([2; 5]\): \(a_2 | a_5 = 001_2 = 1\).

Во втором наборе входных данных массив \(a\) выглядит так:

\(00_2, 10_2, 01_2, \underbrace{11\ldots 1_2}_{30}\) (\(a_4 = 2^{30} - 1\)).

Поэтому ответы на запросы будут следующими:

  • \([1; 2]\): \(a_1 | a_2 = 10_2 = 2\);
  • \([2; 3]\): \(a_2 | a_3 = 11_2 = 3\);
  • \([1; 3]\): \(a_1 | a_3 = 01_2 = 1\);
  • \([3; 4]\): \(a_3 | a_4 = 01_2 | \underbrace{11\ldots 1_2}_{30} = 2^{30} - 1 = 1073741823\).

A. Сделай его возрастающим

жадные алгоритмы математика Перебор *1300

Дан массив \(a\), состоящий из \(n\) положительных целых чисел, и массив \(b\) размера \(n\). Изначально \(b_i=0\) для каждого \(1 \leq i \leq n\).

За один ход вы можете выбрать целое число \(i\) (\(1 \leq i \leq n\)) и прибавить \(a_i\) к \(b_i\) или вычесть \(a_i\) из \(b_i\). За какое минимальное число ходов можно сделать \(b\) возрастающим (то есть таким, что каждый элемент строго больше всех предыдущих)?

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 5000\)).

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива \(a\).

Выходные данные

Выведите одно целое число — минимальное число ходов, за которое можно сделать \(b\) возрастающим.

Примечание

Пример \(1\): можно вычесть \(a_1\) из \(b_1\), и прибавить \(a_3\), \(a_4\), \(a_5\) к \(b_3\), \(b_4\) и \(b_5\) соответственно. В итоге получим массив [\(-1\), \(0\), \(3\), \(4\), \(5\)] за \(4\) хода.

Пример \(2\): можно получить массив [\(-3\), \(-2\), \(-1\), \(0\), \(1\), \(2\), \(3\)] за \(10\) ходов.

B. Общажные войны

Перебор реализация Строки *1100

Хоссам решил проникнуть в комнату Хемоса, пока он спит, и сменить пароль на его ноутбуке. Он уже знает исходный пароль, равный строке \(s\) длины \(n\). Он также знает, что существуют \(k\) особых букв в алфавите: \(c_1,c_2,\ldots, c_k\).

Хоссам написал программу, которая делает следующее.

  1. Программа рассматривает текущий пароль \(s\) некоторой длины \(m\).
  2. Затем она находит все такие позиции \(i\) (\(1\le i<m\)), что \(s_{i+1}\) — одна из \(k\) особых букв.
  3. После этого она удаляет все символы на таких позициях из пароля \(s\) даже если \(s_{i}\) — особая буква. Если таких позиций нет, программа выдает ошибку с очень громким звуком.

Например, пусть строка \(s\) равна «abcdef», а особые буквы — «b» и «d». Если Хоссам запустит программу один раз, символы на позициях \(1\) и \(3\) будут удалены, так как они находятся перед особыми символами, и пароль станет равным «bdef». Если он запустит программу еще раз, она удалит символ на позиции \(1\), и пароль станет «def». Хоссам поступит разумно, если не будет запускать программу в третий раз.

Хоссам хочет узнать, сколько максимум раз он может запустить программу на ноутбуке Хемоса, не разбудив его сигналом ошибки. Можете помочь ему?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — исходную длину пароля.

Следующая строка содержит строку \(s\), состоящую из \(n\) строчных букв латинского алфавита — исходный пароль.

Следующая строка содержит целое число \(k\) (\(1 \le k \le 26\)), а затем \(k\) различных строчных букв латинского алфавита \(c_1,c_2,\ldots,c_k\) — особые буквы.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное количество раз, которое Хоссам может запустить программу, не вызвав ошибку.

Примечание

В первом наборе входных данных программу можно запустить \(5\) раз: \(\text{iloveslim} \to \text{ilovslim} \to \text{iloslim} \to \text{ilslim} \to \text{islim} \to \text{slim}\)

Во втором наборе входных данных программу можно запустить \(2\) раза: \(\text{joobeel} \to \text{oel} \to \text{el}\)

В третьем наборе входных данных программу можно запустить \(3\) раза: \(\text{basiozi} \to \text{bioi} \to \text{ii} \to \text{i}\).

В четвертом наборе входных данных программу можно запустить \(5\) раз: \(\text{khater} \to \text{khatr} \to \text{khar} \to \text{khr} \to \text{kr} \to \text{r}\)

В пятом наборе входных данных программу можно запустить только раз: \(\text{abobeih} \to \text{h}\)

В шестом наборе программу нельзя запустить ни разу, так как пароль не содержит особых символов.

D. Очень подозрительно

Бинарный поиск геометрия жадные алгоритмы математика Перебор реализация *1700

Хоссам и его друзья владеют плоскостью, разбитой бесконечной сеткой на правильные шестиугольники, как показано на рисунке ниже. Им нравятся равносторонние треугольники, поэтому они хотят создать на плоскости \(n\) равносторонних треугольников, добавив несколько прямых. Считаться будут только треугольники, внутри которых ничего нет (то есть внутри которых не проходит ни одна прямая и ни одна сторона шестиугольника).

Вы можете добавлять прямые, параллельные сторонам шестиугольников. Вам дано число \(n\), какое минимальное число прямых нужно добавить, чтобы создать хотя бы \(n\) равносторонних треугольников?

Добавление двух красных прямых создает два желтых треугольника.
Входные данные

Первая строка содержит одно цело число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одного целого числа \(n\) (\(1 \le n \le 10^{9}\)) — требуемого количества треугольников.

Выходные данные

Для каждого набора выведите минимальное количество прямых, необходимое для создания \(n\) или больше равносторонних треугольников.

Примечание

В первом и втором примере нужны две прямые. После добавления первой не будет ни одного трекгольника независимо от места создания. После добавления второй можно одновременно создать два треугольника.

В третьем наборе входных данных нужно минимум три прямых, как показано ниже.

B. Отрезок последовательных точек

математика Перебор сортировки *1000

Вам задано \(n\) точек с целочисленными координатами на координатной оси \(OX\). Координата \(i\)-й точки равна \(x_i\). Все координаты точек различны и заданы в строго возрастающем порядке.

Для каждой точки \(i\) вы можете не более одного раза сделать следующую операцию: взять эту точку и подвинуть ее на \(1\) влево или вправо (то есть вы можете изменить ее координату \(x_i\) на \(x_i - 1\) или на \(x_i + 1\)). Другими словами, вы можете выбрать для каждой точки по отдельности ее новую координату. Для \(i\)-й точки новой координатой может быть \(x_i - 1\), \(x_i\) или \(x_i + 1\).

Ваша задача — определить, сможете ли вы подвинуть точки описанным выше способом так, чтобы новое множество точек образовывало последовательный отрезок целых чисел, то есть для какого-то целого числа \(l\) координаты точек будут равны \(l, l + 1, \ldots, l + n - 1\).

Заметьте, что результирующее множество также должно состоять из точек с различными координатами.

Вам предстоит ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество точек в множестве \(x\).

Вторая строка набора тестовых данных содержит \(n\) целых чисел \(x_1 < x_2 < \ldots < x_n\) (\(1 \le x_i \le 10^6\)), где \(x_i\) — координата \(i\)-й точки.

Гарантируется, что точки заданы в строго возрастающем порядке (это также значит, что все координаты различны). Также гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных — если множество точек из набора может быть сдвинуто таким образом, чтобы образовывать последовательный отрезок целых чисел, выведите YES, иначе выведите NO.

C. Dolce Vita

Бинарный поиск жадные алгоритмы математика Перебор *1200

Наступают неспокойные времена, и поэтому вы решили закупиться сахаром про запас. В округе расположены \(n\) магазинов, в которых продают сахар: в \(i\)-м магазине одна пачка сахара стоит \(a_i\), но везде продают только по одной пачке на руки в день. А потому, чтобы купить несколько пачек, придется посетить несколько магазинов.

Есть и другая проблема: цены на сахар растут каждый день: в первый день он стоит \(a_i\), во второй день он стоит \(a_i + 1\), в третий — \(a_i + 2\) и так далее в любом магазине \(i\).

Вы можете тратить на сахар только \(x\) монет каждый день. Другими словами, каждый день вы ходите и покупаете как можно больше пачек сахара суммарной стоимостью не более \(x\). Обратите внимание, что если в какой-то день вы тратите не все монеты, вы не можете оставшиеся монеты использовать в следующие дни.

Рано или поздно, стоимость пачки из любого магазина превысит \(x\), и вы больше не сможете купить ни одной пачки. Вопрос в том, сколько всего пачек вы сможете купить до этого момента?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(x\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le x \le 10^9\)) — количество магазинов в округе и ваш ежедневный бюджет.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — первоначальные цены сахара в магазинах.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — суммарное количество пачек сахара, которые вы сможете приобрести, пока цены не превысят ваши возможности.

Примечание

В первом наборе входных данных:

  • День 1: цены равны \([2, 1, 2]\). Вы сможете купить все \(3\) пачки, так как \(2 + 1 + 2 \le 7\).
  • День 2: цены равны \([3, 2, 3]\). Вы не сможете купить все \(3\) пачки, так как \(3 + 2 + 3 > 7\), а потому вы купите только \(2\) пачки.
  • День 3: цены равны \([4, 3, 4]\). Вы сможете купить \(2\) пачки с ценами \(4\) и \(3\).
  • День 4: цены равны \([5, 4, 5]\). Вы больше не сможете купить \(2\) пачки, а потому вы купите только \(1\) пачку.
  • День 5: цены равны \([6, 5, 6]\). Вы сможете купить \(1\) пачку.
  • День 6: цены равны \([7, 6, 7]\). Вы сможете купить \(1\) пачку.
  • День 7: цены равны \([8, 7, 8]\). Вы все еще можете купить \(1\) пачку за цену \(7\).
  • День 8: цены равны \([9, 8, 9]\). Цены слишком высокие, и вы не можете ничего купить.
В результате вы купите \(3 + 2 + 2 + 1 + 1 + 1 + 1 = 11\) пачек.

Во втором наборе, цены слишком высокие с первого дня, и вы не сможете ничего купить.

В третьем наборе, вы можете купить одну пачку только в первый день.

В четвертом наборе, вы можете покупать \(2\) пачки первые \(500\) дней. В день \(501\) цены станут \([501, 501]\), а потому вы сможете покупать только \(1\) пачку следующие \(500\) дней. В день \(1001\) цены станут \([1001, 1001]\) и вы больше ничего не сможете купить. В результате вы купите \(500 \cdot 2 + 500 \cdot 1 = 1500\) пачек.

D. Вставь прогрессию

жадные алгоритмы Конструктив Перебор *1600

Дана последовательность из \(n\) целых чисел \(a_1, a_2, \dots, a_n\). Также даны \(x\) целых чисел \(1, 2, \dots, x\).

Вас просят вставить каждое из этих дополнительных целых чисел в последовательность \(a\). Каждое число можно вставлять в начало последовательности, в конец последовательности или между любыми элементами последовательности.

Счет полученной последовательности \(a'\) равен сумме абсолютных разностей соседних элементов в ней \(\left(\sum \limits_{i=1}^{n+x-1} |a'_i - a'_{i+1}|\right)\).

Какой наименьший счет может быть у последовательности \(a'\)?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(x\) (\(1 \le n, x \le 2 \cdot 10^5\)) — длина последовательности и количество дополнительных чисел.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшую сумму абсолютных разностей соседних элементов в последовательности после того, как вы вставите в нее дополнительные числа.

Примечание

Здесь представлены последовательности с наименьшим счетом в примере. Подчеркнутые элементы — это дополнительные числа. Обратите внимание, что существуют и другие последовательности с наименьшим счетом.

  • \(\underline{1}, \underline{2}, \underline{3}, \underline{4}, \underline{5}, 10\)
  • \(\underline{7}, 7, \underline{6}, \underline{4}, 2, \underline{2}, \underline{1}, \underline{3}, \underline{5}, \underline{8}, 10\)
  • \(6, \underline{1}, 1, \underline{2}, 5, 7, 3, 3, 9, 10, 10, 1\)
  • \(1, 3, \underline{1}, 1, 2, \underline{2}, \underline{3}, \underline{4}, \underline{5}, \underline{6}, \underline{7}, \underline{8}, \underline{9}, \underline{10}\)

F. Подсчет перестановок

бпф дп Комбинаторика математика Перебор *2700

Посчитайте количество таких перестановок \(p\) размера \(n\), в которых ровно \(k\) инверсий (пар индексов \((i, j)\), для которых \(i < j\) и \(p_i > p_j\)) и ровно \(x\) индексов \(i\), для которых \(p_i > p_{i+1}\).

Да, это вся задача. Удачи!

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 3 \cdot 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей три числа \(n\), \(k\) и \(x\) (\(1 \le n \le 998244352\); \(1 \le k \le 11\); \(1 \le x \le 11\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество перестановок, описанных в условии задачи. Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

B. Идеально сбалансированная строка?

жадные алгоритмы Перебор Строки *1100

Назовём строку \(s\) идеально сбалансированной, если для всех возможных троек \((t,u,v)\) таких, что \(t\) является непустой подстрокой \(s\), а \(u\) и \(v\) являются символами, присутствующими в \(s\), разница в количествах вхождений \(u\) и \(v\) в \(t\) отличается не более, чем на \(1\).

Например, строки «aba» и «abc» являются идеально сбалансированными, а «abb» нет, потому что для тройки («bb»,'a','b') условие не выполняется.

Вам дана строка \(s\), состоящая только из строчных латинских букв. Ваша задача состоит в том, чтобы определить, является ли \(s\) идеально сбалансированной или нет.

Строка \(b\) называется подстрокой строки \(a\), если \(b\) может быть получена удалением нескольких (возможно \(0\)) символов из начала и нескольких (возможно \(0\)) символов из конца \(a\).

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1\leq t\leq 2\cdot 10^4\)) — количество наборов входных данных.

Каждая из следующих \(t\) строк содержит единственную строку \(s\) (\(1\leq |s|\leq 2\cdot 10^5\)), состоящую из строчных букв латинского алфавита.

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если \(s\) является идеально сбалансированной, и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

Пусть \(f_t(c)\) обозначает количество вхождений символа \(c\) в строку \(t\).

Для первого набора входных данных получается:

\(t\)\(f_t(a)\)\(f_t(b)\)
\(a\)\(1\)\(0\)
\(ab\)\(1\)\(1\)
\(aba\)\(2\)\(1\)
\(b\)\(0\)\(1\)
\(ba\)\(1\)\(1\)
Можно увидеть, что для любой подстроки \(t\) в \(s\), разница между \(f_t(a)\) и \(f_t(b)\) не превышает \(1\). Значит, строка \(s\) идеально сбалансирована.

Для второго набора входных данных получается:

\(t\)\(f_t(a)\)\(f_t(b)\)
\(a\)\(1\)\(0\)
\(ab\)\(1\)\(1\)
\(abb\)\(1\)\(2\)
\(b\)\(0\)\(1\)
\(bb\)\(0\)\(2\)
Можно увидеть, что для подстроки \(t=bb\), разница в количествах вхождений \(f_t(a)\) и \(f_t(b)\) равна \(2\), что больше \(1\). Значит, строка \(s\) не идеально сбалансирована.

Для третьего набора входных данных получается:

\(t\)\(f_t(a)\)\(f_t(b)\)\(f_t(c)\)
\(a\)\(1\)\(0\)\(0\)
\(ab\)\(1\)\(1\)\(0\)
\(abc\)\(1\)\(1\)\(1\)
\(b\)\(0\)\(1\)\(0\)
\(bc\)\(0\)\(1\)\(1\)
\(c\)\(0\)\(0\)\(1\)

Можно увидеть, что для любой подстроки \(t\) в \(s\) и любых двух символов \(u,v\in\{a,b,c\}\), разница между \(f_t(u)\) и \(f_t(v)\) не превышает \(1\). Значит, строка \(s\) идеально сбалансирована.

C. Палиндромный базис

дп математика Перебор теория чисел *1500

Вам дано положительное целое число \(n\). Назовём некоторое положительное целое число \(a\) без лидирующих нулей палиндромным, если оно остаётся таким же после переворота порядка его цифр. Найдите количество способов представить \(n\) как сумму положительных палиндромных чисел. Два способа считаются различными, если количества вхождений хотя бы одного палиндромного числа в них различаются. Например, \(5=4+1\) и \(5=3+1+1\) считаются различными, но \(5=3+1+1\) и \(5=1+3+1\) считаются одинаковыми.

Формально, вам нужно найти количество различных мультимножеств положительных палиндромных чисел, сумма которых равна \(n\).

Поскольку ответ может быть очень большим, выведите его по модулю \(10^9+7\).

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных.

Каждый набор входных данных содержит единственное целое число \(n\) (\(1\leq n\leq 4\cdot 10^4\)) — требуемую сумму палиндромных чисел.

Выходные данные

Для каждого набора входных данных выведите единственное целое число, обозначающее требуемый ответ по модулю \(10^9+7\).

Примечание

Для первого набора входных данных существует \(7\) способов представить \(5\) как сумму положительных палиндромных чисел:

  • \(5=1+1+1+1+1\)
  • \(5=1+1+1+2\)
  • \(5=1+2+2\)
  • \(5=1+1+3\)
  • \(5=2+3\)
  • \(5=1+4\)
  • \(5=5\)

Во втором наборе входных данных существует всего \(77\) способов представить \(12\) как сумму положительных целых чисел, но среди них представления \(12=2+10\), \(12=1+1+10\) и \(12=12\) не являются корректными представлениями \(12\) как сумму положительных палиндромных чисел, поскольку \(10\) и \(12\) не являются палиндромными числами. Таким образом, существует \(74\) способа представить \(12\) как сумму положительных палиндромных чисел.

E. Уничтожение стены

Бинарный поиск жадные алгоритмы Конструктив математика Перебор *2000

Монокарп играет в стратегическую компьютерную игру Rage of Empires II: Definitive Edition. Сейчас он собирается атаковать своего оппонента в игре, но вот незадача — противник успел построить стену, и войска Монокарпа не могут попасть в лагерь противника!

Стена состоит из \(n\) секций, расположенных в ряд и пронумерованных слева направо, начиная с единицы. Прочность \(i\)-й секции изначально равна \(a_i\). Если прочность какой-то секции станет равной \(0\) или станет отрицательной, то эта секция будет считаться разрушенной.

Для успешной атаки Монокарп должен разрушить хотя бы две секции стены (любые две: возможно, соседние, но не обязательно). Для этого собирается использовать специальное осадное орудие — онагр. Когда онагр стреляет по секции стены, он наносит \(2\) единицы урона этой секции и по \(1\) единице урона соседним секциям. Иными словами, если онагр стреляет по секции \(x\), прочность секции \(x\) уменьшается на \(2\), а прочности секций \(x - 1\) и \(x + 1\) (если они существуют) уменьшаются на \(1\) каждая.

Монокарп может стрелять из онагра по любым секциям любое количество раз, в том числе можно стрелять по уже разрушенной секции.

Монокарп хочет посчитать минимальное количество выстрелов онагра, необходимое, чтобы разрушить хотя бы две секции стены. Помогите ему!

Входные данные

В первой строке следует целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество секций в стене.

Во второй строке следует последовательность целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)), где \(a_i\) равно изначальной прочности \(i\)-й секции стены.

Выходные данные

Выведите целое число — минимальное количество выстрелов онагра, необходимое, чтобы разрушить хотя бы две секции стены.

Примечание

В первом примере можно разрушить \(2\)-ю и \(4\)-ю секции стены за \(10\) выстрелов, например, совершив все \(10\) выстрелов в третью секцию. После этого прочности секций будут равны \([20, 0, 10, 0, 20]\). Существует и другой способ. Можно сначала выстрелить \(5\) раз во \(2\)-ю секцию и затем еще \(5\) раз в \(4\)-ю секцию. После этого прочности секций будут равны \([15, 0, 20, 0, 15]\).

Во втором примере достаточно одного выстрела по \(2\)-й секции. После этого \(1\)-я и \(3\)-я секции будут разрушены.

В третьем примере можно, например, выстрелить два раза во \(2\)-ю секцию (после этого прочности секций станут равны \([5, 2, 4, 8, 5, 8]\)), а затем выстрелить два раза в \(3\)-ю секцию (после этого прочности секций станут равны \([5, 0, 0, 6, 5, 8]\)). Таким образом, после четырех выстрелов будут разрушены \(2\)-я и \(3\)-я секции.

C. Самые похожие слова

жадные алгоритмы математика Перебор реализация реализация Строки *800

Вам даны \(n\) слов одинаковой длины \(m\), состоящие из строчных букв латинского алфавита, \(i\)-е слово обозначается \(s_i\).

За один ход вы можете выбрать любую позицию в любом отдельном слове и заменить букву в этой позиции на предыдущую или следующую букву в алфавитном порядке. Например:

  • вы можете заменить 'e' на 'd' или на 'f';
  • 'a' может быть заменена только на 'b';
  • 'z' может быть заменена только на 'y'.

Разница между двумя словами — это минимальное число ходов, необходимое для того, чтобы сделать их равными. Например, разница между «best» и «cost» составляет \(1 + 10 + 0 + 0 = 11\).

Найдите минимальную разницу между \(s_i\) и \(s_j\) такую, что \((i < j)\). Другими словами, найдите минимальную разницу по всем возможным парам из \(n\) слов.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит \(2\) целых числа \(n\) и \(m\) (\(2 \leq n \leq 50\), \(1 \leq m \leq 8\)) — количество слов и их длина соответственно.

Затем следуют \(n\) строк, \(i\)-я из которых содержит слово \(s_i\) длины \(m\), состоящее из строчных латинских букв.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную разница среди всех возможных пар заданных строк.

Примечание

Для второго набора входных данных можно показать, что наилучшей парой является («abb», «bef»), которая имеет разницу, равную \(8\), что можно получить следующим образом: заменить первый символ первой строки на 'b' за один ход, заменить второй символ второй строки на 'b' за \(3\) хода и заменить третий символ второй строки на 'b' за \(4\) хода, что в сумме дает \(1 + 3 + 4 = 8\) ходов.

В третьем наборе существует только одна возможная пара, и можно показать, что минимальное количество ходов, необходимое для того, чтобы строки стали равными, равно \(35\).

В четвертом наборе есть пара строк, которые уже равны, поэтому ответ равен \(0\).

D. X-сумма

жадные алгоритмы Перебор реализация *1000

Дедушка Тимура подарил ему шахматную доску, чтобы он попрактиковался. Эта доска \(a\) состоит из \(n\) строк и \(m\) столбцов. На каждой клетке написано неотрицательное целое число.

Задача Тимура поставить слона так, чтобы сумма на клетках, атакованных им, была максимальна. Слон атакует во всех направлениях по диагонали. Расстояние, на которое атакует слон, не ограничено. Обратите внимание, что клетка, в которой стоит слон, также считается атакованной. Помогите ему найти максимальную сумму, которую он может получить.

Входные данные

Первая строка входных данных содержит число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Далее следуют описания самих наборов.

Первая строка каждого набора содержит два числа \(n\) и \(m\) (\(1 \le n \le 200\), \(1 \leq m \leq 200\)).

Следующие \(n\) строк содержат по \(m\) целых чисел, \(j\)-й элемент \(i\)-й строки \(a_{ij}\) — это число, записанное в \(j\)-й клетке \(i\)-й строки \((0\leq a_{ij} \leq 10^6)\)

Гарантируется, что сумма \(n\cdot m\) по всем наборам не превосходит \(4\cdot10^4\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимальную сумму по всем возможным размещениям слона.

Примечание

В первом примере лучшая сумма достигается в этой позиции:

H1. Максимизация пересечений (простая версия)

Перебор *1400

Единственная разница между двумя версиями состоит в том, что в этой версии \(n \leq 1000\) и сумму значений \(n\) по всем наборам входных данных теста не превосходит \(1000\).

Терминал — это ряд без промежутков из \(n\) равных отрезков, пронумерованных от \(1\) до \(n\) по порядку. Есть два терминала, один над другим.

Вам дан массив \(a\) длины \(n\). Для всех \(i = 1, 2, \dots, n\) должен быть прямой провод из некоторой точки на отрезке \(i\) верхнего терминала в некоторую точку на отрезке \(a_i\) нижнего терминала. Например, на следующих рисунках показаны два возможных соединения, при \(n=7\) и \(a=[4,1,4,6,7,7,5]\).

Пересечение происходит, когда два провода имеют общую точку. На картинке выше пересечения обведены красным.

Какое максимальное количество пересечений может быть при оптимальном размещении проводов?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1 \leq n \leq 1000\)) — длина массива.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)) — элементы массива.

Сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора выведите единственное целое число — максимальное количество пересечений, при оптимальном расположении проводов.

Примечание

Первый пример показан на втором рисунке в условии.

Во втором примере при единственно возможном соединении появляется пересечение двух проводов, поэтому ответ равен \(1\).

В третьем тестовом примере единственно возможное соединение состоит из одного провода, поэтому ответ равен \(0\).

A. Tokitsukaze и странное неравенство

дп Перебор Структуры данных *1600

У Tokitsukaze есть перестановка \(p\) длины \(n\). Напомним, что перестановкой \(p\) длины \(n\) называется последовательность \(p_1, p_2, \ldots, p_n\), состоящая из \(n\) различных целых чисел, каждое из которых от \(1\) до \(n\) (\(1 \leq p_i \leq n\)).

Она хочет знать, сколько различных наборов индексов \([a,b,c,d]\) (\(1 \leq a < b < c < d \leq n\)) в этой перестановке удовлетворяют следующим двум неравенствам:

\(p_a < p_c\) и \(p_b > p_d\).

Обратите внимание, что два набора \([a_1,b_1,c_1,d_1]\) и \([a_2,b_2,c_2,d_2]\) считаются различными, если \(a_1 \ne a_2\), или \(b_1 \ne b_2\), или \(c_1 \ne c_2\), или \(d_1 \ne d_2\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Каждый набор входных данных состоит из двух строк.

В первой строке записано одно целое число \(n\) (\(4 \leq n \leq 5000\)) — длина перестановки \(p\).

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — перестановка \(p\).

Гарантируется, что сумма \(n\) по всем тестам не превышает \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество различных наборов индексов \([a,b,c,d]\).

Примечание

В первом наборе входных данных имеется \(3\) различных набора \([a,b,c,d]\).

\(p_1 = 5\), \(p_2 = 3\), \(p_3 = 6\), \(p_4 = 1\), где \(p_1 < p_3\) и \(p_2 > p_4\) удовлетворяет неравенству, поэтому один из \([a,b,c,d]\) наборов — это \([1,2,3,4]\).

Точно так же два других набора — это \([1,2,3,6]\) и \([2,3,5,6]\).

A. AvtoBus

жадные алгоритмы математика Перебор теория чисел *900

Наступила весна, и руководство автобусного парка AvtoBus дало распоряжение поменять у всех автобусов зимние шины на летние.

Вы владеете небольшой фирмой, занимающейся обслуживанием автобусов, и только что вам поступил долгожданный заказ на замену \(n\) шин. Вы знаете, что автобусный парк владеет автобусами двух типов: с двумя осями (у таких автобусов \(4\) колеса) и с тремя осями (у таких автобусов \(6\) колес).

Вы не знаете, сколькими автобусами какого типа владеет парк AvtoBus, поэтому вам стало интересно, сколько автобусов может быть в парке. Вам нужно определить, какое минимальное и какое максимальное количество автобусов может быть в парке, зная, что суммарное количество колес у всех автобусов равно \(n\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке описания набора входных данных содержится одно целое число \(n\) (\(1 \le n \le 10^{18}\)) — суммарное количество колес у всех автобусов.

Выходные данные

Для каждого набора входных данных выведите ответ в отдельной строке в следующем формате.

В единственной строке выведите два целых числа \(x\) и \(y\) (\(1 \le x \le y\)) — минимальное и максимальное возможное количество автобусов, которыми владеет парк.

В случае, если для данного \(n\) не существует подходящего количества автобусов, выведите в качестве ответа число \(-1\).

Примечание

В первом примере известно, что суммарное количество колес у всех автобусов равно \(4\). Это значит, что в автобусном парке есть ровно один автобус с двумя осями.

Во втором примере не трудно показать, что не существует такого количества автобусов, чтобы их суммарное количество колес было равно \(7\).

В третьем примере суммарное количество колес у всех автобусов равно \(24\). Возможны следующие варианты:

  • Четыре автобуса с тремя осями.
  • Три автобуса с двумя осями и два автобуса с тремя осями.
  • Шесть автобусов с двумя осями.

Таким образом, минимальное количество автобусов равно \(4\), а максимальное — \(6\).

A. Минимумы и максимумы

математика Перебор *800

Массив называется красивым, если выполняются следующие два условия:

  • есть не меньше \(l_1\) и не больше \(r_1\) элементов в массиве, равных его минимуму;
  • есть не меньше \(l_2\) и не больше \(r_2\) элементов в массиве, равных его максимуму.

Например, в массиве \([2, 3, 2, 4, 4, 3, 2]\) \(3\) элемента, равные его минимуму (\(1\)-й, \(3\)-й и \(7\)-й), и \(2\) элемента, равные его максимуму (\(4\)-й и \(5\)-й).

Другой пример: в массиве \([42, 42, 42]\) \(3\) элемента, равные его минимуму, и \(3\) элемента, равные его максимуму.

Ваша задача — найти наименьшее возможное количество элементов в красивом массиве.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

Каждый набор состоит из одной строки, содержащей четыре целых числа \(l_1\), \(r_1\), \(l_2\) и \(r_2\) (\(1 \le l_1 \le r_1 \le 50\); \(1 \le l_2 \le r_2 \le 50\)).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее возможное количество элементов в красивом массиве.

Примечание

Оптимальные массивы в примере:

  1. \([1, 1, 1, 1]\), в нем \(4\) минимума и \(4\) максимума;
  2. \([4, 4, 4, 4, 4]\), в нем \(5\) минимумов и \(5\) максимумов;
  3. \([1, 2, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2]\), в нем \(3\) минимума и \(10\) максимумов;
  4. \([8, 8, 8]\), в нем \(3\) минимума и \(3\) максимума;
  5. \([4, 6, 6]\), в нем \(1\) минимум и \(2\) максимума;
  6. \([3, 4, 3]\), в нем \(2\) минимума и \(1\) максимум;
  7. \([5, 5, 5, 5, 5, 5]\), в нем \(6\) минимумов и \(6\) максимумов.

D. Прогулка с собакой

жадные алгоритмы математика Перебор *2400

Вы гуляете со своей собакой и сейчас дошли до набережной. Набережная может быть представлена как бесконечная прямая. Изначально вы находитесь в точке \(0\) со своей собакой.

Вы решили предоставить немного свободы своей собаке, поэтому вы отвязали ее от поводка и дали ей немного побегать. Также вы смотрели, что собака делает, поэтому у вас есть некоторые записи с информацией о ее беге. В течение \(i\)-й минуты позиция собаки изменялась относительно ее предыдущей позиции на значение \(a_i\) (это значит, что собака пробежала \(a_i\) метров в течение \(i\)-й минуты). Если \(a_i\) положительно, собака пробежала \(a_i\) метров направо, иначе (если \(a_i\) отрицательно) она пробежала \(a_i\) метров налево.

В некоторые минуты вы переписывались в мессенджере со своим другом, поэтому у вас нет записей о передвижениях вашей собаки в эти минуты. Эти значения \(a_i\) равны нулю.

Вы хотите, чтобы ваша собака вернулась к вам в конце прогулки, поэтому последняя точка назначения собаки после \(n\) минут должна быть равна \(0\).

Вам стало интересно: чему равно максимально возможное количество различных целочисленных точек на прямой, которые могла посетить ваша собака, если вы замените каждый \(0\) на какое-то целое число от \(-k\) до \(k\) (и ваша собака обязана вернуться в \(0\) после прогулки)? Собака посещает целочисленную точку, если она пробегает мимо нее или встает в ней в конце любой минуты. Точка \(0\) всегда является посещенной, потому что она изначально находится в ней.

Если собака не может вернуться в точку \(0\) после \(n\) минут вне зависимости от того, как вы заполните пропуски, выведите -1.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 3000; 1 \le k \le 10^9\)) — количество минут и максимально возможная скорость вашей собаки в минуты с отсутствующими записями.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)), где \(a_i\) равно количеству метров, которые ваша собака пробежала в течение \(i\)-й минуты (влево, если \(a_i\) отрицательно и направо, если оно положительно). Если \(a_i = 0\), то это значение неизвестно и может быть заменено на любое целое число из отрезка \([-k; k]\).

Выходные данные

Если собака не может вернуться в точку \(0\) после \(n\) минут вне зависимости от того, как вы заполните пропуски, выведите -1. Иначе выведите одно целое число — максимальное количество различных целочисленных точек, которые ваша собака могла бы посетить, если бы вы заполнили пропуски оптимально, и собака вернулась бы в \(0\) в конце прогулки.

D. Требуемая длина

дп кратчайшие пути Перебор поиск в глубину и подобное хэши *1700

Даны два целых числа, \(n\) и \(x\). Вы можете провести несколько операций с числом \(x\).

Каждая операция заключается в следующем: выбрать любую цифру \(y\), которая встречается в десятичной записи \(x\) хотя бы один раз, и заменить значение \(x\) на \(x \cdot y\).

Вы должны сделать так, чтобы длина десятичной записи \(x\) (без ведущих нулей) стала равна \(n\). Какое минимальное количество операций вам потребуется для этого?

Входные данные

В единственной строке заданы два целых числа \(n\) и \(x\) (\(2 \le n \le 19\); \(1 \le x < 10^{n-1}\)).

Выходные данные

Выведите одно целое число — минимальное количество операций, необходимое, чтобы сделать длину десятичной записи \(x\) (без ведущих нулей) равной \(n\), или \(-1\), если это невозможно.

Примечание

Во втором примере следующая последовательность операций позволяет достичь цели:

  1. умножить \(x\) на \(2\), тогда \(x = 2 \cdot 2 = 4\);
  2. умножить \(x\) на \(4\), тогда \(x = 4 \cdot 4 = 16\);
  3. умножить \(x\) на \(6\), тогда \(x = 16 \cdot 6 = 96\);
  4. умножить \(x\) на \(9\), тогда \(x = 96 \cdot 9 = 864\).

C. Перестановка столбцов

жадные алгоритмы Конструктив Перебор реализация сортировки *1400

Как известно каждому участнику проекта crowdforces, Тётя Люсине — чуть ли не самый активный человек на земле. Её голова всё время забита какими-то новыми on-ramp задачами. Конечно, даже ей не всегда удаётся придумать что-то хорошее, и в этот раз у неё получилась таска со сказкой, а именно — про таблицы. Ни один ревьювер потом не смог решить эту задачу, а вы сможете?

Дана таблица с \(n\) строками и \(m\) столбцами, где в каждой ячейке написано целое положительное число. Назовём таблицу хорошей, если последовательность чисел в каждой строке является отсортированной в порядке неубывания. Иными словами, для каждого \(1 \le i \le n\) и \(2 \le j \le m\) выполняется следующее условие: \(a_{i,j} \ge a_{i, j-1}\).

Необходимо ровно один раз выбрать столбцы с номерами \(i\) и \(j\) (не обязательно различными), \(1 \le i, j \le m\), и поменять их местами.

Необходимо определить, можно ли после этого получить хорошую таблицу, и вывести соответствующие столбцы, если это возможно.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество строк и столбцов таблицы соответственно.

Каждая из следующих \(n\) строк содержит по \(m\) целых чисел, \(j\)-й элемент \(i\)-й строки равен \(a_{i,j}\) — это число, записанное в \(j\)-й ячейке \(i\)-й строки (\(1 \le a_{i,j} \le 10^9\)).

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Если есть несколько правильных ответов, вы можете вывести любой из них.

Выходные данные

Если после перестановки невозможно получить хорошую таблицу, то выведите одно число \(-1\).

В противном случае выведите \(2\) числа — номера столбцов, которые необходимо переставить, чтобы получить хорошую таблицу.

Если существуют несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных таблица уже является хорошей, поэтому мы можем, например, переставить первый столбец с самим собой.

Во втором наборе входных данных нельзя сделать данную таблицу хорошей.

В третьем наборе входных данных необходимо поменять местами первый и второй столбец, тогда таблица станет хорошей.

E. MEX против DIFF

Бинарный поиск жадные алгоритмы Конструктив Перебор Структуры данных *2100

У Тёти Люсине, как и у всех гениальных людей, имеются свои странности. Сегодня в качестве развлечения она решила посмотреть на противостояние двух могущественных функций. В зависимости от результата она решит, добавлять ли эти функции в CrowdScript.

Дан массив \(a\) из \(n\) неотрицательных целых чисел. За одну операцию вы можете заменить любое число в массиве на любое неотрицательное целое число.

Назовём стоимостью массива \(\operatorname{DIFF}(a) - \operatorname{MEX}(a)\), где \(\operatorname{MEX}\) множества чисел — это минимальное целое неотрицательное число, которого нет в множестве, а \(\operatorname{DIFF}\) — количество различных чисел в массиве.

Например, \(\operatorname{MEX}(\{1, 2, 3\}) = 0\), \(\operatorname{MEX}(\{0, 1, 2, 4, 5\}) = 3\).

Вам необходимо определить, какую минимальную стоимость массива \(a\) можно получить, если разрешено сделать не больше \(k\) операций.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(n\) и \(k\) (\(1 \le n \le 10^5\), \(0 \le k \le 10^5\)) — размер массива \(a\) и максимальное количество операций, которое можно сделать.

Во второй строке описания каждого набора входных данных находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальная стоимость, которую можно получить, сделав не больше \(k\) операций.

Примечание

В первом наборе входных данных не требуется делать какие-либо операции, чтобы минимизировать \(\operatorname{DIFF} - \operatorname{MEX}\).

Во втором наборе входных данных можно заменить \(5\) на \(1\). После этого массив \(a\) будет \([0,\, 2,\, 4,\, 1]\), \(\operatorname{DIFF} = 4\), \(\operatorname{MEX} = \operatorname{MEX}(\{0, 1, 2, 4\}) = 3\), поэтому ответ равен \(1\).

В третьем наборе входных данных один из возможных массивов \(a\) будет \([4,\, 13,\, 0,\, 0,\, 13,\, 1,\, 2]\), \(\operatorname{DIFF} = 5\), \(\operatorname{MEX} = 3\).

В четвертом наборе входных данных один из возможных массивов \(a\) будет \([1,\, 2,\, 3,\, 0,\, 0,\, 0]\).

C. Привнеси баланс

жадные алгоритмы Конструктив Перебор *2600

У Алины есть скобочная последовательность \(s\) длины \(2n\), состоящая из \(n\) открывающих скобок '(' и \(n\) закрывающих скобок ')'. Поскольку ей нравится баланс, она хочет превратить эту последовательность скобок в сбалансированную скобочную последовательность.

За одну операцию она может развернуть любую подстроку \(s\).

Какое наименьшее количество операций ей потребуется, чтобы превратить \(s\) в сбалансированную скобочную последовательность? Можно показать, что это всегда можно сделать за не более чем \(n\) операций.

Напомним, что скобочная последовательность называется сбалансированной, если ее можно превратить в правильное математическое выражение, добавив символы + и 1. Например, последовательности (())(), () и (()(())) являются сбалансированными, а )(, (() и (())(  — нет.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Вторая строка каждого набора входных данных содержит строку \(s\) длиной \(2n\), состоящую из \(n\) открывающих и \(n\) закрывающих скобок.

Сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите одно целое число \(k\) \((0 \le k \le n)\)  — наименьшее количество необходимых операций.

В \(i\)-й из следующих \(k\) строк должны содержаться два целых числа \(l_i, r_i\) (\(1 \le l_i \le r_i \le 2n\)), указывающие на то, что в \(i\)-й операции Алина развернет подстроку \(s_ls_{l+1} \ldots s_{r-1}s_r\). Здесь нумерация начинается с \(1\).

Если существует несколько последовательностей операций с наименьшей длиной, которые преобразуют последовательность в сбалансированную, вы можете вывести любую из них.

Примечание

В первом наборе входных данных строка уже сбалансирована.

Во втором наборе входных данных строка будет преобразована следующим образом: ())(()))( \(\to\) ()()()())( \(\to\) ()()()()(), где последняя строка сбалансирована.

В третьем наборе входных данных строка будет преобразована в ((()))((())), которая является сбалансированой.

A. Зачарованный лес

жадные алгоритмы Перебор *1600

Marisa приходит собирать грибы в зачарованный лес.

Зачарованный лес может быть представлен \(n\) точками на оси \(X\), пронумерованными от \(1\) до \(n\). Прежде чем Marisa начала собирать грибы, ее подруга Patchouli использовала магию, чтобы узнать изначальное количество грибов в каждой точке, представляемое массивом \(a_1,a_2,\ldots,a_n\).

Marisa может начать в любой точке леса на минуте \(0\). Каждую минуту по заданном порядку происходит следующее:

  • Она перемещается из точки \(x\) в \(y\) (\(|x-y|\le 1\), возможно, \(y=x\)).
  • Она собирает все грибы в точке \(y\).
  • В каждой точке леса появляется новый гриб.

Обратите внимание, что она не может собирать грибы в минуту \(0\).

Теперь Marisa хочет узнать максимальное количество грибов, которое она сможет собрать за \(k\) минут.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание этих наборов.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(1 \le n \le 2 \cdot 10 ^ 5\), \(1\le k \le 10^9\)) — количество позиций с грибами и время, которое есть у Marisa, соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le 10^9\)) — изначальное количество грибов в точках \(1,2,\ldots,n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных выведите максимальное количество грибов, которое Marisa может собрать за \(k\) минут.

Примечание

В первом наборе входных данных Marisa может начать с \(x=2\). В первую минуту она ходит на \(x=1\) и собирает \(5\) грибов. Количество грибов будет \([1,7,2,3,4]\). На второй минуте она передвигается на \(x=2\) и собирает \(7\) грибов. Количество грибов будет \([2,1,3,4,5]\). За \(2\) минуты Marisa собрала \(12\) грибов.

Можно показать, что собрать больше \(12\) грибов невозможно.

Во втором наборе входных данных один из ее возможных путей движения:

\(2 \rightarrow 3 \rightarrow 2 \rightarrow 1 \rightarrow 2 \rightarrow 3 \rightarrow 4 \rightarrow 5\)

Можно показать, что собрать больше \(37\) грибов невозможно.

C. Sanae и гигантский робот

Бинарный поиск жадные алгоритмы Перебор снм сортировки Структуры данных *2500

Sanae сделала гигантского робота — Hisoutensoku, но с ним что-то не так. Что еще хуже, Sanae, кажется, не может понять, как его остановить, и она вынуждена исправлять это на лету.

Состояние робота можно представить массивом целых чисел длины \(n\). Изначально робот находится в состоянии \(a\). Она хочет превратить его в состояние \(b\).

Как отличный программист, Sanae владеет искусством копирования и вставки. За одну операцию она может выбрать некоторый отрезок из заданных отрезков, скопировать этот отрезок из \(b\) и вставить его в то же место робота, заменив исходное состояние на этих позициях. Однако она должна следить за тем, чтобы сумма \(a\) не менялась после каждой операции копирования на случай, если робот выйдет из строя. Формально Sanae может выбрать отрезок \([l,r]\) и сделать \(a_i = b_i\) (\(l\le i\le r\)), если \(\sum\limits_{i=1}^n a_i\) не изменится после применения операции.

Определите, может ли Sanae успешно перевести робота из начального состояния \(a\) в желаемое состояние \(b\) с помощью любых (возможно, ноль) операций.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 2\cdot 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(2 \leq n\leq 2\cdot 10^5\), \(1 \leq m\leq 2\cdot 10^5\)) — длина \(a\), \(b\) и количество отрезков.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \leq 10^9\)) — начальное состояние \(a\).

Третья строка содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(1 \leq b_i \leq 10^9\)) — искомое состояние \(b\).

Затем следуют \(m\) строк, \(i\)-я строка содержит два целых числа \(l_i,r_i\) (\(1 \leq l_i < r_i \leq n\)) — отрезки, которые Sanae может скопировать и вставить.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого теста выведите «YES» (без кавычек), если \(a\) можно превратить в \(b\), или «NO» (без кавычек) в противном случае.

Вы можете вывести «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» являются правильным ответом).

Примечание

В первом наборе входных данных один из возможных способов превратить \(a\) в \(b\):

Сначала выберите \([1,3]\). После операции \(a=[3,2,5,2,3]\).

Затем выберите \([2,5]\). После операции \(a=[3,2,5,4,1]=b\).

Во втором наборе входных данных можно показать, что невозможно превратить \(a\) в \(b\).

D. Милые числа

Бинарный поиск математика Перебор реализация снм Структуры данных *2900

Ran Yakumo симпатичная девочка, которая любит решать милые математические задачи.

Пусть \(f(x)\) будет минимальным квадратом строго большим, чем \(x\), и \(g(x)\) будет максимальным квадратом, не строго меньшим, чем \(x\). Например, \(f(1)=f(2)=g(4)=g(8)=4\).

Натуральное целое число \(x\) называется милым, если \(x-g(x)<f(x)-x\). Например, \(1,5,11\) это милые целые числа, а \(3,8,15\) нет.

Ran Yakumo дает вам массив \(a\) длины \(n\). Она хочет, чтобы вы нашли минимальное неотрицательное целое число \(k\), такое что \(a_i + k\) является милым числом для любого элемента массива \(a\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — длина \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_1 \leq a_2 \leq \ldots \leq a_n \leq 2\cdot 10^6\)) — массив \(a\).

Выходные данные

Выведите одно целое число \(k\) — ответ на задачу.

Примечание

В первом тесте \(3\) не является красивым целым числом, поэтому \(k\ne 0\).

\(2,4,9,11\) являются милыми целыми числами, поэтому \(k=1\).

A. Идеальный класс битмасок Cirno

битмаски Перебор *800

Урок класса Cirno по созданию идеальных битовых масок только что начался!

Cirno дала своим ученикам положительное целое число \(x\). В качестве задания ее ученики должны найти такое минимальное положительное целое число \(y\), которое удовлетворяет двум следующим условиям:

\(\)x\ \texttt{and}\ y > 0\(\) \(\)x\ \texttt{xor}\ y > 0\(\) Где \(\texttt{and}\) — это побитовая операция И, а \(\texttt{xor}\) — это побитовая операция исключающее ИЛИ.

Среди студентов была Mystia, которая была действительно сбита с толку всеми этими новыми битовыми операциями. Пожалуйста, помогите ей!

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных.

Для каждого набора входных данных единственная строка ввода содержит одно целое число \(x\) (\(1 \leq x \leq 2^{30}\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное число \(y\).

Примечание

В первом наборе входных данных \(1\; \texttt{and}\; 3=1>0\), \(1\; \texttt{xor}\; 3=2>0\).

Во втором наборе входных данных \(2\; \texttt{and}\; 3=2>0\), \(2\; \texttt{xor}\; 3=1>0\).

A. Минимизируй строку

жадные алгоритмы Перебор реализация сортировки *800

Кузнецов любит искусство, поэзию и музыку. И строки, состоящие из строчных латинских букв.

Недавно Кузнецов нашел две строки \(a\) и \(b\) длины \(n\) и \(m\) соответственно. Они состоят из строчных английских букв и ни один символ не содержится одновременно в обеих строках.

Пусть еще одна строка \(c\) изначально пуста. Кузнецов может делать следующие два типа операций:

  • Выбрать любой символ из строки \(a\), удалить его из строки \(a\) и добавить в конец строки \(c\).
  • Выбрать любой символ из строки \(b\), удалить его из строки \(b\) и добавить в конец строки \(c\).

Однако Кузнецов не может сделать более \(k\) операций одного типа подряд. Кузнецов должен выполнять операции до того момента, как строка \(a\) либо строка \(b\) станет пустой. Какое лексикографически наименьшее значение \(c\) возможное после того, как Кузнецов закончит выполнение операций?

Строка \(x\) лексикографически меньше строки \(y\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(x\) является префиксом \(y\), но \(x \neq y\);
  • в первой позиции, где \(x\) и \(y\) различаются, в строке \(x\) находится буква, которая стоит в алфавите раньше, чем соответствующая буква в \(y\).
Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 100\))  — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано три целых числа \(n\), \(m\) и \(k\) (\(1\leq n,m,k \leq 100\)) — параметры из условия.

Во второй строке каждого набора задана строка \(a\) длины \(n\).

Во третьей строке каждого набора задана строка \(b\) длины \(m\).

Строки состоят из строчных букв латинского алфавита. Гарантируется, что ни одна буква не встречается одновременно в строках \(a\) и \(b\).

Выходные данные

Для каждого набора входных данных выведите одну строку \(c\) — ответ на задачу.

Примечание

В первом наборе входных данных оптимально взять две буквы «a» из строки \(a\) и добавить их к строке \(c\). Теперь запрещается выполнять операцию со строкой \(a\), следовательно, необходимо взять один символ «b» из строки \(b\). Следуя этой логике, мы получаем, что \(c\) становится «aabaabaa» в момент, когда строка \(a\) становится пуста.

Во втором наборе входных данных оптимально взять как можно больше «a» из строки \(a\), а затем взять как можно больше «b» из строки \(b\). В конце мы берем два символа «c» из строки \(a\), делая ее пустой.

E. Бесконечность

битмаски графы Конструктив Перебор поиск в глубину и подобное снм *2500

После окончания университета Влад получил массив \(a_1,a_2,\ldots,a_n\) из \(n\) целых неотрицательных чисел. Он сразу же захотел построить граф, состоящий из \(n\) вершин, пронумерованных \(1, 2,\ldots, n\). Он решил добавлять ребро между \(i\) и \(j\) тогда и только тогда, когда \(a_i \& a_j > 0\), где \(\&\) обозначает операцию побитового И.

Влад также хочет, чтобы такой граф был связным, что, к сожалению, может быть не так. Чтобы удовлетворить свое желание, он может выполнять следующие два типа операций над массивом:

  • Выбрать некоторый элемент \(a_i\) и увеличить его на \(1\).
  • Выбрать некоторый элемент \(a_i\) и уменьшить его на \(1\) (разрешено, только если \(a_i > 0\)).

Можно доказать, что существует конечная последовательность таких операций, при которой граф станет связным. Не могли бы вы помочь Владу найти минимально возможное количество операций для этого, а также предоставить способ, как это сделать?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2\leq n \leq 2000\)).

Во второй строке каждого набора задано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0\leq a_i < 2^{30}\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2000\).

Выходные данные

Для каждого набора входных данных выведите в первой строке единственное целое число \(m\)  — минимальное количество операций. Во второй строке выведите массив после допустимой последовательности операций, которые были выполнены так, что граф из задачи стал связным.

Если решений несколько, выведите любое.

Примечание

В первом наборе входных данных граф уже связен.

Во втором наборе входных данных мы можем дважды увеличить \(0\) и получить массив \([2,2]\). Поскольку \(2 \& 2 = 2 > 0\), граф связен. Можно показать, что одной операции недостаточно.

В третьем наборе входных данных мы можем один раз уменьшить \(12\) и получить массив \([3,11]\). \(3 \& 11 = 3 > 0\), следовательно, граф связен. Необходимо выполнить одну операцию, так как граф вначале не связен.

A. Нет нечетности!

жадные алгоритмы математика Перебор *800

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\). Найдите минимальное количество элементов, которое нужно удалить из последовательности, чтобы после удаления сумма любых \(2\) соседних элементов была четна.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2,\dots,a_n\) (\(1\leq a_i\leq10^9\)) — элементы последовательности.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество элементов, которое нужно удалить из последовательности, чтобы сумма никаких \(2\) последовательных элементов не была четна.

Примечание

В первом примере после удаления \(3\) последовательность становится равна \([2,4,6,8]\). Пары соседних элементов в этой последовательности — \(\{[2, 4], [4, 6], [6, 8]\}\). Теперь каждая пара соседних элементов дает четную сумму. Поэтому достаточно удалить \(1\) элемент, чтобы удовлетворить условию.

C. Сумма подстрок

жадные алгоритмы Конструктив математика Перебор Строки *1400

Вам дана бинарная строка \(s\) длины \(n\).

Пусть \(d_i\) — число, в десятичной системе счисления записываемое как \(s_i s_{i+1}\) (возможно, с ведущим нулем). Определим \(f(s)\) как сумму всех корректных значений \(d_i\). Иными словами, \(f(s) = \sum\limits_{i=1}^{n-1} d_i\).

Например, для строки \(s = 1011\):

  • \(d_1 = 10\) (десять);
  • \(d_2 = 01\) (один);
  • \(d_3 = 11\) (одиннадцать);
  • \(f(s) = 10 + 01 + 11 = 22\).

За одну операцию вы можете поменять местами любые два соседних символа строки. Найдите минимально возможное значение \(f(s)\), которое может быть получено после не более чем \(k\) операций.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 10^5\), \(0 \le k \le 10^9\)) — длину строки и максимальное допустимое число операций.

Вторая строка содержит бинарную строку \(s\) длины \(n\), состоящую только из нулей и единиц.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите минимально возможное значение \(f(s)\) после не более чем \(k\) операций.

Примечание
  • В первом примере делать операции нельзя, поэтому оптимальный ответ — сама строка \(s\). \(f(s) = f(1010) = 10 + 01 + 10 = 21\).
  • Во втором примере одно из оптимальных решений — строка «0011000». Для данной строки значение \(f\) равно \(22\).
  • В третьем примере одно из оптимальных решений — строка «00011». Для данной строки значение \(f\) равно \(12\).

D. Часы

Перебор реализация *1100

У Виктора есть 24-часовые часы, показывающие время в формате «HH:MM» (00 \(\le\) HH \(\le\) 23, 00 \(\le\) MM \(\le\) 59). Он будет смотреть на часы каждые \(x\) минут, начиная со времени \(s\).

Посчитайте как много различных палиндромов Виктор увидит, смотря на часы каждые \(x\) минут, начиная с момента времени \(s\).

Например, если Виктор начнет смотреть на часы в 03:12 и затем будет смотреть на них каждые \(360\) минут (то есть каждые \(6\) часов), то он увидит на часах 03:12, 09:12, 15:12, 21:12, 03:12, и далее время будет повторяться. В этом случае время 21:12 будет единственным палиндромом, который Виктор увидит, так что ответом будет \(1\).

Палиндромом является строка, которая читается с конца так же, как и с начала. Например, времена 12:21, 05:50, 11:11 являются палиндромами, а 13:13, 22:10, 02:22 — нет.

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют описания наборов.

Единственная строка каждого набора входных данных содержит строку \(s\) длиной \(5\) символов в формате «HH:MM», где «HH» может быть от «00» до «23» и «MM» может быть от «00» до «59» (и «HH», и «MM» содержат ровно два символа), а так же число \(x\) (\(1 \leq x \leq 1440\)) — количество минут, между моментами времени, когда Виктор смотрит на часы.

Выходные данные

Для каждого набора выведите единственное число  — количество различных палиндромов, которые увидит Виктор, если будет смотреть на часы каждые \(x\) минут, начиная со времени \(s\).

Примечание

Первый пример объяснён в условии.

F. 3-Сумма

математика Перебор *1300

Вам дан массив \(a\), состоящий из \(n\) положительных целых чисел. Cуществуют ли три различных индекса \(i\), \(j\), \(k\) таких, чтобы сумма \(a_i + a_j + a_k\) заканчивается цифрой \(3\)?

Входные данные

Первая строка содержит единственное число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(3 \leq n \leq 2 \cdot 10^5\)) — длину массива.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива.

Сумма \(n\) по всем наборам данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор данных. Выведите «YES», если в массиве существуют три различных индекса \(i\), \(j\), \(k\), удовлетворяющих ограничениям описанным в условиях, или «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, вывод «yEs», «yes», «Yes» и «YES» всё ещё будет считаться корректным).

Примечание

В первом наборе Вы можете выбрать \(i=1\), \(j=4\), \(k=3\). Тогда \(a_1 + a_4 + a_3 = 20 + 84 + 19 = 123\), эта сумма заканчивается цифрой \(3\).

Во втором наборе Вы можете выбрать \(i=1\), \(j=2\), \(k=3\). Тогда \(a_1 + a_2 + a_3 = 1 + 11 + 1 = 13\), эта сумма заканчивается цифрой \(3\).

Можно доказать, что в третьем наборе не существует таких \(i\), \(j\), \(k\), удовлетворяющих условиям. Отметьте что \(i=4\), \(j=4\), \(k=4\) не является корректным решением, несмотря на то, что \(a_4 + a_4 + a_4 = 1111 + 1111 + 1111 = 3333\), т.е. заканчивается цифрой \(3\), индексы должны быть различны.

Можно доказать, что в четвертом наборе не существует \(i\), \(j\), \(k\), удовлетворяющих условиям.

В пятом наборе Вы можете выбрать \(i=4\), \(j=3\), \(k=1\). Тогда \(a_4 + a_3 + a_1 = 4 + 8 + 1 = 13\), а их сумма заканчивается цифрой \(3\).

В шестом наборе Вы можете выбрать \(i=1\), \(j=2\), \(k=6\). Тогда \(a_1 + a_2 + a_6 = 16 + 38 + 99 = 153\), а их сумма заканчивается цифрой \(3\).

D. Разбиение на возрастающую и спадающую

дп жадные алгоритмы Перебор разделяй и властвуй Структуры данных *2800

Назовем массив \(a\) из \(m\) целых чисел \(a_1, a_2, \ldots, a_m\) Decinc, если \(a\) можно сделать возрастающим, удалив из него убывающую подпоследовательность (возможно, пустую).

  • Например, если \(a = [3, 2, 4, 1, 5]\), мы можем удалить из \(a\) убывающую подпоследовательность \([a_1, a_4]\) и получить \(a = [2, 4, 5]\), которая является возрастающей.

Вам дана перестановка \(p\) чисел от \(1\) до \(n\). Найдите количество пар целых чисел \((l, r)\) с \(1 \le l \le r \le n\) таких, что \(p[l \ldots r]\) (подмассив \(p\) от \(l\) до \(r\)) является Decinc массивом.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\))  — размер \(p\).

Вторая строка содержит \(n\) целых \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) различны)  — элементы перестановки.

Выходные данные

Выведите количество пар целых чисел \((l, r)\) таких, что \(p[l \ldots r]\) (подмассив \(p\) от \(l\) до \(r\)) является Decinc массивом. \((1 \le l \le r \le n)\)

Примечание

В первом примере все подмассивы являются Decinc.

Во втором примере все подмассивы, кроме \(p[1 \ldots 6]\) и \(p[2 \ldots 6]\) являются Decinc.

C. Нулевой путь

графы дп жадные алгоритмы кратчайшие пути Перебор Структуры данных *1700

Вам дана таблица с \(n\) строк и \(m\) столбцов. Обозначим ячейку в \(i\)-й (\(1\le i\le n\)) строке и \(j\)-м (\(1\le j\le m\)) столбце через \((i, j)\), а число в ней через \(a_{ij}\). Все числа равны \(1\) или \(-1\).

Вы начинаете с ячейки \((1, 1)\) и можете перемещаться на одну ячейку вниз или вправо за один раз. В конце концов, вы хотите оказаться в ячейке \((n, m)\).

Можно ли двигаться таким образом, чтобы сумма значений, записанных во всех посещенных ячейках (включая \(a_{11}\) и \(a_{nm}\)), была равна \(0\)?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \leq t \leq 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 1000\))  — размер таблицы.

Каждая из следующих \(n\) строк содержит \(m\) целых чисел. \(j\)-е целое число в \(i\)-й строке это \(a_{ij}\) (\(a_{ij} = 1\) или \(-1\))  — элемент в ячейке \((i, j)\).

Гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует путь из левого верхнего угла в правый нижний, который дает в сумме \(0\), и «NO» в противном случае. Вы можете выводить каждую букву в любом регистре.

Примечание

Один из возможных путей для четвертого набора входных данных приведен на рисунке в утверждении.

D1. Запросы в дереве (простая версия)

Деревья дп жадные алгоритмы Конструктив Перебор поиск в глубину и подобное *2200

Единственное отличие этой задачи от D2  — ограничение на размер дерева.

Вам дано некорневое дерево с \(n\) вершинами. В этом дереве есть некоторая скрытая вершина \(x\), которую вы пытаетесь найти.

Для этого вы можете задать \(k\) запросов \(v_1, v_2, \ldots, v_k\), где \(v_i\)  — вершины дерева. После того, как вы закончили задавать все запросы, вам дается \(k\) чисел \(d_1, d_2, \ldots, d_k\), где \(d_i\)  — количество ребер на кратчайшем пути между \(v_i\) и \(x\). Обратите внимание, что вы знаете, какое расстояние соответствует какому запросу.

Найдите минимальное \(k\), при котором существуют некоторые запросы \(v_1, v_2, \ldots, v_k\), позволяющие всегда однозначно определить \(x\) (независимо от того, какой \(x\) выбран).

Обратите внимание, что выводить эти запросы не нужно.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2000\))  — количество вершин в дереве.

Каждая из следующих \(n-1\) строк содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le n\)), означающие, что между вершинами \(x\) и \(y\) в дереве есть ребро.

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2000\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое неотрицательное число  — минимальное количество запросов, которое вам необходимо.

Примечание

В первом наборе входных данных есть только одна вершина, поэтому никаких запросов не требуется.

Во втором наборе входных данных достаточно задать единственный запрос о вершине \(1\). Тогда, если \(x = 1\), вы получите \(0\), в противном случае  — \(1\).

F. Восстановление дерева

графы Деревья Конструктив Перебор поиск в глубину и подобное снм *2600

Fishingprince любит деревья. Дерево — это связный неориентированный граф без циклов.

У Fishingprince'а есть дерево на \(n\) вершинах. Его вершины пронумерованы числами от \(1\) до \(n\). Пусть \(d(x,y)\) равно длине кратчайшего расстояния между вершинами \(x\) и \(y\), если считать длину каждого ребра равной \(1\).

К сожалению, Fishingprince потерял своё дерево. Тем не менее какая-то информация о нём сохранилась. А именно, для каждой тройки чисел \(x,y,z\) (\(1\le x<y\le n\), \(1\le z\le n\)) известно, выполнено ли равенство \(d(x,z)=d(y,z)\).

Помогите ему восстановить структуру дерева или сообщите, что дерева, удовлетворяющего всем ограничениям, не существует.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(2\le n\le 100\)) — количество вершин в дереве.

Далее следует \(n-1\) строк. Из этих \(n-1\) строк \(i\)-я строка содержит \(n-i\) последовательностей символов длины \(n\), состоящих из 0 и 1. Если \(k\)-й символ в \(j\)-й последовательности \(i\)-й строки равен 0, то \(d(i,k)\ne d(i+j,k)\); если же \(k\)-й символ в \(j\)-й последовательности \(i\)-й строки равен 1, то \(d(i,k)=d(i+j,k)\).

Гарантируется, что в каждом тесте:

  • есть не более \(2\) наборов входных данных с \(n>50\);
  • есть не более \(5\) наборов входных данных с \(n>20\).
Выходные данные

Для каждого набора входных данных:

  • выведите No, если искомого дерева не существует;
  • иначе в первой строке выведите Yes. Затем выведите \(n-1\) строк. Каждая из них должна содержать два целых числа \(x,y\) (\(1\le x,y\le n\)), означающих ребро между вершинами \(x\) и \(y\) в дереве. Если существуют несколько решений, выведите любое из них.

При выводе Yes и No вы можете выводить каждый символ в любом регистре (верхнем или нижнем).

G. Fishingprince снова играет с массивом

геометрия математика Перебор Структуры данных *3300

Пусть дана последовательность неотрицательных целых чисел \(a\) длины \(n\) в 1-индексации. Также даны два целых числа \(x\), \(y\). В течение отрезка времени в \(t\) секунд (\(t\) может быть любым положительным вещественным числом) можно выполнить одну из следующих операций:

  • Выбрать \(1\le i<n\), уменьшить \(a_i\) на \(x\cdot t\) и уменьшить \(a_{i+1}\) на \(y\cdot t\).
  • Выбрать \(1\le i<n\), уменьшить \(a_i\) на \(y\cdot t\) и уменьшить \(a_{i+1}\) by \(x\cdot t\).

Определим \(f(a)\) как минимальное количество времени (может быть вещественным числом), необходимое для того, чтобы сделать все элементы последовательности неположительными (меньше или равными \(0\)).

Например, если \(x=1\), \(y=2\), то массив \([3,1,1,3]\) можно обработать за \(3\) секунды. Для этого нужно:

  • В течение первых \(1.5\) секунд выполнять вторую операцию с параметром \(i=1\).
  • В течение оставшихся \(1.5\) секунд выполнять первую операцию с параметром \(i=3\).

Можно доказать, что в этом случае невозможно сделать все элементы меньше или равными \(0\) меньше чем за \(3\) секунды, поэтому \(f([3,1,1,3])=3\).

Вам дана последовательность положительных целых чисел \(b\) длины \(n\) в 1-индексации. Также даны положительные целые числа \(x\), \(y\). Обработайте \(q\) запросов следующих двух типов:

  • 1 k v: изменить значение \(b_k\) на \(v\).
  • 2 l r: вывести \(f([b_l,b_{l+1},\dots,b_r])\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2\le n\le 2\cdot 10^5\), \(1\le q\le 2\cdot 10^5\)).

Вторая строка содержит два целых числа \(x\) и \(y\) (\(1\le x,y\le 10^6\)).

Третья строка содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(1\le b_i\le 10^6\)).

Далее следует \(q\) строк. Каждая из этих \(q\) строк содержит по три целых числа. Первое число \(op\) равно \(1\) или \(2\).

  • Если оно равно \(1\), далее следуют два целых числа \(k\) и \(v\) (\(1\le k\le n\), \(1\le v\le 10^6\)). Такой запрос означает, что нужно изменить значение \(b_k\) на \(v\).
  • Если оно равно \(2\), далее следуют два целых числа \(l\) и \(r\) (\(1\le l<r\le n\)). Такой запрос означает, что нужно вывести значение \(f([b_l,b_{l+1},\dots,b_r])\).
Выходные данные

Для каждого запроса типа \(2\) выведите одно вещественное число — ответ на этот запрос. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-9}\).

Примечание

Разберём тестовый пример.

В первом запросе требуется вычислить \(f([3,1,1,4])\). Ответ равен \(3.5\). Одной из оптимальных последовательностей операций является следующая:

  • В течение первых \(1.5\) секунд выполнять вторую операцию с параметром \(i=1\).
  • В течение оставшихся \(2\) секунд выполнять первую операцию с параметром \(i=3\).

В третьем запросе требуется вычислить \(f([1,1,1])\). Ответ равен \(1\). Одной из оптимальных последовательностей операций является следующая:

  • В течение первых \(0.5\) секунд выполнять вторую операцию с параметром \(i=1\).
  • В течение оставшихся \(0.5\) секунд выполнять первую операцию с параметром \(i=2\).

H. Максимальное произведение?

дп жадные алгоритмы Комбинаторика математика Перебор реализация *3500

Вам дано положительное целое число \(k\). Для мультимножества целых чисел \(S\) определим \(f(S)\) следующим образом:

  • Если количество элементов в \(S\) меньше чем \(k\), то \(f(S)=0\).
  • Иначе определим \(f(S)\) как максимально возможное произведение при выборе ровно \(k\) элементов из \(S\).

Более формально, пусть \(|S|\) означает число элементов в \(S\). Тогда,

  • Если \(|S|<k\), то \(f(S)=0\).
  • Иначе \(f(S)=\max\limits_{T\subseteq S,|T|=k}\left(\prod\limits_{i\in T}i\right)\).

Вам дано мультимножество целых чисел \(A\). Вычислите \(\sum\limits_{B\subseteq A} f(B)\) по модулю \(10^9+7\).

Обратите внимание, что в этой задаче элементы считаются различными, если они имеют различные индексы, но необязательно различные значения. То есть мультимножество, состоящее из \(n\) элементов, всегда содержит \(2^n\) различных подмножеств вне зависимости от того, равны ли в нём какие-то элементы или нет.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\), где \(n\) — количество элементов в \(A\) (\(1\le k\le n\le 600\)).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\dots,a_n\), задающих элементы \(A\) (\(-10^9\le a_i\le 10^9\)).

Выходные данные

Выведите \(\sum\limits_{B\subseteq A} f(B)\) по модулю \(10^9+7\).

Примечание

Рассмотрим первый тестовый пример. Из определения,

  • \(f(\varnothing)=0\)
  • \(f(\{-1\})=0\)
  • \(f(\{2\})=0\)
  • \(f(\{4\})=0\)
  • \(f(\{-1,2\})=-2\)
  • \(f(\{-1,4\})=-4\)
  • \(f(\{2,4\})=8\)
  • \(f(\{-1,2,4\})=8\)

Таким образом, вывести необходимо \((0+0+0+0-2-4+8+8)\bmod (10^9+7)=10\).

Во втором тестовом примере мультимножество, хоть и состоит из трёх равных элементов, содержит \(8\) различных подмножеств: \(\varnothing,\{1\},\{1\},\{1\},\{1,1\},\{1,1\},\{1,1\},\{1,1,1\}\).

E. Раскраска

геометрия графы дп жадные алгоритмы Комбинаторика Конструктив математика Перебор реализация *2400

Заданы \(n\) точек на плоскости, координаты \(i\)-й из них — \((x_i, y_i)\). Ни у каких двух точек не совпадают координаты.

Расстояние между точками \(i\) и \(j\) определено как \(d(i,j) = |x_i - x_j| + |y_i - y_j|\).

Для каждой точки необходимо выбрать цвет — целое число от \(1\) до \(n\). Для каждой упорядоченной тройки различных точек \((a,b,c)\) должны выполняться следующие условия:

  • если \(a\), \(b\) и \(c\) покрашены в одинаковый цвет, то \(d(a,b) = d(a,c) = d(b,c)\);
  • если \(a\) и \(b\) покрашены в одинаковый цвет, а цвет \(c\) отличен от цвета \(a\), то \(d(a,b) < d(a,c)\) и \(d(a,b) < d(b,c)\).

Посчитайте количество различных способов выбрать цвета, чтобы удовлетворить данные условия.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 100\)) — количество точек.

Затем следуют \(n\) строк. В \(i\)-й из них записаны два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i, y_i \le 10^8\)).

Ни у каких двух точек не совпадают координаты (т. ею если \(i \ne j\), то либо \(x_i \ne x_j\), либо \(y_i \ne y_j\)).

Выходные данные

Выведите одно целое число — количество различных способов выбрать цвета точек. Так как оно может быть довольно велико, выведите его остаток от деления на \(998244353\).

Примечание

В первом тесте подходят следующие способы выбрать цвета:

  • \([1, 1, 1]\);
  • \([2, 2, 2]\);
  • \([3, 3, 3]\);
  • \([1, 2, 3]\);
  • \([1, 3, 2]\);
  • \([2, 1, 3]\);
  • \([2, 3, 1]\);
  • \([3, 1, 2]\);
  • \([3, 2, 1]\).

A. Путаница с исключающим ИЛИ

битмаски Перебор *800

У вас есть массив \(a\) из \(n-1\) целого числа. Пусть \(x\) равен побитовому исключающему ИЛИ всех элементов массива. Добавим число \(x\) в конец массива \(a\) (его длина станет равна \(n\)), а затем произвольным образом поменяем порядок всех элементов.

Вам дан новый массив \(a\). Чему был равен \(x\)? Если есть несколько возможных значений \(x\), выведите любое.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 100\)) — количество элементов в итоговом массиве \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 127\)) — элементы итогового массива \(a\).

Кроме того, гарантируется, что массив \(a\) может быть получен с помощью описанных в условии операций. Другими словами, гарантируется, что \(x\) существует.

Выходные данные

Для каждого набора входных данных выведите одно целое число — значение \(x\). Если существует несколько возможных значений \(x\), выведите любое из них.

Примечание

В первом примере один из возможных массивов \(a\) равен \(a=[2, 5, 4]\). Тогда \(x = 2 \oplus 5 \oplus 4 = 3\) (\(\oplus\) обозначает побитовое исключающее ИЛИ), и новый массив равен \([2, 5, 4, 3]\). После этого его элементы переставлены, чтобы получился \([4, 3, 2, 5]\).

Во втором примере один из возможных массивов \(a\) равен \(a=[1, 10, 6, 10]\). Тогда \(x = 1 \oplus 10 \oplus 6 \oplus 10 = 7\), и новый массив равен \([1, 10, 6, 10, 7]\). После этого его элементы переставлены, чтобы получился \([6, 1, 10, 7, 10]\).

В третьем примере все элементы массива равны \(6\), поэтому очевидно \(x=6\).

В четвертом примере один из возможных массивов \(a\) равен \(a=[100, 100]\). Тогда \(x = 100 \oplus 100 = 0\), и новый массив равен \([100, 100, 0]\). После этого его элементы переставлены, чтобы получился \([100, 100, 0]\). (Обратите внимание, что после перестановки элементов массив может остаться таким же, как и был.)

C. 3SUM-замыкание

Перебор Структуры данных *1300

Вам дан массив \(a\) длины \(n\). Массив называется 3SUM-замкнутым, если для любой тройки различных индексов \(i\), \(j\), \(k\) сумма \(a_i + a_j + a_k\) является элементом массива. Формально, \(a\) 3SUM-замкнутый, если для любых индексов \(1 \leq i < j < k \leq n\) существует такой индекс \(1 \leq l \leq n\), что \(a_i + a_j + a_k = a_l\).

Определите, является ли \(a\) 3SUM-замкнутым.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \leq n \leq 2 \cdot 10^5\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — элементы массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если \(a\) 3SUM-замкнутый, и «NO» в противном случае. Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом примере есть только одна тройка: \(i=1\), \(j=2\), \(k=3\). В этом случае \(a_1 + a_2 + a_3 = 0\), что является элементом массива (\(a_2 = 0\)), поэтому этот массив 3SUM-замкнутый.

Во втором примере \(a_1 + a_4 + a_5 = -1\), что не является элементом массива. Поэтому массив не 3SUM-замкнутый.

В третьем примере \(a_i + a_j + a_k = 0\) для всех различных \(i\), \(j\), \(k\), и \(0\) является элементом массива, поэтому массив 3SUM-замкнутый.

E. PermutationForces II

Деревья жадные алгоритмы Комбинаторика Перебор сортировки *2300

Вам дана перестановка \(a\) длины \(n\). Напомним, что перестановкой называется массив из \(n\) различных чисел от \(1\) до \(n\) в произвольном порядке.

Ваша сила равна \(s\). Вы можете выполнить \(n\) операций с перестановкой \(a\). \(i\)-я операция состоит в следующем:

  • Выберите два значения \(x\) и \(y\) такие, что \(i \leq x \leq y \leq \min(i+s,n)\), и поменяйте местами числа \(x\) и \(y\) в перестановке \(a\). Обратите внимание, что вы можете выбрать \(x=y\), в таком случае обмена не произойдет.

Вы хотите превратить \(a\) в другую перестановку \(b\) после \(n\) операций. Однако некоторые элементы \(b\) отсутствуют и заменены на \(-1\). Вычислите количество способов заменить каждую \(-1\) в \(b\) на некоторое целое число от \(1\) до \(n\) так, чтобы \(b\) была перестановкой, и можно было превратить \(a\) в \(b\) силой \(s\).

Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(s\) (\(1 \leq n \leq 2 \cdot 10^5\); \(1 \leq s \leq n\)) — размер перестановки и ваша сила, соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы \(a\). Все элементы \(a\) различны.

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\) или \(b_i = -1\)) — элементы \(b\). Все элементы \(b\), не равные \(-1\), различны.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество способов достроить перестановку \(b\) так, чтобы можно было превратить \(a\) в \(b\) силой \(s\), по модулю \(998\,244\,353\).

Примечание

В первом примере \(a=[2,1,3]\). Существуют два способа заменить \(-1\), чтобы \(b\) стала перестановкой: \([3,1,2]\) и \([3,2,1]\). Перестановку \(a\) можно превратить в \([3,1,2]\) силой \(1\) следующим образом: \(\)[2,1,3] \xrightarrow[x=1,\,y=1]{} [2,1,3] \xrightarrow[x=2,\,y=3]{} [3,1,2] \xrightarrow[x=3,\,y=3]{} [3,1,2].\(\) Можно показать, что невозможно превратить \([2,1,3]\) в \([3,2,1]\) силой \(1\). Поэтому только одна перестановка \(b\) подходит, поэтому ответ \(1\).

Во втором примере \(a\) и \(b\) такие же, как в предыдущем примере, но теперь у нас сила \(2\). Перестановку \(a\) можно превратить в \([3,2,1]\) силой \(2\) следующим образом: \(\)[2,1,3] \xrightarrow[x=1,\,y=3]{} [2,3,1] \xrightarrow[x=2,\,y=3]{} [3,2,1] \xrightarrow[x=3,\,y=3]{} [3,2,1].\(\) Можно также превратить \(a\) в \([3,1,2]\) используя силу \(1\) как раньше, поэтому ответ \(2\).

В третьем примере есть только одна перестановка \(b\). Можно показать, что невозможно превратить \(a\) в \(b\), поэтому ответ \(0\).

A. Проблема Нольдбаха

математика Перебор теория чисел *1000

Никита интересовался простыми числами, и однажды прочитал о проблеме Гольдбаха. Она гласит, что любое четное число большее 2 можно представить в виде суммы двух простых чисел. Никита заинтересовался этим и решил придумать себе на голову проблему, и назвал он её проблемой Нольдбаха. Так как он интересовался исключительно простыми числами, проблема Нольдбаха гласила, что по крайней мере k простых чисел от 2 до n включительно представимо в виде суммы трех чисел: двух соседних простых чисел и 1. Например, 19 = 7 + 11 + 1, или 13 = 5 + 7 + 1.

Два простых числа называются соседними, если между ними не существует других простых чисел.

Вам предстоит помочь Никите, и сказать, прав он или ошибается.

Входные данные

В первой и единственной строке входных данных содержится два целых числа n (2 ≤ n ≤ 1000) и k (0 ≤ k ≤ 1000).

Выходные данные

В единственной строке выходных данных выведите слово YES, если не менее k простых чисел в промежутке от 2 до n представимы в виде описанном выше. В противном случае, выведите слово NO.

Примечание

В первом примере ответ YES, так как чисел, которые можно представить в описанном виде не меньше двух (например, 13 и 19). Во втором примере ответ NO так как нельзя представить в искомом виде 7 простых чисел от 2 до 45.

E. Пират Сережа

Конструктив Перебор *2600

Маленький пират Сережа недавно ограбил торговое судно с головоломками разных видов. Среди них ему понравилась лишь одна, самая сложная.

Головоломка представляет из себя таблицу из \(n\) строк и \(m\) столбцов, в клетках которой записаны числа от \(1\) до \(n \cdot m\) по одному разу.

Чтобы решить головоломку, нужно найти последовательность клеток таблицы, в которой любые две последовательные клетки соседние по стороне в таблице. Последовательность может иметь произвольную длину и должна посещать каждую клетку один или более раз. Для клетки со значением \(i\) обозначим за \(t_i\) позицию первого вхождения клетки с этим значением в последовательность. Последовательность решает головоломку, если \(t_1 < t_2 < \dots < t_{nm}\). Другими словами, последовательность должна в первый раз посетить клетку со значением \(x\) до клетки со значением \(x + 1\) для всех \(x\).

Назовем головоломку решаемой, если для нее существует хотя бы одна подходящая последовательность.

За одно действие Сережа может выбрать две произвольных клетки (не обязательно соседние по стороне) и поменять числа, записанные в них. Он хотел бы знать минимальное число действий, необходимое, чтобы сделать головоломку решаемой, но очень нетерпелив. Поэтому найдите, равняется ли минимальное число действий \(0\), \(1\), или же не менее \(2\). В случае, когда потребуется ровно \(1\) действие, найдите также количество подходящих пар клеток для обмена чисел.

Входные данные

В первой строке находятся два целых положительных числа \(n, m\) (\(1 \leq n\cdot m \leq 400\,000\)) — размеры таблицы.

В следующих \(n\) строках находятся по \(m\) целых чисел \(a_{i1}, a_{i2}, \dots, a_{im}\) (\(1 \le a_{ij} \le nm\)).

Гарантируется, что каждое число от \(1\) до \(nm\) встречается ровно один раз.

Выходные данные

Пусть \(a\) — минимальное число действий, после которых головоломка станет решаемой.

Если \(a = 0\), выведите \(0\).

Если \(a = 1\), выведите \(1\), а также количество подходящих пар клеток.

Если \(a \ge 2\), выведите \(2\).

Примечание

В первом примере из условия последовательность клеток \((1, 2), (1, 1), (1, 2), (1, 3), (2, 3), (3, 3)\), \((2, 3), (1, 3), (1, 2), (1, 1), (2, 1), (2, 2), (3, 2), (3, 1)\) решает головоломку, поэтому ответ \(0\).

Головоломка во втором примере из условия не решается, но будет решаться после любого из трех обменов клеток со значениями \((1, 5), (1, 6), (2, 6)\).

В третьем примере из условия потребуется не менее двух обменов, поэтому ответ равен \(2\).

E. Текстовый редактор

дп жадные алгоритмы Перебор Строки *2500

Вы хотели написать текст \(t\), состоящий из \(m\) строчных букв латинского алфавита. Но вместо этого вы написали текст \(s\), состоящий из \(n\) строчных букв латинского алфавита, и теперь вы хотите исправить это, получив текст \(t\) из текста \(s\).

Изначально курсор вашего текстового редактора находится в конце текста \(s\) (после последнего символа текста). За один ход вы можете совершить одно из следующих действий:

  • нажать кнопку «влево», таким образом, курсор переместится на одну позицию влево (или не сделает ничего, если он уже указывает на начало текста, то есть стоит перед первым символом текста);
  • нажать кнопку «вправо», таким образом, курсор переместится на одну позицию вправо (или не сделает ничего, если он уже указывает на конец текста, то есть стоит после последнего символа текста);
  • нажать кнопку «home», таким образом, курсор переместится в начало текста (на позицию перед первым символом текста);
  • нажать кнопку «end», таким образом, курсор переместится в конец текста (на позицию после последнего символа текста);
  • нажать кнопку «backspace», таким образом, символ слева от курсора удалится из текста (если такого символа нет, ничего не произойдет).

Ваша задача — посчитать минимальное количество ходов, необходимое для того, чтобы получить текст \(t\) из текста \(s\) при помощи заданного набора действий, или же определить, что невозможно получить текст \(t\) из текста \(s\).

Вам необходимо ответить на \(T\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(T\) (\(1 \le T \le 5000\)) — количество наборов тестовых данных. Затем следуют \(T\) наборов тестовых данных.

Первая строка набора содержит два целых числа \(n\) и \(m\) (\(1 \le m \le n \le 5000\)) — длину \(s\) и длину \(t\), соответственно.

Вторая строка набора содержит строку \(s\), состоящую из \(n\) строчных букв латинского алфавита.

Третья строка набора содержит строку \(t\), состоящую из \(m\) строчных букв латинского алфавита.

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превосходит \(5000\) (\(\sum n \le 5000\)).

Выходные данные

Для каждого набора выведите одно целое число — минимальное количество ходов, необходимое для того, чтобы получить текст \(t\) из текста \(s\) при помощи заданного набора действий, или же -1, если невозможно получить текст \(t\) из текста \(s\) в данном наборе тестовых данных.

A. YES или YES?

Перебор реализация Строки *800

Дана строка \(s\) длины \(3\), состоящая из строчных и заглавных букв латинского алфавита. Ваша задача состоит в том, чтобы определить, равняется ли она строке «YES» (без кавычек), где каждая буква может быть как заглавной, так и строчной. Например, «yES», «Yes» и «yes» все являются допустимыми.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание каждого набора.

Единственная строка каждого набора входных данных содержит строку \(s\) длины три. Каждый символ \(s\) является строчной или заглавной буквой латинского алфавита.

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек) если \(s\) удовлетворяет условию, и «NO» в противном случае.

Вы можете выводить «Yes» и «No» в любом регистре (например, строки «yES», «yes» и «Yes» будут распознаны как правильный ответ).

Примечание

Первые пять наборов входных данных содержат строки «YES», «yES», «yes», «Yes», «YeS». Все они равны строке «YES», где каждый символ либо заглавный, либо строчный.

C. Шифр

Перебор реализация Строки *800

Лука имеет шифр, представляющий собой последовательность из \(n\) колёсиков, каждое с написанной на нём цифрой \(a_i\). Известно, что он прокрутил \(i\)-е колёсико \(b_i\) раз. Каждое колёсико может крутиться:

  • вверх (обозначено символом \(\texttt{U}\)): прокрутка вверх увеличивает значение на \(i\)-м колёсике на \(1\). После прокрутки \(9\) вверх, значение становится равным \(0\).
  • вниз (обозначено символом \(\texttt{D}\)): прокрутка вниз уменьшает значение на \(i\)-м колёсике на \(1\). После прокрутки \(0\) вниз, значение становится равным \(9\).
Пример для \(n=4\). Текущая последовательность цифр: 0 0 0 0.

Лука знает конечные значения колёсиков и последовательность совершённых прокруток для каждого из них. Помогите ему восстановить изначальную последовательность цифр, чтобы взломать шифр!

Входные данные

Первая строка содержит число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора содержит число \(n\) (\(1 \leq n \leq 100\)) — количество колёсиков.

Вторая строка содержит \(n\) чисел \(a_i\) (\(0 \leq a_i \leq 9\)) — значение на \(i\)-м колёсике после всех прокруток.

Далее следуют \(n\) строк, \(i\)-я из которых содержит число \(b_i\) (\(1 \leq b_i \leq 10\)) и \(b_i\) символов, каждый из которых является либо \(\texttt{U}\), либо \(\texttt{D}\) — количество совершённых прокруток \(i\)-го колёсика и описание прокруток соответственно. Символы \(\texttt{U}\) и \(\texttt{D}\) означают прокрутку вверх и вниз соответственно.

Выходные данные

Для каждого набора выведите \(n\) разделённых пробелом цифр  — изначальные значения на колёсиках шифра.

Примечание

В первом наборе можно показать, что изначальным шифром являлось \([2,1,1]\). В таком случае колёсики были прокручены следующим образом:

  • Первое колёсико: \(2 \xrightarrow[\texttt{D}]{} 1 \xrightarrow[\texttt{D}]{} 0 \xrightarrow[\texttt{D}]{} 9\).
  • Второе колёсико: \(1 \xrightarrow[\texttt{U}]{} 2 \xrightarrow[\texttt{D}]{} 1 \xrightarrow[\texttt{U}]{} 2 \xrightarrow[\texttt{U}]{} 3\).
  • Третье колёсико: \(1 \xrightarrow[\texttt{D}]{} 0 \xrightarrow[\texttt{U}]{} 1\).
Получившаяся последовательность \([9,3,1]\) совпадает с заданной во входных данных.

D. Двойные строки

Перебор Строки Структуры данных *1100

Вам даны \(n\) строк \(s_1, s_2, \dots, s_n\) длины не более \(\mathbf{8}\).

Для каждой строки \(s_i\), проверьте, существуют ли такие \(s_j\) и \(s_k\), что \(s_i = s_j + s_k\). То есть определите, является ли \(s_i\) конкатенацией \(s_j\) и \(s_k\). Обратите внимание, что \(j\) может быть равным \(k\).

Напомним, что конкатенацией строк \(s\) и \(t\) называется строка \(s + t = s_1 s_2 \dots s_p t_1 t_2 \dots t_q\), где \(p\) и \(q\) длины строк \(s\) и \(t\) соответственно. Например, конкатенация строк «code» и «forces» равна «codeforces».

Входные данные

Первая строка содержит одно число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит число \(n\) (\(1 \leq n \leq 10^5\)) — количество строк.

Затем следуют \(n\) строк, \(i\)-я из которых содержит непустую строку \(s_i\) длины не более \(\mathbf{8}\), состоящую из строчных английских букв. Среди заданных \(n\) строк могут быть одинаковые.

Сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

Для каждого набора выведите бинарную строку длины \(n\). \(i\)-й бит строки должен равняться \(\texttt{1}\) если существуют две строки \(s_j\) и \(s_k\) таких, чтобы \(s_i = s_j + s_k\), или же \(\texttt{0}\) в противном случае. Обратите внимание, что \(j\) может совпадать с \(k\).

Примечание

В первом наборе мы имеем следующее:

  • \(s_1 = s_2 + s_2\), так как \(\texttt{abab} = \texttt{ab} + \texttt{ab}\). Помните, что \(j\) может совпадать с \(k\).
  • \(s_2\) не может быть представлена как конкатенация никаких двух строк.
  • \(s_3 = s_2 + s_5\), так как \(\texttt{abc} = \texttt{ab} + \texttt{c}\).
  • \(s_4\) не может быть представлена как конкатенация никаких двух строк.
  • \(s_5\) не может быть представлена как конкатенация никаких двух строк.
Так как только \(s_1\) и \(s_3\) удовлетворяют условиям, то только первый и третий биты в ответе будут равняться \(\texttt{1}\), поэтому ответ — \(\texttt{10100}\).

G. Хороший ключ, плохой ключ

битмаски дп жадные алгоритмы математика Перебор *1600

У вас есть \(n\) сундуков. \(i\)-й сундук содержит \(a_i\) монет. Вы должны открыть все \(n\) сундуков по порядку, начиная с сундука \(1\), заканчивая сундуком \(n\).

Также существуют два вида ключей, которые вы можете использовать для открытия каждого сундука:

  • хороший ключ, который стоит \(k\) монет;
  • плохой ключ, который бесплатен, но уменьшит вдвое количество монет в каждом неоткрытом сундуке, включая сундук, который собираются им открыть. Уменьшаясь вдвое, количество монет округляется вниз до ближайшего целого числа для каждого из сундуков. Иными словами, если используется плохой ключ, чтобы открыть сундук \(i\), количества монет в сундуках изменятся следующим образом: \(a_i = \lfloor{\frac{a_i}{2}\rfloor}\), \(a_{i+1} = \lfloor\frac{a_{i+1}}{2}\rfloor, \dots, a_n = \lfloor \frac{a_n}{2}\rfloor\);
  • любой ключ (и хороший и плохой) ломается после использования, то есть является одноразовым.

Вам необходимо использовать \(n\) ключей, по одному на каждый сундук. Изначально у вас нет ключей и монет. Если вы хотите использовать хороший ключ, то его надо купить.

В процессе вы можете уходить в минус — например, если у вас есть \(1\) монета, вы можете купить хороший ключ за \(k=3\) монеты, и у вас станет \(-2\) монеты.

Найдите максимальное количество монет, которое вы сможете получить в итоге после открытия всех \(n\) сундуков по порядку от \(1\) до \(n\).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

В первой строке каждого набора содержатся два целых числа \(n\) и \(k\) (\(1 \leq n \leq 10^5\), \(0 \leq k \leq 10^9\)) — количество сундуков и стоимость хорошего ключа соответственно.

Вторая строка каждого набора содержит \(n\) чисел \(a_i\) (\(0 \leq a_i \leq 10^9\))  — количество монет в каждом из сундуков.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

Для каждого набора выведите одно число  — максимальное количество монет, которое вы сможете получить после открытия сундуков с \(1\) по \(n\).

Пожалуйста, обратите внимание, что ответ для некоторых наборов входных данных может не поместиться в 32-разрядный целочисленный тип, поэтому вы должны использовать по крайней мере 64-разрядный целочисленный тип в вашем языке программирования (например, long long для C++).

Примечание

В первом наборе одна из возможных стратегий следующая:

  • Купить хороший ключ за \(5\) монет, и открыть сундук \(1\), получив \(10\) монет. Ваш баланс станет \(0 + 10 - 5 = 5\) монет.
  • Купить хороший ключ за \(5\) монет, и открыть сундук \(2\), получив \(10\) монет. Ваш баланс станет \(5 + 10 - 5 = 10\) монет.
  • Использовать плохой ключ, и открыть им сундук \(3\). В результате использования плохого ключа, количество монет в сундуке \(3\) становится \(\left\lfloor \frac{3}{2} \right\rfloor = 1\), и количество монет в сундуке \(4\) становится \(\left\lfloor \frac{1}{2} \right\rfloor = 0\). Ваш баланс станет \(10 + 1 = 11\).
  • Использовать плохой ключ, и открыть им сундук \(4\). В результате использования плохого ключа, количество монет в сундуке \(4\) станет \(\left\lfloor \frac{0}{2} \right\rfloor = 0\). Ваш баланс станет \(11 + 0 = 11\).
После открытия всех сундуков, у вас останется \(11\) монет. Можно доказать, что получить больше монет невозможно.

B. Люк гурман

жадные алгоритмы Перебор реализация *1000

Люк любит поесть. Перед ним \(n\) стопок еды, выстроенных по прямой линии. В \(i\)-й стопке находится \(a_i\) единиц еды.

Люк будет идти от \(1\)-й стопки к \(n\)-й стопке, и он хочет съесть каждую стопку еды, не возвращаясь назад. Когда Люк достигает \(i\)-й стопки, он может съесть ее тогда и только тогда, когда \(|v - a_i| \leq x\), где \(x\) — фиксированное целое число, а \(v\) — пищевое желание Люка.

Прежде чем Люк начнет ходить, он может установить \(v\) в любое целое число. Кроме того, для каждого \(i\) (\(1 \leq i \leq n\)) Люк может изменить свое пищевой желание на любое целое число до того, как он съест \(i\)-ю стопку.

Найдите минимальное количество изменений, необходимое для того, чтобы съесть каждую стопку еды.

Обратите внимание, что первоначальный выбор \(v\) не считается изменением.

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Для каждого набора входных данных первая строка содержит два целых числа: \(n, x\) (\(1 \leq n \leq 2 \cdot 10^5\), \(1 \leq x \leq 10^9\)) — количество стопок, и максимальная разница между размером стопки и пищевым желанием Люка, при которой Люк может съесть стопку.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots , a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите целое число — минимальное количество необходимых изменений.

Примечание

В первом наборе входных данных Люк может установить \(v\) в \(5\) до того, как он начнет ходить. И он может идти прямо, чтобы съесть каждую стопку еды, не меняя \(v\).

Во втором наборе входных данных Люк может установить \(v\) в \(3\) до того, как он начнет ходить. И он может поменять \(v\) на \(10\), прежде чем съест вторую стопку. После этого он может идти прямо, чтобы съесть оставшуюся еду, не меняя \(v\).

В четвертом наборе входных данных Люк может установить \(v\) в \(3\) до того, как начнет ходить. И он может поменять \(v\) на \(8\) до того, как съест шестую стопку. После этого он может идти прямо, чтобы съесть оставшуюся еду, не меняя \(v\).

В пятом наборе входных данных Люк может установить \(v\) в \(4\) до того, как начнет ходить. И он может поменять \(v\) на \(6\) до того, как съест четвертую стопку. Тогда он может поменять \(v\) на \(12\) до того, как съест седьмую стопку. После этого он может идти прямо, чтобы съесть оставшуюся еду, не меняя \(v\).

E. Посчитать секунды

графы дп Конструктив математика Перебор реализация *2200

У Cirno есть ориентированный ациклический граф с \(n\) вершинами и \(m\) ребрами. В графе ровно одна вершина, не имеющая исходящих ребер. На \(i\)-й вершине написано целое число \(a_i\).

Каждую секунду происходит следующее:

  • Пусть \(S\) — множество вершин \(x\), у которых \(a_x > 0\).
  • Для всех \(x \in S\) из \(a_x\) вычитается \(1\), а затем для каждой вершины \(y\) такой, что существует ребро из \(x\) в \(y\), \(1\) прибавляется к \(a_y\).

Найдите первый момент времени, когда все \(a_i\) станут равны \(0\). Так как ответ может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n, m\) (\(1 \leq n, m \leq 1000\)) — количество вершин и ребер в графе.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — числа, записанные в вершинах.

Следующие \(m\) строк содержит два целых числа \(x, y\) (\(1 \leq x, y \leq n\)), обозначающих ориентированное ребро из \(x\) в \(y\). Гарантируется, что граф является ориентированным ациклическим, без кратных ребер, и ровно одна вершина не имеет исходящих ребер.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных меньше или равны \(10\,000\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите целое число — первый момент времени, когда все \(a_i\) станут \(0\), по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных:

  • В момент времени \(0\) значения узлов равны \([1, 1, 1]\).
  • В момент времени \(1\) значения узлов равны \([0, 1, 1]\).
  • В момент времени \(2\) значения узлов равны \([0, 0, 1]\).
  • В момент времени \(3\) значения узлов равны \([0, 0, 0]\).
Так что ответ равен \(3\).

Во втором наборе входных данных:

  • В момент времени \(0\) значения узлов равны \([1, 0, 0, 0, 0]\).
  • В момент времени \(1\) значения узлов равны \([0, 1, 0, 0, 1]\).
  • В момент времени \(2\) значения узлов равны \([0, 0, 1, 0, 0]\).
  • В момент времени \(3\) значения узлов равны \([0, 0, 0, 1, 0]\).
  • В момент времени \(4\) значения узлов равны \([0, 0, 0, 0, 1]\).
  • В момент времени \(5\) значения узлов равны \([0, 0, 0, 0, 0]\).
Итак, ответ равен \(5\).

В третьем наборе входных данных:

Первый момент времени, когда все \(a_i\) становятся \(0\), равен \(6\cdot 998244353 + 4\).

C. Марк и неоконченное эссе

Перебор реализация *1400

Однажды ночью Марк вспомнил, что к завтрашнему дню ему нужно было написать сочинение. Он еще не начинал работу. Чтобы успеть в срок, Марк решил случайным образом скопировать и вставить подстроки из аннотации.

Формально, аннотация представляет собой строку \(s\) начальной длины \(n\). Марк выполнит операцию копирования и вставки \(c\) раз. Каждая операция описывается двумя целыми числами \(l\) и \(r\), что означает, что Марк будет добавлять буквы \(s_l s_{l+1} \ldots s_r\) в конец строки \(s\). Обратите внимание, что после этой операции длина \(s\) увеличивается.

Конечно, Марк должен иметь возможность проанализировать написанное. После окончания копирования Марк задаст \(q\) запросов: по заданному целому \(k\) определите \(k\)-ю букву итоговой строки \(s\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 1000\)) — количество наборов входных данных в тесте.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(c\) и \(q\) (\(1\leq n\leq 2\cdot 10^5\), \(1\leq c\leq 40\) и \(1\leq q\leq 10^4\)) — длина исходной строки \(s\), количество операций копирования-вставки и количество запросов соответственно.

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\). Гарантируется, что \(s\) содержит только строчные латинские буквы.

Следующие \(c\) строк описывают операции копирования-вставки. Каждая строка содержит два целых числа \(l\) и \(r\) (\(1\leq l\leq r\leq 10^{18}\)). Гарантируется, что \(r\) не превышает текущей длины \(s\).

Последние \(q\) строк каждого набора входных данных содержат запросы. Каждая строка содержит одно целое число \(k\) (\(1\leq k\leq 10^{18}\)). Гарантируется, что \(k\) не превышает длины итоговой строки \(s\).

Гарантируется, что суммы \(n\) и \(q\) по всем наборам входных данных не превосходят \(2\cdot 10^5\) и \(10^4\) соответственно.

Выходные данные

Для каждого запроса выведите \(k\)-ю букву конечной строки \(s\).

Примечание

В первом наборе входных данных примера процесс копирования-вставки выглядит следующим образом:

  • первым действием является дописывание строки \(\texttt{mark}\), что дает строку \(\texttt{mark}\color{red}{\texttt{mark}}\);
  • вторым действием является дописывание строки \(\texttt{mar}\), что дает строку \(\texttt{markmark}\color{red}{\texttt{mar}}\);
  • третье действие — дописывание строки \(\texttt{rkmark}\), в результате чего получается строка \(\texttt{markmarkmar}\color{red}{\texttt{rkmark}}\).

Во втором наборе входных данных примера процесс копирования-вставки выглядит следующим образом:

  • первое действие — дописывание строки \(\texttt{re}\), что дает строку \(\texttt{creamii}\color{red}{\texttt{re}}\);
  • второе действие — дописывание строки \(\texttt{ea}\), что дает строку \(\texttt{creamiire}\color{red}{\texttt{ea}}\);
  • третье действие — дописывание строки \(\texttt{reamiire}\), что дает строку \(\texttt{creamiireea}\color{red}{\texttt{reamiire}}\).

E. Марк и профессор Коро

Бинарный поиск битмаски жадные алгоритмы Комбинаторика Перебор Структуры данных *2300

После просмотра одного аниме перед сном Марку снится, что он стоит в старом классе с меловой доской, на которой записана последовательность из \(n\) положительных целых чисел \(a_1, a_2,\dots,a_n\).

Затем в класс заходит профессор Коро. Он может выполнять следующую операцию:

  • выбрать целое число \(x\) которое присутствует на доске хотя бы \(2\) раза,
  • стереть эти \(2\) вхождения,
  • записать число \(x+1\) на доску.

После чего профессор Коро задает марку вопрос: «Какое максимально возможное число может появиться на доске после некоторого количества таких операций?»

Марк быстро отвечает на этот вопрос, но он всё ещё медленнее профессора Коро. Поэтому профессор Коро решает задать Марку дополнительные вопросы. Он будет менять изначальную последовательность чисел на доске \(q\) раз. Каждый раз он будет выбирать положительные целые числа \(k\) и \(l\), затем менять \(a_k\) на \(l\). После каждого такого изменения он будет спрашивать у Марка ответ на тот же самый вопрос.

Помогите Марку ответить на вопросы быстрее профессора Коро!

Обратите внимание, что изменения начальной последовательности на доске сохраняются. Изменения, внесенные в последовательность \(a\), будут так же применяться при обработке следующих изменений.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(q\) (\(2\leq n\leq 2\cdot 10^5\), \(1\leq q\leq 2\cdot 10^5\)) — длина последовательности \(a\) и количество изменений соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\dots,a_n\) (\(1\leq a_i\leq 2\cdot 10^5\)).

Затем следуют \(q\) строк, каждая из которых содержит два целых числа \(k\) и \(l\) (\(1\leq k\leq n\), \(1\leq l\leq 2\cdot 10^5\)), означающие изменение \(a_k\) на значение \(l\).

Выходные данные

Выведите \(q\) строк, \(i\)-я строка должна содержать единственное целое число — ответ после \(i\)-го изменения.

Примечание

В первом примере программа должна обработать \(4\) изменения.

После первого обновления последовательность на доске выглядит как \([2,3,2,4,5]\). Одна из возможных последовательностей операций, достигающих числа \(6\), такая:

  • Изначально, на доске числа \([2,3,2,4,5]\).
  • Удаляем два вхождения числа \(2\) и записываем \(3\), получая \([3,4,5,\color{red}{3}]\).
  • Удаляем два вхождения числа \(3\) и записываем \(4\), получая \([4,5,\color{red}{4}]\).
  • Удаляем два вхождения числа \(4\) и записываем \(5\), получая \([5,\color{red}{5}]\).
  • Удаляем два вхождения числа \(5\) и записываем \(6\), получая \([\color{red}{6}]\).

Затем, во время второго изменения, массив станет равным \([2,3,2,4,3]\). В этот раз Марк не может достичь числа \(6\). Однако одна из последовательностей операций, приводящая к числу \(5\), такая:

  • Изначально, на доске числа \([2,3,2,4,3]\).
  • Удаляем два вхождения числа \(2\) и записываем \(3\), получая \([3,4,3,\color{red}{3}]\).
  • Удаляем два вхождения числа \(3\) и записываем \(4\), получая \([3,4,\color{red}{4}]\).
  • Удаляем два вхождения числа \(4\) и записываем \(5\), получая \([3,\color{red}{5}]\).

Во время третьего изменения массив станет равным \([2,3,2,1,3]\). Один из возможных вариантов достичь числа \(4\) такой:

  • Изначально, на доске числа \([2,3,2,1,3]\).
  • Удаляем два вхождения числа \(3\) и записываем \(4\), получая \([2,2,1,\color{red}{4}]\).

D1. Нарезка морковки (простая версия)

Бинарный поиск жадные алгоритмы Конструктив Перебор теория чисел *1700

Это простая версия задачи. Единственное отличие между простой и сложной версиями — ограничения на \(n\), \(k\), \(a_i\) и сумму \(n\) по всем наборам входных данных. Вы можете делать взломы, только если обе версии задачи решены.

Обратите внимание на нестандартное ограничение по памяти.

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\) и целое число \(k\).

Стоимость массива целых чисел \(p_1, p_2, \ldots, p_n\) длины \(n\) равна \(\)\max\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right) - \min\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right).\(\)

Здесь \(\lfloor \frac{x}{y} \rfloor\) обозначает целую часть от деления \(x\) на \(y\). Найдите минимальную возможную стоимость массива \(p\) такого, что \(1 \le p_i \le k\) для всех \(1 \le i \le n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны два числа \(n\) и \(k\) (\(1 \le n, k \le 3000\)).

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_1 \le a_2 \le \ldots \le a_n \le 3000\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных выведите одно число: минимальную возможную стоимость массива \(p\), удовлетворяющего условию выше.

Примечание

В первом наборе входных данных оптимальный массив \(p = [1, 1, 1, 2, 2]\). Массив значений \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равен \([4, 5, 6, 4, 5]\). Стоимость \(p\) равна \(\max\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) - \min\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) = 6 - 4 = 2\). Можно показать, что не существует массива (удовлетворяющего требованию из условия) с меньшей стоимостью.

Во втором наборе входных данных один из оптимальных массивов \(p = [12, 12, 12, 12, 12]\). Все значения \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равны \(0\).

В третьем наборе входных данных единственный возможный массив \(p = [1, 1, 1]\).

D2. Нарезка морковки (cложная версия)

дп жадные алгоритмы Конструктив математика Перебор Структуры данных теория чисел *2400

Это сложная версия задачи. Единственное отличие между простой и сложной версиями — ограничения на \(n\), \(k\), \(a_i\) и сумму \(n\) по всем наборам входных данных. Вы можете делать взломы, только если обе версии задачи решены.

Обратите внимание на нестандартное ограничение по памяти.

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\) и целое число \(k\).

Стоимость массива целых чисел \(p_1, p_2, \ldots, p_n\) длины \(n\) равна \(\)\max\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right) - \min\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right).\(\)

Здесь \(\lfloor \frac{x}{y} \rfloor\) обозначает целую часть от деления \(x\) на \(y\). Найдите минимальную возможную стоимость массива \(p\), такого что \(1 \le p_i \le k\) для всех \(1 \le i \le n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны два числа \(n\) и \(k\) (\(1 \le n, k \le 10^5\)).

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_1 \le a_2 \le \ldots \le a_n \le 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: минимальную возможную стоимость массива \(p\), удовлетворяющего требованию выше.

Примечание

В первом наборе входных данных оптимальный массив \(p = [1, 1, 1, 2, 2]\). Массив значений \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равен \([4, 5, 6, 4, 5]\). Стоимость \(p\) равна \(\max\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) - \min\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) = 6 - 4 = 2\). Можно показать, что не существует массива (удовлетворяющего требованию из условия) с меньшей стоимостью.

Во втором наборе входных данных один из оптимальных массивов \(p = [12, 12, 12, 12, 12]\). Все значения \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равны \(0\).

В третьем наборе входных данных единственный возможный массив \(p = [1, 1, 1]\).

B. Разностный массив

Перебор реализация сортировки Структуры данных *1900

Вам дан массив \(a\) состоящий из \(n\) неотрицательных целых чисел. Гарантируется, что \(a\) отсортирован от меньших к большим.

За одну операцию мы создаем новый массив \(b_i=a_{i+1}-a_{i}\) для всех \(1 \le i < n\). Затем сортируем \(b\) от меньших к большим, заменяем \(a\) на \(b\) и уменьшаем \(n\) на \(1\).

После применения \(n-1\) операции \(n\) становится равным \(1\). Вам нужно вывести единственное целое число в массиве \(a\) (то есть вывести \(a_1\)).

Входные данные

Входные данные состоят из нескольких наборов. Первая строка содержит единственное целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Затем следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(2\le n\le 10^5\)) — длина массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\dots,a_n\) (\(0\le a_1\le \ldots\le a_n \le 5\cdot 10^5\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2.5\cdot 10^5\) и сумма \(a_n\) по всем наборам не превосходит \(5\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ в отдельной строке.

Примечание

Чтобы упростить примечание, обозначим как \(\operatorname{sort}(a)\) массив, получаемый из \(a\) сортировкой от меньших к большим.

В первом наборе изначально \(a=[1,10,100]\). После первой операции \(a=\operatorname{sort}([10-1,100-10])=[9,90]\). После второй операции \(a=\operatorname{sort}([90-9])=[81]\).

Во втором наборе изначально \(a=[4,8,9,13]\). После первой операции \(a=\operatorname{sort}([8-4,9-8,13-9])=[1,4,4]\). После второй операции \(a=\operatorname{sort}([4-1,4-4])=[0,3]\). После последней операции \(a=\operatorname{sort}([3-0])=[3]\).

A. Три двери

жадные алгоритмы математика Перебор реализация *800

Перед вами три двери, пронумерованные от \(1\) до \(3\) слева направо. На каждой двери висит замок, который может быть открыть только ключом, на котором написано то же число, что и на двери.

Есть три ключа — по одному от каждой двери. Два из них спрятаны за дверьми так, что за каждой дверью не более одного ключа. То есть за двумя дверьми лежит по одному ключу, за одной дверью ключа нет. Чтобы получить ключ, спрятанный за дверью, надо сначала открыть эту дверь. Оставшийся ключ у вас в руках.

Можете ли вы открыть все двери?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 18\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(x\) (\(1 \le x \le 3\)) — номер на ключе у вас в руках.

Во второй строке записаны три целых числа \(a, b\) и \(c\) (\(0 \le a, b, c \le 3\)) — номер на ключе за каждой дверью. Если за дверью нет ключа, то номер равен \(0\).

Значения \(1, 2\) и \(3\) встречаются ровно по одному разу \(x, a, b\) и \(c\).

Выходные данные

На каждый набор входных данных выведите «YES», если можно открыть все двери. Иначе выведите «NO».

F. Мультимножество строк

meet-in-the-middle битмаски бпф графы Деревья дп математика Перебор Потоки *2500

Вам даны три целых числа \(n\), \(k\) и \(f\).

Рассмотрим все бинарные строки (то есть все строки, состоящие из символов \(0\) и/или \(1\)) длины от \(1\) до \(n\). Для каждой такой строки \(s\) вы должны выбрать целое число \(c_s\) от \(0\) до \(k\).

Мультимножество из бинарных строк длины ровно \(n\) считается красивым, если для каждой бинарной строки \(s\) длины от \(1\) до \(n\) выполняется следующее: количество строк в мультимножестве, для которых \(s\) является префиксом, не превосходит \(c_s\).

Например, пусть \(n = 2\), \(c_{0} = 3\), \(c_{00} = 1\), \(c_{01} = 2\), \(c_{1} = 1\), \(c_{10} = 2\) и \(c_{11} = 3\). Мультимножество строк \(\{11, 01, 00, 01\}\) является красивым, так как:

  • для строки \(0\) существует \(3\) строки из мультимножества, для которых \(0\) — префикс, и \(3 \le c_0\);
  • для строки \(00\) существует одна строка из мультимножества, для которой \(00\) — префикс, и \(1 \le c_{00}\);
  • для строки \(01\) существует \(2\) строки из мультимножества, для которых \(01\) — префикс, и \(2 \le c_{01}\);
  • для строки \(1\) существует одна строка из мультимножества, для которой \(1\) — префикс, и \(1 \le c_1\);
  • для строки \(10\) существует \(0\) строк из мультимножества, для которых \(10\) — префикс, и \(0 \le c_{10}\);
  • для строки \(11\) существует одна строка из мультимножества, для которой \(11\) — префикс, и \(1 \le c_{11}\).

А теперь — сама задача. Вы должны посчитать количество способов выбрать числа \(c_s\) для всех бинарных строк \(s\) длины от \(1\) до \(n\) таким образом, чтобы максимальный возможный размер красивого мультимножества был равен ровно \(f\).

Входные данные

В единственной строке заданы три целых числа \(n\), \(k\) и \(f\) (\(1 \le n \le 15\); \(1 \le k, f \le 2 \cdot 10^5\)).

Выходные данные

Выведите одно целое число — количество способов выбрать числа \(c_s\) для всех бинарных строк \(s\) длины от \(1\) до \(n\) таким образом, чтобы максимальный возможный размер красивого мультимножества был равен ровно \(f\). Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Примечание

В первом примере есть три способа выбрать значения \(c_s\):

  • \(c_0 = 0\), \(c_1 = 2\), тогда максимальное красивое мультимножество — \(\{1, 1\}\);
  • \(c_0 = 1\), \(c_1 = 1\), тогда максимальное красивое мультимножество — \(\{0, 1\}\);
  • \(c_0 = 2\), \(c_1 = 0\), тогда максимальное красивое мультимножество — \(\{0, 0\}\).

D. Сломанный чекер

*особая задача Перебор *1300

«Это не задача, а бред какой-то! Условия вообще нет, тестов всего пять штук. И что автор себе позволяет?» — возмущались в комментариях к одному раунду на Codeforces. А еще... нет, с чекером все оказалось в порядке, и это уже хорошо.

Входные данные

В единственной строке входного файла находится целое число от 1 до 5, включительно. Все тесты к этой задаче различны. Число не обязательно совпадает с номером теста.

Выходные данные

В единственной строке выходного файла находится целое число от 1 до 3, включительно.

Примечание

В этой задаче примеры не даются — ведь тестов и так мало.

F. фювбюая

*особая задача Перебор реализация теория чисел *1600

фювбюая - мвю яаюбвюф жшбыю, жлф чфаъпылэюф ювапцфэшф осыофвбо уагтшь яаюбвкь жшбыюь.

Входные данные

эпщушвф фювбюая эюьфа n сеюуэкф упээкф бюбвюов шч фушэбвсфээютю ёфыютю n (1 ≤ n ≤ 11184) — эюьфап шбъюьютю фювбюаяп. эгьфапёшо эпжшэпфвбо б фушэшёк.

Выходные данные

сксфушвф фушэбвсфээюф жшбыю.

B. Дождь

Бинарный поиск геометрия жадные алгоритмы математика Перебор реализация Структуры данных *2100

Вы владеете полем, который можно представить как бесконечную числовую прямую, все позиции на которой отмечены целыми числами.

В следующие \(n\) дней будет идти дождь. В \(i\)-й день центр дождя будет располагаться в точке \(x_i\), а интенсивность дождя будет равна \(p_i\). Из-за дождей будет собираться дождевая вода; пусть \(a_j\) будет обозначать объем воды, накопившийся в точке \(j\). Изначально \(a_j\) равно \(0\), после дождя в \(i\)-й день это значение увеличится на \(\max(0,p_i-|x_i-j|)\).

Поле затопит, если в некоторый момент будет существовать точка \(j\), в которой накопится \(a_j>m\) воды.

Вы можете использовать заклинание и отменить дождь в ровно один из дней, т. е. установить \(p_i=0\). Для каждого \(i\) от \(1\) до \(n\) определите, если вы отмените дождь в \(i\)-й день, верно ли, что затопления не случится?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 2 \cdot 10^5\), \(1 \leq m \leq 10^9\)) — количество дней и максимальный объем воды, который может находиться в одной точке, не вызывая затопления.

Далее следуют \(n\) строк. \(i\)-я из этих строк содержит два целых числа \(x_i\) и \(p_i\) (\(1 \leq x_i,p_i \leq 10^9\)) — положение центра и интенсивность дождя в \(i\)-й день.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите бинарную строку \(s\) длины \(n\). \(i\)-й символ строки \(s\) должен быть равен 1, если в случае отмены дождя в \(i\)-й день затопления не случится, и 0, если в случае отмены дождя в \(i\)-й день затопление произойдет.

Примечание

В первом наборе входных данных, если не использовать заклинание, собравшаяся вода будет выглядеть следующим образом:

Если отменить дождь в третий день, затопление будет предотвращено, и собравшаяся вода будет выглядеть следующим образом:

Во втором примере изначально нет затопления, поэтому можно отменить дождь в любой день.

В третьем примере нет способа избежать затопления.

C. XOR-треугольники

битмаски дп жадные алгоритмы Конструктив математика Перебор *2500

Вам дано целое положительно число \(n\). Так как \(n\) может быть большим, вам дано его представление в двоичной системе счисления.

Вычислите количество троек целых чисел \((a,b,c)\) таких, что \(0 \leq a,b,c \leq n\), и значение \(a \oplus b\), \(b \oplus c\) и \(a \oplus c\) образуют стороны невырожденного треугольника.

Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Выведите ответ по модулю \(998\,244\,353\).

Три положительных числа \(x\), \(y\) и \(z\) образуют стороны невырожденного треугольника, если и только если \(x+y>z\), \(x+z>y\) и \(y+z>x\).

Входные данные

Единственная строка содержит представление числа \(n\) (\(0 < n < 2^{200\,000}\)) в двоичной системе счисления без ведущих нулей.

Например, строка 10 является представлением числа \(2\) в двоичной системе счисления, а строка 1010 представляет число \(10\).

Выходные данные

Выведите одно число — количество троек \((a,b,c)\), удовлетворяющих условию, по модулю \(998\,244\,353\).

Примечание

В первом примере \(101_2=5\).

  • Тройка \((a, b, c) = (0, 3, 5)\) подходит, потому что \((a\oplus b, b\oplus c, c\oplus a) = (3, 6, 5)\) образуют стороны невырожденного треугольника.
  • Тройка \((a, b, c) = (1, 2, 4)\) подходит, потому что \((a\oplus b, b\oplus c, c\oplus a) = (3, 6, 5)\) образуют стороны невырожденного треугольника.

\(6\) перестановок каждой из этих двух троек тоже подходят, поэтому ответ \(12\).

В третьем примере \(11\,011\,111\,101\,010\,010_2=114\,514\). Полный ответ (без взятия по модулю) равен \(1\,466\,408\,118\,808\,164\).

B. Вечеринка

графы Перебор *1300

В некотором клубе планируется вечеринка, и на нее будут приглашены некоторые из \(n\) участников этого клуба. Все \(n\) участников пронумерованы числами \(1, 2, \dots, n\). Если \(i\)-й участник не будет приглашен, уровень уныния на вечеринке увеличится на \(a_i\).

Среди \(n\) участников клуба \(m\) пар друзей. Если оба человека из пары друзей будут приглашены на вечеринку, по традиции они должны будут съесть тортик на двоих. Таким образом, на вечеринке будет съедено ровно столько тортиков, сколько будет пар друзей, в которых оба участника приглашены.

Для вечеринки клуб закажет несколько пар тортиков. Поэтому необходимо, чтобы на вечеринке было съедено четное число тортиков.

Чему равен минимальный возможный уровень уныния на вечеринке, если пригласить участников так, что будет съедено четное число тортиков?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 10^5\), \(0 \leq m \leq \min(10^5,\frac{n(n-1)}{2})\)) — количество участников в клубе и количество пар друзей.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2, \dots,a_n\) (\(0 \leq a_i \leq 10^4\)) — значения увеличения уныния.

Каждая из следующих \(m\) строк содержит два целых числа \(x\) и \(y\) (\(1 \leq x,y \leq n\), \(x \neq y\)), означающие, что \(x\) и \(y\) друзья. Каждая неупорядоченная пара \((x,y)\) встречается в каждом наборе входных данных максимум один раз.

Гарантируется, что сумма значений \(n\) и сумма значений \(m\) по всем наборам входных данных не превосходят \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальное возможное значение уныния.

Примечание

В первом наборе входных данных можно пригласить всех участников. Уровень уныния будет равен \(0\).

Во втором наборе возможны следующие варианты:

  • пригласить участников \(1\) и \(2\) — \(0\) тортиков, уныние \(3\);
  • пригласить участников \(2\) и \(3\) — \(0\) тортиков, уныние \(2\);
  • пригласить только участника \(1\) — \(0\) тортиков, уныние \(4\);
  • пригласить только участника \(2\) — \(0\) тортиков, уныние \(5\);
  • пригласить только участника \(3\) — \(0\) тортиков, уныние \(3\);
  • не пригласить никого — \(0\) тортиков, уныние \(6\).

Минимальное значение уныния достигается при приглашении участников \(2\) и \(3\).

В третьем примере приглашение участников \(3,4,5\) дает подходящую вечеринку с минимальным возможным значением уныния.

E1. Сумма НОК (простая версия)

Бинарный поиск Комбинаторика математика Перебор теория чисел *2300

We are sum for we are many
Some Number

Это простая версия задачи. Разница между простой и сложной версиями задачи заключается только в ограничении на \(t\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам даны два целых положительных числа \(l\) и \(r\).

Посчитайте количество уникальных троек целых чисел \((i, j, k)\) таких, что \(l \le i < j < k \le r\) и \(\operatorname{lcm}(i,j,k) \ge i + j + k\).

Здесь \(\operatorname{lcm}(i, j, k)\) означает наименьшее общее кратное (НОК) целых чисел \(i\), \(j\), и \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(\bf{1 \le t \le 5}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le 2 \cdot 10^5\), \(l + 2 \le r\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество уникальных троек целых чисел, подходящих под условия задачи.

Примечание

В первом наборе входных данных существует \(3\) подходящих тройки:

  • \((1,2,3)\),
  • \((1,3,4)\),
  • \((2,3,4)\).

Во втором наборе входных данных существует только \(1\) подходящая тройка:

  • \((3,4,5)\).

E2. Сумма НОК (сложная версия)

математика Перебор Структуры данных теория чисел *2500

We are sum for we are many
Some Number

Это сложная версия задачи. Разница между простой и сложной версиями задачи заключается только в ограничении на \(t\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам даны два целых положительных числа \(l\) и \(r\).

Посчитайте количество уникальных троек целых чисел \((i, j, k)\) таких, что \(l \le i < j < k \le r\) и \(\operatorname{lcm}(i,j,k) \ge i + j + k\).

Здесь \(\operatorname{lcm}(i, j, k)\) означает наименьшее общее кратное (НОК) целых чисел \(i\), \(j\), и \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(\bf{1 \le t \le 10^5}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le 2 \cdot 10^5\), \(l + 2 \le r\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество уникальных троек целых чисел, подходящих под условия задачи.

Примечание

В первом наборе входных данных существует \(3\) подходящих тройки:

  • \((1,2,3)\),
  • \((1,3,4)\),
  • \((2,3,4)\).

Во втором наборе входных данных существует только \(1\) подходящая тройка:

  • \((3,4,5)\).

D. Покрась вхождениями

дп жадные алгоритмы Перебор Строки Структуры данных *1600

Вам задан некоторый текст \(t\) и набор из \(n\) строк \(s_1, s_2, \dots, s_n\).

За один ход вы можете выбрать любое вхождение любой строки \(s_i\) в текст \(t\) и покрасить соответствующие символы текста в красный цвет. Например, если \(t=\texttt{bababa}\) и \(s_1=\texttt{ba}\), \(s_2=\texttt{aba}\), то за один ход можно получить \(t=\color{red}{\texttt{ba}}\texttt{baba}\), \(t=\texttt{b}\color{red}{\texttt{aba}}\texttt{ba}\) или \(t=\texttt{bab}\color{red}{\texttt{aba}}\).

Вы хотите сделать все буквы текста \(t\) красными. При повторной покраске буквы в красный цвет, она остаётся красной.

В примере выше достаточно три хода:

  • Перекрасим в красный цвет \(t[2 \dots 4]=s_2=\texttt{aba}\), получим \(t=\texttt{b}\color{red}{\texttt{aba}}\texttt{ba}\);
  • Перекрасим в красный цвет \(t[1 \dots 2]=s_1=\texttt{ba}\), получим \(t=\color{red}{\texttt{baba}}\texttt{ba}\);
  • Перекрасим в красный цвет \(t[4 \dots 6]=s_2=\texttt{aba}\), получим \(t=\color{red}{\texttt{bababa}}\).

Каждая строка \(s_i\) может применяться произвольное количество раз (или не применяться вообще). Вхождения для покраски могут пересекаться произвольным образом.

Определите, какое минимальное количество ходов надо сделать, чтобы покрасить все буквы \(t\) в красный цвет и как для этого надо совершать ходы. Если сделать все буквы текста \(t\) красными невозможно, то выведите -1.

Входные данные

Первая строка входных данных содержит целое число \(q\) (\(1 \le q \le 100\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит текст \(t\) (\(1 \le |t| \le 100\)), состоящий только из строчных латинских букв, где \(|t|\) — длина текста \(t\).

Вторая строка каждого набора содержит единственное целое число \(n\) (\(1 \le n \le 10\)) — количество строк в наборе.

Далее следует \(n\) строк, каждая из которых содержит строку \(s_i\) (\(1 \le |s_i| \le 10\)), состоящую только из строчных латинских букв, где \(|s_i|\) — длина строки \(s_i\).

Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке.

Если невозможно сделать все буквы текста красными, то выведите единственную строку, содержащую число -1.

Иначе, на первой строке выведите число \(m\) — минимальное количество ходов, которые потребуются, чтобы сделать все буквы \(t\) красными.

Затем в последующих \(m\) строках выведите пары чисел: \(w_j\) и \(p_j\) (\(1 \le j \le m\)), которые обозначают, что строка с индексом \(w_j\) была использована как подстрока для покрытия вхождения, начинающегося в тексте \(t\) с позиции \(p_j\). Пары можно выводить в любом порядке.

Если вариантов ответа несколько, выведите любой из них.

Примечание

Первый набор входных данных разобран в условии задачи.

Во втором наборе входных данных невозможно сделать все буквы текста красными.

E. Прибавление по модулю 10

математика Перебор теория чисел *1400

Вам дан массив из \(n\) целых чисел \(a_1, a_2, \dots, a_n\)

Вы можете неограниченное количество раз применять следующую операцию:

  • выбрать индекс \(i\) (\(1 \le i \le n\)) и заменить значение элемента \(a_i\) на значение \(a_i + (a_i \bmod 10)\), где \(a_i \bmod 10\) — остаток от целочисленного деления \(a_i\) на \(10\).

Для одного индекса (значения \(i\)) эту операцию можно применять многократно. Если операция применяется повторно к одному и тому же индексу, то каждый раз учитывается текущее значение \(a_i\). Например, если \(a_i=47\), то после первого применения операции получим \(a_i=47+7=54\), а после второго получим \(a_i=54+4=58\).

Проверьте, можно ли сделать все элементы массива равными в результате применения нескольких (возможно, нуля) операций.

Например, у вас есть массив \([6, 11]\).

  • Применим данную операцию к первому элементу массива. Заменим \(a_1 = 6\) на \(a_1 + (a_1 \bmod 10) = 6 + (6 \bmod 10) = 6 + 6 = 12\). Получим массив \([12, 11]\).
  • Затем применим данную операцию ко второму элементу массива. Заменим \(a_2 = 11\) на \(a_2 + (a_2 \bmod 10) = 11 + (11 \bmod 10) = 11 + 1 = 12\). Получим массив \([12, 12]\).

Таким образом, при помощи применения \(2\) операций можно сделать все элементы массива равными.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание каждого набора.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер массива.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_i\) (\(0 \le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите:

  • YES, если можно сделать все элементы массива равными;
  • NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных невозможно сделать все элементы массива равными.

В третьем наборе входных данных нужно применить данную операцию по одному разу ко всем равным \(5\) элементам.

В четвёртом наборе входных данных нужно применять данную операцию ко всем элементам, пока они не станут равными \(8\).

В пятом наборе входных данных невозможно сделать все элементы массива равными.

В шестом наборе нужно применять данную операцию ко всем элементам, пока они не станут равными \(102\).

D. Перемещение фишки

дп математика Перебор *2000

На координатной прямой лежит фишка. Изначально фишка находится в точке \(0\). Вы можете переместить фишку любое количество раз; каждый раз при перемещении ее координата увеличивается на некоторое целое положительное число (будем его называть длиной перемещения). При этом длина первого перемещения должна делиться на \(k\), длина второго — на \(k+1\), длина третьего — на \(k+2\), и так далее.

Например, если \(k=2\), то последовательность перемещений может выглядеть следующим образом: \(0 \rightarrow 4 \rightarrow 7 \rightarrow 19 \rightarrow 44\), т.  к. \(4 - 0 = 4\) делится на \(2 = k\), \(7 - 4 = 3\) делится на \(3 = k + 1\), \(19 - 7 = 12\) делится на \(4 = k + 2\), \(44 - 19 = 25\) делится на \(5 = k + 3\).

Вам дано два целых положительных числа \(n\) и \(k\). Ваша задача — посчитать количество способов попасть в точку \(x\), начиная из точки \(0\), для всех \(x \in [1, n]\). Количество способов может быть очень большим, поэтому выведите его по модулю \(998244353\). Два способа считаются различными, если они отличаются как наборы посещенных позиций.

Входные данные

Единственная строка содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)).

Выходные данные

Выведите \(n\) целых чисел — количество способов попасть из \(0\) в точку \(x\) для всех \(x \in [1, n]\), взятое по модулю \(998244353\).

Примечание

Рассмотрим способы в первом примере:

Способы попасть в точку \(1\): \([0, 1]\);

Способы попасть в точку \(2\): \([0, 2]\);

Способы попасть в точку \(3\): \([0, 1, 3]\), \([0, 3]\);

Способы попасть в точку \(4\): \([0, 2, 4]\), \([0, 4]\);

Способы попасть в точку \(5\): \([0, 1, 5]\), \([0, 3, 5]\), \([0, 5]\);

Способы попасть в точку \(6\): \([0, 1, 3, 6]\), \([0, 2, 6]\), \([0, 4, 6]\), \([0, 6]\);

Способы попасть в точку \(7\): \([0, 2, 4, 7]\), \([0, 1, 7]\), \([0, 3, 7]\), \([0, 5, 7]\), \([0, 7]\);

Способы попасть в точку \(8\): \([0, 3, 5, 8]\), \([0, 1, 5, 8]\), \([0, 2, 8]\), \([0, 4, 8]\), \([0, 6, 8]\), \([0, 8]\).

A. Телефонный код

*особая задача Перебор реализация *800

У Поликарпа есть n друзей в городе Тарасове. Поликарп знает телефонные номера всех друзей: это строки s1, s2, ..., sn. Все эти строки состоят только из цифр и имеют одинаковую длину.

Однажды Поликарпу понадобилось узнать телефонный код города Тарасова. Он предположил, что кодом города является наидлиннейший общий префикс всех телефонных номеров его друзей. Другими словами, это максимальная по длине строка c, которая является префиксом (началом) каждой строки si для всех i (1 ≤ i ≤ n). Помогите Поликарпу определить длину кода города.

Входные данные

В первой строке входных данных записано целое число n (2 ≤ n ≤ 3·104) — количество друзей Поликарпа. Далее следует n строк s1, s2, ..., sn — номера друзей Поликарпа. Гарантируется, что все строки состоят только из цифр и имеют одинаковую длину от 1 до 20, включительно. Также гарантируется, что все строки различны.

Выходные данные

Выведите количество цифр в искомом коде города.

Примечание

Префиксом строки t называется строка, полученная удалением нуля или более цифр из конца строки t. Например, строка «00209» имеет 6 префиксов: «» (пустой префикс), «0», «00», «002», «0020», «00209».

В первом примере кодом города является строка «00».

Во втором примере кодом города является пустая строка.

В третьем примере кодом города является строка «770123456789».

B. Интересная сумма

жадные алгоритмы математика Перебор сортировки Структуры данных *800

Дан массив \(a\) длины \(n\). Вы можете выбрать любой подотрезок \(a_l, a_{l + 1}, \ldots, a_r\) массива длины, не совпадающий со всем массивом, то есть, для которого \(1 \le l \le r \le n\) и \(r - l + 1 < n\). Красотой выбранного подоторезка назовем значение

\(\)\max(a_{1}, a_{2}, \ldots, a_{l-1}, a_{r+1}, a_{r+2}, \ldots, a_{n}) - \min(a_{1}, a_{2}, \ldots, a_{l-1}, a_{r+1}, a_{r+2}, \ldots, a_{n}) + \max(a_{l}, \ldots, a_{r}) - \min(a_{l}, \ldots, a_{r}).\(\)

Найдите максимальную красоту подотрезка среди всех возможных допустимых подотрезков массива (за исключением всего массива).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) \((4 \leq n \leq 10^5)\) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_{i} \leq 10^9\)) — элементы данного массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — искомое максимальное значение красоты.

Примечание

В первом тесте из условия оптимально выбрать отрезок \(l = 7\), \(r = 8\). Красота этого отрезка равна \((6 - 1) + (5 - 1) = 9\).

Во втором тесте из условия оптимально выбрать отрезок \(l = 2\), \(r = 4\). Красота этого отрезка равна \((100 - 2) + (200 - 1) = 297\).

D1. Xor-подпоследовательность (простая версия)

битмаски Деревья дп Перебор Строки *1800

Это простая версия задачи. Единственное различие состоит в том, что в этой версии \(a_i \le 200\).

Дан массив из \(n\) целых чисел \(a_0, a_1, a_2, \ldots a_{n - 1}\). Бряп захотел найти в данном массиве самую длинную хорошую подпоследовательность.

Массив \(b = [b_0, b_1, \ldots, b_{m-1}]\), где \(0 \le b_0 < b_1 < \ldots < b_{m - 1} < n\), будем называть подпоследовательностью длины \(m\) массива \(a\).

Подпоследовательность \(b = [b_0, b_1, \ldots, b_{m-1}]\) длины \(m\) называется хорошей, если выполняется следующее условие:

  • Для любого целого числа \(p\) (\(0 \le p < m - 1\)) выполняется условие: \(a_{b_p} \oplus b_{p+1} < a_{b_{p+1}} \oplus b_p\).

Здесь \(a \oplus b\) обозначает побитовое исключающее ИЛИ чисел \(a\) и \(b\). Например, \(2 \oplus 4 = 6\), а \(3 \oplus 1=2\).

Так как Бряп не очень любознательная персона, он хочет знать лишь длину такой подпоследовательности. Помогите ему найти ответ на данную задачу.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \leq n \leq 3 \cdot 10^5\)) — длина массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_0,a_1,...,a_{n-1}\) (\(0 \leq a_i \leq 200\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных единственное число — максимальную длину хорошей подпоследовательности.

Примечание

В первом наборе входных данных в качестве подпоследовательности мы можем выбрать оба элемента массива, так как \(1 \oplus 1 < 2 \oplus 0\).

Во втором наборе входных данных мы можем взять элементы с индексами \(1\), \(2\) и \(4\)\(0\)-нумерации). Для них выполняется: \(2 \oplus 2 < 4 \oplus 1\) и \(4 \oplus 4 < 1 \oplus 2\).

F. Уменьшение паросочетания

графы интерактив Конструктив Паросочетания Перебор поиск в глубину и подобное Потоки *2800

Дан двудольный граф с \(n_1\) вершинами в первой доле, \(n_2\) вершинами во второй доле и \(m\) ребрами. Максимальное паросочетание в таком графе — максимальный по размеру набор ребер, такой, что ни одна вершина не инцидентна более чем одному выбранному ребру.

Вам нужно обрабатывать запросы двух видов к этому графу:

  • \(1\) — удалить минимально возможное количество вершин так, чтобы размер максимального паросочетания уменьшился ровно на \(1\), и вывести список удаленных вершин. Затем найти любое максимальное паросочетание в полученном графе и вывести сумму номеров ребер, входящих в это паросочетание;
  • \(2\) — запрос этого типа может быть задан только после запроса типа \(1\). В качестве ответа на этот запрос вы должны вывести список номеров ребер, входящих в выбранное в предыдущем запросе паросочетание.

Обратите внимание, что вы должны решить эту задачу в режиме online. Это означает, что вы не можете считать все входные данные сразу. Вы можете считать каждый запрос только после вывода ответа на последний запрос. Используйте функции fflush в C++ и BufferedWriter.flush в Java после каждого вывода в вашей программе.

Входные данные

В первой строке заданы четыре целых числа \(n_1\), \(n_2\), \(m\) и \(q\) (\(1 \le n_1, n_2 \le 2 \cdot 10^5\); \(1 \le m \le \min(n_1 \cdot n_2, 2 \cdot 10^5)\); \(1 \le q \le 2 \cdot 10^5\)).

Затем следуют \(m\) строк. В \(i\)-й из них заданы два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le n_1\); \(1 \le y_i \le n_2\)), обозначающих, что \(i\)-е ребро соединяет вершину \(x_i\) в первой доле с вершиной \(y_i\) во второй доле. Ни одна пара вершин не соединена более чем одним ребром.

Затем следуют \(q\) строк. В \(i\)-й из них задано одно целое число — \(1\) или \(2\) — обозначающее \(i\)-й запрос. Дополнительные ограничения на запросы:

  • количество запросов типа \(1\) не превысит размер максимального паросочетания в исходном графе;
  • количество запросов типа \(2\) не превысит \(3\);
  • каждому запросу типа \(2\) предшествует запрос типа \(1\);
  • ваше решение может считать \(i\)-й запрос только после того, как выведет ответ на запрос \((i-1)\) и сбросит буфер вывода.
Выходные данные

Для запроса типа \(1\) выведите три строки:

  • в первой строке выведите количество удаляемых вершин;
  • во второй строке выведите список вершин, которые вы удаляете, следующим образом: если вы удаляете вершину \(x\) из первой доли, выведите \(x\); если вы удаляете вершину \(y\) из второй доли, выведите \(-y\) (номер со знаком минус);
  • в третьей строке выведите сумму номеров ребер, которые принадлежат некоторому максимальному паросочетанию. Ребра нумеруются от \(1\) до \(m\).

Для запроса типа \(2\) выведите две строки:

  • в первой строке выведите одно число — размер максимального паросочетания;
  • во второй строке выведите номера ребер, формирующих максимальное паросочетание. Обратите внимание, что сумма этих номеров должна быть равна числу, которое вы вывели в конце предыдущего запроса типа \(1\);

После вывода ответа на запрос не забудьте сбросить буфер вывода.

Протокол взаимодействия

В этой задаче вы можете получить вердикт «Решение зависло», так как ее нужно решать в режиме online. Если это случилось, то либо вы не следуете формату вывода, либо нарушаете какое-то из ограничений задачи. Вы можете считать, что это эквивалентно вердикту «Неправильный ответ».

Для вашего удобства в примере из условия вывод для запросов разделен строкой ===. Ваше решение не должно выводить эту строку; она добавлена только для того, чтобы было проще понять, где ответ на какой запрос.

E. Считаем прямоугольники

дп Перебор реализация Структуры данных *1600

У вас есть \(n\) прямоугольников, \(i\)-й из них имеет высоту \(h_i\) и ширину \(w_i\).

Вам надо ответить на \(q\) запросов, которые задаются четырьмя числами: \(h_s \ w_s \ h_b \ w_b\).

Для каждого запроса выведите суммарную площадь всех таких прямоугольников, которые могут вместить в себя прямоугольник с высотой \(h_s\) и шириной \(w_s\) и при этом сами вмещаются в прямоугольник с высотой \(h_b\) и шириной \(w_b\). Иными словами, выведите \(\sum h_i \cdot w_i\) по всем \(i\), что \(h_s < h_i < h_b\) и \(w_s < w_i < w_b\).

Обратите внимание, что если у прямоугольников одинаковая ширина или высота, то ни один из них не может вместить в себя другой. Также обратите внимание, что вы не можете вращать прямоугольники.

Обратите внимание, что для некоторых наборов входных данных ответ не будет помещаться в 32-х битных целочисленный тип, вы должны использовать 64-битный целочисленный тип вашего языка (например, long long в C++).

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n, q\) (\(1 \leq n \leq 10^5\); \(1 \leq q \leq 10^5\)) — количество прямоугольников и количество запросов.

Затем следуют \(n\) строк, каждая содержит два целых числа \(h_i, w_i\) (\(1 \leq h_i, w_i \leq 1000\)) — высоту и ширину \(i\)-го прямоугольника.

Затем в \(q\) строках заданы запросы, каждая строка содержит четыре целых числа \(h_s, w_s, h_b, w_b\) (\(1 \leq h_s < h_b,\ w_s < w_b \leq 1000\)) — описание запроса.

Сумма значений \(q\) по всем набора входных данных не превосходит \(10^5\). Сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк, \(i\)-я должна содержать ответ на \(i\)-й запрос.

Примечание

В первом наборе входных данных только один запрос. Нам надо найти сумму площадей всех прямоугольников, которые вмещают прямоугольник \(1 \times 1\) и сами вмещаются в прямоугольник \(3 \times 4\).

Нам подходит только прямоугольник \(2 \times 3\), так как \(1 < 2\) (сравниваем высоты) и \(1 < 3\) (сравниваем ширины), то \(1 \times 1\) помещается в него. Аналогично, \(2 < 3\) (сравниваем высоты) и \(3 < 4\) (сравниваем ширины), то есть он помещается в \(3 \times 4\).

Прямоугольник \(3 \times 2\) слишком высок, чтобы поместиться в \(3 \times 4\) rectangle.

Суммарная площадь в ответа равна \(2 \cdot 3 = 6\).

D. Разделение рёбер

графы Деревья Конструктив Перебор поиск в глубину и подобное снм Теория вероятностей *2000

Вам дан связный, неориентированный и невзвешенный граф с \(n\) вершинами и \(m\) рёбрами. Обратите внимание на ограничение на количество рёбер: \(m \le n + 2\).

Давайте скажем, что мы красим некоторые рёбра в красный и оставшиеся рёбра в синий. Теперь рассмотрим только красные рёбра и посчитаем количество компонент связности в графе. Пусть это значение равно \(c_1\). Аналогично, рассмотрим только синие рёбра и посчитаем количество компонент связности в графе. Пусть это значение равно \(c_2\).

Найдите распределение цветов по рёбрам такое, что величина \(c_1+c_2\) минимальна.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\); \(n-1 \leq m \leq \min{\left(n+2,\frac{n \cdot (n-1)}{2}\right)}\)) — количество вершин и рёбер в графе соответственно.

Затем следуют \(m\) строк. \(i\)-я строка содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i,v_i \le n\), \(u_i \ne v_i\)) обозначающая, что \(i\)-е ребро соединяет вершины \(u_i\) и \(v_i\). Гарантируется, что в графе нет петель и кратных рёбер. Также гарантируется, что граф связен.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\). Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите бинарную строку длины \(m\). \(i\)-й символ строки должен быть 1, если \(i\)-е ребро должно иметь красный цвет, и 0, если оно должно иметь синий цвет. Если существует несколько способов распределить цвета, чтобы получить минимальную величину, вы можете вывести любой.

Примечание
  • Граф в первом наборе входных данных следующий:

    \(c_1 + c_2 = 1 + 2 = 3\)

  • Граф во втором наборе входных данных следующий:

    \(c_1 + c_2 = 2 + 2 = 4\)

A. Разноцветные шары: перезагрузка

жадные алгоритмы Перебор реализация сортировки *800

Название — это отсылка на самый первый Educational Round нашего авторского коллектива, Educational Round 18.

Есть мешок, в котором лежат разноцветные шары. Всего есть \(n\) различных цветов шаров, пронумерованные от \(1\) до \(n\). В мешке лежат \(\mathit{cnt}_i\) шаров цвета \(i\). Суммарное количество шаров в мешке нечетное (т. е. \(\mathit{cnt}_1 + \mathit{cnt}_2 + \dots + \mathit{cnt}_n\) нечетное).

За один ход можно выбрать два шара разных цветов и вынуть их из мешка.

В какой-то момент все оставшиеся в мешке шары станут одного цвета. Тогда вы больше не можете делать ходы.

Найдите любой возможный цвет оставшихся шаров.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 20\)) — количество цветов.

Во второй строке записаны \(n\) целых чисел \(\mathit{cnt}_1, \mathit{cnt}_2, \dots, \mathit{cnt}_n\) (\(1 \le \mathit{cnt}_i \le 100\)) — количество шаров каждого цвета в мешке.

Суммарное количество шаров в мешке нечетное (т. е. \(\mathit{cnt}_1 + \mathit{cnt}_2 + \dots + \mathit{cnt}_n\) нечетное).

Выходные данные

На каждый набор входных данных выведите одно целое число — любой возможный цвет оставшихся шаров после того как вы сделали какие-либо ходы и больше не можете делать ходы.

Примечание

В первом наборе входных данных ваш первый и единственный ход может быть одним из следующих:

  • возьмем шары с цветами \(1\) и \(2\);
  • возьмем шары с цветами \(1\) и \(3\);
  • возьмем шары с цветами \(2\) и \(3\).

После хода останется ровно один шар. Его цвет может быть \(3, 2\) или \(1\) в зависимости от хода.

Во втором наборе не получится сделать ход вообще — есть всего один цвет шаров. Этот цвет \(1\).

В третьем примере можно удалять один шар цвета \(1\) и один шар цвета \(2\), пока не закончатся шары цвета \(1\). В конце останутся три шара цвета \(2\).

E. Красно-черный перец

жадные алгоритмы математика Перебор Структуры данных теория чисел *2300

Монокарп собирается устроить вечеринку для своих друзей. Он приготовил \(n\) блюд и уже собирается их подать. Сначала он должен добавить в них молотый перец — иначе блюда будут совсем безвкусными.

У \(i\)-го блюда есть два значения \(a_i\) и \(b_i\) — его вкусность, если добавить красный или черный перец, соответственно. Монокарп не будет добавлять оба перца ни в какое блюдо, не будет добавлять перец несколько раз и не оставит ни одно блюдо без перца.

До того как добавить перец, Монокарп должен купить этот самый перец в магазине. У него есть неподалеку \(m\) магазинов. В \(j\)-м из них продаются упаковки красного перца, которых хватает на \(x_j\) порций, и упаковки черного перца, которых хватает на \(y_j\) порций.

Монокарп идет ровно в один магазин, покупает несколько (возможно, ноль) упаковок каждого перца таким образом, чтобы добавить в каждое блюдо перец ровно один раз и чтобы перца не осталось. Более формально, если он покупает \(x\) упаковок красного перца и \(y\) упаковок черного перца, то \(x\) и \(y\) должны быть неотрицательными, а \(x \cdot x_j + y \cdot y_j\) должно быть равно \(n\).

Для каждого магазина определите максимальную суммарную вкусность блюд, после того как Монокарп купит упаковки перца только в этом магазине и добавит перец в блюда. Если невозможно купить упаковки описанным образом, то выведите -1.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество блюд.

В \(i\)-й из следующих \(n\) строк записаны два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^9\)) — вкусность \(i\)-го блюда, если добавить красный или черный перец, соответственно.

В следующей строке записано одно целое число \(m\) (\(1 \le m \le 3 \cdot 10^5\)) — количество магазинов.

В \(j\)-й из следующих \(m\) строк записаны два целых числа \(x_j\) и \(y_j\) (\(1 \le x_j, y_j \le n\)) — количество порций, на которое хватает упаковки красного и черного перца в \(j\)-м магазине, соответственно.

Выходные данные

Выведите \(m\) целых чисел. Для каждого магазина выведите максимальную суммарную вкусность блюд, после того как Монокарп купит упаковки перца только в этом магазине и добавит перец в блюда. Если невозможно купить упаковки так, чтобы в каждое блюдо добавить перец один раз и чтобы перца не осталось, то выведите -1.

Примечание

Рассмотрим первый пример.

В первом магазина Монокарп может купить только \(0\) упаковок красного перца и \(1\) упаковку черного перца. Если добавить черный перец во все блюда, то получится \(10 + 50 + 2 = 62\).

Во втором магазине Монокарп может купить любое количество упаковок красного и черного перца: \(0\) и \(3\), \(1\) и \(2\), \(2\) и \(1\) или \(3\) и \(0\). Лучшим выбором оказывается либо \(1\) и \(2\), либо \(2\) и \(1\). Монокарп может добавить черный перец в первое блюдо, красный перец во второе блюдо и любой перец в третье блюдо, сумма равна \(10 + 100 + 2 = 112\).

В третьем магазине Монокарп может купить только \(1\) упаковку красного перца и \(0\) упаковок черного перца. Если добавить красный перец во все блюда, то получится \(5 + 100 + 2 = 107\).

В четвертом магазине Монокарп может купить только четное суммарное количество упаковок. Так как \(n\) нечетное, невозможно купить ровно \(n\) упаковок. Поэтому ответ равен \(-1\).

G. Освещение

Бинарный поиск битмаски дп Комбинаторика математика Перебор *2700

Рассмотрим отрезок \([0, d]\) координатной прямой. В этом отрезке \(n\) фонарей и \(m\) интересных точек.

Для каждого фонаря вы должны выбрать его мощность — целое число от \(0\) до \(d\) (включительно). Фонарь с координатой \(x\) освещает интересную точку с координатой \(y\), если \(|x - y|\) меньше либо равно мощности фонаря.

Способ выбрать мощности для всех фонарей является корректным, если каждая интересная точка освещена хотя бы одним фонарем.

Вам нужно обработать \(q\) запросов. Каждый запрос обозначается одним целым числом \(f_i\). Чтобы ответить на \(i\)-й запрос, вам нужно:

  • добавить фонарь в точку \(f_i\);
  • посчитать количество корректных способов назначить мощность каждому фонарю, и вывести это количество по модулю \(998244353\);
  • удалить только что добавленный фонарь.
Входные данные

В первой строке заданы три целых числа \(d\), \(n\) и \(m\) (\(4 \le d \le 3 \cdot 10^5\); \(1 \le n \le 2 \cdot 10^5\); \(1 \le m \le 16\)) — размер отрезка, количество фонарей и количество интересных точек, соответственно.

Во второй строке заданы \(n\) целых чисел \(l_1, l_2, \dots, l_n\) (\(1 \le l_i \le d - 1\)), где \(l_i\) — координата \(i\)-го фонаря.

В третьей строке заданы \(m\) целых чисел \(p_1, p_2, \dots, p_m\) (\(1 \le p_i \le d - 1\)), где \(p_i\) — координата \(i\)-й интересной точки.

В четвертой строке задано одно целое число \(q\) (\(1 \le q \le 5 \cdot 10^5\)) — количество запросов.

В пятой строке заданы \(q\) целых чисел \(f_1, f_2, \dots, f_q\) (\(1 \le f_i \le d - 1\)), где \(f_i\) — число, соответствующее \(i\)-му запросу.

Дополнительное ограничение на входные данные: при обработке каждого запроса ни в какой точке отрезка нету двух или более объектов (то есть не может быть ни двух фонарей с одинаковой координатой, ни двух интересных точек с одинаковой координатой, ни фонаря и интересной точки с одинаковой координатой).

Выходные данные

Для каждого запроса выведите ответ на него по модулю \(998244353\).

C. Максимум на спирали

дп Перебор *1900

Рассмотрим квадрат k × k, разделенный на единичные квадратики, причем k ≥ 3 и нечетно. Начиная от левой верхней клетки, будем красить клетки в следующем порядке: двигаемся сначала вправо, затем вниз, затем влево, затем вверх, затем опять вправо и так далее. При этом движение в одном направлении заканчиваем в одном из двух случаев: мы добрались до стенки квадрата, или следующая после следующей клетки уже покрашена. Всю покраску заканчиваем, если при движении в любом из направлений, не удается закрасить ни одной клетки. Фигуру, состоящую из закрашенных клеток, назовем спиралью.

Примеры спиралей для k = 3, 5, 7, 9 можно видеть на рисунке.

Имеется таблица n × m, в каждой ячейке которой находится число. Рассмотрим всевозможные спирали, образованные ячейками таблицы. Это означает, что мы рассматриваем спирали всевозможных размеров, которые не выходят за границы таблицы. Для каждой из спиралей найдем сумму чисел ячеек, из которых она образована. От вас требуется найти максимум из всех этих значений среди всех спиралей.

Входные данные

В первой строке записаны два целых числа n и m (3 ≤ n, m ≤ 500) — размеры таблицы.

В следующих n строках записано по m целых чисел, разделенных пробелами: j-ое число в i-ой строке aij ( - 1000 ≤ aij ≤ 1000) — число, записанное в j-ой ячейке i-ой строки таблицы.

Выходные данные

Выведите одно число — максимальную сумму чисел среди всех спиралей.

Примечание

В первом тестовом примере спираль с максимальной суммой будет покрывать все единички таблицы.

Во втором примере спираль может покрыть только шесть единичек.

C. Четные подмассивы

битмаски математика Перебор теория чисел хэши *1700

Вам задан целочисленный массив \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)).

Определите количество подмассивов \(a\), у которых \(\operatorname{XOR}\) имеет четное количество делителей. Другими словами, определите количество пар индексов \((i, j)\) (\(i \le j\)) таких, что \(a_i \oplus a_{i + 1} \oplus \dots \oplus a_j\) имеет четное количество делителей.

Например, числа \(2\), \(3\), \(5\) или \(6\) имеют четное количество делителей, а \(1\) и \(4\) — нечетное. Считайте, что для данной задачи \(0\) имеет нечетное количество делителей.

Здесь \(\operatorname{XOR}\) (или \(\oplus\)) обозначает операцию побитового исключающего ИЛИ.

Выведите количество подмассивов, но умноженное на 2022... Так, давайте закончим. Просто выведите сам ответ.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных задано одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — длина массива \(a\).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)).

Гарантируется, что сумма \(n\) по всем набора входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество подмассивов, \(\operatorname{XOR}\) которых имеет четное количество делителей.

Примечание

В первом наборе входных данных есть \(4\) подмассива, \(\operatorname{XOR}\) которых имеет четное количество делителей: \([3]\), \([3,1]\), \([1,2]\), \([2]\).

Во втором наборе есть \(11\) подмассивов, \(\operatorname{XOR}\) которых имеет четное количество делителей: \([4,2]\), \([4,2,1]\), \([4,2,1,5]\), \([2]\), \([2,1]\), \([2,1,5]\), \([2,1,5,3]\), \([1,5,3]\), \([5]\), \([5,3]\), \([3]\).

В третьем наборе нет подмассивов, \(\operatorname{XOR}\) которых имеет четное количество делителей, так как \(\operatorname{XOR}\) любого подмассива равен либо \(4\), либо \(0\).

D. Новая карта Valiant

Бинарный поиск дп Перебор Структуры данных *1700

Разработчик игр «DbZ Games» хочет добавить еще одну карту в свою популярную игру «Valiant». В этот раз карта под именем «Panvel» будет сделана на основе города Мумбаи.

Мумбаи можно представить как \(n \times m\) клеточное поле. В каждой клетке \((i, j)\) (\(1 \le i \le n\); \(1 \le j \le m\)) поля расположено здание в форме параллелепипеда высотой \(a_{i,j}\).

В этот раз DbZ Games хотят создать карту с идеальным вертикальным геймплеем. Для этого им нужно выбрать квадрат \(l \times l\) в Мумбаи такой, что каждое здание в этом квадрате имеет высоту хотя бы \(l\).

Можете ли вы помочь DbZ Games найти соответствующий квадрат наибольшего размера \(l\)?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных заданы два положительных целых числа \(n\) и \(m\) (\(1 \le n \le m\); \(1 \leq n \cdot m \leq 10^6\)).

В \(i\)-й из следующих \(n\) строк заданы \(m\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,m}\) (\(1 \leq a_{i,j} \leq 10^6\)) — высоты зданий в \(i\)-м ряду.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно число — наибольший размер \(l\) квадрата, который может выбрать DbZ Games.

Примечание

В первом наборе входных данных мы можем выбрать квадрат со стороной \(l = 2\) (т. е. все поле), так как высоты всех зданий больше или равны \(2\).

Во втором наборе мы можем выбрать сторону квадрата только как \(1\), а потому ответ равен \(1\).

В третьем наборе на поле нет квадратов со стороной \(2\), в которых все здания не ниже \(2\), а потому ответ равен \(1\).

F. Сумма функций

бпф дп Комбинаторика математика Перебор *2500

Предположим, вам задан целочисленный массив \(a_1, a_2, \dots, a_n\).

Пусть \(\operatorname{lsl}(i)\) равно количеству индексов \(j\) (\(1 \le j < i\)) таких, что \(a_j < a_i\).

Аналогично, пусть \(\operatorname{grr}(i)\) равно количеству индексов \(j\) (\(i < j \le n\)) таких, что \(a_j > a_i\).

Назовем позицию \(i\) в массиве \(a\) хорошей, если \(\operatorname{lsl}(i) < \operatorname{grr}(i)\).

Наконец, определим функцию \(f\) на массиве \(a\) \(f(a)\) как сумму всех \(a_i\) таких, что \(i\) — хорошая в \(a\).

Для заданных целых чисел \(n\) и \(k\), посчитайте сумму \(f(a)\) по всем массивам \(a\) размера \(n\) таких, что \(1 \leq a_i \leq k\) для всех \(1 \leq i \leq n\), по модулю \(998\,244\,353\).

Входные данные

В первой и единственной строке заданы два целых числа \(n\) и \(k\) (\(1 \leq n \leq 50\); \(2 \leq k < 998\,244\,353\)).

Выходные данные

Выведите единственное число — сумму \(f\) по всем массивам \(a\) размера \(n\) по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных:

\(f([1,1,1]) = 0\)\(f([2,2,3]) = 2 + 2 = 4\)
\(f([1,1,2]) = 1 + 1 = 2\)\(f([2,3,1]) = 2\)
\(f([1,1,3]) = 1 + 1 = 2\)\(f([2,3,2]) = 2\)
\(f([1,2,1]) = 1\)\(f([2,3,3]) = 2\)
\(f([1,2,2]) = 1\)\(f([3,1,1]) = 0\)
\(f([1,2,3]) = 1\)\(f([3,1,2]) = 1\)
\(f([1,3,1]) = 1\)\(f([3,1,3]) = 1\)
\(f([1,3,2]) = 1\)\(f([3,2,1]) = 0\)
\(f([1,3,3]) = 1\)\(f([3,2,2]) = 0\)
\(f([2,1,1]) = 0\)\(f([3,2,3]) = 2\)
\(f([2,1,2]) = 1\)\(f([3,3,1]) = 0\)
\(f([2,1,3]) = 2 + 1 = 3\)\(f([3,3,2]) = 0\)
\(f([2,2,1]) = 0\)\(f([3,3,3]) = 0\)
\(f([2,2,2]) = 0\)

Сложив все значения, получаем ответ, равный \(28\).

A. Bestie

Комбинаторика Конструктив математика Перебор реализация теория чисел *1000

Вам дан массив \(a\), состоящий из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Друзья попросили вас сделать наибольший общий делитель (НОД) всех элементов массива равным \(1\). За одну операцию вы можете сделать следующее:

  • Выбрать произвольный индекс в массиве \(1 \leq i \leq n\);
  • Сделать \(a_i = \gcd(a_i, i)\), где \(\gcd(x, y)\) обозначает НОД чисел \(x\) и \(y\). Стоимость такой операции равна \(n - i + 1\).

Вам нужно найти минимальную суммарную стоимость операций, которые нужно сделать, чтобы НОД всех элементов массива стал равен \(1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 5\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 20\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальную суммарную стоимость операций, которые нужно сделать, чтобы НОД всех элементов массива стал равен \(1\).

Можно показать, что это всегда можно сделать.

Примечание

В первом наборе входных данных НОД всего массива уже равен \(1\), поэтому операции применять не нужно.

Во втором наборе входных данных можно выбрать \(i = 1\). После этой операции \(a_1 = \gcd(2, 1) = 1\). Стоимость этой операции равна \(1\).

В третьем наборе входных данных можно выбрать \(i = 1\), после этого массив \(a\) будет равен \([1, 4]\). НОД этого массива равен \(1\), а суммарная стоимость равна \(2\).

В четвертом наборе входных данных можно выбрать \(i = 2\), после этого массив \(a\) будет равен \([3, 2, 9]\). НОД этого массива равен \(1\), а суммарная стоимость равна \(2\).

В шестом наборе входных данных можно выбрать \(i = 4\) и \(i = 5\), после этого массив \(a\) будет равен \([120, 60, 80, 4, 5]\). НОД этого массива равен \(1\), а суммарная стоимость равна \(3\).

B. Угу

дп жадные алгоритмы Перебор реализация *900

Бинарной строкой называется строка, состоящая только из символов 0 и 1. Вам дана бинарная строка \(s_1 s_2 \ldots s_n\). Нужно сделать эту строку неубывающей за наименьшее количество операций. Иными словами, каждый символ должен быть не меньше предыдущего. За одну операцию вы можете сделать следующее:

  • Выбрать произвольный индекс в строке \(1 \leq i \leq n\);
  • Для всех \(j \geq i\) поменять значение в \(j\)-й позиции на противоположное, то есть если \(s_j = 1\), то сделать \(s_j = 0\), и наоборот.

За какое минимальное количество операций можно сделать строку неубывающей?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 10^5\)) — длину строки.

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество операций, которое потребуется сделать, чтобы сделать строку неубывающей.

Примечание

В первом наборе входных данных строка уже неубывающая.

Во втором наборе входных данных можно выбрать \(i = 1\), и после этого \(s = \mathtt{01}\).

В третьем наборе входных данных можно выбрать \(i = 1\) и получить \(s = \mathtt{010}\), а после этого выбрать \(i = 2\). В результате получим \(s = \mathtt{001}\), то есть неубывающую строку.

В шестом наборе входных данных можно на первой итерации выбрать \(i = 5\) и получить \(s = \mathtt{100001}\). Затем выбрать \(i = 2\), тогда \(s = \mathtt{111110}\). Дальше выбираем \(i = 1\), и получаем неубывающую строку \(s = \mathtt{000001}\).

C2. Шейх (сложная версия)

Бинарный поиск битмаски жадные алгоритмы Перебор реализация *2100

Это сложная версия задачи. Единственное различие состоит в том, что в этой версии \(q = n\).

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\).

Стоимостью подотрезка массива \([l, r]\), \(1 \leq l \leq r \leq n\), назовем величину \(f(l, r) = \operatorname{sum}(l, r) - \operatorname{xor}(l, r)\), где \(\operatorname{sum}(l, r) = a_l + a_{l+1} + \ldots + a_r\), а \(\operatorname{xor}(l, r) = a_l \oplus a_{l+1} \oplus \ldots \oplus a_r\) (\(\oplus\) обозначает побитовое исключающее ИЛИ).

У вас будет \(q\) запросов. Каждый запрос задается парой чисел \(L_i\), \(R_i\), где \(1 \leq L_i \leq R_i \leq n\). Вам нужно найти подотрезок \([l, r]\), \(L_i \leq l \leq r \leq R_i\) с максимальным значением \(f(l, r)\). Если ответов несколько, то среди них нужно найти подотрезок с минимальной длиной, то есть минимальным значением \(r - l + 1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \leq n \leq 10^5\), \(q = n\)) — длину массива и количество запросов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — элементы массива.

\(i\)-я из следующих \(q\) строк каждого набора входных данных содержит два целых числа \(L_i\) и \(R_i\) (\(1 \leq L_i \leq R_i \leq n\)) — границы, в которых нужно найти отрезок.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Гарантируется, что \(L_1 = 1\) и \(R_1 = n\).

Выходные данные

Для каждого набора входных данных выведите \(q\) пар чисел \(L_i \leq l \leq r \leq R_i\), таких что значение \(f(l, r)\) максимально, а среди таких длина \(r - l + 1\) минимальна. Если существует несколько правильных ответов, выведите любой из них.

Примечание

Во всех наборах входных данных рассматривается первый запрос.

В первом наборе входных данных \(f(1, 1) = 0 - 0 = 0\).

Во втором наборе входных данных \(f(1, 1) = 5 - 5 = 0\), \(f(2, 2) = 10 - 10 = 0\). Заметим, что \(f(1, 2) = (10 + 5) - (10 \oplus 5) = 0\), но нам среди максимальных значений \(f(l, r)\) нужно найти подотрезок с минимальной длиной. Поэтому правильными ответами будут только отрезки \([1, 1]\) и \([2, 2]\).

В четвертом наборе входных данных \(f(2, 3) = (12 + 8) - (12 \oplus 8) = 16\).

В пятом наборе входных данных есть два правильных ответа, так как \(f(2, 3) = f(3, 4)\) и их длины равны.

D1. Баланс (простая версия)

Перебор реализация Структуры данных теория чисел *1500

Это простая версия задачи. Единственное различие состоит в том, что в этой версии нет запросов удаления.

Изначально у вас есть множество, содержащее единственный элемент — \(0\). Вам нужно обработать \(q\) запросов следующих видов:

  • + \(x\) — добавить целое число \(x\) в множество. Гарантируется, что это число не принадлежит множеству до этого запроса;
  • ? \(k\) — найти \(k\text{-mex}\) множества.

В нашей задаче мы определяем \(k\text{-mex}\) множества целых чисел как наименьшее неотрицательное целое число \(x\), которое делится на \(k\) и которого нет в множестве.

Входные данные

В первой строке находится целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество запросов.

В следующих \(q\) строках находится описание запросов.

Запрос добавления числа \(x\) описывается как + \(x\) (\(1 \leq x \leq 10^{18}\)). Гарантируется, что число \(x\) не принадлежит множеству.

Запрос нахождения \(k\text{-mex}\) описывается как ? \(k\) (\(1 \leq k \leq 10^{18}\)).

Гарантируется, что хотя бы один запрос имеет тип ?.

Выходные данные

Для каждого запроса типа ? выведите единственное целое число — \(k\text{-mex}\) множества.

Примечание

В первом примере:

После первого и второго запроса в множестве будут элементы \(\{0, 1, 2\}\). Наименьшее неотрицательное число, которое делится на \(1\) и которого нет в множества, равно \(3\).

После четвертого запроса в множестве будут элементы \(\{0, 1, 2, 4\}\). Наименьшее неотрицательное число, которое делится на \(2\) и которого нет в множества, равно \(6\).

Во втором примере:

  • Изначально множество содержит только элемент \(\{0\}\).
  • После добавления числа \(100\) множество содержит элементы \(\{0, 100\}\).
  • \(100\text{-mex}\) множества равен \(200\).
  • После добавления числа \(200\) множество содержит элементы \(\{0, 100, 200\}\).
  • \(100\text{-mex}\) множества равен \(300\).
  • После добавления числа \(50\) множество содержит элементы \(\{0, 50, 100, 200\}\).
  • \(50\text{-mex}\) множества равен \(150\).

D2. Баланс (сложная версия)

Перебор Структуры данных теория чисел *2400

Это сложная версия задачи. Единственное различие состоит в том, что в этой версии есть запросы удаления.

Изначально у вас есть множество, содержащее единственный элемент — \(0\). Вам нужно обработать \(q\) запросов следующих видов:

  • + \(x\) — добавить целое число \(x\) в множество. Гарантируется, что это число не принадлежит множеству до этого запроса;
  • - \(x\) — удалить целое число \(x\) из множества. Гарантируется, что это число принадлежит множеству;
  • ? \(k\) — найти \(k\text{-mex}\) множества.

В нашей задаче мы считаем, что \(k\text{-mex}\) множества — это наименьшее неотрицательное целое число \(x\), которое делится на \(k\) и которого нет в множестве.

Входные данные

В первой строке находятся целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество запросов.

В следующих \(q\) строках находится описание запросов.

Запрос добавления числа \(x\) описывается как + \(x\) (\(1 \leq x \leq 10^{18}\)). Гарантируется, что число \(x\) не принадлежит множеству.

Запрос удаления числа \(x\) описывается как - \(x\) (\(1 \leq x \leq 10^{18}\)). Гарантируется, что число \(x\) принадлежит множеству.

Запрос нахождения \(k\text{-mex}\) описывается как ? \(k\) (\(1 \leq k \leq 10^{18}\)).

Гарантируется, что хотя бы один запрос имеет тип ?.

Выходные данные

Для каждого запроса типа ? выведите единственное целое число — \(k\text{-mex}\) множества.

Примечание

В первом примере:

После первого и второго запроса во множестве будут элементы \(\{0, 1, 2\}\). Наименьшее неотрицательное число, которое делится на \(1\) и которого нет в множества, равно \(3\).

После четвертого запроса во множестве будут элементы \(\{0, 1, 2, 4\}\). Наименьшее неотрицательное число, которое делится на \(2\) и которого нет в множества, равно \(6\).

Во втором примере:

  • Изначально множество содержит только элемент \(\{0\}\).
  • После добавления числа \(100\) множество содержит элементы \(\{0, 100\}\).
  • \(100\text{-mex}\) множества равен \(200\).
  • После добавления числа \(200\) множество содержит элементы \(\{0, 100, 200\}\).
  • \(100\text{-mex}\) множества равен \(300\).
  • После удаления числа \(100\) множество содержит элементы \(\{0, 200\}\).
  • \(100\text{-mex}\) множества равен \(100\).
  • После добавления числа \(50\) множество содержит элементы \(\{0, 50, 200\}\).
  • \(50\text{-mex}\) множества равен \(100\).
  • После удаления числа \(50\) множество содержит элементы \(\{0, 200\}\).
  • \(100\text{-mex}\) множества равен \(50\).

A. Выбор трех палочек

жадные алгоритмы Перебор сортировки *800

У вас есть \(n\) палочек с положительными целочисленными длинами \(a_1, a_2, \ldots, a_n\).

Вы можете выполнить следующую операцию произвольное число раз (возможно, ноль):

  • выберите одну палочку, затем увеличьте или уменьшите ее длину на \(1\). После каждой операции длины всех палочек должны остаться положительными.

Какое минимальное число операций необходимо, чтобы вы могли выбрать три палочки из данных \(n\) и сложить их, не ломая, в равносторонний треугольник?

Равносторонним треугольником называется треугольник, у которого все три стороны равны.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 300\)) — количество палочек.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — длины палочек.

It is guaranteed that the sum of \(n\) over all test cases does not exceed \(300\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально необходимое число операций.

Примечание

В первом примере можно увеличить длину первой палочки на \(1\), затем уменьшить длину третьей палочки на \(1\). Всего вы сделаете \(2\) операции, и сможете взять три палочки, чтобы собрать равносторонний треугольник с длиной стороны \(2\).

In the fourth test case, you can decrease the length of the seventh stick by \(1\). An equilateral triangle of side length \(1\) can be selected and formed by the second, fourth, and seventh sticks.

D. Мета-cет

Комбинаторика математика Перебор Структуры данных хэши *1700

Вы любите настольную карточную игру «Сет». Каждая карта содержит \(k\) характеристик, каждая из которых может принимать значения из набора \(\{0, 1, 2\}\). В колоде содержатся все возможные варианты карт по одному разу, то есть всего \(3^k\) различных карт.

Для тройки карт характеристика является хорошей, если она совпадает у всех трех карт, либо у всех трех попарно различается. Тройка карт называется сетом, если все \(k\) характеристик для них являются хорошими.

Например, карты \((0, 0, 0)\), \((0, 2, 1)\) и \((0, 1, 2)\) образуют сет, а карты \((0, 2, 2)\), \((2, 1, 2)\) и \((1, 2, 0)\) — нет, так как, например, последняя характеристика не является хорошей.

Группа из пяти карт называется мета-сетом, если среди этих карт строго больше одного сета. Сколько существует мета-сетов среди данных \(n\) различных карт?

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 10^3\), \(1 \le k \le 20\)) — количество карт на столе и количество характеристик у каждой карты. Далее следуют \(n\) строк, описывающие характеристики карт перед вами.

Каждая строка, описывающая карту, содержит \(k\) целых чисел \(c_{i, 1}, c_{i, 2}, \ldots, c_{i, k}\) (\(0 \le c_{i, j} \le 2\)) — характеристики карты. Гарантируется, что все карты различны.

Выходные данные

Выведите одно число — количество мета-сетов.

Примечание

Будем изображать карты из примеров, указывая первые четыре характеристики. Первая характеристика будет обозначать количество объектов на карте: \(1\), \(2\), \(3\). Вторая характеристика — цвет: красный, зеленый, фиолетовый. Третья — форму: овал, ромб, волну. Четвертая — заполнение: контур, штрихованная, закрашенная.

Ниже нарисованы первые три теста. Для первых двух тестов выделены пятерки карт, которые являются мета-сетами.

В первом тесте мета-сетом является пятерка карт \((0000,\ 0001,\ 0002,\ 0010,\ 0020)\). Сетами в нем являются тройки: \((0000,\ 0001,\ 0002)\) и \((0000,\ 0010,\ 0020)\). Также сетом является тройка \((0100,\ 1000,\ 2200)\), которая не принадлежит ни одному мета-сету.

Во втором тесте мета-сетами являются пятерки: \((0000,\ 0001,\ 0002,\ 0010,\ 0020)\), \((0000,\ 0001,\ 0002,\ 0100,\ 0200)\), \((0000,\ 0010,\ 0020,\ 0100,\ 0200)\).

В третьем тесте \(54\) мета-сета.

A. Превратить A в B

жадные алгоритмы Перебор сортировки *800

Вам даны два массива \(a\) и \(b\) длины \(n\), каждый элемент массивов — либо \(0\), либо \(1\).

Вы можете выполнять операции \(2\) типов.

  • Выбрать индекс \(i\) и изменить \(a_i\) на \(1-a_i\).
  • Переупорядочить массив \(a\) произвольным образом.

Найдите минимальное количество операций, необходимое для того, чтобы массив \(a\) стал равен массиву \(b\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 400\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 100\)) — длину массивов \(a\) и \(b\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(a_i\) равно \(0\) или \(1\)) — массив \(a\).

Третья строка содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(b_i\) равно \(0\) или \(1\)) — массив \(b\).

Выходные данные

Для каждого набора входных данных выведите минимальное число операций для превращения \(a\) в \(b\).

Примечание

В первом примере нужна только одна операция: изменить \(a_1\) на \(1-a_1\). После этого \(a = [0, 0, 1]\), что равно \(b\).

Во втором примере один из оптимальных способов — сначала изменить \(a_3\) на \(1 - a_3\), затем переупорядочить \(a\).

В третьем примере операции не требуются.

В четвертом примере оптимально переупорядочить \(a\), чтобы получился массив \([0, 1, 1, 0]\).

D. Эла и волшебник

графы дп жадные алгоритмы кратчайшие пути Перебор реализация *2200

Эле нужно отправить большой пакет данных с компьютера \(1\) на компьютер \(n\) через сеть компьютеров. В настоящее время сеть работает слишком медленно, и пакет может не успеть вовремя. К счастью, добрый волшебник протянул ей руку помощи.

Сеть может быть представлена как неориентированный связный граф с \(n\) вершинами, каждая из которых представляет компьютер. Для их соединения используются \(m\) проводов. Провод \(i\) используется для соединения компьютеров \(u_i\) и \(v_i\) и имеет вес \(w_i\). Вышеупомянутый пакет при прохождении через провод \(i\) переместится с компьютера \(u_i\) на компьютер \(v_i\) (или наоборот) ровно за \(w_i\) микросекунд. Волшебник может использовать свое заклинание произвольное количество раз. Для каждого заклинания он выберет провод с индексом \(i\), соединяющий компьютеры \(u_i\) и \(v_i\), и переподключит его, выполнив следующие действия:

  • Выберет один из компьютеров, соединенный этим проводом. Без ограничения общности выберем \(v_i\).
  • Выберет компьютер, который в данный момент подключен к \(v_i\) (можно выбрать \(u_i\)), назовем его \(t_i\), отсоединит провод с индексом \(i\) от \(v_i\), и соединит им \(u_i\) и \(t_i\).

Переподключение провода \(i\) займет \(w_i\) микросекунд, а вес провода после этой операции не изменится. После переподключения компьютер может иметь какой-то провод, соединяющий его с самим собой. Переподключение также может сделать граф несвязным.

Задача Элы — как можно быстрее отправить пакет данных с компьютера \(1\) на компьютер \(n\). Обратите внимание, что волшебник может использовать свое заклинание сколько угодно раз (возможно, ноль). Чтобы обеспечить бесперебойную работу сети при передаче большого пакета, все заклинания могут использоваться только до начала передачи данных с компьютера \(1\).

Какое минимальное количество времени потребуется для передачи пакета данных с компьютера \(1\) на компьютер \(n\), с учетом времени, потраченного на применение заклинаний?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(m\) (\(2 \le n \le 500\), \(n - 1 \le m \le 250 000\)) — количество вершин и проводов соответственно.

\(i\)-я из следующих \(m\) строк содержит три числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i, v_i \le n\), \(1 \le w_i \le 10^9\)) — номера двух компьютеров, соединенных \(i\)-м проводом, и его вес.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(500\) и сумма \(m\) по всем наборам не превышает \(250 000\). Граф в каждом наборе входных данных гарантированно будет связным и без петель, но он может содержать кратные ребра.

Выходные данные

Для каждого набора входных данных выведите одно целое число, обозначающее наименьшее количество времени, необходимое для передачи пакета данных с компьютера \(1\) на \(n\).

Примечание

Граф в первом наборе входных данных:

Эла может попросить волшебника использовать его заклинание на проводе с индексом \(7\), который соединяет компьютеры \(2\) и \(3\). Поскольку компьютер \(8\) подключена к компьютеру \(3\), волшебник может отключить провод \(7\) от компьютера \(3\) и подключить его к компьютеру \(8\) за \(3\) микросекунды (вес провода \(3\)).

После этого пакет можно отправить с компьютера \(1\) на компьютер \(8\) за \(6\) микросекунд. Следовательно, ответ \(3 + 6 = 9\) микросекунд.

C. Минимизируй толщину

жадные алгоритмы математика Перебор *1100

Вам задана последовательность \(a=[a_1,a_2,\dots,a_n]\), состоящая из \(n\) положительных целых чисел.

Назовём её подотрезком группу подряд идущих элементов. Каждый подотрезок характеризуется двумя индексами — индексом своего начала и индексом своего окончания. Обозначим за \(a[l,r]\) подотрезок последовательности \(a\) с началом в \(l\) и концом в \(r\), то есть \(a[l,r]=[a_l, a_{l+1}, \dots, a_r]\).

Например, если \(a=[31,4,15,92,6,5]\), то \(a[2,5]=[4,15,92,6]\), \(a[5,5]=[6]\), \(a[1,6]=[31,4,15,92,6,5]\) — её подотрезки.

Разобьем заданную последовательность \(a\) на подотрезки так, чтобы:

  • каждый элемент попал ровно в один подотрезок;
  • суммы элементов для всех подотрезков равны.

Например, если \(a\) = [\(55,45,30,30,40,100\)], то такую последовательность можно разбить на три подотрезка: \(a[1,2]=[55,45]\), \(a[3,5]=[30, 30, 40]\), \(a[6,6]=[100]\). Каждый элемент принадлежит ровно одному подотрезку, сумма элементов каждого подотрезка равна \(100\).

Назовём толщиной разбиения длину самого длинного подотрезка. Например, толщина разбиения из примера выше равна \(3\).

Найдите минимальную толщину среди всевозможных разбиений заданной последовательности \(a\) на подотрезки требуемым образом.

Входные данные

В первой строке вам дано единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Каждый набор входных данных описывается двумя строками.

В первой строке каждого набора входных данных содержится единственное целое число \(n\) (\(1 \le n \le 2000\)) — длина последовательности \(a\).

Во второй строке каждого набора входных данных содержится ровно \(n\) целых чисел: \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы последовательности \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите в единственной строке ответ — минимальную возможную толщину разбиения последовательности \(a\) на подотрезки требуемым образом.

Обратите внимание, что всегда существует разбиение, вы всегда можете рассматривать всю последовательность как один подотрезок.

Примечание

Разбиение в первом наборе входных данных рассмотрено в условии, можно показать, что оно оптимально.

Во втором наборе входных данных разбить на подотрезки можно только оставив единственный подотрезок. Тогда толщина разбиения равна длине всей последовательности, то есть \(4\).

В третьем наборе входных данных оптимальным будет разбиение \([10, 55], [35, 30], [65]\). Толщина разбиения будет равна \(2\).

В четвёртом наборе возможны следующие разбиения:

  • \([4] + [1, 1, 1, 1] + [4]\);
  • \([4, 1, 1] + [1, 1, 4]\).

G. Кирилл и компания

битмаски графы дп кратчайшие пути Перебор поиск в глубину и подобное Потоки *2200

Кирилл живёт на связном неориентированном графе из \(n\) вершин и \(m\) рёбер в вершине с номером \(1\). В один прекрасный вечер он собрал у себя \(f\) друзей, \(i\)-й друг живёт в вершине \(h_i\). Таким образом, в настоящий момент все друзья находятся в вершине \(1\), каждый должен добраться домой — \(i\)-й друг должен попасть в вершину \(h_i\).

Вечер подошёл к концу и настала пора расходиться. Оказалось, что у \(k\) (\(k \le 6\)) из его друзей нет машин и им придётся идти пешком, если их никто не подвезёт. Один друг с машиной может подвезти любое количество друзей без машин, но только если он может подвезти их, проехав по одному из кратчайших путей до своего дома.

Например, в графе ниже, друг из вершины \(h_i=5\) может подвезти друзей из следующих наборов вершин: \([2, 3]\), \([2, 4]\), \([2]\), \([3]\), \([4]\), но не может подвезти друга из вершины \(6\) или набор \([3, 4]\).

Вершины в которых живут друзья без машин выделены зелёным, а с машинами — красным.

Кирилл хочет, чтобы как можно меньшему числу друзей пришлось идти пешком. Помогите ему найти минимально возможное количество.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных в тесте.

Первая строка набора содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 10^4\), \(n-1 \le m \le min (10^4, \)\( \frac{n \cdot (n - 1)}{2} \)\()\)) — количество вершин и рёбер соответственно.

Следующие \(m\) строк набора содержат описание рёбер, по два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \ne v\)) — номера вершин, соединённых ребром. Гарантируется, что в графе нет петель и кратных рёбер.

Дальше следует строка набора, содержащая число \(f\) (\(1 \le f \le 10^4\)) — количество друзей Кирилла.

Следующая строка набора содержит \(f\) целых чисел: \(h_1, h_2, \dots, h_f\) (\(2 \le h_i \le n\)) — вершины, в которых они живут. Некоторые вершины могут повторяться.

Следующая строка набора содержит число \(k\) (\(1 \le k \le min(6, f)\)) — количество друзей без машин.

Последняя строка каждого набора содержит \(k\) целых чисел: \(p_1, p_2, \dots, p_k\) (\(1 \le p_i \le f\), \(p_i < p_{i+1}\)) — номера друзей без машин.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^4\), как и суммы \(m\) и \(f\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите единственное число — минимально возможное количество друзей, которым придётся идти пешком.

Примечание

Первый набор входных данных первого примера разобран в условии.

Во втором наборе входных данных первого примера в вершине \(5\) живут два друга с машинами, один может подвезти друзей из вершин \(2\) и \(3\), а второй из вершины \(4\), не подвезут только друга из вершины \(6\).

D. Взаимно простые

жадные алгоритмы Перебор теория чисел *1100

Дан массив из \(n\) целых положительных чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 1000\)). Выведите максимальное значение \(i + j\) такое, что \(a_i\) и \(a_j\) взаимно простые\(^{\dagger}\), или \(-1\), если таких \(i\) и \(j\) не существует.

Например, рассмотрим массив \([1, 3, 5, 2, 4, 7, 7]\). Максимальное значение \(i + j\), которое можно получить, равно \(5 + 7\), так как \(a_5 = 4\) и \(a_7 = 7\) являются взаимно простые.

\(^{\dagger}\) Два целых числа \(p\) и \(q\) являются взаимно простыми, если единственное положительное целое число, которое является делителем их обоих, равно \(1\) (их наибольший общий делитель равен \(1\)).

Входные данные

Входные данные состоят из нескольких наборов. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10\)) — количество наборов. Далее следует их описание.

Первая строка каждого набора содержит целое число \(n\) (\(2 \leq n \leq 2\cdot10^5\)) — количество элементов в массиве.

Следующая строка содержит \(n\) разделенных пробелами положительных чисел \(a_1\), \(a_2\),..., \(a_n\) (\(1 \leq a_i \leq 1000\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2\cdot10^5\).

Выходные данные

Для каждого набора выведите одно целое число  — максимальное значение \(i + j\), такое, что \(i\) и \(j\) удовлетворяют условию, что \(a_i\) и \(a_j\) взаимно просты, или выведите \(-1\), если не существует таких \(i\) и \(j\).

Примечание

Для первого примера можно выбрать \(i = j = 3\), при этом сумма индексов равна \(6\), так как \(1\) и \(1\) - взаимно простые.

Для второго примера можно выбрать \(i = 7\) и \(j = 5\), при этом сумма индексов равна \(7 + 5 = 12\), так как \(7\) и \(4\) являются взаимно простыми.

G. Оррэй

битмаски жадные алгоритмы математика Перебор сортировки *1500

Вам дан массив \(a\), состоящий из \(n\) неотрицательных целых чисел.

Определим массив префиксного ИЛИ \(b\) как массив \(b_i = a_1~\mathsf{OR}~a_2~\mathsf{OR}~\dots~\mathsf{OR}~a_i\), где \(\mathsf{OR}\) представляет собой битовую операцию ИЛИ. Другими словами, массив \(b\) формируется путем вычисления \(\mathsf{OR}\) каждого префикса \(a\).

Вас попросили переставить элементы массива \(a\) таким образом, чтобы массив префиксных OR был лексикографически максимальным.

Массив \(x\) лексикографически больше массива \(y\), если в первой позиции, где \(x\) и \(y\) отличаются, \(x_i > y_i\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество элементов в массиве \(a\).

Вторая строка каждого набора содержит \(n\) неотрицательных целых чисел \(a_1, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите \(n\) целых чисел — любую перестановку массива \(a\), при которой получается лексикографически максимальный массив префиксных OR.

A. Пароль

Комбинаторика математика Перебор реализация *800

Монокарп забыл пароль от своего телефона. Пароль состоит ровно из \(4\) цифр от \(0\) до \(9\) (обратите внимание, что пароль может начинаться с цифры \(0\)).

Монокарп помнит, что в его пароле были ровно две различные цифры, причем каждая из этих цифр встречалась в пароле ровно по два раза. Также Монокарп помнит, какие цифры точно не могли быть в его пароле.

Посчитайте количество последовательностей из \(4\) цифр, которые могли бы быть паролем Монокарпа (то есть которые подходят под все описанные условия).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 8\)) — количество цифр, которых точно нет в пароле Монокарпа.

Во второй строке записаны \(n\) целых различных чисел \(a_1, a_2, \dots a_n\) (\(0 \le a_i \le 9\)) — цифры, которых точно нет в пароле Монокарпа. Обратите внимание, что числа \(a_1, a_2, \dots, a_n\) заданы в порядке возрастания.

Выходные данные

На каждый набор входных данных выведите одно целое число — количество последовательностей из \(4\) цифр, которые подходят под все описанные условия.

Примечание

Возможные пароли в первом наборе входных данных: «3377», «3737», «3773», «7337», «7373», «7733».

D. Задача со случайными тестами

дп жадные алгоритмы Перебор Теория вероятностей *1700

Дана строка \(s\) из \(n\) символов. Каждый символ \(s\) — либо 0, либо 1.

Подстрока строки \(s\) — это непрерывная подпоследовательность ее символов.

Вы должны выбрать две подстроки \(s\) (возможно, пересекающиеся, возможно, одну и ту же два раза, возможно, непересекающиеся — две любые подстроки). После того как вы выбрали подстроки, вы считаете их стоимость следующим образом:

  • пусть \(s_1\) — первая подстрока, \(s_2\) — вторая подстрока, а \(f(s_i)\) — целое число, для которого \(s_i\) является записью в двоичной системе счисления (напримре, если \(s_i\) — это 11010, то \(f(s_i) = 26\));
  • стоимость пары подстрок — это побитовое ИЛИ чисел \(f(s_1)\) и \(f(s_2)\).

Посчитайте максимальную стоимость, которую вы можете получить, и выведите ее в двоичной системе счисления без ведущих нулей.

Входные данные

В первой строке задано число \(n\) — количество символов в \(s\).

Во второй строке задана \(s\), состоящая из ровно \(n\) символов 0 и/или 1.

Все тесты в этой задаче, кроме примеров из условия, сгенерированы случайным образом: каждый символ \(s\) выбирается независимо от остальных, и для каждого символа вероятность быть 1 равна \(\frac{1}{2}\).

В этой задаче ровно \(40\) тестов. Тесты с \(1\) по \(3\) — примеры из условия; тесты с \(4\) по \(40\) сгенерированы случайным образом. В тестах с \(4\) по \(10\) \(n = 5\); в тестах с \(11\) по \(20\) \(n = 1000\); в тестах с \(21\) по \(40\) \(n = 10^6\).

В этой задаче запрещены взломы.

Выходные данные

Выведите максимальную стоимость, которую можно получить, в двоичной системе счисления без ведущих нулей.

Примечание

В первом примере можно выбрать подстроки 11010 и 101. \(f(s_1) = 26\), \(f(s_2) = 5\), их побитовое ИЛИ равно \(31\), а двоичное представление \(31\) — это 11111.

Во втором примере можно выбрать подстроки 1110010 и 11100.

E1. Делимые числа (простая версия)

математика Перебор теория чисел *1500

Это простая версия задачи. Единственное различие простой и сложной версии в ограничении на значения \(a\), \(b\), \(c\) и \(d\).

Вам даны \(4\) положительных целых числа \(a\), \(b\), \(c\), \(d\), при этом \(a < c\) и \(b < d\). Найдите любую пару чисел \(x\) и \(y\), для которой выполняются следующие условия:

  • \(a < x \leq c\), \(b < y \leq d\),
  • \(x \cdot y\) делится на \(a \cdot b\).

Обратите внимание, что искомые \(x\) и \(y\) могут не существовать.

Входные данные

В первой строке входных данных дано единственное целое число \(t\) \((1 \leq t \leq 10\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

В единственной строке каждого набора входных данных содержится четыре целых числа \(a\), \(b\), \(c\) и \(d\) (\(1 \leq a < c \leq 10^5\), \(1 \leq b < d \leq 10^5\)).

Выходные данные

Для каждого набора входных данных выведите пару чисел \(a < x \leq c\) и \(b < y \leq d\), для которой \(x \cdot y\) делится на \(a \cdot b\). Если есть несколько вариантов ответа, то выведите любой из них. Если такой пары чисел не существует, то выведите -1 -1.

E2. Делимые числа (сложная версия)

математика Перебор теория чисел *1900

Это сложная версия задачи. Единственное различие простой и сложной версии в ограничении на значения \(a\), \(b\), \(c\) и \(d\).

Вам даны \(4\) положительных целых числа \(a\), \(b\), \(c\), \(d\), при этом \(a < c\) и \(b < d\). Найдите любую пару чисел \(x\) и \(y\), для которой выполняются следующие условия:

  • \(a < x \leq c\), \(b < y \leq d\),
  • \(x \cdot y\) делится на \(a \cdot b\).

Обратите внимание, что искомые \(x\) и \(y\) могут не существовать.

Входные данные

В первой строке входных данных дано единственное целое число \(t\) \((1 \leq t \leq 10\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

В единственной строке каждого набора входных данных содержится четыре целых числа \(a\), \(b\), \(c\) и \(d\) (\(1 \leq a < c \leq 10^9\), \(1 \leq b < d \leq 10^9\)).

Выходные данные

Для каждого набора входных данных выведите пару чисел \(a < x \leq c\) и \(b < y \leq d\), для которой \(x \cdot y\) делится на \(a \cdot b\). Если есть несколько вариантов ответа, то выведите любой из них. Если такой пары чисел не существует, то выведите -1 -1.

B. Разнообразные подстроки

Перебор реализация Строки *1400

Непустая строка из цифр является разнообразной, если количество вхождений каждого символа в неё не превосходит количество различных символов в ней.

Например,

  • строка «7» разнообразная, так как 7 встречается в ней \(1\) раз, и количество различных символов в ней равно \(1\);
  • строка «77» не является разнообразной, так как 7 встречается в ней \(2\) раза, а количество различных символов в ней равно \(1\);
  • строка «1010» разнообразная, так как 0 и 1 встречаются в ней по \(2\) раза, и количество различных символов в ней равно \(2\);
  • строка «6668» не является разнообразной, так как 6 встречается в ней \(3\) раза, а количество различных символов в ней равно \(2\).

Вам дана строка \(s\) длины \(n\), состоящая из цифр от \(0\) до \(9\). Найдите, сколько из ее \(\frac{n(n+1)}{2}\) подстрок являются разнообразными.

Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

Обратите внимание, что если некоторая разнообразная строка встречается в \(s\) несколько раз, то каждое её вхождение должно быть подсчитано независимо. Например, в строке «77» есть две разнообразных подстроки, равных «7», поэтому ответ для строки «77» равен \(2\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(n\) (\(1 \le n \le 10^5\)) — длина строки \(s\).

Во второй строке дана строка \(s\) длины \(n\). Гарантируется, что \(s\) состоит только из цифр от \(0\) до \(9\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: количество разнообразных подстрок строки \(s\).

Примечание

В первом наборе входных данных подстрока «7» разнообразная.

Во втором наборе входных данных подстрока «7» разнообразная. Так как она встречается дважды, ответ равен \(2\).

В третьем наборе входных данных следующие подстроки являются разнообразными: «0» (\(2\) вхождения), «01», «010», «1» (\(2\) вхождения), «10» (\(2\) вхождения), «101» и «1010».

В четвёртом наборе входных данных следующие подстроки являются разнообразными: «0» (\(3\) вхождения), «01», «011», «0110», «1» (\(2\) вхождения), «10», «100», «110» и «1100».

В пятом наборе входных данных следующие подстроки являются разнообразными: «3», «39», «399», «6», «9» (\(4\) вхождения), «96» и «996».

В шестом наборе входных данных все \(15\) непустых подстрок строки «23456» являются разнообразными.

C. Префиксы с нулевой суммой

дп жадные алгоритмы Перебор реализация Структуры данных *1600

Красота массива \(v_1,v_2,\ldots,v_n\) равняется количеству индексов \(i\) (\(1 \le i \le n\)), таких что \(v_1+v_2+\ldots+v_i = 0\).

У вас есть массив \(a_1,a_2,\ldots,a_n\) длины \(n\). Вы можете применить к нему следующую операцию сколько угодно раз:

  • выбрать индекс \(i\) (\(1 \le i \le n\)), такой что \(a_i=0\);
  • после этого заменить \(a_i\) на произвольное целое число.

Какой максимальной красоты массив \(a\) вы можете получить?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Во второй строке даны \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-10^9 \le a_i \le 10^9\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: максимальную красоту массива \(a\) после применения к нему операций.

Примечание

В первом наборе входных данных вы можете заменить \(a_2\) на \(-2\) за одну операцию. После этого массив \(a\) станет равен \([2,-2,1,-1,0]\) и будет иметь красоту \(3\):

  • \(a_1+a_2=2-2=0\);
  • \(a_1+a_2+a_3+a_4=2-2+1-1=0\);
  • \(a_1+a_2+a_3+a_4+a_5=2-2+1-1+0=0\).

Во втором наборе входных данных вы можете заменить \(a_3\) на \(-2\,000\,000\,000\), чтобы получить массив красоты \(1\).

В третьем наборе входных данных вы можете не делать операции.

A. Robot Bicorn Attack

Перебор реализация *1400

Вася играет в Robot Bicorn Attack.

Игра состоит из трех раундов, за каждый из которых игроку дается некоторое неотрицательное целое число очков. Результатом игры является сумма полученных очков. Вася уже сыграл все три раунда и записал полученные очки один за другим (без ведущих нулей) в строку s. Затем Вася решил похвастаться перед друзьями своим достижением, однако, он забыл, сколько очков в каком раунде он набрал. Все, что он помнит — полученная строка s.

Помогите Васе найти какое наибольшее суммарное число очков он мог получить. Стоит учитывать, что Вася играл в Robot Bicorn Attack впервые, поэтому не мог набрать более 1000000 (106) очков за один раунд.

Входные данные

В единственной строке входного файла находится непустая строка s, полученная Васей. Строка состоит только из цифр. Длина строки не превосходит 30 символов.

Выходные данные

Выведите единственное число — наибольший суммарный результат, который мог получить Вася. Если Вася ошибся и данная строка не могла быть получена в соответствии с правилами, следует вывести число -1.

Примечание

В первом примере строку необходимо разбить на числа 1, 2 и 34.

Во втором примере строку необходимо разбить на числа 90, 0 и 0.

В третьем примере строка является некорректной, так как при любом разбиении строки на 3 числа получится число 00 или 09, а по условию ведущих нулей быть не должно.

D. Plane of Tanks: Duel

дп математика Перебор Теория вероятностей *2400

Вася играет в Plane of Tanks.

В этой игре танки описываются следующими характеристиками:

  • количество очков жизни;
  • интервал между двумя выстрелами орудия (время необходимое для перезарядки орудия после выстрела);
  • вероятность того, что выстрел орудия не пробьет броню вражеского танка;
  • урон, наносимый орудием вражескому танку.

Урон орудия задается отрезком [l, r], где l и r — целые числа. При выстреле потенциальный урон x выбирается равновероятно среди всех целых чисел отрезка [l, r]. Если данный выстрел пробивает броню вражеского танка, то количество очков жизни врага уменьшается на x единиц. Если при этом количество очков жизни стало неположительным, то считается, что танк уничтожен.

В игре возможны непробития снарядом танка, в этом случае количество очков жизни врага не изменяется. Вероятность непробития брони врага снарядом считается характеристикой стреляющего танка и не зависит от поведения игрока.

Победа уже близка, остался всего один вражеский танк. Вася полностью готов к поединку — еще одна битва добра со злом неизбежна! Два противника увидели друг друга и одновременно сделали по выстрелу... Так началась завершающая битва! Помогите Васе определить, какова вероятность того, что он одержит в ней победу, уничтожив вражеский танк?

Считается, что если оба танка были уничтожены в результате битвы (после одновременных выстрелов), то Васе также засчитывается победа. Можно считать, что каждый игрок производит очередной выстрел сразу же после перезарядки его орудия, а в каждом танке имеется бесконечное число снарядов.

Входные данные

В первой строке даны пять целых чисел через пробел, описывающих характеристики танка Васи: количество очков жизни hp (10 ≤ hp ≤ 200), интервал между двумя выстрелами dt (1 ≤ dt ≤ 30), диапазон урона орудия l и r (10 ≤ l ≤ r ≤ 100), вероятность непробития танка врага p (0 ≤ p ≤ 100)(в процентах).

Во второй строке описаны характеристики танка врага Васи в таком же формате.

Выходные данные

Необходимо вывести единственное число с абсолютной или относительной погрешностью не более 10 - 4 — вероятность победы Васи.

Примечание

В первом примере оба танка одновременно умирают после второго выстрела, вероятность уничтожения вражеского танка, соответственно, равна 1.

Во втором примере враг Васи успеет сделать второй выстрел раньше Васи, но не успеет сделать третий. Для того, чтобы уничтожить Васю раньше, необходимо произвести два выстрела с уроном 50. Вероятность этого события = . В противном случае Вася побеждает.

В третьем примере враг Васи успеет сделать три выстрела с вероятностью пробития 0.5. Для уничтожения Васи ему необходимо, чтобы хотя бы 2 из 3 выстрелов пробили броню Васиного танка. Вероятность этого события равна 0.5.

E. Power Defence

геометрия дп жадные алгоритмы Перебор *2600

Вася играет в Power Defence.

Ему осталось пройти последний уровень игры. Для этого ему необходимо уничтожить Главного Злодея, который движется по прямой со скоростью 1 метр в секунду из точки ( - ∞, 0) в точку ( + ∞, 0) игрового мира. В точках вида (x, 1) и (x,  - 1), где x — целое число, можно строить башни одного из трех типов: огненную, электрическую или замедляющую. При этом нельзя строить две башни в одной точке. Башня каждого типа имеет определенный радиус действия и величину урона в секунду (кроме замедляющей). Если в некоторой точке на Главного Злодея действует k замедляющих башен, то его скорость падает в k + 1 раз.

Известно, сколько башен каждого типа можно построить. Требуется определить, какой максимальный урон можно нанести Главному Злодею.

Все расстояния в задаче указаны в метрах. Размер Главного Злодея и башен очень мал, поэтому можно считать их точками на плоскости. Главный Злодей находится в радиусе действия башни если расстояние между ним и башней не превышает радиуса действия башни.

Входные данные

Первая строка содержит три целых числа nf, ne и ns (0 ≤ nf, ne, ns ≤ 20, 1 ≤ nf + ne + ns ≤ 20) — максимальное количество огненных, электрических и замедляющих башен, которые можно построить, соответственно. Числа разделены единичными пробелами.

Вторая строка содержит три целых числа rf, re и rs (1 ≤ rf, re, rs ≤ 1000) — радиус действия огненной, электрической и замедляющей башни, соответственно. Числа разделены единичными пробелами.

Третья строка содержит два целых числа df и de (1 ≤ df, de ≤ 1000) — количество урона наносимого огненной и электрической башней Главному Злодею за 1 секунду (при условии, что Главный Злодей находится в радиусе действия башни). Числа разделены единичным пробелом.

Выходные данные

Выведите единственное вещественное число — наибольший возможный урон, который может быть нанесен Главному Злодею, с абсолютной или относительной погрешностью не более 10 - 6.

Примечание

В первом примере имеется одна огненная башня, которая нанесет один и тот же урон независимо от расположения.

Во втором примере есть еще одна замедляющая башня такого же радиуса действия. Если построить две башни напротив друг друга, то скорость Главного Злодея будет в 2 раза ниже на всем интервале действия огненной башни, то есть будет нанесен вдвое больший урон.

B. Максимальная подстрока

жадные алгоритмы Перебор реализация *800

Бинарной строкой называется строка, состоящая только из символов 0 и 1. Вам дана бинарная строка \(s\).

Для некоторой непустой подстроки\(^\dagger\) \(t\) строки \(s\), состоящей из \(x\) символов 0 и \(y\) символов 1, определим её стоимость как:

  • \(x \cdot y\), если \(x > 0\) и \(y > 0\);
  • \(x^2\), если \(x > 0\) и \(y = 0\);
  • \(y^2\), если \(x = 0\) и \(y > 0\).

Вам дана бинарная строка \(s\) длины \(n\), найдите максимальную стоимость среди всех её непустых подстрок.

\(^\dagger\) Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину строки \(s\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальную стоимость среди всех подстрок.

Примечание

В первом наборе входных данных мы можем взять подстроку \(111\). Она содержит \(3\) символа 1 и \(0\) символов 0. Таким образом, \(a = 3\), \(b = 0\), и её стоимость равна \(3^2 = 9\).

Во втором наборе входных данных мы можем взять всё строку. Она содержит \(4\) символа 1 и \(3\) символа 0. Таким образом, \(a = 4\), \(b = 3\), и её стоимость равна \(4 \cdot 3 = 12\).

В третьем наборе входных данных мы можем взять подстроку \(1111\), и её стоимость равна \(4^2 = 16\).

В четвёртом наборе входных данных мы можем взять всю строку. Её стоимость равна \(4 \cdot 3 = 12\).

В пятом наборе входных данных мы можем взять подстроку \(000\). Её стоимость равна \(3 \cdot 3 = 9\).

В шестом наборе входных данных мы можем взять только подстроку \(0\). Её стоимость равна \(1 \cdot 1 = 1\).

E. N станков

Бинарный поиск жадные алгоритмы Перебор *3300

Вы были приглашены в качестве специалиста по оптимизации производственных процессов в одну очень крупную компанию. У компании в распоряжении находятся \(n\) станков, стоящих друг за другом в цепочке производства. Каждый станок можно охарактеризовать одним из двух способов: \((+,~a_i)\) или \((*,~a_i)\).

Если на вход станку вида \((+,~a_i)\) подается заготовка с ценностью \(x\), то на выходе получается заготовка с ценностью \(x + a_i\).

Если на вход станку вида \((*,~a_i)\) подается заготовка с ценностью \(x\), то на выходе получается заготовка с ценностью \(x \cdot a_i\).

Весь производственный процесс выглядит следующим образом. На вход первому станку подается заготовка с ценностью \(1\), полученная после работы первого станка заготовка подается на вход второму станку, результат его работы — на вход третьему станку и так далее. Дела у компании идут не очень хорошо, так что на данный момент ценность полученного на выходе продукта не превосходит \(2 \cdot 10^9\).

Директора компании не довольны эффективностью производственного процесса и выделили вам бюджет в \(b\) монет на его оптимизацию.

Чтобы оптимизировать производство, вы можете менять порядок станков в цепочке. А именно, потратив \(p\) монет, вы можете взять любой станок вида \((+,~a_i)\) и переставить его в любое место в цепочке производства, не меняя порядок остальных станков. Также, потратив \(m\) монет, вы можете взять любой станок вида \((*,~a_i)\) и переставить его в любое место в цепочке производства.

Какой максимальной ценности выходного продукта можно добиться, если сделать перестановки суммарной стоимостью не более \(b\) монет?

Входные данные

Первая строка содержит четыре целых числа \(n\), \(b\), \(p\) и \(m\) (\(1 \le n \le 10^6\), \(1 \le b, p, m \le 10^9\)) — количество станков на производстве, ваш бюджет и стоимости переноса станков обоих видов.

Каждая из следующих \(n\) строк содержит описание очередного станка. Описание станка начинается с символа «+» или «*», обозначающего вид станка. Далее следует целое число \(a_i\) (\(1 \le a_i \le 2 \cdot 10^9\)).

Гарантируется, что текущая ценность выходного продукта не превосходит \(2 \cdot 10^9\).

Выходные данные

Выведите одно целое число — максимальную ценность выходного продукта, которой можно добиться, переставив станки в цепи производства на не более чем \(b\) монет суммарно.

Примечание

В первом тесте бюджет не позволяет нам сдвинуть станок \((*,~2)\), однако мы можем переместить оба \((+,~1)\) в начало, и получить цепочку \((+,~1)\) \((+,~1)\) \((*,~2)\). Если ей на вход подать заготовку ценности \(1\), то ее ценность будет меняться следующим образом: \(1, 2, 3, 6\).

Во втором тесте мы можем сдвинуть только один станок. Переместим \((+,~2)\) из конца в начало получим цепочку \((+,~2)\) \((*,~2)\) \((+,~1)\) \((*,~3)\) при проходе через которую ценность заготовки меняется следующим образом: \(1, 3, 6, 7, 21\).

В третьем тесте поместим станок \((*,~4)\) перед \((*,~5)\) и станок \((+,~3)\) в начало. Получим цепочку \((+,~3)\) \((*,~2)\) \((+,~1)\) \((+,~1)\) \((+,~1)\) \((+,~1)\) \((*,~4)\) \((*,~5)\), при проходе через которую ценность заготовки меняется так: \(1, 4, 8, 9, 10, 11, 12, 48, 240\).

F. Сериал по Майнкрафту

Перебор *3500

Маленький Миша ходит на кружок по программированию и ничего там не решает. Это может показаться странным, но когда вы узнаете, что Миша снимает сериал по Майнкрафту, все сразу встанет на свои места...

Миша, вдохновляясь застройкой Манхэттена, построил в Майнкрафте город, который можно представить в виде таблицы \(n \times m\). В городе живут \(k\) школьников, \(i\)-й школьник живет в доме, который находится на пересечении \(x_i\)-й строки и \(y_i\)-го столбца. Также у каждого школьника есть степень его агрессивности \(w_i\). Так как город оказался очень большим, Миша решил территориально ограничить действия своего сериала некоторым принадлежащим таблице квадратом \(s\), стороны которого параллельны осям координат и имеют длину от \(1\) до \(\min(n, m)\) клеток.

По сюжету главный герой приедет в город и сразу же попадет в квадрат \(s\). Обладая уникальной степенью агрессивности \(0\) он сможет проявить свои лидерские качества и собрать команду из спокойных, умеренных и агрессивных школьников.

Чтобы собранная команда была разносторонней, но сплоченной, агрессивности всех школьников в ней должны быть попарно различны и должны образовывать единый отрезок подряд идущих целых чисел. То есть, если внутри квадрата \(s\) найдутся школьники со степенями агрессивности \(l, l+1, \ldots, -1, 1, \ldots, r-1, r\), где \(l \le 0 \le r\), то главный герой сможет собрать команду из \(r-l+1\) человека (сам он тоже входит в эту команду).

Обратите внимание, брать в команду всех школьников из квадрата \(s\) не обязательно.

Миша считает, что в команде главного героя должно быть хотя бы \(t\) человек. Поэтому его интересует, сколько существует квадратов в таблице, попав в которые, главный герой сможет набрать команду как минимум из \(t\) человек. Помогите Мише это посчитать.

Входные данные

Первая строка содержит четыре целых числа \(n\), \(m\), \(k\) и \(t\) (\(1 \le n, m \le 40\,000\), \(1 \le n \cdot m \le 40\,000\), \(1 \le k \le 10^6\), \(1 \le t \le k + 1\)) — количество строк в таблице, количество столбцов, количество школьников, которые живут в городе и необходимый размер команды соответственно.

Каждая из \(k\) следующих строк содержит по три целых числа \(x_i\), \(y_i\) и \(w_i\) (\(1 \le x_i \le n\), \(1 \le y_i \le m\), \(1 \le \lvert w_i \rvert \le 10^9\)) — номер строки и номер столбца, на пересечении которых живет \(i\)-й школьник, а так же степень его агрессивности.

Выходные данные

Выведите одно целое число — количество способов выбрать квадрат \(s\) таким образом, чтобы главный герой смог набрать команду, состоящую, хотя бы из \(t\) человек.

Примечание
  1. В первом тестовом примере главный герой ни в каком выбранном квадрате \(s\) не сможет набрать команду, состоящую из более чем одного человека.
    Иллюстрация к первому тестовому примеру.
  2. Во втором тестовом примере можно выбрать квадрат \(s\) двумя способами, изображенными ниже, в одном из них главный герой сможет набраться команду из школьников с степенями агрессивности \([0, 1]\), а в другом — \([0, 1, 2]\). Обратите внимание на то, что вне зависимости от выбранного квадрата главный герой со степенью агрессивности \(0\) всегда будет входить в команду.
    Иллюстрация ко второму тестовому примеру.
  3. В третьем тестовом примере можно выбрать квадрат \(s\) четырьмя способами, изображенными ниже, в них главный герой сможет набраться команды со следующими степенями агрессивности школьников, соответственно: \([-1,0,1]\), \([0,1]\), \([0,1]\), \([-1, 0, 1]\).
    Иллюстрация к третьему тестовому примеру.

D. Интервал = √Суммы

Бинарный поиск Конструктив математика Перебор *1800

Вам дано целое число \(n\). Найдите последовательность из \(n\) различных целых чисел \(a_1, a_2, \dots, a_n\) такую, что \(1 \leq a_i \leq 10^9\) для всех \(i\), и \(\)\max(a_1, a_2, \dots, a_n) - \min(a_1, a_2, \dots, a_n)= \sqrt{a_1 + a_2 + \dots + a_n}.\(\)

Можно показать, что существует последовательность различных целых чисел, удовлетворяющая всем условиям выше.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 3 \cdot 10^5\)) — длину последовательности, которую вам нужно найти.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) различных целых чисел \(a_1, a_2, \dots, a_n\), удовлетворяющих условиям.

Если существуют несколько решений, выведите любое из них. Обратите внимание, числа должны быть различными!

Примечание

В первом примере максимум равен \(3\), минимум \(1\), сумма \(4\), и \(3 - 1 = \sqrt{4}\).

Во втором примере максимум равен \(29\), минимум \(18\), сумма \(121\), и \(29-18 = \sqrt{121}\).

В каждом случае все числа различны.

D. Сделай круглым

Перебор теория чисел *1400

В Берляндии произошла инфляция, поэтому в магазине нужно изменить цену товаров.

Дана текущая цена товара \(n\). Разрешается увеличить цену товара в \(k\) раз, при этом \(1 \le k \le m\), k — целое. Выведите наиболее круглую возможную новую цену на товар. То есть ту, в которой максимально количество нулей в конце.

Например, число 481000 более круглое чем число 1000010 (три нуля в конце числа 481000 и всего один — в конце числа 1000010).

Если возможных вариантов несколько, выведите тот, в котором новая цена максимальна.

Если же более круглую цену получить невозможно, выведите \(n \cdot m\) (то есть максимально возможную цену).

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Каждый набор входных данных состоит из одной строки.

В этой строке записано два целых числа: \(n\) и \(m\) (\(1 \le n, m \le 10^9\)). Где \(n\) — старая цена товара, а число \(m\) означает, что можно увеличить цену \(n\) не больше чем в \(m\) раз.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке наиболее круглое целое число вида \(n \cdot k\) (\(1 \le k \le m\), \(k\) — целое).

Если возможных вариантов несколько, выведите тот, в котором новая цена (значение \(n \cdot k\)) — максимальна.

Если же более круглую цену получить невозможно, выведите \(n \cdot m\) (то есть максимально возможную цену).

Примечание

В первом примере \(n = 6\), \(m = 11\). Число с двумя нулями и больше в конце получить не можем, так как необходимо увеличить цену в \(50\) раз, но \(50 > m = 11\). Максимальная цена кратная \(10\) будет \(6 \cdot 10 = 60\).

Во втором примере \(n = 5\), \(m = 43\). Максимальная цена кратная \(100\) будет \(5 \cdot 40 = 200\).

В третьем примере \(n = 13\), \(m = 5\). Все возможные новые цены не будут оканчиваться на \(0\), тогда следует вывести \(n \cdot m = 65\).

В четвертом примере следует увеличить цену в \(15\) раз.

В пятом примере следует увеличить цену в \(12000\) раз.

E. Гуманоид

дп Перебор сортировки *1500

На некоторой космической станции работают \(n\) космонавтов. Космонавт с номером \(i\) (\(1 \le i \le n\)) имеет стойкость \(a_i\).

На эту космическую станцию пробрался злобный гуманоид. Сила этого гуманоида равна \(h\). Также гуманоид взял с собой две зелёных сыворотки и одну синюю сыворотку.

За одну секунду гуманоид может сделать любое из трёх действий:

  1. поглотить космонавта со стойкостью строго меньше силы гуманоида;
  2. употребить зелёную сыворотку, если такая ещё осталась;
  3. употребить синюю сыворотку, если такая ещё осталась.

При поглощении космонавта со стойкостью \(a_i\), этот космонавт исчезает, а сила гуманоида увеличивается на \(\lfloor \frac{a_i}{2} \rfloor\), то есть целую часть от \(\frac{a_i}{2}\). Например, если гуманоид поглощает космонавта со стойкостью \(4\), его сила увеличивается на \(2\), а если гуманоид поглощает космонавта со стойкостью \(7\), его сила увеличивается на \(3\).

При употреблении зелёной сыворотки, эта сыворотка исчезает, а сила гуманоида увеличивается в \(2\) раза.

При употреблении синей сыворотки, эта сыворотка исчезает, а сила гуманоида увеличивается в \(3\) раза.

Гуманоиду интересно, какое максимальное количество космонавтов он сможет поглотить, если будет действовать оптимально.

Входные данные

В первой строке входных данных дано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных даны целые числа \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество космонавтов и \(h\) (\(1 \le h \le 10^6\)) — изначальная сила гуманоида.

Во второй строке каждого набора входных данных даны \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^8\)) — стойкости космонавтов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите максимальное количество космонавтов, которое сможет поглотить гуманоид.

Примечание

В первом случае можно действовать так:

  1. употребить зелёную сыворотку. \(h = 1 \cdot 2 = 2\)
  2. поглотить космонавта \(2\). \(h = 2 + \lfloor \frac{1}{2} \rfloor = 2\)
  3. употребить зелёную сыворотку. \(h = 2 \cdot 2 = 4\)
  4. поглотить космонавта \(1\). \(h = 4 + \lfloor \frac{2}{2} \rfloor = 5\)
  5. употребить синюю сыворотку. \(h = 5 \cdot 3 = 15\)
  6. поглотить космонавта \(3\). \(h = 15 + \lfloor \frac{8}{2} \rfloor = 19\)
  7. поглотить космонавта \(4\). \(h = 19 + \lfloor \frac{9}{2} \rfloor = 23\)

A. Две перестановки

Конструктив Перебор *800

Вам даны три целых числа \(n\), \(a\) и \(b\). Определите, существуют ли две перестановки \(p\) и \(q\) длины \(n\), для которых выполняются следующие условия:

  • Длина самого длинного общего префикса \(p\) и \(q\) равна \(a\).
  • Длина самого длинного общего суффикса \(p\) и \(q\) равна \(b\).

Перестановка длины \(n\)  — это массив, содержащий каждое целое число от \(1\) до \(n\) ровно один раз. Например, \([2,3,1,5,4]\)  — это перестановка, но \([1,2,2]\)  — не перестановка (\(2\) встречается в массиве дважды), и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве есть \(4\)).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(a\) и \(b\) (\(1\leq a,b\leq n\leq 100\)).

Выходные данные

Для каждого набора входных данных, если такая пара перестановок существует, выведите «Yes», в противном случае выведите «No». Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных \([1]\) и \([1]\) образуют подходящую пару.

Во втором и третьем наборах входных данных можно показать, что такой пары перестановок не существует.

В четвертом наборе входных данных \([1,2,3,4]\) и \([1,3,2,4]\) образуют подходящую пару.

E. Сделайте связным

Бинарный поиск графы Деревья жадные алгоритмы Конструктив матрицы Перебор снм *2400

Вам дан простой неориентированный граф, состоящий из \(n\) вершин. Граф не содержит петель, между каждой парой вершин существует не более одного ребра. Ваша задача проста: сделать граф связным.

Вы можете выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выберите произвольную вершину \(u\).
  • Для каждой вершины \(v\), для которой \(v\ne u\), если \(v\) смежна с \(u\), удалите ребро между \(u\) и \(v\), иначе добавьте ребро между \(u\) и \(v\).

Найдите минимальное количество операций, необходимых для того, чтобы сделать граф связным. Также найдите любую последовательность операций минимальной длины, которая делает граф связным.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 800\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\leq n\leq 4000\)) — количество вершин в графе.

Затем следуют \(n\) строк. В \(i\)-й строке содержится бинарная строка \(s_i\) длины \(n\), где \(s_{i,j}\) равно '1', если между вершинами \(i\) и \(j\) изначально существует ребро, иначе \(s_{i,j}\) равно '0'.

Гарантируется, что \(s_{i,i}\) всегда '0' и \(s_{i,j}=s_{j,i}\) для \(1\leq i,j\leq n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(4000\).

Выходные данные

Для каждого набора входных данных в первой строке выведите целое число \(m\)  — минимально необходимое количество операций.

Если \(m\) больше нуля, то выведите дополнительную строку, состоящую из \(m\) целых чисел — вершин, выбранных в операциях в вашем решении. Если существует несколько решений с минимальным количеством операций, выведите любое из них.

Примечание

В первом наборе входных данных граф связен в начале, поэтому ответ  — \(0\).

Во втором наборе входных данных, если мы выполним операцию с вершиной \(1\), то получим следующий граф, представленный следующей матрицей смежности:

\(\) \begin{bmatrix} 0&1&1\\ 1&0&1\\ 1&1&0 \end{bmatrix} \(\)

Очевидно, что приведенный выше граф является связным.

В третьем наборе входных данных, если мы проделаем операцию с вершинами \(3\) и \(4\), то получим следующий граф, представленный следующей матрицей смежности:

\(\) \begin{bmatrix} 0&1&1&1\\ 1&0&1&1\\ 1&1&0&1\\ 1&1&1&0 \end{bmatrix} \(\)

Очевидно, что приведенный выше граф является связным, и можно доказать, что мы не можем выполнить менее \(2\) операций, чтобы сделать граф связным.

B. Испепеление

Бинарный поиск математика Перебор реализация сортировки Структуры данных *1200

Для уничтожения человечества, Ассоциация Монстров отправила \(n\) монстров на Землю. \(i\)-й монстр имеет здоровье \(h_i\) и силу \(p_i\).

С его одной атакой, настоящей спиральной испепеляющей пушкой, Генос может нанести \(k\) урона всем живым монстрам. Другими словами, Генос может уменьшить здоровье всех монстров на \(k\) (если \(k > 0\)) одной атакой.

Однако после каждой атаки Геноса монстры продвигаются вперед. Совместными усилиями они уменьшают урон от атаки Геноса на силу \(^\dagger\)самого слабого монстра \(^\ddagger\)оставшегося в живых. Иными словами, минимальное значение \(p_i\) по всем живым в текущий момент монстрам вычитается из \(k\) после каждой атаки.

\(^\dagger\)Самый слабый монстр — это тот, у кого наименьшая сила.

\(^\ddagger\)Монстр жив, если его здоровье строго больше \(0\).

Удастся ли Геносу убить всех монстров?

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Описания данных следуют далее.

Первая строка каждого набора входных данных содержит два целых числа, \(n\) и \(k\) (\(1 \le n, k \le 10^5\)) — количество монстров и начальный урон от атаки Геноса. Затем следуют две строки, каждая из которых содержит \(n\) целых чисел, описывающих массивы \(h\) и \(p\) (\(1 \le h_i, p_i \le 10^9\)).

Гарантируется, что сумма \(n\)по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ — «YES» (без кавычек) если Генос может убить всех монстров и «NO» в противном случае.

Примечание

В первом примере, после первой атаки Геноса, \(h\) и \(k\) станут:

  • \(h: [11,0,6,2,3,0]\)
  • \(k: 7-1 = 6\)
После второй атаки:
  • \(h: [5,0,0,0,0,0]\)
  • \(k: 6-2 = 4\)
После третьей атаки:
  • \(h: [1,0,0,0,0,0]\)
  • \(k: 4-2 = 2\)
После четвертой атаки:
  • \(h: [0,0,0,0,0,0]\)
Поскольку Генос может убить всех монстров, ответ YES.

C. Очередная задача про массив

жадные алгоритмы Конструктив Перебор *2000

Вам дан массив \(a\) из \(n\) целых чисел. Вы можете совершить следующую операцию любое число раз (0 или больше раз):

  • Выбрать \(2\) индекса \(i\),\(j\) где \(1 \le i < j \le n\) и заменить \(a_k\) для всех \(i \leq k \leq j\) значением \(|a_i - a_j|\)

Выведите максимальную сумму всех элементов конечного массива, которую вы можете получить таким образом.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите сумму конечного массива.

Примечание

В первом примере невозможно достичь сумму \(> 3\) используя операцию, таким образом ответ \(3\).

Во втором примере можно показать, что максимальная достижимая сумма равна \(16\). Используем операцию \((1,2)\) и преврати массив из \([9,1]\) в \([8,8]\), таким образом ответ равен \(16\).

В третьем примере можно показать, что невозможно достичь суммы \(> 18\) используя операцию, таким образом ответ \(18\).

F. Дореми и экспериментальное дерево

Деревья Конструктив Перебор поиск в глубину и подобное снм сортировки *2500

У Дореми есть реберно-взвешенное дерево из \(n\) вершин, веса являются целыми числами от \(1\) до \(10^9\). Дореми провела \(\frac{n(n+1)}{2}\) экспериментов с деревом.

В каждом эксперименте Дореми выбирает две вершины \(i\) и \(j\) такие, что \(j \leq i\), и соединяет их дополнительным ребром веса \(1\). После этого в графе образовывается один цикл (или петля, если \(i=j\)). Дореми определяет \(f(i,j)\) как сумму длин кратчайших путей от каждой вершины до цикла.

Формально, пусть \(\mathrm{dis}_{i,j}(x,y)\) — длина кратчайшего пути между вершинами \(x\) и \(y\), когда в дерево добавлено одно ребро \((i,j)\) веса \(1\), а \(S_{i,j}\) — множество вершин на цикле, когда добавлено ребро \((i,j)\). Тогда \(\) f(i,j)=\sum_{x=1}^{n}\left(\min_{y\in S_{i,j}}\mathrm{dis}_{i,j}(x,y)\right). \(\)

Дореми записала все значения \(f(i,j)\) для \(1 \leq j \leq i \leq n\), потом пошла спать. Однако проснувшись, она обнаружила, что дерево пропало. К счастью, значения \(f(i,j)\) все еще в ее тетради, и она значит, каким \(i\) и \(j\) они соответствуют. Вам даны значения \(f(i,j)\), можете ли вы помочь Дореми восстановить дерево?

Гарантируется, что хотя бы одно подходящее дерево существует.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2000\)) — количество вершин в дереве.

Следующие \(n\) строк содержат нижне-треугольную матрицу с \(i\) целыми числами в \(i\)-й строке; \(j\)-е число в \(i\)-й строке равно \(f(i,j)\) (\(0 \le f(i,j) \le 2\cdot 10^{15}\)).

Гарантируется, что существует дерево, веса ребер которого являются целыми числами в пределах от \(1\) до \(10^9\) такое, что все значения \(f(i,j)\) для этого дерева совпадают с данными.

Выходные данные

Выведите \(n-1\) строку, описывающую дерево. В \(i\)-й строке выведите три целых числа \(u_i\), \(v_i\), \(w_i\) (\(1 \le u_i,v_i \le n\), \(1 \le w_i \le 10^9\)), обозначающих ребро \((u_i,v_i)\) веса \(w_i\).

Если существуют несколько решений, выведите любое из них.

Ребра должны образовывать дерево, а все значения \(f(i,j)\) должны совпадать с данными.

Примечание

Для первого примере рисунок ниже слева направо сверху вниз показывает графы, получающиеся при добавлении ребер \((1,1)\), \((1,2)\), \((1,3)\), \((2,2)\), \((2,3)\), \((3,3)\) соответственно. Вершины на цикле выделены желтым.

E. Exchange

математика Перебор *1000

Monocarp is playing a MMORPG. There are two commonly used types of currency in this MMORPG — gold coins and silver coins. Monocarp wants to buy a new weapon for his character, and that weapon costs \(n\) silver coins. Unfortunately, right now, Monocarp has no coins at all.

Monocarp can earn gold coins by completing quests in the game. Each quest yields exactly one gold coin. Monocarp can also exchange coins via the in-game trading system. Monocarp has spent days analyzing the in-game economy; he came to the following conclusion: it is possible to sell one gold coin for \(a\) silver coins (i. e. Monocarp can lose one gold coin to gain \(a\) silver coins), or buy one gold coin for \(b\) silver coins (i. e. Monocarp can lose \(b\) silver coins to gain one gold coin).

Now Monocarp wants to calculate the minimum number of quests that he has to complete in order to have at least \(n\) silver coins after some abuse of the in-game economy. Note that Monocarp can perform exchanges of both types (selling and buying gold coins for silver coins) any number of times.

Input

The first line contains one integer \(t\) (\(1 \le t \le 10^4\)) — the number of test cases.

Each test case consists of one line containing three integers \(n\), \(a\) and \(b\) (\(1 \le n \le 10^7\); \(1 \le a, b \le 50\)).

Output

For each test case, print one integer — the minimum possible number of quests Monocarp has to complete.

Note

In the first test case of the example, Monocarp should complete \(4\) quests, and then sell \(4\) gold coins for \(100\) silver coins.

In the second test case, Monocarp should complete \(400000\) quests, and then sell \(400000\) gold coins for \(10\) million silver coins.

In the third test case, Monocarp should complete \(1\) quest, sell the gold coin for \(50\) silver coins, buy a gold coin for \(48\) silver coins, and then sell it again for \(50\) coins. So, he will have \(52\) silver coins.

In the fourth test case, Monocarp should complete \(1\) quest and then sell the gold coin he has obtained for \(50\) silver coins.

L. Project Manager

Перебор реализация Структуры данных *2400

There are \(n\) employees at Bersoft company, numbered from \(1\) to \(n\). Each employee works on some days of the week and rests on the other days. You are given the lists of working days of the week for each employee.

There are regular days and holidays. On regular days, only those employees work that have the current day of the week on their list. On holidays, no one works. You are provided with a list of days that are holidays. The days are numbered from \(1\) onwards, day \(1\) is Monday.

The company receives \(k\) project offers they have to complete. The projects are numbered from \(1\) to \(k\) in the order of decreasing priority.

Each project consists of multiple parts, where the \(i\)-th part must be completed by the \(a_i\)-th employee. The parts must be completed in order (i. e. the \((i+1)\)-st part can only be started when the \(i\)-th part is completed). Each part takes the corresponding employee a day to complete.

The projects can be worked on simultaneously. However, one employee can complete a part of only one project during a single day. If they have a choice of what project to complete a part on, they always go for the project with the highest priority (the lowest index).

For each project, output the day that project will be completed on.

Input

The first line contains three integers \(n, m\) and \(k\) (\(1 \le n, m, k \le 2 \cdot 10^5\)) — the number of employees, the number of holidays and the number of projects.

The \(i\)-th of the next \(n\) lines contains the list of working days of the \(i\)-th employee. First, a single integer \(t\) (\(1 \le t \le 7\)) — the number of working days. Then \(t\) days of the week in the increasing order. The possible days are: "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday".

The next line contains \(m\) integers \(h_1, h_2, \dots, h_m\) (\(1 \le h_1 < h_2 < \dots < h_m \le 10^9\)) — the list of holidays.

The \(j\)-th of the next \(k\) lines contains a description of the \(j\)-th project. It starts with an integer \(p\) (\(1 \le p \le 2 \cdot 10^5\)) — the number of parts in the project. Then \(p\) integers \(a_1, a_2, \dots, a_p\) (\(1 \le a_x \le n\)) follow, where \(p_i\) is the index of the employee that must complete the \(i\)-th part.

The total number of parts in all projects doesn't exceed \(2 \cdot 10^5\).

Output

Print \(k\) integers — the \(j\)-th value should be equal to the day the \(j\)-th project is completed on.

A. Суперкруглые числа

Перебор реализация *800

Назовем целое положительное число суперкруглым, если в нем только одна цифра отлична от нуля. Например, числа \(5000\), \(4\), \(1\), \(10\), \(200\) — суперкруглые; \(42\), \(13\), \(666\), \(77\), \(101\) — не суперкруглые.

Вам дано целое число \(n\). Найдите количество таких суперкруглых чисел \(x\), что \(1 \le x \le n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Затем следуют \(t\) строк. В \(i\)-й из них задано одно целое число \(n\) (\(1 \le n \le 999999\)) — описание \(i\)-го набора входных данных.

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество таких суперкруглых \(x\), что \(1 \le x \le n\).

E. Декомпозиция

Бинарный поиск дп Перебор разделяй и властвуй Структуры данных *2300

Для последовательности целых чисел \([x_1, x_2, \dots, x_k]\) обозначим декомпозицию следующим образом:

Будем обрабатывать последовательность слева направо, поддерживая список ее подпоследовательностей. Когда мы обрабатываем элемент \(x_i\), мы приписываем его в конец первой подпоследовательности в списке, для которой побитовое И последнего ее элемента и \(x_i\) больше \(0\). Если такой подпоследовательности в списке нет, создадим новую подпоследовательность с единственным элементом \(x_i\) и запишем ее в конец списка подпоследовательностей.

Например, рассмотрим декомпозицию последовательности \([1, 3, 2, 0, 1, 3, 2, 1]\):

  • обрабатываем элемент \(1\), список подпоследовательностей пуст. Ни к одной подпоследовательности нельзя приписать \(1\), поэтому мы создаем новую подпоследовательность \([1]\);
  • обрабатываем элемент \(3\), список подпоследовательностей — \([[1]]\). Так как побитовое И \(3\) и \(1\) равно \(1\), элемент добавляется в первую подпоследовательность;
  • обрабатываем элемент \(2\), список подпоследовательностей — \([[1, 3]]\). Так как побитовое И \(2\) и \(3\) равно \(2\), элемент добавляется в первую подпоследовательность;
  • обрабатываем элемент \(0\), список подпоследовательностей — \([[1, 3, 2]]\). Ни к одной подпоследовательности нельзя приписать \(0\), поэтому мы создаем новую подпоследовательность \([0]\);
  • обрабатываем элемент \(1\), список подпоследовательностей — \([[1, 3, 2], [0]]\). Ни к одной подпоследовательности нельзя приписать \(1\), поэтому мы создаем новую подпоследовательность \([1]\);
  • обрабатываем элемент \(3\), список подпоследовательностей — \([[1, 3, 2], [0], [1]]\). Так как побитовое И \(3\) и \(2\) равно \(2\), элемент добавляется в первую подпоследовательность;
  • обрабатываем элемент \(2\), список подпоследовательностей — \([[1, 3, 2, 3], [0], [1]]\). Так как побитовое И \(2\) и \(3\) равно \(2\), элемент добавляется в первую подпоследовательность;
  • обрабатываем элемент \(1\), список подпоследовательностей — \([[1, 3, 2, 3, 2], [0], [1]]\). Элемент \(1\) нельзя приписать ни к одной из первых двух подпоследовательностей, но можно приписать к третьей.

В результате получается список подпоследовательностей \([[1, 3, 2, 3, 2], [0], [1, 1]]\).

Пусть \(f([x_1, x_2, \dots, x_k])\) — количество подпоследовательностей, на которое декомпозируется последовательность \([x_1, x_2, \dots, x_k]\).

А теперь — сама задача.

Вам дана последовательность \([a_1, a_2, \dots, a_n]\), в которой каждый элемент — это целое число от \(0\) до \(3\). Пусть \(a[i..j]\) — это последовательность \([a_i, a_{i+1}, \dots, a_j]\). Вы должны посчитать \(\sum \limits_{i=1}^n \sum \limits_{j=i}^n f(a[i..j])\).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 3\)).

Выходные данные

Выведите одно целое число, равное \(\sum \limits_{i=1}^n \sum \limits_{j=i}^n f(a[i..j])\).

E. Algebra Flash

meet-in-the-middle битмаски графы Деревья дп математика Перебор *2500

Выпущена новая версия: Algebra Flash 2.2

Список изменений:

  • Новый игровой режим!

Благодарим вас за непрерывную поддержку игры!

И это все? С небольшим разочарованием вы запускаете игру и нажимаете на новый режим. Написано «Цветные платформы».

В ряд расположены \(n\) платформ, пронумерованных от \(1\) до \(n\). В игре доступны \(m\) цветов, пронумерованных от \(1\) до \(m\). \(i\)-я платформа раскрашена в цвет \(c_i\).

Вы начинаете на платформе \(1\) и хотите добраться до платформы \(n\). За один ход вы можете прыгнуть с некоторой платформы \(i\) на платформы \(i + 1\) или \(i + 2\).

Все платформы изначально деактивированы (включая платформы \(1\) и \(n\)). Для каждого цвета \(j\) можно заплатить \(x_j\) монет, чтобы активировать все платформы этого цвета.

Вы хотите включить некоторые платформы так, чтобы можно было начать на активированной платформе \(1\), попрыгать по некотором активированным платформам и достичь платформы \(n\).

Какое наименьшее количество монет потребуется для достижения этого?

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(2 \le n \le 3 \cdot 10^5\); \(1 \le m \le 40\)) — количество платформ и количество цветов, соответственно.

Во второй строке записаны \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le m\)) — цвета платформ.

В третьей строке записаны \(m\) целых чисел \(x_1, x_2, \dots, x_m\) (\(1 \le x_i \le 10^7\)) — стоимости включения всех платформ каждого цвета.

Выходные данные

Выведите наименьшее количество монет, которое потребуется того, чтобы можно было начать на активированной платформе \(1\), попрыгать по некотором активированным платформам и достичь платформы \(n\).

B1. Копирование файлов I

*особая задача математика Перебор реализация *1000

В этой версии задачи размеры копируемых файлов не превышают \(1000\) байт.

Вы копируете с одного сервера на другой \(n\) файлов размером \(a_1, a_2, \ldots, a_n\) байт. Файлы копируются последовательно в заданном порядке.

При копировании вы видите два прогресс-бара: первый показывает процент скопированных данных в текущем файле, а второй — общий процент скопированных данных по всем \(n\) файлам. Оба процента отображаются округлёнными вниз до целого числа. Значения на прогресс-барах обновляются после копирования каждого байта.

Формально, после копирования байта номер \(x\) из файла номер \(i\) первый прогресс-бар показывает \(\lfloor \frac{100 \cdot x}{a_i} \rfloor\) процентов, а второй — \(\lfloor \frac{100 \cdot (a_1 + a_2 + \ldots + a_{i - 1} + x)}{a_1 + a_2 + \ldots + a_n} \rfloor\) процентов. В самом начале копирования оба прогресс-бара показывают \(0\) процентов.

Найдите все такие целые числа от \(0\) до \(100\) включительно, что существует момент времени, в который оба прогресс-бара одновременно показывают это число. Выведите эти числа в порядке возрастания.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 100\)) — число копируемых файлов.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 1000\)) — размеры файлов в байтах в том порядке, в котором они будут копироваться.

Выходные данные

Выведите в возрастающем порядке все числа от \(0\) до \(100\) включительно такие, что существует момент времени, в который на обоих прогресс-барах одновременно показывается это число.

Примечание

В первом тесте копируется всего один файл, поэтому оба прогресс-бара всегда показывают одинаковые значения.

Во втором тесте первый прогресс-бар сразу же уйдёт вперёд, потом сбросится в ноль и начнёт догонять второй прогресс-бар заново. В конце копирования прогресс-бары некоторое время будут показывать одно и то же число.

B2. Копирование файлов II

*особая задача Бинарный поиск математика Перебор *1400

В этой версии задачи размеры копируемых файлов не превышают \(10^{10}\) байт.

Вы копируете с одного сервера на другой \(n\) файлов размером \(a_1, a_2, \ldots, a_n\) байт. Файлы копируются последовательно в заданном порядке.

При копировании вы видите два прогресс-бара: первый показывает процент скопированных данных в текущем файле, а второй — общий процент скопированных данных по всем \(n\) файлам. Оба процента отображаются округлёнными вниз до целого числа. Значения на прогресс-барах обновляются после копирования каждого байта.

Формально, после копирования байта номер \(x\) из файла номер \(i\) первый прогресс-бар показывает \(\lfloor \frac{100 \cdot x}{a_i} \rfloor\) процентов, а второй — \(\lfloor \frac{100 \cdot (a_1 + a_2 + \ldots + a_{i - 1} + x)}{a_1 + a_2 + \ldots + a_n} \rfloor\) процентов. В самом начале копирования оба прогресс-бара показывают \(0\) процентов.

Найдите все такие целые числа от \(0\) до \(100\) включительно, что существует момент времени, в который оба прогресс-бара одновременно показывают это число. Выведите эти числа в порядке возрастания.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 100\)) — число копируемых файлов.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{10}\)) — размеры файлов в байтах в том порядке, в котором они будут копироваться.

Выходные данные

Выведите в возрастающем порядке все числа от \(0\) до \(100\) включительно такие, что существует момент времени, в который на обоих прогресс-барах одновременно показывается это число.

Примечание

В первом тесте копируется всего один файл, поэтому оба прогресс-бара всегда показывают одинаковые значения.

Во втором тесте первый прогресс-бар сразу же уйдёт вперёд, потом сбросится в ноль и начнёт догонять второй прогресс-бар заново. В конце копирования прогресс-бары некоторое время будут показывать одно и то же число.

Обратите внимание, что третий тест в этой версии задачи отличается от третьего теста в предыдущей версии задачи.

C1. Подкрутка I

*особая задача дп жадные алгоритмы Перебор *1200

В этой версии задачи \(n \le 50\) и \(a_i \le 100\).

Вика за время работы в компании VK уже сделала \(n\) коммитов в системе контроля версий. \(i\)-й коммит был сделан в \(a_i\)-й день работы Вики в компании. В некоторые дни Вика могла сделать несколько коммитов, а в другие — не сделать ни одного.

Вику интересуют такие отрезки подряд идущих дней, что в каждый из этих дней у неё есть хотя бы один коммит. Чем длиннее будет самый длинный такой отрезок, тем более продуктивным сотрудником она будет себя ощущать.

Недавно Вика нашла способ подкрутить время любого коммита вперёд, но не более чем на сутки. Таким образом, \(i\)-й коммит теперь может быть «сделан» либо в \(a_i\)-й, либо в \((a_i + 1)\)-й день. Время каждого коммита можно подкрутить независимо от других — в частности, можно как оставить всем коммитам исходное время, так и перенести все коммиты ровно на день вперёд.

Найдите длину самого длинного возможного отрезка подряд идущих дней, в каждый из которых у Вики в профиле будет отображаться хотя бы один коммит, после возможной подкрутки времени некоторых коммитов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — число коммитов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) в неубывающем порядке (\(1 \le a_1 \le a_2 \le \ldots \le a_n \le 100\)) — номера дней, в которые были сделаны коммиты.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную возможную длину отрезка дней, в каждый из которых у Вики в профиле будет отображаться хотя бы один коммит, после возможной подкрутки времени некоторых коммитов вперёд не более чем на сутки.

Примечание

В первом наборе входных данных можно поменять дату коммита в день \(3\) на день \(4\), дату коммита в день \(4\) — на день \(5\), а дату любого из коммитов в день \(6\) — на день \(7\). Тогда в каждый из дней \(4\), \(5\), \(6\), \(7\) и \(8\) в профиле Вики будет отображаться хотя бы один коммит, и наибольший отрезок из подряд идущих дней с коммитами — \([4; 8]\) — будет иметь длину \(5\).

Во втором наборе входных данных можно либо оставить все коммиты как есть, либо перенести каждый коммит на день вперёд. В любом случае длина отрезка дней составит \(6\).

В третьем наборе входных данных Вика сделала много коммитов, но все в один и тот же день с номером \(10\). В лучшем случае отрезок дней достигнет длины \(2\) — если какие-то коммиты оставить на день \(10\), а другие перенести на день \(11\).

D1. Игра в Девятку I

*особая задача дп Перебор *1800

В этой версии задачи нужно определить, кто выиграет в карточной игре для двух игроков в заданном раскладе при оптимальной игре обоих соперников.

Алиса и Боб решили сыграть в карточную игру «Девятка». Пожалуйста, внимательно прочитайте условие задачи, поскольку правила могут отличаться от известных вам.

Для игры нужна стандартная колода из \(36\) карт — по девять карт (от шестёрки до туза) каждой из четырёх мастей (трефы, бубны, пики и черви). Карты по достоинству от младшей к старшей идут следующим образом: шестёрка, семёрка, восьмёрка, девятка, десятка, валет, дама, король, туз.

Перед игрой колода перемешивается, и каждому игроку раздаётся по \(18\) карт. Карты нужно выкладывать из руки на стол по определённым правилам. Выигрывает игрок, который первым выложит все карты из своей руки.

Игроки ходят по очереди. Ход игрока имеет один из следующих видов:

  • выложить на стол из своей руки девятку любой масти;
  • выложить на стол шестёрку, семёрку или восьмёрку любой масти, если на столе уже лежит карта той же масти достоинством на единицу выше;
  • выложить на стол десятку, валета, даму, короля или туза любой масти, если на столе уже лежит карта той же масти достоинством на единицу ниже.

Например, девятку пик можно выложить на стол в любой момент, для выкладывания семёрки треф необходимо наличие на столе восьмёрки треф, а для выкладывания туза червей необходимо наличие на столе короля червей.

Если игрок не может выложить на стол ни одну карту из своей руки, то ход переходит к сопернику. Обратите внимание: нельзя пропустить ход просто так — всегда необходимо выложить карту на стол корректным образом, если это возможно.

Вам дан расклад карт в начале игры. Алиса будет ходить первой. Определите, кто первым избавится от всех своих карт и выиграет, если оба игрока будут пытаться победить и играть оптимально.

Входные данные

В первой строке задано \(18\) строк длины \(2\) через пробел, описывающих карты Алисы в случайном порядке. Первый символ строки обозначает достоинство карты — символ из набора 6, 7, 8, 9, T, J, Q, K, A, обозначающий шестёрку, семёрку, восьмёрку, девятку, десятку, валета, даму, короля и туза, соответственно. Второй символ строки обозначает масть карты — символ из набора C, D, S, H, обозначающий трефы, бубны, пики и черви, соответственно.

Во второй строке задано \(18\) строк длины \(2\) через пробел, описывающих карты Боба в том же формате.

Каждая из \(36\) возможных карт находится в руке одного из двух игроков в единственном экземпляре.

В задаче \(100\) тестов. Все тесты сгенерированы случайным образом.

Выходные данные

Выведите Alice, если при оптимальной игре выиграет Алиса, и Bob в противном случае.

D2. Игра в Девятку II

*особая задача Перебор *2200

В этой версии задачи игроки начинают играть не только на победу, но и на оптимизацию результата игры для них. Вводится понятие величины важности первого хода, и нужно найти \(13\) раскладов с различными значениями этой величины.

Алиса и Боб решили сыграть в карточную игру «Девятка». Пожалуйста, внимательно прочитайте условие задачи, поскольку правила могут отличаться от известных вам.

Для игры нужна стандартная колода из \(36\) карт — по девять карт (от шестёрки до туза) каждой из четырёх мастей (трефы, бубны, пики и черви). Карты по достоинству от младшей к старшей идут следующим образом: шестёрка, семёрка, восьмёрка, девятка, десятка, валет, дама, король, туз.

Перед игрой колода перемешивается, и каждому игроку раздаётся по \(18\) карт. Карты нужно выкладывать из руки на стол по определённым правилам. Выигрывает игрок, который первым выложит все карты из своей руки.

Игроки ходят по очереди. Ход игрока имеет один из следующих видов:

  • выложить на стол из своей руки девятку любой масти;
  • выложить на стол шестёрку, семёрку или восьмёрку любой масти, если на столе уже лежит карта той же масти достоинством на единицу выше;
  • выложить на стол десятку, валета, даму, короля или туза любой масти, если на столе уже лежит карта той же масти достоинством на единицу ниже.

Например, девятку пик можно выложить на стол в любой момент, для выкладывания семёрки треф необходимо наличие на столе восьмёрки треф, а для выкладывания туза червей необходимо наличие на столе короля червей.

Если игрок не может выложить на стол ни одну карту из своей руки, то ход переходит к сопернику. Обратите внимание: нельзя пропустить ход просто так — всегда необходимо выложить карту на стол корректным образом, если это возможно.

Помимо того, что каждый игрок стремится избавиться от карт в своей руке, Алиса и Боб также хотят, чтобы в конце игры в руке у их соперника карт осталось как можно больше, а в их руке — как можно меньше. Напомним, что игра заканчивается, как только один из игроков выкладывает на стол последнюю карту из своей руки.

Результатом игры назовём совокупность из информации о том, кто из двух игроков выиграет при оптимальной игре, а также о том, сколько карт останется в руке у проигравшего.

Пусть Алиса и Боб уже взяли в руки свои \(18\) карт каждый, но ещё не решили, кто из них будет ходить первым. Величиной важности первого хода для данного расклада назовём абсолютную разность между результатами игры в случае, если первой будет ходить Алиса, и в случае, если первым будет ходить Боб.

Например, если в обоих случаях выиграет Боб, но в одном случае у Алисы останется \(6\) карт в руке в конце игры, а во втором — всего \(2\), то величина важности первого хода равна \(4\). Если же в одном случае выиграет Алиса и у Боба останется \(5\) карт в руке, а во втором случае выиграет Боб и у Алисы останется \(3\) карты в руке, то величина важности первого хода равна \(8\).

Ребята хотят узнать, насколько разной бывает величина важности первого хода для разных раскладов. По заданному числу \(k \le 13\) помогите им найти такие \(k\) раскладов, что величины важности первого хода для всех них — различные целые числа.

Входные данные

В единственной строке задано целое число \(k\) (\(2 \le k \le 13\)) — число необходимых раскладов.

В задаче два теста. В первом тесте \(k = 2\), во втором тесте \(k = 13\).

Выходные данные

Выведите \(k\) пар строк. Каждая пара строк должна соответствовать некоторому раскладу. Величины важности первого хода для всех выведенных раскладов должны быть различными целыми числами.

В первой строке каждой пары выведите \(18\) строк длины \(2\) через пробел, описывающих карты Алисы в любом порядке. Первый символ строки должен обозначать достоинство карты — символ из набора 6, 7, 8, 9, T, J, Q, K, A, обозначающий шестёрку, семёрку, восьмёрку, девятку, десятку, валета, даму, короля и туза соответственно. Второй символ строки должен обозначать масть карты — символ из набора C, D, S, H, обозначающий трефы, бубны, пики и черви соответственно.

Во второй строке выведите \(18\) строк длины \(2\) через пробел, описывающих карты Боба в том же формате.

Каждая из \(36\) возможных карт должна находиться в руке одного из двух игроков в единственном экземпляре.

Примечание

В первом выведенном раскладе все девятки находятся в руке у Алисы. Даже если Боб будет ходить первым, ему всё равно придётся пропустить первый же свой ход. Следовательно, первый ход при таком раскладе имеет важность \(0\).

Во втором выведенном раскладе вне зависимости от того, чьим будет первый ход, выиграет Алиса. Однако если Алиса будет ходить первой, то у Боба в конце игры в руке останется одна карта, а если же она будет ходить второй, то у Боба останется пять карт. Соответственно, величина важности первого хода при таком раскладе равна \(4\).

D3. Игра в Девятку III

*особая задача Перебор *2300

В этой версии задачи нужно найти \(26\) раскладов с различными значениями важности первого хода.

Алиса и Боб решили сыграть в карточную игру «Девятка». Пожалуйста, внимательно прочитайте условие задачи, поскольку правила могут отличаться от известных вам.

Для игры нужна стандартная колода из \(36\) карт — по девять карт (от шестёрки до туза) каждой из четырёх мастей (трефы, бубны, пики и черви). Карты по достоинству от младшей к старшей идут следующим образом: шестёрка, семёрка, восьмёрка, девятка, десятка, валет, дама, король, туз.

Перед игрой колода перемешивается, и каждому игроку раздаётся по \(18\) карт. Карты нужно выкладывать из руки на стол по определённым правилам. Выигрывает игрок, который первым выложит все карты из своей руки.

Игроки ходят по очереди. Ход игрока имеет один из следующих видов:

  • выложить на стол из своей руки девятку любой масти;
  • выложить на стол шестёрку, семёрку или восьмёрку любой масти, если на столе уже лежит карта той же масти достоинством на единицу выше;
  • выложить на стол десятку, валета, даму, короля или туза любой масти, если на столе уже лежит карта той же масти достоинством на единицу ниже.

Например, девятку пик можно выложить на стол в любой момент, для выкладывания семёрки треф необходимо наличие на столе восьмёрки треф, а для выкладывания туза червей необходимо наличие на столе короля червей.

Если игрок не может выложить на стол ни одну карту из своей руки, то ход переходит к сопернику. Обратите внимание: нельзя пропустить ход просто так — всегда необходимо выложить карту на стол корректным образом, если это возможно.

Помимо того, что каждый игрок стремится избавиться от карт в своей руке, Алиса и Боб также хотят, чтобы в конце игры в руке у их соперника карт осталось как можно больше, а в их руке — как можно меньше. Напомним, что игра заканчивается, как только один из игроков выкладывает на стол последнюю карту из своей руки.

Результатом игры назовём совокупность из информации о том, кто из двух игроков выиграет при оптимальной игре, а также о том, сколько карт останется в руке у проигравшего.

Пусть Алиса и Боб уже взяли в руки свои \(18\) карт каждый, но ещё не решили, кто из них будет ходить первым. Величиной важности первого хода для данного расклада назовём абсолютную разность между результатами игры в случае, если первой будет ходить Алиса, и в случае, если первым будет ходить Боб.

Например, если в обоих случаях выиграет Боб, но в одном случае у Алисы останется \(6\) карт в руке в конце игры, а во втором — всего \(2\), то величина важности первого хода равна \(4\). Если же в одном случае выиграет Алиса и у Боба останется \(5\) карт в руке, а во втором случае выиграет Боб и у Алисы останется \(3\) карты в руке, то величина важности первого хода равна \(8\).

Ребята хотят узнать, насколько разной бывает величина важности первого хода для разных раскладов. По заданному числу \(k \le 26\) помогите им найти такие \(k\) раскладов, что величины важности первого хода для всех них — различные целые числа.

Входные данные

В единственной строке задано целое число \(k\) (\(2 \le k \le 26\)) — число необходимых раскладов.

В задаче три теста. В первом тесте \(k = 2\), во втором тесте \(k = 13\), в третьем тесте \(k = 26\).

Выходные данные

Выведите \(k\) пар строк. Каждая пара строк должна соответствовать некоторому раскладу. Величины важности первого хода для всех выведенных раскладов должны быть различными целыми числами.

В первой строке каждой пары выведите \(18\) строк длины \(2\) через пробел, описывающих карты Алисы в любом порядке. Первый символ строки должен обозначать достоинство карты — символ из набора 6, 7, 8, 9, T, J, Q, K, A, обозначающий шестёрку, семёрку, восьмёрку, девятку, десятку, валета, даму, короля и туза соответственно. Второй символ строки должен обозначать масть карты — символ из набора C, D, S, H, обозначающий трефы, бубны, пики и черви соответственно.

Во второй строке выведите \(18\) строк длины \(2\) через пробел, описывающих карты Боба в том же формате.

Каждая из \(36\) возможных карт должна находиться в руке одного из двух игроков в единственном экземпляре.

Примечание

В первом выведенном раскладе все девятки находятся в руке у Алисы. Даже если Боб будет ходить первым, ему всё равно придётся пропустить первый же свой ход. Следовательно, первый ход при таком раскладе имеет важность \(0\).

Во втором выведенном раскладе вне зависимости от того, чьим будет первый ход, выиграет Алиса. Однако если Алиса будет ходить первой, то у Боба в конце игры в руке останется одна карта, а если же она будет ходить второй, то у Боба останется пять карт. Соответственно, величина важности первого хода при таком раскладе равна \(4\).

D1. Шифрование сообщений

Перебор *1200

Умный Бобер из ABBYY придумал новый вид шифрования сообщений и хочет проверить его работу. Делать это вручную долго и трудоемко, поэтому он решил обратиться к участникам ABBYY Cup.

Сообщение представляет собой n целых чисел a1, a2, ..., an. Для шифрования используется ключ, который представляет собой m целых чисел b1, b2, ..., bm (m ≤ n). Все числа из сообщения и из ключа лежат в интервале от 0 до c - 1, включительно, и все последующие вычисления проводятся по модулю c.

Шифрование проводится в n - m + 1 этапов. На первом этапе к каждому из чисел a1, a2, ..., am прибавляются соответствующие числа b1, b2, ..., bm. На втором этапе к числам a2, a3, ..., am + 1 (измененным на предыдущем этапе) прибавляются числа b1, b2, ..., bm. И так далее: на этапе номер i к числам ai, ai + 1, ..., ai + m - 1 прибавляются числа b1, b2, ..., bm. Результатом шифрования является последовательность a1, a2, ..., an после n - m + 1 этапов шифрования.

Помогите Бобру: напишите программу, которая будет осуществлять шифрование сообщений описанным способом.

Входные данные

Первая строка входных данных содержит три целых числа n, m и c, разделенных единичными пробелами.

Вторая строка входных данных содержит n целых чисел ai (0 ≤ ai < c), разделенных единичными пробелами, — исходное сообщение.

Третья строка входных данных содержит m целых чисел bi (0 ≤ bi < c), разделенных единичными пробелами, — ключ шифрования.

Ограничения на входные данные для получения 30 баллов:

  • 1 ≤ m ≤ n ≤ 103
  • 1 ≤ c ≤ 103

Ограничения на входные данные для получения 100 баллов:

  • 1 ≤ m ≤ n ≤ 105
  • 1 ≤ c ≤ 103
Выходные данные

Выведите n целых чисел, разделенных пробелами, — результат шифрования сообщения.

Примечание

В первом примере шифрование проводится в два этапа: после первого этапа a = (0, 0, 0, 1) (вычисления производятся по модулю 2), после второго — a = (0, 1, 1, 0), что и будет ответом.

A. Косия и доски

жадные алгоритмы Перебор *1000

У Косии есть \(n\) маркерных досок, пронумерованных от \(1\) до \(n\). Изначально на \(i\)-й доске написано целое число \(a_i\).

Косия выполнит \(m\) операций. На \(j\)-й операции она выберет одну из досок и заменит число, написанное на этой доске, на \(b_j\).

Найдите максимально возможную сумму чисел на досках после выполнения всех \(m\) операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n,m \le 100\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную сумму чисел на досках после выполнения всех \(m\) операций.

Примечание

В первом примере Косия может выполнить операции следующим образом.

  1. Выбрать \(1\)-ю доску и заменить число на ней на \(b_1=4\).
  2. Выбрать \(2\)-ю доску и заменить число на \(b_2=5\).

После выполнения всех операций на досках будут написаны числа \(4\), \(5\) и \(3\) соответственно, их сумма равна \(12\). Можно показать, что это максимально возможная сумма.

Во втором примере Косия может выполнить операции следующим образом.

  1. Выбрать \(2\)-ю доску и заменить число на \(b_1=3\).
  2. Выбрать \(1\)-ю доску и заменить число на \(b_2=4\).
  3. Выбрать \(2\)-ю доску и заменить число на \(b_3=5\).

Сумма этих чисел равна \(4 + 5 = 9\). Можно показать, что это максимально возможная сумма.

C. Косия и теория чисел

китайская теорема об остатках математика Перебор теория чисел *1700

У Джой есть массив \(a\) из \(n\) положительных целых чисел. Косия хочет, чтобы вы определили, существует ли положительное целое число \(x > 0\) такое, что \(\gcd(a_i+x,a_j+x)=1\) для всех \(1 \leq i < j \leq n\).

Здесь \(\gcd(y, z)\) обозначает наибольший общий делитель (НОД) чисел \(y\) и \(z\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 100\)) — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq {10}^{18}\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если существует положительное целое число \(x\) такое, что \(\gcd(a_i+x,a_j+x)=1\) для всех \(1 \leq i < j \leq n\), и «NO» (без кавычек) иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом примере можно взять \(x = 4\). Это подходит, если:

  • Если \(i=1\) и \(j=2\), то \(\gcd(a_i+x,a_j+x)=\gcd(5+4,7+4)=\gcd(9,11)=1\).
  • Если \(i=1\) и \(j=3\), то \(\gcd(a_i+x,a_j+x)=\gcd(5+4,10+4)=\gcd(9,14)=1\).
  • Если \(i=2\) и \(j=3\), то \(\gcd(a_i+x,a_j+x)=\gcd(7+4,10+4)=\gcd(11,14)=1\).

Во втором примере при любом выборе \(x\) получается \(\gcd(a_1 + x, a_2 + x) = \gcd(3+x,3+x)=3+x\). Поэтому не существует подходящего значения \(x\).

D. Хоссам и дерево (под-)палиндромов

Деревья дп Перебор поиск в глубину и подобное Строки Структуры данных *2100

У Хоссама есть невзвешенное дерево \(G\), в вершинах которого записаны буквы.

Через \(s(v, \, u)\) Хоссам обозначает строку, которая получается при написании всех букв на единственном простом пути из вершины \(v\) в вершину \(u\) в дереве \(G\).

Строка \(a\) является подпоследовательностью строки \(s\), если \(a\) может быть получена из \(s\) путем удаления нескольких символов (возможно, ни одного). Например, «dores», «cf» и «for» являются подпоследовательностями «codeforces», а «decor» и «fork» не являются.

Палиндромом называется строка, читающаяся одинаково слева направо и справа налево. Например, «abacaba» — палиндром, а «abac» — нет.

Под-палиндромом строки \(s\) Хоссам называет подпоследовательность \(s\), являющуюся палиндромом. Например, «k», «abba» и «abhba» являются под-палиндромом строки «abhbka», а «abka» и «cat» — нет.

Максимальным под-палиндромом строки \(s\) Хоссам называет под-палиндром \(s\), имеющий максимальную длину среди всех под-палиндромов \(s\). Например, у строки «abhbka» есть только один максимальный под-палиндром — «abhba». Но может быть и так, что у строки несколько максимальных под-палиндромов: у строки «abcd» целых \(4\) максимальных под-палиндрома.

Хоссам просит вас найти длину самого длинного максимального под-палиндрома среди всех \(s(v, \, u)\) в заданном дереве \(G\).

Еще раз обращаем Ваше внимание на то, что под-палиндром — это подпоследовательность, а не подстрока.

Входные данные

В первой строке входного файла задано одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^3\)) — количество вершин в дереве.

Во второй строке задана строка \(s\) длины \(n\), \(i\)-й символ которой задает букву, которая записана в вершине дерева с номером \(i\). Гарантируется, что все символы этой строке — маленькие буквы латинского алфавита.

Далее идут \(n - 1\) строк, описывающие ребра в дереве. Каждое ребро задаётся двумя целыми числами \(v\) и \(u\) (\(1 \le v, \, u \le n\), \(v \neq u\)). Эти два числа означают, что в дереве есть ребро \((v, \, u)\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма по всем \(n\) не превышает \(2 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите одно число — длину самого длинного максимального под-палиндрома среди всех \(s(v, \, u)\).

Примечание

В первом примере искомым подпалиндромом может быть «aaa», символы которого расположены в вершинах \(1, \, 3, \, 5\) или «aca», символы которого расположены в вершинах \(1, \, 4, \, 5\).

Дерево из первого примера.

Во втором примере единственным искомым палиндромом является «bacab», символы которого расположены в вершинах \(4, \, 2, \, 1, \, 5, \, 9\).

Дерево из второго примера.

E. Хоссам и буква

дп Перебор реализация *2500

Хоссам купил новый участок земли длины \(n\) и ширины \(m\), он поделил его на \(n \cdot m\) квадратов, каждый из которых имеет размер \(1\times1\).

Так как имя Хоссам начинается с латинской буквы 'H', он хочет нарисовать большую букву 'H' путем построения стен размера \(1\times1\) на некоторых квадратах земли. Каждый квадрат земли \(1\times1\) может быть одного из трех типов: идеальный, средний, или плохой.

Процесс возведения стен для формирования буквы 'H' имеет следующие ограничения:

  • Буква должна состоять из одной горизонтальной и двух вертикальных линий.
  • Вертикальные линии не должны находиться в одном и том же или соседних столбцах.
  • Вертикальные линии должны начинаться в одной строке и заканчиваться в одной строке (и, следовательно, иметь одинаковую длину).
  • Горизонтальная линия должна соединять вертикальные линии, но не должна пересекать их.
  • Горизонтальная линия может находиться в любом ряду между вертикальными линиями (не только в середине), кроме верхней и нижней. (С горизонтальной линией в верхнем ряду буква выглядит как 'n', а в нижнем ряду как 'U'.)
  • Запрещается возводить стены в квадратах плохого качества.
  • Вы можете использовать не более одного квадрата среднего качества.
  • Вы можете использовать любое количество квадратов идеального качества.

Найдите максимальное количество стен, которые можно использовать для рисования буквы 'H'.

Смотрите примечание для получения дополнительных разъяснений.

Входные данные

Первая строка ввода содержит два целых числа \(n\), \(m\) (\(1 \le n, m \le 400\)).

Следующие \(n\) строк содержат \(m\) символов, описывающих участок. Символ '.' кодирует квадрат превосходного качества, 'm' — среднего качества, '#' — плохого качества.

Выходные данные

Выведите одно целое число — максимальное число стен в букве 'H'.

Если никак не возможно написать букву 'H', выведите \(0\).

Примечание

В первом тестовом примере никак не возможно написать букву 'H'.

Во втором примере, картинка показывает участок и некоторые допустимые буквы 'H'. Идеальные, средние, и плохие квадраты выделены белым, желтым, и черным цветом соответственно.

B. Поворот матрицы

Перебор реализация *800

У вас есть матрица \(2 \times 2\), заполненная различными целыми числами. Вы хотите, чтобы ваша матрица стала красивой. Матрица является красивой, если выполняются следующие условия:

  • в каждой строке первый элемент меньше второго;
  • в каждом столбце первый элемент меньше второго.

Вы можете совершать следующую операцию любое количество раз: повернуть матрицу на \(90\) градусов по часовой стрелке, так, что левый верхний элемент сдвигается в правую верхнюю ячейку, правый верхний элемент сдвигается в правую нижнюю ячейку, и так далее:

Определите, можно ли сделать матрицу красивой, выполнив ноль или более операций.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк; каждая из этих строк содержит по два целых числа — элементы соответствующей строки матрицы. В каждой матрице все элементы — различные целые числа от \(1\) до \(100\).

Выходные данные

Для каждого набора входных данных выведите YES, если матрица может стать красивой. В противном случае выведите NO. Каждую букву можно выводить в любом регистре (YES, yes, Yes будут распознаны как положительный ответ, NO, no и nO будут распознаны как отрицательный ответ).

D. Одинаковое число единиц

жадные алгоритмы Конструктив Перебор реализация *1600

ChthollyNotaSeniorious получил специальный подарок от AquaMoon: \(n\) бинарных массивов длины \(m\). AquaMoon говорит ему, что за одну операцию он может выбрать любые два массива и любую позицию \(pos\) от \(1\) до \(m\) и поменять местами элементы на позициях \(pos\) в этих массивах.

Его увлекла эта игра, и он хочет найти минимальное количество операций, которые необходимо выполнить, чтобы количество \(1\) во всех массивах было одинаковым. Он пригласил вас принять участие в этой интересной игре, поэтому, пожалуйста, попробуйте найти его!

Если это возможно, пожалуйста, выведите конкретные шаги обмена в формате, описанном в разделе выходных данных. В противном случае, пожалуйста, выведите \(-1\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 2\cdot 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^5\), \(2 \leq m \leq 10^5\)).

В \(i\)-й из следующих \(n\) строк содержится \(m\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, m}\) \((0 \le a_{i, j} \le 1)\)  — элементы \(i\)-го массива.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных, если цель недостижима, выведите \(-1\).

В противном случае в первой строке выведите \(k\) \((0 \le k \le mn)\)  — минимальное необходимое количество операций.

\(i\)-я из следующих \(k\) строк должна содержать \(3\) целых числа \(x_i, y_i, z_i\) \((1 \le x_i, y_i \le n, 1 \le z_i \le m)\), которые описывают операцию, которая меняет местами \(a_{x_i, z_i}, a_{y_i, z_i}\): меняет местами \(z_i\)-е числа \(x_i\)-го и \(y_i\)-го массивов.

Примечание

В первом наборе входных данных достаточно выполнить одну операцию: поменять местами первый элемент во второй и первой строках. Массивы станут \([0, 1, 1, 0], [1, 0, 1, 0], [1, 0, 0, 1]\), каждый из которых содержит ровно две \(1\).

F1. Фокусник и свиньи (простая версия)

Перебор реализация Структуры данных *2400

Это простая версия задачи. Единственное различие между двумя версиями  — это ограничения на \(n\) и \(x\). Вы можете делать взломы, только если обе версии задачи решены.

Little09 давно интересуется магией, и как же ему повезло, что он встречает фокусника! Фокусник выполнит \(n\) операций, каждая из которых является одной из следующих трех:

  • \(1\ x\): Создать свинью с \(x\) очками здоровья.
  • \(2\ x\): Уменьшить очки здоровья всех живых свиней на \(x\).
  • \(3\): Повторить все предыдущие операции. Формально, предполагая, что это \(i\)-я операция в последовательности операций, выполните по очереди первые \(i-1\) операций (включая операции «Повторить»).

Свинья умирает, когда ее очки здоровья становятся меньше или равны \(0\).

Little09 хочет знать, сколько живых свиней осталось после всех операций. Пожалуйста, выведите ответ по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1\leq n\leq 2\cdot 10^5\))  — количество операций.

Каждая из следующих \(n\) строк содержит операцию, заданную в форме, описанной в условии задачи. Гарантируется, что \(1\leq x\leq 2\cdot 10^5\) в операциях первых двух типов.

Выходные данные

Выведите одно целое число  — количество живых свиней после всех операций, по модулю \(998\,244\,353\).

Примечание

В первом примере операции эквивалентны повторению следующего четыре раза: создать свинью с \(8\) очками здоровья, а затем уменьшить очки здоровья всех живых свиней на \(3\). Легко видеть, что в конце остаются две живые свиньи с \(2\) и \(5\) очками здоровья.

F2. Фокусник и свиньи (сложная версия)

Бинарный поиск Перебор реализация Структуры данных *2700

Это сложная версия задачи. Единственное различие между двумя версиями  — это ограничения на \(n\) и \(x\). Вы можете делать взломы, только если обе версии задачи решены.

Little09 давно интересуется магией, и как же ему повезло, что он встречает фокусника! Фокусник выполнит \(n\) операций, каждая из которых является одной из следующих трех:

  • \(1\ x\): Создать свинью с \(x\) очками здоровья.
  • \(2\ x\): Уменьшить очки здоровья всех живых свиней на \(x\).
  • \(3\): Повторить все предыдущие операции. Формально, предполагая, что это \(i\)-я операция в последовательности операций, выполните по очереди первые \(i-1\) операций (включая операции «Повторить»).

Свинья умирает, когда ее очки здоровья становятся меньше или равны \(0\).

Little09 хочет знать, сколько живых свиней осталось после всех операций. Пожалуйста, выведите ответ по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1\leq n\leq 8\cdot 10^5\))  — количество операций.

Каждая из следующих \(n\) строк содержит операцию, заданную в форме, описанной в условии задачи. Гарантируется, что \(1\leq x\leq 10^9\) в операциях первых двух типов.

Выходные данные

Выведите одно целое число  — количество живых свиней после всех операций, по модулю \(998\,244\,353\).

Примечание

В первом примере операции эквивалентны повторению следующего четыре раза: создать свинью с \(8\) очками здоровья, а затем уменьшить очки здоровья всех живых свиней на \(3\). Легко видеть, что в конце остаются две живые свиньи с \(2\) и \(5\) очками здоровья.

G. Покрытие отрезками

Деревья дп Комбинаторика Конструктив Перебор Структуры данных *3200

ChthollyNotaSeniorious дает DataStructures числовую ось с \(m\) различными отрезками на ней. Пусть \(f(l,r)\)  — количество способов выбрать четное число отрезков так, чтобы их объединение было равно \([l,r]\), а \(g(l,r)\)  — количество способов выбрать нечетное число отрезков так, чтобы их объединение было равно \([l,r]\).

ChthollyNotaSeniorious задал DataStructures \(q\) вопросов. В каждом вопросе ChthollyNotaSeniorious дает DataStructures два числа \(l, r\), и хочет, чтобы вы помогли ему найти значение \(f(l,r)-g(l,r)\) по модулю \(998\,244\,353\), чтобы он не подвел ее.

Входные данные

Первая строка ввода содержит два целых числа \(m\) (\(1 \leq m \leq 2 \cdot 10^5\)) и \(q\) (\(1 \leq q \leq 2 \cdot 10^5\))  — количество отрезков и запросов, соответственно.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \leq x_i < y_i \leq 10^9\)), обозначающие отрезок \([x_i, y_i]\).

Гарантируется, что все отрезки попарно различны. Более формально, не существует двух чисел \(i, j\) при \(1 \le i < j \le m\) таких, что \(x_i = x_j\) и \(y_i = y_j\).

\(i\)-я из следующих \(q\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i < r_i \leq 10^9\)), описывающие запрос.

Выходные данные

Для каждого запроса выведите одно целое число  — \(f(l_i,r_i)-g(l_i,r_i)\) по модулю \(998\,244\,353\).

Примечание

В первом запросе мы должны найти \(f(1, 4) - g(1, 4)\). Единственное подмножество отрезков с объединением \([1, 4]\) это \(\{[1, 3], [2, 4]\}\), поэтому \(f(1, 4) = 1, g(1, 4) = 0\).

Во втором запросе нам нужно найти \(f(1, 5) - g(1, 5)\). Единственными подмножествами отрезков с объединением \([1, 5]\) являются \(\{[1, 3], [2, 4], [3, 5]\}\) и \(\{[1, 3], [3, 5]\}\), поэтому \(f(1, 5) = 1, g(1, 5) = 1\).

A1. Садовник и капибары (простая версия)

Конструктив Перебор реализация *800

Это простая версия задачи. Различия между версиями заключаются в ограничениях на длину строки. Вы можете делать взломы, только если обе версии задачи сданы.

Казимир Казимирович — марсианский садовник. У него есть огромный сад, в котором растут двоичные сбалансированные яблони.

Недавно Казимир решил завести себе трех капибар. Садовник даже придумал им имена и записал их на листе бумаги. Имя каждой из капибар — непустая строка, состоящая из строчных букв «a» и «b».

Обозначим имена капибар строками \(a\), \(b\) и \(c\). Тогда Казимир записал непустые строки \(a\), \(b\) и \(c\) подряд без пробелов. Например, если капибар звали «aba», «ab» и «bb», то записанная садовником строка будет выглядеть как «abaabbb».

Садовник запомнил интересное свойство: либо строка \(b\) лексикографически не меньше строк \(a\) и \(c\) одновременно, либо строка \(b\) лексикографически не больше строк \(a\) и \(c\) одновременно. Иными словами, либо выполнено \(a \le b\) и \(c \le b\), либо выполнено \(b \le a\) и \(b \le c\) (а возможно, и оба условия одновременно). Здесь \(\le\) обозначает лексикографическое «меньше или равно» для строк. Таким образом, \(a \le b\) значит, что строки должны быть либо равны, либо строка \(a\) должна стоять раньше в словаре, чем строка \(b\). Более подробное объяснение этой операции см. в разделе «Примечание».

Сегодня садовник взглянул на свои записи и понял, что не может восстановить имена, поскольку они записаны без пробелов. Он уже не уверен, сможет ли восстановить оригинальные строки \(a\), \(b\) и \(c\), поэтому ему хочется найти любую тройку имен, которая удовлетворяет описанному выше свойству.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке набора входных данных находится строка \(s\) (\(3 \le |s| \le 100\)) — имена капибар, записанные слитно. Строка состоит только из латинских букв «a» и «b».

Гарантируется, что сумма длин строк по всем наборам тестовых данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке три строки \(a\), \(b\) и \(c\), разделенные пробелами — имена, при записи которых без пробелов получается строка \(s\). При этом должно выполняться либо \(a \le b\) и \(c \le b\), либо \(b \le a\) и \(b \le c\).

Если способов восстановить имена несколько, то выведите любой из них. Если имена восстановить невозможно, то выведите «:(» (без кавычек).

Примечание

Строка \(x\) лексикографически меньше строки \(y\), если и только если выполняется один из следующих пунктов:

  • \(x\) — префикс \(y\), но \(x \ne y\);
  • в первой позиции, где \(x\) и \(y\) различны, в строке \(x\) находится буква «a», а в строке \(y\) — буква «b».

Теперь перейдем к примерам.

В первом наборе входных данных один из возможных способов разбить строку \(s\) на три строки — это «b», «bb», «a».

В третьем наборе входных данных можно заметить, что разбиение удовлетворяет двум условиям сразу (т. е. \(a \le b\), \(c \le b\), \(b \le a\) и \(b \le c\) верны одновременно).

C. Гибкая строка

битмаски Перебор Строки *1600

У вас есть строка \(a\) и строка \(b\). Обе строки имеют длину \(n\). В строке \(a\) содержится не более \(10\) различных символов. У вас также есть множество \(Q\). Изначально множество \(Q\) пусто. Вы можете применить следующую операцию к строке \(a\) любое количество раз:

  • Выберите индекс \(i\) (\(1\leq i \leq n\)) и строчный латинскую букву \(c\). Добавьте \(a_i\) в множество \(Q\) и замените \(a_i\) на \(c\).

Например, пусть строка \(a\) — это «\(\tt{abecca}\)». Мы можем выполнить следующие операции:

  • В первой операции, если выбрать \(i = 3\) и \(c = \tt{x}\), символ \(a_3 = \tt{e}\) будет добавлен к множеству \(Q\). Таким образом, множество \(Q\) будет равняться \(\{\tt{e}\}\), а строка \(a\) станет «\(\tt{ab\underline{x}cca}\)».
  • Во второй операции, если выбрать \(i = 6\) и \(c = \tt{s}\), то символ \(a_6 = \tt{a}\) будет добавлен к множеству \(Q\). Таким образом, множество \(Q\) будет равняться \(\{\tt{e}, \tt{a}\}\), а строка \(a\) будет «\(\tt{abxcc\underline{s}}\)».

Со строкой \(a\) можно выполнить любое количество операций, но в конце множество \(Q\) должно содержать не более \(k\) различных символов. Учитывая это ограничение, вам нужно максимизировать количество пар целых чисел \((l, r)\) (\(1\leq l\leq r \leq n\)) таких, что \(a[l,r] = b[l,r]\). Здесь \(s[l,r]\) означает подстроку строки \(s\), начинающуюся с индекса \(l\) (включительно) и заканчивающуюся индексом \(r\) (включительно).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1\leq n \leq 10^5\), \(0\leq k\leq 10\)) — длина двух строк и ограничение на размер множества \(Q\).

Вторая строка содержит строку \(a\) длины \(n\). В строке \(a\) содержится не более \(10\) различных символов.

Последняя строка содержит строку \(b\) длины \(n\).

Обе строки \(a\) и \(b\) содержат только строчные латинские буквы. Сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите в строке одно целое число — максимальное количество пар \((l, r)\), удовлетворяющих ограничениям.

Примечание

В первом наборе входных данных мы можем выбрать индекс \(i = 3\) и заменить его символом \(c = \tt{d}\). Все возможные пары \((l,r)\) будут удовлетворять условию.

Во втором наборе мы не можем выполнить ни одну операцию. \(3\) удовлетворяющие условию пары \((l,r)\):

  1. \(a[1,1] = b[1,1] =\) «\(\tt{a}\)»,
  2. \(a[1,2] = b[1,2] =\) «\(\tt{ab}\)»,
  3. \(a[2,2] = b[2,2] =\) «\(\tt{b}\)».

В третьем наборе мы можем выбрать индекс \(2\) и индекс \(3\) и заменить их символами \(\tt{c}\) и \(\tt{d}\) соответственно. Множество \(Q\) в конце будет равняться \(\{\tt{b}\}\) (размер равен \(1\), не превышает \(k\)). Все возможные пары \((l,r)\) будут подходить под условие.

H. Олимпийский тимбилдинг

meet-in-the-middle Перебор *3500

Гвозден и Вукашин участвует в шахматной олимпиаде и хочет устроить тимбилдинг. Он собрал \(n\) игроков, где \(n\) является степенью \(2\), и предложил заняться спортом. Гвозден и Вукашин входит в число этих \(n\) человек.

Одно из спортивных мероприятий — перетягивание каната. Для каждого \(1\leq i \leq n\) сила \(i\)-го игрока равна \(s_i\). Гвозден будет проводить раунды на выбывание до тех пор, пока не останется один игрок. Мы назовем этого игрока абсолютным победителем.

В каждом раунде:

  • Предположим, что \(m>1\) игроков все еще в игре, где \(m\) является степенью \(2\).
  • Эти \(m\) игроков разбиваются на две команды равных размеров (т. е. по \(m/2\) в каждой команде). Сила команды равна сумме сил всех игроков.
  • Если команды имеют равные значения силы, то Гвозден выбирает, кто выигрывает; иначе выигрывает более сильная команда.
  • Все игроки в проигравшей команде выбывают, и остается \(m/2\) игроков.

Гвозден может выбирать, как образуются команды на в каждом раунде, и команду-победителя в случае равных сил. Гвозден знает силу каждого игрока и ему интересно, кто может стать абсолютным победителем, а кто не может. Ответьте на этот вопрос.

Входные данные

Первая строка содержит одно целое число \(n\) (\(4 \leq n \leq 32\)) — количество игроков. Гарантируется, что \(n\) являются степенью \(2\).

Вторая строка содержит последовательность целых чисел \(s_1,s_2, \ldots, s_n\) (\(1 \leq s_i \leq 10^{15}\)) — силы игроков.

Выходные данные

В единственной строке выведите бинарную строку \(s\) длины \(n\): \(i\)-й символ \(s\) должен быть равен \(1\), если \(i\)-й игрок может стать абсолютным победителем, и \(0\) в противном случае.

Примечание

В первом примере игроки \(1\) и \(4\), имеющие силы \(60\) и \(87\), могут стать абсолютными победителями.

Опишем процесс для игрока \(1\). Изначально мы разделим игроков на команды \([1,3]\) и \([2,4]\). Силы команд равны \(60+59=119\) и \(32+87=119\). Так как они равны, то Гвозден может выбрать, кто выбывает, пусть это будет вторая команда.

Остаются два игрока \(1\) и \(3\). Так как у \(1\) сила больше (\(60>59\)), то он побеждает и становится абсолютным победителем.

В третьем примере силы остающихся игроков может быть \([8,8,8,8,4,4,4,4] \rightarrow [8,8,4,4] \rightarrow [8,4] \rightarrow [8]\). Любой игрок с силой \(8\) может стать абсолютным победителем, и можно показать, что все остальные не могут.

B. НОД разбиение

жадные алгоритмы математика Перебор теория чисел *1100

Находясь у Киры дома, Джоске увидел на столе лист с написанной на нем задачей.

Задача звучала так. Есть массив \(a\) длины \(n\). На этом массиве нужно сделать следующее:

  • выбрать число \(k > 1\);
  • разбить массив на \(k\) подотрезков \(^\dagger\);
  • посчитать сумму в каждом из \(k\) подотрезков и записать их в другой массив \(b\) (где сумма подотрезка \((l, r)\) равна \({\sum_{j = l}^{r}a_j}\));
  • итоговым счетом такого разбиения будет \(\gcd(b_1, b_2, \ldots, b_k)^\ddagger\).

Задача заключается в поиске такого разбиения, чтобы счет был максимально возможным. Джоске заинтересовался данной задачей, но не силен в информатике. Помогите ему найти максимально возможный счет.

\(^\dagger\) Разбиением массива на \(k\) подотрезков называется \(k\) пар чисел \((l_1, r_1), (l_2, r_2), \ldots, (l_k, r_k)\) таких, что \(l_i \le r_i\) и для каждого \(1 \le j \le k - 1\) верно \(l_{j + 1} = r_j + 1\), а также \(l_1 = 1\) и \(r_k = n\). Эти пары представляют сами подотрезки.

\(^\ddagger\) \(\gcd(b_1, b_2, \ldots, b_k)\) обозначает наибольший общий делитель (НОД) массива \(b\).

Входные данные

Первая строка содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Для каждого набора данных в первой строке содержится одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, a_3, \ldots, a_n\) (\(1 \le a_i \le 10^9 \)) — сам массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — максимальный счет при оптимальном разбиении.

Примечание

В первом наборе входных данных можно выбрать \(k = 2\) и разбить массив на подотрезки \((1, 2)\) и \((3, 4)\).

Тогда счет такого разбиения будет равен \(\gcd(a_1 + a_2, a_3 + a_4) = \gcd(2 + 2, 1 + 3) = \gcd(4, 4) = 4\).

В четвертом наборе входных данных можно выбрать \(k = 3\) и разбить массив на подотрезки \((1, 2), (3, 5), (6, 6)\).

Счётом разбиения будет \(\gcd(1 + 2, 1 + 1 + 1, 3) = 3\).

E. Джоске и полный граф

Бинарный поиск математика Перебор Структуры данных теория чисел *2400

Джоске в подарок от дедушки получил огромный неориентированный взвешенный полный\(^\dagger\) граф \(G\), который содержит \(10^{18}\) вершин. Особенность подарка в том, что вес ребра между различными вершинами \(u\) и \(v\) равен \(\gcd(u, v)^\ddagger\). Джоске решил поэкспериментировать и сделать новый граф \(G'\). Для этого он выбирает два целых числа \(l \le r\), и оставляет только такие вершины \(v\), что \(l \le v \le r\), а также оставляет только ребра между оставшимися вершинами.

Теперь Джоске интересуется, сколько различных весов ребер в графе \(G'\). Так как граф получился огромный, он просит вашей помощи.

\(^\dagger\) Полным графом называется простой неориентированный граф, в котором каждая пара различных вершин смежна.

\(^\ddagger\) \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(l\), \(r\) (\(1 \le l \le r \le 10^{18}\), \(l \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите единственное число — количество различных весов среди оставшихся ребер.

Примечание
Графа \(G'\) для первого набора входных данных.

На рисунке видно, что в графе \(2\) различных веса ребер.

В пятом наборе входных данных остается лишь одна вершина, из которой не исходит ни одного ребра, поэтому ответ — \(0\).

F. Три стула

битмаски дп Комбинаторика Перебор сортировки Структуры данных теория чисел *2300

Как-то раз Кира нашел \(n\) друзей из Морио и решил собрать их за одним столом, чтобы провести мирный разговор. Рост друга \(i\) равен \(a_i\). Так получилось, что рост каждого из друзей уникален.

Но вот незадача, в доме Киры всего \(3\) стула, и всех друзей усадить явно не удастся! Поэтому Кира должен позвать только \(3\) друзей.

Но все не так просто! Если рост самого низкого и самого высокого из приглашенных друзей не взаимно просты, то друзья будут подшучивать друг над другом, что сильно разозлит Киру.

Кира заинтересовался, сколько есть способов позвать \(3\) друзей так, чтобы они не стали подшучивать друг над другом? Два способа считаются различными, если существует такой друг, что он приглашен в одном случае, и не приглашен в другом.

Формально, если Кира позовет друзей с номерами \(i\), \(j\) и \(k\), то должно выполняться \(\gcd(\min(a_i, a_j, a_k), \max(a_i, a_j, a_k)) = 1\), где \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Кира не очень силен в информатике, поэтому просит вас посчитать количество различных способов позвать друзей.

Входные данные

В первой строке записано число \(n\) (\(3 \le n \le 3\cdot10^5\)) — количество друзей Киры.

В следующей строке записано \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 3\cdot10^5\)) — рост друзей Киры.

Выходные данные

В единственной строке выведите количество способов позвать друзей.

Примечание

В первом примере подходит одна способ — позвать друзей \(1\), \(2\) и \(3\). Здесь \(1 < 2 < 3\), и числа \(1\) и \(3\) взаимно просты.

B. Поход в кинотеатр

жадные алгоритмы Перебор сортировки *1000

В компании из \(n\) человек организуется поход в кинотеатр. Каждый человек может либо пойти, либо нет. Это зависит от того, сколько ещё народу пойдёт. А именно, каждый человек \(i\) сказал: «Я хочу пойти в кинотеатр тогда и только тогда, когда пойдут хотя бы ещё \(a_i\) других человек, не считая меня». Это значит, что \(i\)-й человек расстроится в двух случаях:

  • если он пойдёт в кинотеатр, а кроме него пойдут строго менее \(a_i\) других человек; или
  • если он не пойдёт в кинотеатр, но при этом пойдут хотя бы \(a_i\) других человек.

Сколько есть способов выбрать множество людей, идущих в кинотеатр, чтобы никто не расстроился?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — число людей в компании.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n - 1\)) — числа из высказываний людей.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — число различных способов выбрать множество людей, идущих в кинотеатр, чтобы никто не расстроился.

Примечание

В первом наборе входных данных оба человека хотят пойти тогда и только тогда, когда другой человек пойдёт. Есть два подходящих варианта: либо оба пойдут, либо оба не пойдут. Если же пойдёт лишь один из двоих, то оба окажутся расстроены.

Во втором наборе входных данных в кинотеатр должны пойти все. В любом другом варианте обязательно кто-нибудь расстроится.

В третьем наборе входных данных есть три допустимых варианта: либо идёт человек с номером \(2\); либо идут люди с номерами \(2, 3, 4, 7\); либо идут все восемь человек.

C. Равные частоты

жадные алгоритмы Конструктив Перебор реализация сортировки Строки *1600

Назовём строку сбалансированной, если все символы, которые в ней присутствуют, входят в неё одинаковое число раз. Например, «coder», «appall» и «ttttttt» — сбалансированные строки, а «wowwow» и «codeforces» — нет.

Вам дана строка \(s\) длины \(n\), состоящая из строчных латинских букв. Найдите сбалансированную строку \(t\) той же длины \(n\), состоящую из строчных латинских букв и отличающуюся от строки \(s\) в как можно меньшем числе позиций. Другими словами, число индексов \(i\) таких, что \(s_i \ne t_i\), должно быть минимальным возможным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину строки \(s\).

Вторая строка содержит строку \(s\) длины \(n\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите наименьшее число позиций, в которых строка \(s\) и сбалансированная строка \(t\) могут отличаться, и далее выведите саму такую строку \(t\).

Если существует несколько решений, выведите любое из них. Можно показать, что хотя бы одна сбалансированная строка всегда существует.

Примечание

В первом наборе входных данных заданная строка «hello» не является сбалансированной: буквы «h», «e» и «o» встречаются в ней по одному разу, а буква «l» — два раза. С другой стороны, строка «helno» сбалансирована: в ней присутствуют пять разных букв, и каждая из них встречается ровно один раз. Строки «hello» и «helno» отличаются всего в одной позиции — в четвёртом символе. Возможны и другие решения.

Во втором наборе входных данных строка «codefofced» сбалансирована, так как в ней присутствуют только буквы «c», «o», «d», «e» и «f», и каждая из них встречается ровно два раза.

В третьем наборе входных данных строка «eeeee» сбалансирована, так как в ней присутствует только буква «e».

В четвёртом наборе входных данных заданная строка «appall» уже сбалансирована.

D. Много точных квадратов

математика Перебор теория чисел *1800

Дано множество \(a_1, a_2, \ldots, a_n\) из различных положительных целых чисел.

Назовем квадратностью целого числа \(x\) количество точных квадратов среди чисел \(a_1 + x, a_2 + x, \ldots, a_n + x\).

Найдите максимальную квадратность среди всех целых чисел \(x\) от \(0\) до \(10^{18}\) включительно.

Напомним, что точными квадратами являются числа вида \(t^2\), где \(t\) — неотрицательное целое число. Наименьшими точными квадратами являются \(0, 1, 4, 9, 16, \ldots\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — размер множества.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) в возрастающем порядке (\(1 \le a_1 < a_2 < \ldots < a_n \le 10^9\)) — само множество.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(50\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наибольшее возможное количество чисел среди \(a_1 + x, a_2 + x, \ldots, a_n + x\), являющихся точными квадратами, для некоторого \(0 \le x \le 10^{18}\).

Примечание

В первом наборе входных данных при \(x = 0\) в множестве будут два точных квадрата — \(1\) и \(4\). Более двух точных квадратов получить нельзя.

Во втором наборе входных данных при \(x = 3\) множество примет вид \(4, 9, 16, 25, 100\), то есть все его элементы станут точными квадратами.

E. Сжатие прямоугольников

Бинарный поиск жадные алгоритмы Перебор реализация Структуры данных *2300

Перед вами прямоугольная таблица высоты \(2\) и ширины \(10^9\), состоящая из единичных клеток. На таблице расположено \(n\) прямоугольников, причём границы прямоугольников проходят по границам клеток. \(i\)-й прямоугольник покрывает все клетки в строках с \(u_i\) по \(d_i\) включительно и столбцах с \(l_i\) по \(r_i\) включительно (\(1 \le u_i \le d_i \le 2\); \(1 \le l_i \le r_i \le 10^9\)). Данные прямоугольники могут произвольным образом пересекаться, вкладываться и совпадать.

Вам нужно каждый прямоугольник либо удалить, либо заменить на любой свой непустой подпрямоугольник. Во втором случае подпрямоугольник должен целиком содержаться в исходном прямоугольнике, а его границы всё также должны проходить по границам клеток. При этом разрешается, чтобы подпрямоугольник совпал с исходным прямоугольником.

Требуется, чтобы никакие два (неудаленных) прямоугольника после замены не имели общих клеток, а суммарная площадь, покрытая новыми прямоугольниками, была как можно больше.

Рисунок для первого набора входных данных. Сверху изображены данные прямоугольники, снизу — изменённые. Прямоугольник номер \(4\) был удалён.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество прямоугольников.

Каждая из следующих \(n\) строк содержит четыре целых числа \(u_i, l_i, d_i, r_i\) (\(1 \le u_i \le d_i \le 2\); \(1 \le l_i \le r_i \le 10^9\)) — координаты клеток, находящихся в левом верхнем и правом нижнем углу прямоугольника соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных сначала выведите целое число \(s\) — максимальную возможную площадь, покрытую новыми прямоугольниками. Далее в \(n\) строках выведите ваше решение для покрытия такой площади.

В \(i\)-й из этих строк выведите четыре целых числа \(u'_i, l'_i, d'_i, r'_i\). Если вы удаляете \(i\)-й прямоугольник, выведите \(u'_i = l'_i = d'_i = r'_i = 0\). Иначе эти числа обозначают новые координаты клеток в левом верхнем и правом нижнем углу \(i\)-го прямоугольника соответственно. Они должны удовлетворять следующим неравенствам: \(u_i \le u'_i \le d'_i \le d_i\); \(l_i \le l'_i \le r'_i \le r_i\).

Если существует несколько решений, выведите любое из них.

Примечание

На рисунке в условии задачи изображен первый набор входных данных.

D. Различные массивы

дп Перебор реализация *2000

Вам дан массив \(a\), состоящий из \(n\) целых чисел.

Вы должны выполнить последовательность из \(n-2\) операций над этим массивом:

  • во время первой операции вы либо прибавляете \(a_2\) к \(a_1\) и вычитаете \(a_2\) из \(a_3\), либо прибавляете \(a_2\) к \(a_3\) и вычитаете \(a_2\) из \(a_1\);
  • во время второй операции вы либо прибавляете \(a_3\) к \(a_2\) и вычитаете \(a_3\) из \(a_4\), либо прибавляете \(a_3\) к \(a_4\) и вычитаете \(a_3\) из \(a_2\);
  • ...
  • во время последней операции вы либо прибавляете \(a_{n-1}\) к \(a_{n-2}\) и вычитаете \(a_{n-1}\) из \(a_n\), либо прибавляете \(a_{n-1}\) к \(a_n\) и вычитаете \(a_{n-1}\) из \(a_{n-2}\).

То есть во время \(i\)-й операции вы прибавляете элемент \(a_{i+1}\) к одному из его соседей и вычитаете его из другого соседа.

Например, если у вас есть массив \([1, 2, 3, 4, 5]\), один из способов провести над ним последовательность операций — следующий:

  • вычесть \(2\) из \(a_3\) и прибавить к \(a_1\), массив станет \([3, 2, 1, 4, 5]\);
  • вычесть \(1\) из \(a_2\) и прибавить к \(a_4\), массив станет \([3, 1, 1, 5, 5]\);
  • вычесть \(5\) из \(a_3\) и прибавить к \(a_5\), массив станет \([3, 1, -4, 5, 10]\).

В итоге получится массив \([3, 1, -4, 5, 10]\).

Назовем массив достижимым, если его можно получить в результате применения всей последовательности операций к массиву \(a\). Посчитайте количество достижимых массивов, а затем выведите остаток от деления этого количества на \(998244353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(3 \le n \le 300\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 300\)).

Выходные данные

Выведите одно целое число — количество достижимых массивов, взятое по модулю \(998244353\).

E. Игра года

математика Перебор Структуры данных теория чисел *2300

Монокарп и Поликарп играют в компьютерную игру. В этой игре есть \(n\) боссов, пронумерованных от \(1\) до \(n\).

Они будут сражаться с каждым боссом по следующему алгоритму:

  • Монокарп делает \(k\) попыток убить босса;
  • Поликарп делает \(k\) попыток убить босса;
  • Монокарп делает \(k\) попыток убить босса;
  • Поликарп делает \(k\) попыток убить босса;
  • ...

Монокарп убивает \(i\)-го босса со своей \(a_i\)-й попытки. Поликарп убивает \(i\)-го босса со своей \(b_i\)-й попытки. Когда один из них убивает \(i\)-го босса, они переходят к \((i+1)\)-му боссу. Счетчики количества попыток сбрасываются для них обоих. Когда один из них убивает \(n\)-го босса, игра заканчивается.

Найдите все такие значения \(k\) от \(1\) до \(n\), что Монокарп убивает всех боссов.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество боссов.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — номер попытки, на которой Монокарп убивает каждого босса.

В третьей строке записаны \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le n\)) — номер попытки, на которой Поликарп убивает каждого босса.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите две строки. В первой строке должно быть записано одно целое число \(\mathit{cnt}\) — количество таких значений \(k\) от \(1\) до \(n\), что Монокарп убьет всех боссов в первой строке. Во второй строке выведите \(\mathit{cnt}\) различных целых чисел — сами значения \(k\).

Примечание

Рассмотрим последний набор входных данных примера.

Пусть \(k = 1\). Сначала Монокарп делает одну попытку убить первого босса. Она успешная, так как \(a_1 = 1\). Затем Монокарп делает одну попытку убить второго босса. Она неуспешная, так как \(a_2 > 1\). Тогда Поликарп делает попытку. Она также неуспешная, так как \(b_2 > 1\). Затем Монокарп делает еще попытку. Она все еще неуспешная, так как \(a_2 > 2\). Это продолжается до тех пор, пока Поликарп наконец не убьет босса со своей третьей попытки. Монокарп не убил этого босса, поэтому \(k = 1\) — это не ответ.

Пусть \(k = 2\). Монокарп все еще убивает первого босса с первой попытки. Затем делает две неуспешные попытки на второго босса. Затем Поликарп делает две неуспешные попытки. Затем Монокарп делает еще две попытки и убивает босса со своей четвертой попытки. Третий босс похож на второго. Сначала две неуспешные попытки от Монокарпа. Затем две неуспешные попытки от Поликарпа. Затем у Монокарпа есть еще две попытки, но уже его первая успешная, так как \(a_3 = 3\). Четвертый босс также убит Монокарпом. Поэтому \(k = 2\) — это ответ.

A. Монстры (простая версия)

жадные алгоритмы Перебор *1000

Это простая версия задачи. В этой версии задачи ответ нужно вычислить один раз. В этой версии задачи взломы запрещены.

В компьютерной игре вы сражаетесь против \(n\) монстров. Монстр с номером \(i\) имеет \(a_i\) единиц здоровья, где \(a_i\) — целое число. Монстр жив, пока имеет хотя бы \(1\) единицу здоровья.

Вы можете использовать заклинания двух типов:

  1. Нанести \(1\) единицу урона любому живому монстру на ваш выбор.
  2. Нанести \(1\) единицу урона всем живым монстрам. Если хотя бы один монстр умирает (оказывается с \(0\) единицами здоровья) в результате этого действия — повторить его (и продолжать повторять, пока хотя бы один монстр умирает после каждого применения).

При нанесении \(1\) единицы урона здоровье монстра уменьшается на \(1\).

Заклинания типа 1 могут быть использованы сколько угодно раз, а заклинание типа 2 — не более одного раза за игру.

Какое наименьшее число раз вам нужно применить заклинания типа 1, чтобы убить всех монстров?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — число монстров.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — число единиц здоровья у монстров.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наименьшее число раз, которое нужно применить заклинания типа 1, чтобы убить всех монстров.

Примечание

В первом наборе входных данных начальные значения здоровья у монстров равны \([3, 1, 2]\). Достаточно применить заклинание типа 2:

  • Здоровья монстров становятся равны \([2, 0, 1]\). Так как монстр номер \(2\) умер, заклинание повторяется.
  • Здоровья монстров становятся равны \([1, 0, 0]\). Так как монстр номер \(3\) умер, заклинание повторяется.
  • Здоровья монстров становятся равны \([0, 0, 0]\). Так как монстр номер \(1\) умер, заклинание повторяется.
  • Здоровья монстров становятся равны \([0, 0, 0]\).

Так как можно обойтись вообще без заклинаний типа 1, ответ равен \(0\).

Во втором наборе входных данных начальные значения здоровья у монстров равны \([4, 1, 5, 4, 1, 1]\). Одной из оптимальных является следующая последовательность действий:

  • Используя заклинание типа 1, нанести \(1\) единицу урона монстру номер \(1\). Здоровья монстров становятся равны \([3, 1, 5, 4, 1, 1]\).
  • Используя заклинание типа 1, нанести \(1\) единицу урона монстру номер \(4\). Здоровья монстров становятся равны \([3, 1, 5, 3, 1, 1]\).
  • Используя заклинание типа 1, снова нанести \(1\) единицу урона монстру номер \(4\). Здоровья монстров становятся равны \([3, 1, 5, 2, 1, 1]\).
  • Использовать заклинание типа 2:
    • Здоровья монстров становятся равны \([2, 0, 4, 1, 0, 0]\). Так как монстры номер \(2\), \(5\) и \(6\) умерли, заклинание повторяется.
    • Здоровья монстров становятся равны \([1, 0, 3, 0, 0, 0]\). Так как монстр номер \(4\) умер, заклинание повторяется.
    • Здоровья монстров становятся равны \([0, 0, 2, 0, 0, 0]\). Так как монстр номер \(1\) умер, заклинание повторяется.
    • Здоровья монстров становятся равны \([0, 0, 1, 0, 0, 0]\).
  • Используя заклинание типа 1, нанести \(1\) единицу урона монстру номер \(3\). Здоровья монстров становятся равны \([0, 0, 0, 0, 0, 0]\).

Всего заклинания типа 1 были применены \(4\) раза. Можно показать, что это наименьшее возможное число.

E. Бесконечная игра

дп игры Комбинаторика Перебор Теория вероятностей *3100

Алиса и Боб играют в бесконечную игру, состоящую из сетов. Каждый сет состоит из раундов. В каждом раунде выигрывает один из игроков. В сете выигрывает тот, кто первым выиграет два раунда. Соответственно, сет всегда заканчивается со счётом \(2:0\) или \(2:1\) по раундам в пользу одного из игроков.

Сценарием игры назовём конечную строку \(s\) из символов «a» и «b». Рассмотрим бесконечную строку, образованную повторениями строки \(s\): \(sss \ldots\) Пусть игроки играют раунды в соответствии с этой бесконечной строкой по порядку. Если очередной символ строки \(sss \ldots\) равен «a», то в текущем раунде выигрывает Алиса, если «b» — выигрывает Боб. Как только один из игроков выигрывает два раунда, сет завершается в его пользу, и со следующего раунда начинается новый сет.

Пусть \(a_i\) равно числу выигранных Алисой сетов среди первых \(i\) сетов при игре по данному сценарию. Обозначим через \(r\) предел отношения \(\frac{a_i}{i}\) при \(i \rightarrow \infty\). Если \(r > \frac{1}{2}\), то строку \(s\) назовём выигрышным для Алисы сценарием. Если \(r = \frac{1}{2}\), то строку \(s\) назовём ничейным сценарием. Если \(r < \frac{1}{2}\), то строку \(s\) назовём выигрышным для Боба сценарием.

Вам дана строка \(s\), состоящая из символов «a», «b» и «?». Рассмотрим все способы заменить каждый символ «?» на «a» или «b», чтобы получить строку, состоящую только из символов «a» и «b». Посчитайте, в скольких случаях получится выигрышный для Алисы сценарий, в скольких — ничейный, а в скольких — выигрышный для Боба, и выведите эти три числа по модулю \(998\,244\,353\).

Входные данные

Единственная строка ввода содержит строку \(s\) (\(1 \le |s| \le 200\)), состоящую из символов «a», «b» и «?».

Выходные данные

Выведите три числа: сколько способов замены приведут к выигрышному для Алисы сценарию, сколько — к ничейному, а сколько — к выигрышному для Боба. Все числа нужно вывести по модулю \(998\,244\,353\).

Примечание

В первом примере есть четыре варианта замены:

  • \(s = \mathtt{aa}\): Алиса выигрывает все сеты со счётом \(2:0\) — сценарий выигрышный для Алисы;
  • \(s = \mathtt{ab}\): поочерёдно сначала Алиса, а потом Боб выигрывает сет со счётом \(2:1\) — сценарий ничейный;
  • \(s = \mathtt{ba}\): поочерёдно сначала Боб, а потом Алиса выигрывает сет со счётом \(2:1\) — сценарий ничейный;
  • \(s = \mathtt{bb}\): Боб выигрывает все сеты со счётом \(2:0\) — сценарий выигрышный для Боба.

B. Производство тортов

Перебор сортировки *1300

На некотором кондитерском заводе произошла очередная оптимизация линии по производству тортов, и теперь торты выпускаются сразу партиями по \(n\) штук! На последнем этапе сборки тортов все \(n\) тортов должны быть одновременно политы кремом.

Рассмотрим вид сбоку на конвейерную ленту, представим ее в виде числовой прямой. \(i\)-й торт занимает отрезок \([a_i - w, a_i + w]\) на этой прямой, любая пара отрезков не имеет общих точек. Над конвейером расположены \(n\) дозаторов, при нажатии на общую кнопку из \(i\)-го дозатора выльется крем на отрезок конвейера \([b_i - h, b_i + h]\). Любая пара этих отрезков также не имеет общих точек.

Торты и дозаторы, соответствующие первому примеру.

Настройку этой части конвейера еще не проводили, поэтому ее нужно выполнить вам. Определите, можно ли подвинуть конвейер так, чтобы крем попал на каждый торт, и при этом не вытек за пределы тортов? Можете считать, что конвейер достаточно длинный, и торты с него никогда не падают. Также учтите, что кнопку можно нажать лишь один раз.

В первом примере можно подвинуть торты как показано на рисунке.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(w\) и \(h\) (\(1 \le n \le 10^5\); \(1 \le w, h \le 10^5\); \(h \le w\)) — количество тортов и дозаторов, а также полуширины тортов и участков, на которые выливается крем.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^9\)) — положения центров тортов. Гарантируется, что \(a_i + w < a_{i + 1} - w\) для всех \(i\).

Третья строка каждого набора содержит \(n\) целых чисел \(b_1\), \(b_2\), ..., \(b_n\) (\(1 \le b_i \le 10^9\)) — положения дозаторов. Гарантируется, что \(b_i + h < b_{i + 1} - h\) для всех \(i\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если можно подвинуть конвейер так, чтобы крем попал на каждый торт, и не вытек за пределы тортов, и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Первый пример показан на рисунках в условии.

Во втором примере мы можем подвинуть торты например так, чтобы их центры находились в позициях \(4, 9, 14, 19, 24\).

В третьем примере подвинуть торты необходимым образом не получится.

G. Раскраска дерева

Деревья Перебор Структуры данных *3000

Задано реберно-взвешенное дерево из \(n\) вершин, каждое ребро которого окрашено в некоторый цвет. Каждая вершина дерева может быть заблокирована или разблокирована. Изначально все вершины разблокированы.

Простой путь — это путь в графе, который не имеет повторяющихся вершин. Длина пути определяется как сумма весов всех ребер на пути.

Путь называется хорошим, если это простой путь, состоящий из ребер одного цвета \(c\), все ребра цвета \(c\) в дереве лежат на этом пути, и каждая вершина пути разблокирована.

Вам нужно обрабатывать запросы \(2\)-х типов:

  1. заблокировать вершину,
  2. разблокировать вершину.

После каждого запроса выведите максимальную длину среди всех хороших путей. Если не существует хорошего пути, выведите \(0\).

Входные данные

Первая строка содержит два целых числа \(n\), \(q\) (\(1 \leq n,q \leq 2\cdot 10^5\)) — количество вершин и количество запросов.

Затем следуют \(n-1\) строка, каждая из которых содержит четыре целых числа \(u\), \(v\), \(w\) и \(c\) (\(1 \leq u,v,w,c \leq n\); \(u \not = v\)), обозначающие взвешенное ребро, соединяющее вершины \(u\) и \(v\) с весом \(w\) и цветом \(c\). Гарантируется, что эти ребра образуют дерево.

Затем следуют \(q\) строк, каждая из которых содержит два целых числа \(p\) и \(x\) (\(p = 0\) или \(p = 1\), \(1\leq x\leq n\)), обозначающие запрос:

  1. Если \(p = 0\), заблокируйте вершину \(x\). Гарантируется, что она не заблокирована в это время.
  2. Если \(p = 1\), разблокируйте вершину \(x\). Гарантируется, что она заблокирована в это время.
Выходные данные

Для каждого запроса выведите максимальную длину хорошего пути. Если не существует хорошего пути, выведите \(0\).

A. Единицы и двойки

математика Перебор реализация *800

Вам дана последовательность \(a_1, a_2, \ldots, a_n\). Каждый элемент \(a\) равен \(1\) или \(2\).

Выясните, существует ли целое число \(k\) такое, что выполняются следующие условия:

  • \(1 \leq k \leq n-1\), и
  • \(a_1 \cdot a_2 \cdot \ldots \cdot a_k = a_{k+1} \cdot a_{k+2} \cdot \ldots \cdot a_n\).

Если существует несколько \(k\), удовлетворяющих данному условию, выведите наименьшее из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \leq n \leq 1000\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 2\)).

Выходные данные

Для каждого набора входных данных, если не существует такого \(k\), выведите \(-1\). В противном случае выведите наименьшее возможное значение \(k\).

Примечание

Для первого набора входных данных \(k=2\) удовлетворяет условию, так как \(a_1 \cdot a_2 = a_3 \cdot a_4 \cdot a_5 \cdot a_6 = 4\). \(k=3\) также удовлетворяет данному условию, но нужно вывести наименьшее подходящее значение.

Для второго набора не существует \(k\), удовлетворяющего условию \(a_1 \cdot a_2 \cdot \ldots \cdot a_k = a_{k+1} \cdot a_{k+2} \cdot \ldots \cdot a_n\).

Для третьего набора \(k=1\), \(2\), \(3\) удовлетворяет заданному условию, поэтому ответ \(1\).

D. Движущиеся точки

Бинарный поиск Комбинаторика математика Перебор *2000

Вы играете в игру с \(n\) точками на числовой прямой.

Изначальная координата \(i\)-й точки равна \(x_i\). Координаты всех точек различны. Каждая точка начинает двигаться одновременно с одинаковой постоянной скоростью.

Каждая точка движется в направлении к ближайшей точке (отличной от нее самой), пока не встретится с какой-либо точкой. В случае равенства до ближайшей точки слева и справа, точка движется влево. Две точки встречаются, если их координаты совпадают, при этом они навсегда прекращают движение.

Через некоторое время все точки перестанут двигаться. Результатом игры является количество различных координат, в которых остановятся точки.

Поскольку эта игра слишком проста, подсчитайте сумму результатов игр для каждого подмножества из данных \(n\) точек, в котором есть хотя бы две точки. Так как ответ может быть очень большим, выведите его по модулю \(10^9+7\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 3000\)).

Следующая строка содержит \(n\) целых чисел \(x_1, x_2, \ldots, x_n\) (\(1 \leq x_1 < x_2 < \ldots < x_n \leq 10^9\)), где \(x_i\) является координатой \(i\)-й точки.

Выходные данные

Выведите сумму результатов по модулю \(10^9+7\).

Примечание

В первом примере для подмножества размером \(2\) две точки движутся навстречу друг другу, поэтому существует \(1\) координата, где точки останавливаются.

Для подмножества размером \(3\) первая точка и третья точка движутся ко второй точке, поэтому существует \(1\) координата, где точки останавливаются, вне зависимости от направления движения второй точки.

Для подмножества \([1, 2, 4, 6]\) первая и вторая точки движутся навстречу друг другу. Для третьей точки изначально вторая точка и четвертая точка являются ближайшими точками. Из-за этого равенства третья точка движется влево. Четвертая точка также движется влево. Таким образом, существует \(1\) координата, где точки останавливаются, которая равна \(1.5\).

Поскольку существует \(6\) подмножеств размером \(2\), \(4\) подмножеств размером \(3\) и одно подмножество размером \(4\), ответ равен \(6 \cdot 1 + 4 \cdot 1 + 1 = 11\).

Во втором примере для подмножества размером \(5\) (когда есть точки в координатах \(1\), \(3\), \(5\), \(11\), \(15\)) точки в координатах \(1\) и \(11\) будут двигаться вправо, а точки в координатах \(3\), \(5\), \(15\) — влево. Точки на \(1\), \(3\), \(5\) в конце концов встретятся в координате \(2\), а точки на \(11\) и \(15\) встретятся в координате \(13\), поэтому существует \(2\) координаты, где точки остановятся.

A. Serval и массив Mocha

математика Перебор теория чисел *800

Mocha нравятся массивы, и Serval подарил ей массив, состоящий из целых положительных чисел.

Mocha считает, что её массив положительных целых чисел \(a\) является хорошим тогда и только тогда, когда наибольший общий делитель всех элементов \(a\) не превосходит его длины. И массив из хотя бы \(2\) положительных целых чисел является красивым тогда и только тогда, когда все его префиксы длины хотя бы \(2\) являются хорошими.

Например:

  • \([3,6]\) не является хорошим, потому что \(\gcd(3,6)=3\) больше его длины \(2\).
  • \([1,2,4]\) является одновременно хорошим и красивым, потому что все его префиксы длины хотя бы \(2\), которыми являются \([1,2]\) и \([1,2,4]\), являются хорошими.
  • \([3,6,1]\) не является красивым, потому что \([3,6]\) не является хорошим.

Сейчас Mocha дала вам подаренный массив \(a\) из \(n\) целых положительных чисел, и она хочет узнать, может ли массив \(a\) стать красивым после изменения порядка элементов в \(a\). Разрешается сохранить массив \(a\) без изменений.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1\leq t\leq 500\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2\leq n\leq 100\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\leq a_1,a_2,\ldots,a_n\leq 10^6\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите Yes, если возможно изменить порядок элементов в \(a\), чтобы сделать его красивым, и выведите No, если нет.

Вы можете вывести Yes и No в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных ни \([3,6]\), ни \([6,3]\) не являются хорошими, поэтому невозможно получить красивый массив, изменив порядок элементов в \(a\).

Во втором наборе входных данных \([1,2,4]\) уже является красивым. Если оставить массив \(a\) без изменений, можно получить красивый массив.

B. Serval и Инверсионная магия

Перебор реализация Строки *800

У Serval есть бинарная строка \(s\), которая может состоять только из символов 0 и 1, длины \(n\). \(i\)-й символ \(s\) обозначается как \(s_i\), где \(1\leq i\leq n\).

Serval может применять следующую операцию, названную Инверсионной магией, к строке \(s\):

  • Выбрать отрезок \([l, r]\) (\(1\leq l\leq r\leq n\)). Для \(l\leq i\leq r\), заменить \(s_i\) на 1, если \(s_i\) является 0, и заменить \(s_i\) на 0, если \(s_i\) является 1.

Например, пусть \(s\) равна 010100 и выбран отрезок \([2,5]\). Строка \(s\) будет равна 001010 после применения Инверсионной магии.

Serval хочет сделать \(s\) палиндромом после применения Инверсионной магии ровно один раз. Помогите ему определить, возможно ли это.

Строка является палиндромом тогда и только тогда, когда она одинаково читается слева направо и справа налево. Например, 010010 является палиндромом, но 10111 не является.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1\leq t\leq 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2\leq n\leq 10^5\)) — длина строки \(s\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\). В строке \(s\) могут содержаться только символы 0 и 1.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входых данных выведите Yes, если \(s\) может стать палиндромом, после применения Инверсионной магии один раз, и No, если нет.

Вы можете вывести Yes и No в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных Serval может применить Инверсионную магию на отрезке \([1,4]\). Строка \(s\) станет равной 0110 после магии.

Во втором наборе входных данных Serval может применить Инверсионную магию на отрезке \([1,3]\). Строка \(s\) станет равной 01110 после магии.

В третьем наборе входных данных Serval не может сделать \(s\) палиндромом после применения Инверсионной магии ровно один раз.

D. Serval и сдвиг-сдвиг-сдвиг

битмаски Конструктив Перебор реализация *2200

У Serval есть два \(n\)-битных двоичных числа \(a\) и \(b\). Он хочет поделиться этими числами с Toxel.

Так как Toxel больше нравится число \(b\), Serval решил изменить \(a\) на \(b\) с помощью нескольких (возможно, нуля) операций. За одну операцию Serval может выбрать любое положительное целое число \(k\) от \(1\) до \(n\), и заменить \(a\) на одно из следующих чисел:

  • \(a\oplus(a\ll k)\)
  • \(a\oplus(a\gg k)\)

Другими словами, операция сдвигает каждый бит числа \(a\) налево или направо на \(k\) позиций, при этом переполненные биты удаляются, а недостающие биты дополняются \(0\). Побитовое исключающее ИЛИ результата сдвига и изначального \(a\) присваиваются обратно \(a\).

У Serval нет много времени. Он хочет применить не более \(n\) операций, чтобы изменить \(a\) на \(b\). Пожалуйста, помогите ему найти последовательность операций, или определите, что невозможно изменить \(a\) на \(b\) за не более \(n\) операций. Вам не нужно минимизировать количество операций.

В этой задаче \(x\oplus y\) обозначает побитовое исключающее ИЛИ чисел \(x\) и \(y\). \(a\ll k\) и \(a\gg k\) обозначают логический сдвиг влево и логический сдвиг вправо.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1\le t\le2\cdot10^{3}\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1\le n\le2\cdot10^{3}\)) — количество битов в числах \(a\) и \(b\).

Вторая и третья строка каждого набора входных данных содержат бинарную строку длины \(n\), обозначающую \(a\) и \(b\), соответственно. Строки содержат только символы 0 и 1.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^{3}\).

Выходные данные

Для каждого набора входных данных, если невозможно изменить \(a\) на \(b\) за не более \(n\) операций, выведите одно число \(-1\).

Иначе, в первой строке выведите количество операций \(m\) (\(0\le m\le n\)).

Если \(m>0\), во второй строке выведите \(m\) целых чисел \(k_{1},k_{2},\dots,k_{m}\) обозначающих операции. Если \(1\le k_{i}\le n\), это обозначает логический сдвиг влево \(a\) на \(k_{i}\) позиций. Если \(-n\le k_{i}\le-1\), это обозначает логический сдвиг вправо \(a\) на \(-k_{i}\) позиций.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных:

Первая операция изменяет \(a\) на \(\require{cancel}00111\oplus\cancel{001}11\underline{000}=11111\).

Вторая операция изменяет \(a\) на \(\require{cancel}11111\oplus\underline{00}111\cancel{11}=11000\).

Биты с зачеркиванием — это биты с переполнением, которые удаляются. Биты с подчеркиванием являются дополненными битами.

Во втором наборе входных данных \(a\) уже равно \(b\), поэтому никаких операций делать не нужно.

В третьем наборе входных данных можно показать, что \(a\) невозможно изменить на \(b\).

E. Serval и музыкальная игра

дп математика Перебор реализация теория чисел *2500

Serval любит играть в музыкальные игры. Он столкнулся с проблемой, играя в музыкальные игры, и оставил её решать вам.

Вам даны \(n\) положительных целых чисел \(s_1 < s_2 < \ldots < s_n\). \(f(x)\) определим как количество таких \(i\) (\(1\leq i\leq n\)), что существуют неотрицательные целые числа \(p_i, q_i\) такие, что:

\(\)s_i=p_i\left\lfloor{s_n\over x}\right\rfloor + q_i\left\lceil{s_n\over x}\right\rceil\(\)

Найдите \(\sum_{x=1}^{s_n} x\cdot f(x)\) по модулю \(998\,244\,353\).

Напомним, что \(\lfloor x\rfloor\) обозначает максимальное целое число не больше \(x\), и \(\lceil x\rceil\) обозначает минимальное целое число не меньше \(x\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1\leq t\leq 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1\leq n\leq 10^6\)).

Вторая строка каждого набора входных данных содержит \(n\) положительных целых чисел \(s_1,s_2,\ldots,s_n\) (\(1\leq s_1 < s_2 < \ldots < s_n \leq 10^7\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\), и сумма \(s_n\) по всем наборам входных данных не превосходит \(10^7\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — сумму \(x\cdot f(x)\) по всем возможным \(x\) по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных \(s_n=4\), \(f(x)\) вычисляется следующим образом:

  • \(f(1)=1\)
    • \(\left\lfloor s_n\over 1\right\rfloor=4\), \(\left\lceil s_n\over 1\right\rceil=4\).
    • Можно показать, что \(p_1,p_2\) и \(q_1,q_2\), которые удовлетворяют условиям, не существует.
    • Пусть \(p_3=1\) и \(q_3=0\), тогда \(s_3 = p_3\cdot\left\lfloor s_n\over 1\right\rfloor + q_3\cdot\left\lceil s_n\over 1\right\rceil = 1\cdot 4 + 0\cdot 4 = 4\).
  • \(f(2)=2\)
    • \(\left\lfloor s_n\over 2\right\rfloor=2\), \(\left\lceil s_n\over 2\right\rceil=2\).
    • Можно показать, что \(p_1\) и \(q_1\), которые удовлетворяют условиям, не существует.
    • Пусть \(p_2=1\) и \(q_2=0\), тогда \(s_2 = p_2\cdot\left\lfloor s_n\over 2\right\rfloor + q_2\cdot\left\lceil s_n\over 2\right\rceil = 1\cdot 2 + 0\cdot 2 = 2\).
    • Пусть \(p_3=0\) и \(q_3=2\), тогда \(s_3 = p_3\cdot\left\lfloor s_n\over 2\right\rfloor + q_3\cdot\left\lceil s_n\over 2\right\rceil = 0\cdot 2 + 2\cdot 2 = 4\).
  • \(f(3)=3\)
    • \(\left\lfloor s_n\over 3\right\rfloor=1\), \(\left\lceil s_n\over 3\right\rceil=2\).
    • Пусть \(p_1=1\) и \(q_1=0\), тогда \(s_1 = p_1\cdot\left\lfloor s_n\over 3\right\rfloor + q_1\cdot\left\lceil s_n\over 3\right\rceil = 1\cdot 1 + 0\cdot 2 = 1\).
    • Пусть \(p_2=0\) и \(q_2=1\), тогда \(s_2 = p_2\cdot\left\lfloor s_n\over 3\right\rfloor + q_2\cdot\left\lceil s_n\over 3\right\rceil = 0\cdot 1 + 1\cdot 2 = 2\).
    • Пусть \(p_3=0\) и \(q_3=2\), тогда \(s_3 = p_3\cdot\left\lfloor s_n\over 3\right\rfloor + q_3\cdot\left\lceil s_n\over 3\right\rceil = 0\cdot 1 + 2\cdot 2 = 4\).
  • \(f(4)=3\)
    • \(\left\lfloor s_n\over 4\right\rfloor=1\), \(\left\lceil s_n\over 4\right\rceil=1\).
    • Пусть \(p_1=1\) и \(q_1=0\), тогда \(s_1 = p_1\cdot\left\lfloor s_n\over 4\right\rfloor + q_1\cdot\left\lceil s_n\over 4\right\rceil = 1\cdot 1 + 0\cdot 1 = 1\).
    • Пусть \(p_2=1\) и \(q_2=1\), тогда \(s_2 = p_2\cdot\left\lfloor s_n\over 4\right\rfloor + q_2\cdot\left\lceil s_n\over 4\right\rceil = 1\cdot 1 + 1\cdot 1 = 2\).
    • Пусть \(p_3=2\) и \(q_3=2\), тогда \(s_3 = p_3\cdot\left\lfloor s_n\over 4\right\rfloor + q_3\cdot\left\lceil s_n\over 4\right\rceil = 2\cdot 1 + 2\cdot 1 = 4\).

Таким образом, ответ равен \(\sum_{x=1}^4 x\cdot f(x) = 1\cdot 1 + 2\cdot 2 + 3\cdot 3 + 4\cdot 3 = 26\).

Во втором наборе входных данных:

  • \(f(1)=f(2)=f(3)=1\)
  • \(f(4)=3\)
  • \(f(5)=f(6)=f(7)=f(8)=f(9)=4\)

Например, когда \(x=3\), \(f(3)=1\), потому что существуют \(p_4\) и \(q_4\):

\(\)9 = 1 \cdot\left\lfloor{9\over 3}\right\rfloor + 2 \cdot\left\lceil{9\over 3}\right\rceil\(\)

Можно показать, что невозможно найти \(p_1,p_2,p_3\) и \(q_1,q_2,q_3\), которые удовлетворяют условиям.

Когда \(x=5\), \(f(5)=4\), потому что существуют следующие \(p_i\) и \(q_i\):

\(\)1 = 1 \cdot\left\lfloor{9\over 5}\right\rfloor + 0 \cdot\left\lceil{9\over 5}\right\rceil\(\) \(\)2 = 0 \cdot\left\lfloor{9\over 5}\right\rfloor + 1 \cdot\left\lceil{9\over 5}\right\rceil\(\) \(\)7 = 3 \cdot\left\lfloor{9\over 5}\right\rfloor + 2 \cdot\left\lceil{9\over 5}\right\rceil\(\) \(\)9 = 3 \cdot\left\lfloor{9\over 5}\right\rfloor + 3 \cdot\left\lceil{9\over 5}\right\rceil\(\)

Таким образом, ответ равен \(\sum_{x=1}^9 x\cdot f(x) = 158\).

F. Serval и Brain Power

битмаски дп жадные алгоритмы Перебор реализация Строки *2700

Serval любит Brain Power и свою интеллектуальную задачу.

Serval называет строку \(T\) мощной тогда и только тогда, когда \(T\) можно получить конкатенацией некоторой строки \(T'\) несколько раз. Формально говоря, \(T\) является мощной тогда и только тогда, когда существует строка \(T'\) и целое число \(k\geq 2\) такие, что \(\)T=\underbrace{T'+T'+\dots+T'}_{k\text{ раз}}\(\)

Например, gogogo является мощной, потому что её можно получить конкатенацией go три раза, но power не является мощной.

У Serval есть строка \(S\), состоящая из строчных латинских букв. Ему любопытно узнать о самой длинной мощной подпоследовательности \(S\), и ему достаточно, чтобы вы узнали её длину. Если все непустые подпоследовательности \(S\) не являются мощными, ответ считается равным \(0\).

Строка \(a\) является подпоследовательностью строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов.

Входные данные

Первая строка содержит единственную строку \(S\) (\(|S|\leq 80\)), состоящую из строчных латинских букв.

Выходные данные

Выведите единственное целое число — длину самой длинной мощной подпоследовательности \(S\). Если все непустые подпоследовательности \(S\) не являются мощными, выведите \(0\).

Примечание

В первом примере все непустые подпоследовательности buaa перечислены ниже:

  • b
  • u
  • a (встречается дважды, buaa и buaa)
  • bu
  • ba (встречается дважды, buaa и buaa)
  • ua (встречается дважды, buaa и buaa)
  • aa
  • bua (встречается дважды, buaa и buaa )
  • baa
  • uaa
  • buaa

Так как aa \(=\) a \(+\) a, aa является мощной подпоследовательностью. Можно доказать, что aa является единственной мощной подпоследовательностью среди них. Поэтому ответ равен \(2\).

Во втором примере самой длинной мощной подпоследовательностью является codcod из codeforcesround. Поэтому ответ равен \(6\).

C. Престановка

математика Перебор реализация *1000

Последовательность из \(n\) чисел называется перестановкой, если она содержит в себе все числа от \(1\) до \(n\) ровно по одному разу. Например, последовательности [\(3, 1, 4, 2\)], [\(1\)] и [\(2,1\)] являются перестановками, а [\(1,2,1\)], [\(0,1\)] и [\(1,3,4\)] — нет.

У Кристины была перестановка \(p\) из \(n\) элементов. Она записала ее на доску \(n\) раз таким образом, что:

  • записывая перестановку в \(i\)-й (\(1 \le i \le n)\) раз она пропускала элемент \(p_i\)
Таким образом, всего она записала на доску \(n\) последовательностей длины \(n-1\) каждая.

Например, пусть у Кристины была перестановка \(p\) = \([4,2,1,3]\) длины \(4\). Тогда она сделала следующее:

  1. Записала на доску последовательность \([2, 1, 3]\), пропустив элемент \(p_1=4\) из исходной перестановки.
  2. Записала на доску последовательность \([4, 1, 3]\), пропустив элемент \(p_2=2\) из исходной перестановки.
  3. Записала на доску последовательность \([4, 2, 3]\), пропустив элемент \(p_3=1\) из исходной перестановки.
  4. Записала на доску последовательность \([4, 2, 1]\), пропустив элемент \(p_4=3\) из исходной перестановки.

Вам известны \(n\) последовательностей, которые были записаны на доску, но Вы не знаете, в каком порядке они были записаны. Восстановите по ним исходную перестановку.

Таким образом, если Вам известны последовательности \([4, 2, 1]\), \([4, 2, 3]\), \([2, 1, 3]\), \([4, 1, 3]\), то исходная перестановка будет равна \(p\) = \([4, 2, 1, 3]\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(3 \le n \le 100\)).

Затем следует \(n\) строк, каждая из которых содержит ровно \(n-1\) целое число и описывает одну из последовательностей, выписанных на доску.

Гарантируется, что все последовательности могли быть получены из некоторой перестановки \(p\), а также что сумма \(n^2\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке перестановку \(p\) такую, что из нее могли быть получены заданные \(n\) последовательностей.

Гарантируется, что ответ существует и он единственный. Иными словами, для каждого набора входных данных обязательно найдется искомая перестановка.

Примечание

Первый набор входных данных разобран в условии задачи.

Во втором наборе входных данных последовательности выписаны в правильном порядке.

F. Тимофей и черно-белое дерево

графы Деревья жадные алгоритмы кратчайшие пути математика Перебор поиск в глубину и подобное разделяй и властвуй *2100

Тимофей приехал в известную летнюю школу и нашел там дерево на \(n\) вершинах. Дерево — это связный неориентированный граф без циклов.

Каждая вершина этого дерева, кроме \(c_0\), покрашена в белый цвет. Вершина \(c_0\) покрашена в черный цвет.

Тимофей хочет покрасить все вершины этого дерева в черный цвет. Для этого он выполняет \(n - 1\) операцию. Во время \(i\)-й операции он выбирает белую вершину \(c_i\) и красит ее в черный цвет.

Назовем позитивностью дерева минимальное расстояние между всеми парами различных черных вершин в нем. Расстоянием между вершинами \(v\) и \(u\) называется количество ребер на пути от \(v\) до \(u\).

После каждой очередной покраски Тимофей хочет знать позитивность текущего дерева.

Входные данные

В первой строке записано число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны числа \(n, c_0\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le c_0 \le n\)) — количество вершин в дереве и номер начальной черной вершины.

Во второй строке каждого набора входных данных записано \(n - 1\) различных чисел \(c_1, c_2, \dots, c_{n-1}\) (\(1 \le c_i \le n\), \(c_i \ne c_0\)), где \(c_i\) это вершина, покрашенная в черный цвет во время \(i\)-й операции.

В следующей \(n - 1\) строке каждого набора входных данных записаны числа \(v_i, u_i\) (\(1 \le v_i, u_i \le n\)) — ребра в дереве.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке \(n - 1\) число.

Число с номером \(i\) должно быть равно позитивности дерева, полученного первыми \(i\) покрасками.

Примечание

В первом наборе входных данных, после второй покраски, дерево выглядит так:

Расстояние между вершинами \(1\) и \(6\) равно \(3\), расстояние между вершинами \(4\) и \(6\) равно \(3\), расстояние между вершинами \(1\) и \(4\) равно \(2\). Позитивность такого дерева равна минимуму из этих расстояний, то есть \(2\).

В третьем наборе входных данных, после четвертой покраски, дерево выглядит так:

Позитивность такого дерева равна \(2\).

D. Непересекающееся разделение

жадные алгоритмы Перебор Строки *1000

Обозначим за \(f(x)\) функцию от строки \(x\), равную числу различных символов, содержащихся в строке. Например, \(f(\texttt{abc}) = 3\), \(f(\texttt{bbbbb}) = 1\), а \(f(\texttt{babacaba}) = 3\).

Дана строка \(s\), разделите её на две непустых строки \(a\) и \(b\) таких, что \(f(a) + f(b)\) максимально возможно. Другими словами, найдите наибольшее возможное значение \(f(a) + f(b)\) такое, что \(a + b = s\) (конкатенация строк \(a\) и \(b\) равна строке \(s\)).

Входные данные

Тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Затем следуют описания наборов.

Первая строка каждого набора содержит целое число \(n\) (\(2 \leq n \leq 2\cdot10^5\)) — длину строки \(s\).

Вторая строка содержит строку \(s\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число  — максимально возможное значение \(f(a) + f(b)\) такое, что \(a + b = s\).

Примечание

В первом наборе входных данных существует только один корректный способ разделить \(\texttt{aa}\) на две непустых строки: \(\texttt{a}\) и \(\texttt{a}\). \(f(\texttt{a}) + f(\texttt{a}) = 1 + 1 = 2\).

Во втором наборе, разделив \(\texttt{abcabcd}\) на \(\texttt{abc}\) и \(\texttt{abcd}\) мы можем получить наибольший возможный ответ \(f(\texttt{abc}) + f(\texttt{abcd}) = 3 + 4 = 7\)

В третьем наборе не важно как мы разделим строку, ответ будет равен \(2\) при любом разделении.

F. Range Update Point Query

Бинарный поиск Перебор Структуры данных *1500

Дан массив \(a_1, a_2, \dots, a_n\), вам нужно обработать суммарно \(q\) запросов и обновлений следующих типов:

  • \(1\) \(l\) \(r\) — для каждого индекса \(i\) такого, что \(l \leq i \leq r\), заменить значение \(a_i\) на сумму цифр в \(a_i\).
  • \(2\) \(x\) — вывести \(a_x\).
Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — размер массива и количество запросов соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Следующие \(q\) строк каждого набора входных данных содержат запросы следующих видов:

  • \(1\) \(l\) \(r\) (\(1 \leq l \leq r \leq n\)) — означает, что для каждого индекса \(i\) такого, что \(l \leq i \leq r\), вам следует заменить значение \(a_i\) на сумму его цифр.
  • \(2\) \(x\) (\(1 \leq x \leq n\)) — означает, что вы должны вывести \(a_x\).

Гарантируется, что существует хотя бы один запрос второго типа.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответы на запросы второго типа, в том порядке, в котором они заданы в тесте.

Примечание

В первом наборе входных данных происходят следующие изменения:

  • Изначально \(a = [1, 420, 69, 1434, 2023]\).
  • Операция применяется с \(l=2\), \(r=3\), получаем \([1, \color{red}{6}, \color{red}{15}, 1434, 2023]\).
  • Запрошены значения с \(x=2\), \(x=3\), и \(x=4\), выводим \(6\), \(15\), и \(1434\).
  • Операция применяется с \(l=2\), \(r=5\), получаем \([1, \color{red}{6}, \color{red}{6}, \color{red}{12}, \color{red}{7}]\).
  • Запрошены значения с \(x=1\), \(x=3\), и \(x=5\), выводим \(1\), \(6\), и \(7\).

C. Min Max сортировка

Бинарный поиск жадные алгоритмы математика Перебор *1500

Вам дана перестановка \(p\) размера \(n\) (перестановка размера \(n\) — это массив размера \(n\), в котором каждое целое число от \(1\) до \(n\) встречается ровно один раз).

Вы можете выполнить следующую операцию любое количество раз (возможно, ноль):

  1. выбрать два различных элемента \(x\) и \(y\) и удалить их из перестановки;
  2. вставить минимум из \(x\) и \(y\) в перестановку таким образом, чтобы он стал первым элементом;
  3. вставить максимум из \(x\) и \(y\) в перестановку таким образом, чтобы он стал последним элементом;

Например, если \(p = [1, 5, 4, 2, 3]\), и мы хотим применить операцию к элементам \(3\) и \(5\), тогда после первого шага операции \(p = [1, 4, 2]\); а после вставки элементов \(p = [3, 1, 4, 2, 5]\).

Ваша задача — определить минимальное количество вышеописанных операций, позволяющих отсортировать перестановку \(p\) в возрастающем порядке (т. е. преобразуйте \(p\) таким образом, что \(p_1 < p_2 < \dots < p_n\)).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер перестановки.

Вторая строка набора входных данных содержит \(n\) различных целых чисел от \(1\) до \(n\) — заданную перестановку \(p\).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выходных данных выведите одно целое число — минимальное количество вышеописанных операций, позволяющих отсортировать перестановку \(p\) в возрастающем порядке.

Примечание

В первом примере можно действовать следующим образом:

  1. в перестановке \(p = [1, 5, 4, 2, 3]\) выберем элементы \(4\) и \(2\), тогда после применения операции перестановка \(p = [2, 1, 5, 3, 4]\);
  2. в перестановке \(p = [2, 1, 5, 3, 4]\) выберем элементы \(1\) и \(5\), тогда после применения операции перестановка \(p = [1, 2, 3, 4, 5]\).

E. Таблица и делители

дп Перебор поиск в глубину и подобное теория чисел *2400

Вам задана таблица умножения \(n \times n\) и положительное целое число \(m = m_1 \cdot m_2\). Таблица умножения \(n \times n\) — это таблица из \(n\) строк и \(n\) столбцов, пронумерованных от \(1\) по \(n\), где \(a_{i, j} = i \cdot j\).

Для каждого делителя \(d\) числа \(m\) определите: встречается ли \(d\) в таблице хотя бы раз, и если встречается, то какой наименьший номер строки, которая содержит \(d\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных.

В первой и единственной строке каждого набора заданы три целых числа \(n\), \(m_1\) и \(m_2\) (\(1 \le n \le 10^9\); \(1 \le m_1, m_2 \le 10^9\)) — размер таблицы умножения и число \(m\), представленное как \(m_1 \cdot m_2\).

Выходные данные

Для каждого набора входных данный, пусть \(d_1, d_2, \dots, d_k\) – это все делители \(m\), отсортированные в порядке возрастания. А также, пусть \(a_1, a_2, \dots, a_k\) — это массив ответов, где \(a_i\) равно наименьшему номеру строки, в которой встречается \(d_i\), либо \(0\), если такой строки в таблице нет.

Так как массив \(a\) может быть длинным, выведите сначала число \(s\) — количество делителей \(m\), которые встречаются в таблице умножения \(n \times n\). Далее выведите одно число \(X = a_1 \oplus a_2 \oplus \dots \oplus a_k\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Примечание

В первом наборе входных данных, \(m = 72 \cdot 1 = 72\) и имеет \(12\) делителей \([1, 2, 3, 4, 6, 8, 9, 12, 18, 24, 36, 72]\). Таблица умножения \(3 \times 3\) выглядит следующим образом:

123
1123
2246
3369

Для каждого делителя \(m\), что присутствует в таблице, выделена позиция с наименьшим номером строки. Соответственно, массив ответов \(a\) равен \([1, 1, 1, 2, 2, 0, 3, 0, 0, 0, 0, 0]\). В нем только \(6\) ненулевых значений, а исключающее ИЛИ \(a\) равен \(2\).

Во втором наборе, \(m = 10 \cdot 15 = 150\) и имеет \(12\) делителей \([1, 2, 3, 5, 6, 10, 15, 25, 30, 50, 75, 150]\). Все делители кроме \(75\) и \(150\) присутствуют в таблице \(10 \times 10\). Массив \(a\) \(=\) \([1, 1, 1, 1, 1, 1, 3, 5, 3, 5, 0, 0]\). В нем \(10\) ненулевых значений и исключающее ИЛИ \(a\) равно \(0\).

В третьем наборе, \(m = 1 \cdot 210 = 210\) и имеет \(16\) делителей \([1, 2, 3, 5, 6, 7, 10, 14, 15, 21, 30, 35, 42, 70, 105, 210]\). Таблица умножения \(6 \times 6\) с выделенными делителями изображена ниже:

123456
1123456
224681012
3369121518
44812162024
551015202530
661218243036

Массив \(a\) \(=\) \([1, 1, 1, 1, 1, 0, 2, 0, 3, 0, 5, 0, 0, 0, 0, 0]\). В нем \(8\) ненулевых значений и исключающее ИЛИ \(a\) равно \(5\).

F2. Покраска графа (сложная версия)

бпф графы дп Комбинаторика Перебор разделяй и властвуй *2900

Единственное различие между простой и сложной версией — ограничение на \(n\).

Дан полный неориентированный граф из \(n\) вершин. Полный граф — это такой граф, где между каждой парой вершин существует ровно одно ребро. Вы должны покрасить ребра этого графа в два цвета, синий и красный (каждое ребро должно быть покрашено в один из этих цветов).

Назовем множество вершин \(S\) связным по красному цвету, если для каждой пары вершин \((v_1, v_2)\), такой, что \(v_1 \in S\) и \(v_2 \in S\), существует путь из \(v_1\) в \(v_2\), проходящий только по вершинам из \(S\) и по красным ребрам. Аналогично, назовем множество вершин \(S\) связным по синему цвету, если для каждой пары вершин \((v_1, v_2)\), такой, что \(v_1 \in S\) и \(v_2 \in S\), существует путь из \(v_1\) в \(v_2\), проходящий только по вершинам из \(S\) и по синим ребрам.

Нужно раскрасить граф так, чтобы выполнялись следующие условия:

  • хотя бы одно ребро красное;
  • хотя бы одно ребро синее;
  • для каждого множества вершин \(S\), такого, что \(|S| \ge 2\), \(S\) связно по красному цвету или по синему цвету, но не по обоим цветам.

Посчитайте количество способов покрасить граф и выведите его по модулю \(998244353\).

Входные данные

В первой (и единственной) строке задано одно целое число \(n\) (\(3 \le n \le 5 \cdot 10^4\)).

Выходные данные

Выведите одно целое число — количество способов покрасить граф, взятое по модулю \(998244353\).

F. Ребрендинг

Перебор разделяй и властвуй реализация Структуры данных *2600

Костя и Женя - создатели группы «Бумага» - после выпуска легендарного альбома решили создать новое музыкальное объединение «Дневные грузчики», для этого им нужно найти двух новых людей.

Они пригласили на кастинг \(n\) человек. Кастинг продлится \(q\) дней. В \(i\)-й из дней Костя и Женя хотят найти двух человек на отрезке с \(l_i\) по \(r_i\), которые больше всего подходят их объединению. Так как «Дневные грузчики» занимаются современным искусством,  музыкальные навыки им не важны и они смотрят лишь на внешние признаки: им хочется, чтобы разница роста двух людей была как можно меньше.

Помогите им, и для каждого дня укажите минимальную разницу роста людей с кастинга на данном отрезке!

Входные данные

В первой строке вам дано два целых числа \(n\) и \(q\) (\(2 \leq n \leq 3 \cdot 10^5, 1 \leq q \leq 10^6\)) — количество людей, которые пришли на кастинг, а также количество дней кастинга.

Во второй строке вам даны \(n\) целых чисел \(a_1, a_2, a_3, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — рост каждого из кандидатов.

Также гарантируется, что все \(a_i\) различны.

В следующих \(q\) строках даны по два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i < r_i \leq n\)) — отрезок людей в \(i\)-й день кастинга.

Выходные данные

Выведите \(q\) строк. В \(i\)-й строке должна быть минимальная разница роста между двумя кандидатами на отрезке в \(i\)-й день кастинга.

Примечание

В первом примере минимальная разность на отрезке \([1, 2]\) составляет \(2\), на отрезке \([2, 3]\)\(1\), на отрезке \([1, 3]\) также \(1\).

В третьем примере минимальную разность на отрезке \([4, 6]\) составляют числа \(3\) и \(5\) (\(5 - 3 = 2\)). На отрезке \([1, 2]\) минимальную разность имеют числа \(2\) и \(6\) (\(6 - 2 = 4\)). На отрезке \([3, 6]\) минимальную разность имеют числа \(1\) и \(3\) (\(3 - 1 = 2\)). На отрезке \([1, 3]\) минимальную разность образуют числа \(1\) и \(2\) (\(2 - 1 = 1\)).

A. Две башни

Перебор реализация Строки *800

Даны две башни, состоящие из кубиков двух цветов: красные и синие. Обе башни описываются строками, состоящими из символов B и/или R, задающими порядок кубиков в них снизу вверх, где B соответствует синему кубику, а R соответствует красному кубику.

Эти две башни задаются строками BRBB и RBR.

Можно выполнять следующую операцию произвольное количество раз: выбрать башню с хотя бы двумя кубиками и переместить ее верхний кубик на вершину другой башни.

Пара башен называется красивой, если все пары соседних кубиков различных цветов; т. е. никакой красный кубик не лежит на другом красном кубике и никакой синий кубик не лежит на другом синем кубике.

Ваша задача — проверить, можно ли совершить несколько (возможно, ноль) операций так, чтобы пара башен стала красивой.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк:

  • в первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 20\)) — количество кубиков в первой башне и количество кубиков во второй башне, соответственно;
  • во второй строке записана \(s\) — строка, состоящая из \(n\) символов B и/или R, задающая первую башню;
  • в третьей строке записана \(t\) — строка, состоящая из \(m\) символов B и/или R, задающая вторую башню.
Выходные данные

На каждый набор входных данных выведите YES, если возможно совершить несколько (возможно, ноль) операций так, чтобы пара башен стала красивой; иначе выведите NO.

Каждую букву можно выводить в любом регистре (YES, yes, Yes будут распознаны как положительный ответ, NO, no и nO будут распознаны как отрицательный ответ).

Примечание

В первом наборе входных данных можно переместить верхний кубик с первой башни на вторую башню (смотрите третью картинку).

Во втором наборе входных данных можно переместить верхний кубик со второй башни на первую башню \(6\) раз.

В третьем наборе входных данных пара башен уже красивая.

B. Идеальная точка

геометрия жадные алгоритмы Перебор *900

Вам дано \(n\) одномерных отрезков (каждый отрезок представляется двумя числами — координатами его концов).

Давайте определим функцию \(f(x)\) как количество отрезков, покрывающих точку \(x\) (отрезок покрывает точку \(x\), если \(l \le x \le r\), где \(l\) – левый конец отрезка, а \(r\) — правый).

Целочисленная точка \(x\) называется идеальной, если она принадлежит большему количеству отрезков, чем любая другая целочисленная точка, т.е. \(f(y) < f(x)\) верно для любой другой целочисленной точки \(y\).

Вам дано целое число \(k\). Ваша задача состоит в том, чтобы определить, возможно ли удалить несколько (возможно, ни одного) отрезков, чтобы данная точка \(k\) стала идеальной.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 50\)).

Далее следует \(n\) строк, \(i\)-я и них содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i, r_i \le 50\); \(l_i \le r_i\)) — концы \(i\)-го отрезка.

Выходные данные

Для каждого набора входных данных, выведите YES, если возможно удалить несколько (возможно, ни одного) отрезков, чтобы данная точка \(k\) стала идеальной, в противном случае выведите NO.

Каждую букву можно выводить в любом регистре (например, YES, yes, Yes будут распознаны как положительный ответ, NO, no и nO будут распознаны как отрицательный ответ).

Примечание

В первом примере точка \(3\) уже идеальна (она покрыта тремя отрезками), поэтому не нужно ничего удалять.

В четвертом примере можно удалить все, кроме отрезка \([5, 5]\).

A. Типичная задача с интервью

Перебор реализация Строки *800

FB-строка формируется следующим образом. Изначально она пустая. Рассмотрим все положительные целые числа, начиная с \(1\), в возрастающем порядке, и для каждого из них сделаем следующее:

  • если текущее число делится на \(3\), допишем F в конец FB-строки;
  • если текущее число делится на \(5\), допишем B в конец FB-строки.

Обратите внимание, что если число делится и на \(3\), и на \(5\), мы сначала приписываем F, потом B, не в обратном порядке.

Первые \(10\) символов FB-строки — это FBFFBFFBFB: первый символ F соответствует числу \(3\), следующий за ним символ (B) соответствует числу \(5\), следующий F соответствует числу \(6\), и так далее. Легко заметить, что эта строка бесконечна. Обозначим за \(f_i\) \(i\)-й символ FB-строки; например, \(f_1\) — это F, \(f_2\) — это B, \(f_3\) —- это F, \(f_4\) — это F, и так далее.

Нам дана строка \(s\), состоящая из символов F и/или B. Вы должны определить, является ли она подстрокой (непрерывной подпоследовательностью) FB-строки. Другими словами, проверьте, можно ли выбрать два целых числа \(l\) и \(r\) (\(1 \le l \le r\)) так, чтобы строка \(f_l f_{l+1} f_{l+2} \dots f_r\) была в точности равна \(s\).

Например:

  • FFB — подстрока FB-строки: можно выбрать \(l = 3\) и \(r = 5\), строка \(f_3 f_4 f_5\) — это в точности FFB;
  • BFFBFFBF — подстрока FB-строки: можно выбрать \(l = 2\) и \(r = 9\), строка \(f_2 f_3 f_4 \dots f_9\)— это в точности BFFBFFBF;
  • BBB — не подстрока FB-строки.
Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 2046\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой из них задано одно целое число \(k\) (\(1 \le k \le 10\)) — количество символов в \(s\). Во второй задана строка \(s\), состоящая из ровно \(k\) символов. Каждый символ \(s\) — либо F, либо B.

Выходные данные

Для каждого набора входных данных выведите YES, если \(s\) — подстрока FB-строки, или NO, если это не так.

Каждую букву можно выводить в любом регистре (например, YES, yes, Yes будут распознаны как положительный ответ, NO, no и nO будут распознаны как отрицательный ответ).

F. Странные тройки

математика Перебор теория чисел *2900

Назовем тройку положительных целых чисел (\(a, b, n\)) странной, если выполняется равенство \(\frac{an}{nb} = \frac{a}{b}\). Здесь \(an\) — это конкатенация чисел \(a\) и \(n\), а \(nb\) — конкатенация \(n\) и \(b\). При конкатенации чисел считается, что у них нет ведущих нулей.

Например, если \(a = 1\), \(b = 5\) и \(n = 9\), то тройка является странной, потому что \(\frac{19}{95} = \frac{1}{5}\). С другой стороны, \(a = 7\), \(b = 3\) и \(n = 11\) не является странной, потому что \(\frac{711}{113} \ne \frac{7}{3}\).

Вам заданы три положительных целых числа \(A\), \(B\) and \(N\). Посчитайте количество странных троек \((a, b, n\)) таких, что \(1 \le a < A\), \(1 \le b < B\) and \(1 \le n < N\).

Входные данные

Единственная строка содержит три целых числа \(A\), \(B\) и \(N\) (\(1 \le A, B \le 10^5\); \(1 \le N \le 10^9\)).

Выходные данные

Выведите одно целое число — количество странных троек \((a, b, n\)) таких, что \(1 \le a < A\), \(1 \le b < B\) and \(1 \le n < N\).

Примечание

В первом примере \(7\) странных троек: \((1, 1, 1\)), (\(1, 4, 6\)), (\(1, 5, 9\)), (\(2, 2, 2\)), (\(2, 5, 6\)), (\(3, 3, 3\)) and (\(4, 4, 4\)).

D. Li Hua и дерево

Деревья дп Перебор поиск в глубину и подобное реализация Структуры данных *1900

У Li Hua есть дерево с \(n\) вершинами и \(n-1\) ребром. Корнем дерева является вершина \(1\). Каждая вершина \(i\) имеет важность \(a_i\). Обозначим размер поддерева как количество вершин в нем, а важность как сумму важности вершин в нем. Обозначим тяжелым сыном нелистовой вершины сына с наибольшим размером поддерева. Если таких вершин несколько, то тяжёлым сыном будет та, у которой индекс минимален.

Li Hua хочет выполнить \(m\) операций:

  • «1 \(x\)» (\(1\leq x \leq n\)) — вычислить важность поддерева, корнем которого является \(x\).
  • «2 \(x\)» (\(2\leq x \leq n\)) — повернуть тяжёлого сына поддерева \(x\) вверх. Формально, обозначим как \(son_x\) тяжелого сына \(x\), \(fa_x\) как отца \(x\). Он хочет удалить ребро между \(x\) и \(fa_x\) и добавить ребро между \(son_x\) и \(fa_x\). Гарантируется, что \(x\) не является корнем, но не гарантируется, что \(x\) не является листом. Если \(x\) является листом, проигнорируйте эту операцию.

Предположим, что вы Li Hua. Пожалуйста, решите эту задачу.

Входные данные

Первая строка содержит 2 целых числа \(n,m\) (\(2\le n\le 10^{5},1\le m\le 10^{5}\)) — количество вершин в дереве и количество операций.

Вторая строка содержит \(n\) целых чисел \(a_{1},a_{2},\ldots ,a_{n}\) (\(-10^{9}\le a_{i}\le 10^{9}\)) — важность каждой вершины.

Следующие \(n-1\) строк содержат рёбра дерева. В \(i\)-й строке записаны два целых числа \(u_i\) и \(v_i\) (\(1\le u_i,v_i\le n\), \(u_i\ne v_i\)) — соответствующее ребро. Данные рёбра образуют дерево.

Следующие \(m\) строк содержат операции — по одной операции в строке. \(j\)-я операция содержит два целых числа \(t_{j},x_{j}\) (\(t_{j}\in \{1,2\}\), \(1 \leq x_{j} \leq n\), \(x_{j}\neq 1\) если \(t_j = 2\)) — \(j\)-я операция.

Выходные данные

Для каждого запроса вида «1 \(x\)» выведите ответ в отдельной строке.

Примечание

В первом примере:

Начальное дерево показано на следующем рисунке:

Важность поддерева \(6\) равна \(a_6+a_7=2\).

После поворота тяжелого сына вершины \(3\) (которым является \(6\)) вверх, дерево будет выглядеть следующим образом:

Важность поддерева \(6\) равна \(a_6+a_3+a_7=3\).

Важность поддерева \(2\) - \(a_2+a_4+a_5=3\).

E. Li Hua и массив

математика Перебор снм Структуры данных теория чисел *2300

Li Hua хочет решить задачу о \(\varphi\) — функции Эйлера. Напомним, что \(\varphi(x)=\sum\limits_{i=1}^x[\gcd(i,x)=1]\).\(^{\dagger,\ddagger}\)

У него есть последовательность \(a_1,a_2,\cdots,a_n\) и он хочет выполнить \(m\) операций:

  • «1 \(l\) \(r\)» (\(1\le l\le r\le n\)) — для каждого \(x\in[l,r]\), изменить \(a_x\) на \(\varphi(a_x)\).
  • «2 \(l\) \(r\)» (\(1\le l\le r\le n\)) — найдите минимальное количество изменений, необходимое для того, чтобы стало верно \(a_l=a_{l+1}=\cdots=a_r\). За одно изменение он выбирает один \(x\in[l,r]\) и изменяет \(a_x\) на \(\varphi(a_x)\).

Каждая операция второго типа является независимой, то есть массив не изменяется.

Предположим, что вы Li Hua. Пожалуйста, решите эту задачу.

\(^\dagger\) \(\gcd(x,y)\) обозначает наибольший общий делитель (НОД) целых чисел \(x\) и \(y\).

\(^\ddagger\) Выражение \([\textrm{cond}]\) равно \(1\), если условие \(\textrm{cond}\) верно, и \(0\) в противном случае.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1\le n,m\le 10^{5}\)) — количество элементов в массиве и количество операций для обработки, соответственно.

Вторая строка содержит \(n\) целых чисел \(a_{1},a_{2},\cdots ,a_{n}\) (\(1\le a_{i}\le 5\cdot 10^{6}\)) — элементы массива.

Далее идут \(m\) строк, каждая строка содержит три целых числа \(t_{i},l_{i},r_{i}\) (\(t_i\in\{1,2\},1\le l_i\le r_i\le n\)) — \(i\)-я операция.

Выходные данные

Для каждого запроса вида «2 \(l\) \(r\)» выведите ответ в отдельной строке.

Примечание

Обозначим \(\varphi^k(x)=\begin{cases}x,&k=0\\\varphi(\varphi^{k-1}(x)),&k > 0\end{cases}\).

Сначала \(a=[8,1,6,3,7]\).

Чтобы сделать верным выражение \(a_1=a_2=a_3=a_4=a_5\), мы можем изменить \(a\) на \(a'=[\varphi^3(8),\varphi^0(1),\varphi^2(6),\varphi^2(3),\varphi^3(7)]=[1,1,1,1,1]\), используя \(3+0+2+2+3=10\) изменений.

Чтобы сделать \(a_3=a_4\), мы можем изменить \(a\) на \(a'=[\varphi^0(8),\varphi^0(1),\varphi^1(6),\varphi^1(3),\varphi^0(7)]=[8,1,2,2,7]\), используя \(0+0+1+1+0=2\) изменения.

После «1 \(1\) \(3\)», \(a\) меняется на \(a=[\varphi^1(8),\varphi^1(1),\varphi^1(6),\varphi^0(3),\varphi^0(7)]=[4,1,2,3,7]\).

Чтобы сделать \(a_3=a_4\), мы можем изменить \(a\) на \(a'=[\varphi^0(4),\varphi^0(1),\varphi^0(2),\varphi^1(3),\varphi^0(7)]=[4,1,2,2,7]\), используя \(0+0+0+1+0=1\) изменение.

B. Три семёрки

жадные алгоритмы Перебор реализация Структуры данных *1000

Лотерея «Три Семёрки» проводилась \(m\) дней. В день \(i\) в лотерее участвовали \(n_i\) людей с номерами \(a_{i, 1}, \ldots, a_{i, n_i}\).

Известно, что в каждый из \(m\) дней из участников лотереи выбирался ровно один победитель. Победителю лотереи в день \(i\) запрещено участвовать в лотерее в дни с номерами от \(i+1\) до \(m\).

К сожалению, информация о победителях лотереи была утеряна. Вам нужно восстановить любой возможный список победителей лотереи в дни с номерами от \(1\) до \(m\) или определить, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 50\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(m\) (\(1 \le m \le 50\,000\)) — количество дней, в которые проводилась лотерея.

Далее для каждого \(i\) от \(1\) до \(m\) находится блок данных из двух строк.

В первой строке каждого блока находится одно целое число \(n_i\) (\(1 \le n_i \le 50\,000\)) — количество участников лотереи в день \(i\).

Во второй строке блока находятся числа \(a_{i, 1}, \ldots, a_{i, n_i}\) (\(1 \le a_{i, j} \le 50\,000\)) — номера участников лотереи в день \(i\). Гарантируется, что все числа \(a_{i, 1}, \ldots, a_{i, n_i}\) попарно различны.

Гарантируется, что сумма значений \(n_i\) по всем блокам всех наборов входных данных не превосходит \(50\,000\).

Выходные данные

Для каждого набора входных данных, если решения не существует, выведите одно целое число \(-1\).

Иначе выведите \(m\) целых чисел \(p_1, p_2, \ldots, p_m\) (\(1 \le p_i \le 50\,000\)) — номера победителей лотереи в дни с \(1\) по \(m\). Если существует несколько корректных решений, выведите любое из них.

Примечание

В первом наборе входных данных один из подходящих ответов \([8, 2, 1]\), так как участник с номером \(8\) участвовал в день \(1\), но не участвовал в дни \(2\) и \(3\); участник с номером \(2\) участвовал в день \(2\), но не участвовал в день \(3\); а участник с номером \(1\) участвовал в день \(3\). Обратите внимание, что это не единственный возможный ответ, например, \([8, 9, 4]\) также является верным ответом.

Во втором наборе входных данных оба участника лотереи участвовали в обоих днях лотереи, значит любой возможный победитель лотереи в день \(1\) обязательно участвовал в день \(2\), значит подходящего ответа не существует.

В третьем наборе входных данных в дни \(2\), \(3\) и \(4\) участвовал только один участник, а в день \(1\) единственный участник, не участвовавший в лотерее в днях \(2, 3, 4\) — это участник \(2\). Значит \([2, 1, 4, 3]\) — единственно верный ответ.

E. Генератор мультитестов

дп Перебор *2300

Массив \(b_1, b_2, \ldots, b_m\) назовём тестом, если \(b_1 = m - 1\).

Массив \(b_1, b_2, \ldots, b_m\) назовём мультитестом, если массив \(b_2, b_3, \ldots, b_m\) можно разбить на \(b_1\) непустых подмассивов так, что каждый из этих подмассивов является тестом. Обратите внимание, что каждый элемент массива должен войти в ровно один подмассив из разбиения, при этом каждый подмассив должен состоять из последовательных элементов исходного массива.

Определим функцию \(f\) от массива \(b_1, b_2, \ldots, b_m\) как минимальное количество операций вида «Заменить любое \(b_i\) на любое целое неотрицательное число \(x\)», которое нужно сделать, чтобы массив \(b_1, b_2, \ldots, b_m\) стал мультитестом.

Дан массив \(a_1, a_2, \ldots, a_n\) из положительных чисел. Для каждого \(i\) от \(1\) до \(n - 1\) найдите \(f([a_i, a_{i+1}, \ldots, a_n])\).

Ниже приведены некоторые примеры тестов и мультитестов.

  • Тесты: \([\underline{1}, 5]\), \([\underline{2}, 2, 2]\), \([\underline{3}, 4, 1, 1]\), \([\underline{5}, 0, 0, 0, 0, 0]\), \([\underline{7}, 1, 2, 3, 4, 5, 6, 7]\), \([\underline{0}]\). Эти массивы являются тестами, так как их первый элемент (подчеркнут) равен длине массива минус один.
  • Мультитесты: \([1, \underline{\underline{1}, 1}]\), \([2, \underline{\underline{3}, 0, 0, 1}, \underline{\underline{1}, 12}]\), \([3, \underline{\underline{2}, 2, 7}, \underline{\underline{1}, 1}, \underline{\underline{3}, 4, 4, 4}]\), \([4, \underline{\underline{0}}, \underline{\underline{3}, 1, 7, 9}, \underline{\underline{4}, 2, 0, 0, 9}, \underline{\underline{1}, 777}]\). Подчеркнуты подмассивы после разбиения, а два раза подчеркнуты первые элементы в них.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 300\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 300\,000\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 300\,000\)) — элементы массива \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(300\,000\).

Выходные данные

Для каждого набора входных данных выведите \(n - 1\) число — значения \(f([a_i, a_{i+1}, \ldots, a_n])\) для каждого \(i\) от \(1\) до \(n - 1\).

Примечание

В первом наборе входных данных первого теста массив \([1, 2, 1, 7]\) является мультитестом, так как массив \([2, 1, 7]\) является тестом. Массив \([2, 1, 7]\) не является мультитестом, но при замене первого числа на \(1\) получается массив \([1, 1, 7]\) который является мультитестом. Массив \([1, 7]\) также не является мультитестом, но массив \([1, 0]\) является. Таким образом \(f([1, 7]) = 1\).

Во втором наборе входных данных первого теста для \(i = 2\), \(f([a_i, a_{i+1}, \ldots, a_n]) = f([1, 3, 1, 2, 1, 1]) = 1\), так как массив не является мультитестом, но при замене второго элемента на \(4\) получится мультитест.

В третьем наборе входных данных первого теста для \(i = 1\), \(f([a_i, a_{i+1}, \ldots, a_n]) = f([2, 7, 1, 1]) = 1\), так как массив не является мультитестом, но при замене второго элемента на \(0\) получится мультитест.

Второй тест представляет из себя массив составленный из всех чисел первого теста. Поэтому \(f([a_1, a_2, \ldots, a_n])\) естественным образом равняется \(0\).

B. Уравняй делением

жадные алгоритмы Конструктив математика Перебор *1200

Вам дан массив \(a_1, a_2, \ldots, a_n\) положительных целых чисел.

Вы можете сделать следующую операцию несколько (возможно, ноль) раз:

  • Выбираются два индекса \(i\), \(j\) (\(1 \leq i, j \leq n\), \(i \neq j\)).
  • Приравнивается \(a_i := \lceil \frac{a_i}{a_j} \rceil\). Здесь \(\lceil x \rceil\) обозначает значение \(x\), округленное вверх до ближайшего целого числа \(\geq x\).

Можно ли сделать все элементы массива равными с помощью нескольких операций (возможно, нуля)? Если да, выведите любой способ сделать это за не более чем \(30n\) операций.

Можно доказать, что в ограничениях этой задачи если существует какой-нибудь способ сделать все элементы равными, существует способ, использующий не более \(30n\) операций.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Описания наборов входных данных следуют.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 100\)).

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число \(q\) (\(-1 \leq q \leq 30n\)). Если \(q=-1\), то решения не существует, иначе \(q\) равняется количеству операций.

Если \(q \geq 0\), то следующие \(q\) строк содержат по два целых числа \(i\), \(j\) (\(1 \leq i, j \leq n\), \(i \neq j\)) — описания операций.

Если существует несколько решений, выведите любое.

Примечание

В первом, втором и четвертом наборах входных данных все числа равны, поэтому можно ничего не делать.

В третьем наборе входных данных невозможно сделать все числа равными с помощью операций.

В пятом наборе входных данных: \([\color{red}{4}, 3, \color{blue}{2}] \to [\color{blue}{2}, \color{red}{3}, 2] \to [2, 2, 2]\).

В шестом наборе входных данных: \([\color{blue}{3}, 3, \color{red}{4}, 4] \to [3, \color{blue}{3}, 2, \color{red}{4}] \to [\color{red}{3}, 3, \color{blue}{2}, 2] \to [2, \color{red}{3}, 2, \color{blue}{2}] \to [2, 2, 2, 2]\).

На примере красные числа это числа на позициях \(i\) (которые будут присвоены), синие числа это числа на позициях \(j\).

F. Подели пополам или вычти

Бинарный поиск дп жадные алгоритмы Перебор сортировки *2700

У вас есть массив положительных целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\). Также вам дано положительное целое число \(b\).

Мы можете сделать следующие операции несколько раз в любом порядке:

  1. Выберите некоторый индекс \(1 \le i \le n\) и замените \(a_i\) на \(\lceil \frac{a_i}{2} \rceil\). Здесь \(\lceil x \rceil\) обозначает минимальное целое число не меньше чем \(x\).
  2. Выберите некоторый индекс \(1 \le i \le n\) и замените \(a_i\) на \(\max(a_i - b, 0)\).

Однако также нужно, чтобы следующие условия удовлетворялись:

  • Вы можете сделать не более \(k_1\) операций типа 1.
  • Вы можете сделать не более \(k_2\) операций типа 2.
  • Для всех \(1 \le i \le n\), вы можете сделать не более \(1\) операции типа 1 с элементом \(a_i\).
  • Для всех \(1 \le i \le n\), вы можете сделать не более \(1\) операции типа 2 с элементом \(a_i\).

Цена массива это сумма его элементов. Найдите минимальную цену массива \(a\), которую можно получить, выполняя эти операции.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Описания наборов входных данных следуют.

В первой строке описания каждого набора входных данных находится четыре целых числа \(n\), \(b\), \(k_1\), \(k_2\) (\(1 \le n \le 5000\), \(1 \le b \le 10^9\), \(0 \le k_1, k_2 \le n\)).

Во второй строке описания каждого набора входных данных находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) задающих массив \(a\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите минимальную цену массива \(a\), которую можно получить, выполняя операции.

Примечание

В первом наборе входных данных вы можете сделать следующее:

  • Сделать операцию 2 с элементом \(a_3\). Он поменяется с \(5\) на \(3\).
  • Сделать операцию 1 с элементом \(a_1\). Он поменяется с \(9\) на \(5\).

После всех операций получается массив \(a = [5, 3, 3]\) который имеет цену \(5 + 3 + 3 = 11\). Можно показать, что это минимальная достижимая цена.

Во втором наборе входных данных обратите внимание, что нам не разрешено применять операцию типа 1 более одного раза с элементом \(a_1\). Поэтому оптимально применить операцию типа 1 к элементам \(a_1\) и \(a_2\). Также можно применить операцию 1 только к \(a_1\), потому что эта операция никак не меняет элемент \(a_2\).

В третьем наборе входных данных можно получить массив стоимости \(23\):

  • Сделать операцию 1 с элементом \(a_4\). Он поменяется с \(19\) на \(10\).
  • Сделать операцию 2 с элементом \(a_4\). Он поменяется с \(10\) на \(7\).

После всех операций получается массив \(a = [2, 8, 3, 7, 3]\). Цена массива \(a\) это \(2 + 8 + 3 + 7 + 3 = 23\). Можно показать, что это минимальная достижимая цена.

A. Треугольник

геометрия Перебор *1500

На уроке геометрии Вася узнал, что треугольник называется прямоугольным, если он невырожденный, а один из его углов прямой. Вася тут же захотел нарисовать такой треугольник: он отметил на листке бумаги 3 точки с целочисленными координатами, соединил их отрезками прямых и показал Пете. Но тот сказал, что васин треугольник не прямоугольный, а почти прямоугольный: сам треугольник не является прямоугольным, но можно подвинуть одну из точек на расстояние ровно 1 так, чтобы координаты остались целыми, и треугольник стал прямоугольным. Вася просит вас помочь ему выяснить, не обманывает ли его Петя. По координатам вершин треугольника определите, является ли он прямоугольным, почти прямоугольным, или же не является ни тем, ни другим.

Входные данные

В первой строке входного файла через пробел записано 6 целых чисел x1, y1, x2, y2, x3, y3 — координаты вершин треугольника. Все координаты целые и не превосходят по модулю 100. Гарантируется, что треугольник невырожденный, т. е. его площадь не равна нулю.

Выходные данные

Если заданный треугольник является прямоугольным, выведите RIGHT, если он является почти прямоугольным, выведите ALMOST, и если он не является ни тем, ни другим, выведите NEITHER.

B. Платформы

математика Перебор *1700

В одном одномерном мире есть n платформ. Платформа с номером k (нумерация начинается с 1) представляет собой отрезок с координатами [(k - 1)m, (k - 1)m + l], при этом l < m. Из точки 0 по платформам начинает прыгать кузнечик Вася, причем за каждый прыжок он перемещается ровно на d единиц вправо. Определите координату точки, в которой Вася упадет. Кузнечик падает, если он оказывается не на платформе, причем если он находится на краю, он не падает.

Входные данные

В первой строке входных данных содержится 4 целых числа n, d, m, l (1 ≤ n, d, m, l ≤ 106, l < m) — соответственно количество платформ, длина прыжка кузнечика Васи и числа m и l, необходимые для определения координат k-ой платформы: [(k - 1)m, (k - 1)m + l].

Выходные данные

Выведите координаты точки, в которой произойдет падение кузнечика. Не забудьте, что если Вася находится на краю платформы, он не падает.

D. Продавец Вася

дп жадные алгоритмы Перебор *2000

В прошлом году Вася подрабатывал продажей компьютерных флешек. В каждый из n дней его работы происходило одно из двух:

  • К Васе приходил покупатель и спрашивал флешку на 2x мегабайт. Если у Васи была такая флешка, он продавал ее и получал 2x бурлей.
  • Вася выигрывал какую-нибудь олимпиаду по программированию и получал в качестве приза флешку на 2x мегабайт. При этом он мог выбрать, подарить ли ему эту флешку кому-то из друзей, или оставить ее себе.

Вася никогда не хранил у себя больше одной флешки, так как боялся перепутать их объемы и случайно кого-нибудь обмануть. Также известно, что для каждого объема флешки было не более одного покупателя, желающего купить такую флешку. Сейчас, зная все запросы покупателей и все призы на олимпиадах по программированию за прошедшие n дней, Васе интересно, сколько денег он мог бы заработать, если бы действовал оптимально.

Входные данные

В первой строке входных данных содержится число n (1 ≤ n ≤ 5000) — сколько дней работал Вася. Следующие n строк содержат описание дней. Строка вида sell x описывает день, в который к Васе приходил покупатель за флешкой на 2x мегабайт (0 ≤ x ≤ 2000). Гарантируется, что для каждого x задано не более одной строки вида sell x. Строка вида win x описывает день, в который Вася выиграл флешку на 2x мегабайт (0 ≤ x ≤ 2000).

Выходные данные

Выведите наибольший возможный заработок Васи в бурлях, если бы он заранее знал все события. Не забудьте, что Вася не может хранить у себя одновременно больше одной флешки.

E1. Непростительное заклятие (простая версия)

графы жадные алгоритмы Конструктив Перебор снм Строки *1400

Это простая версия задачи. В этой версии \(k\) всегда равно \(3\).

Верховный чародей Визенгамота однажды поймал злого волшебника Drahyrt, но злой волшебник вернулся и хочет отомстить верховному чародею. Поэтому он украл у его ученика Гарри заклинание \(s\).

Заклинание — это строка длины \(n\), состоящая из строчных латинских букв.

Drahyrt хочет заменить заклинание на непростительное заклятие — строку \(t\).

Drahyrt с помощью древней магии может менять местами буквы на расстоянии \(k\) или \(k+1\) в заклинании сколько угодно раз. В этой версии задачи можно менять буквы на расстоянии \(3\) или \(4\). Другими словами, Drahyrt может поменять буквы на позициях \(i\) и \(j\) в заклинании \(s\) если \(|i-j|=3\) или \(|i-j|=4\).

Например, если \(s = \) «talant» и \(t = \) «atltna», то Drahyrt может действовать следующим образом:

  • поменять местами буквы на позициях \(1\) и \(4\), получив заклинание «aaltnt».
  • поменять местами буквы на позициях \(2\) и \(6\), получив заклинание «atltna».

Вам даны заклинания \(s\) и \(t\). Может ли Drahyrt изменить заклинание \(s\) на \(t\)?

Входные данные

В первой строке входных данных дано единственное целое число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке содержится два целых числа \(n, k\) (\(1 \le n \le 2 \cdot 10^5\), \(k = 3\)) — длина заклинаний и число \(k\) такое, что Drahyrt может менять буквы в заклинании на расстоянии \(k\) или \(k+1\).

Во второй строке дано заклинание \(s\) — строка длины \(n\), состоящая из строчных латинских букв.

В третьей строке дано заклинание \(t\) — строка длины \(n\), состоящая из строчных латинских букв.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Обратите внимание, что ограничений на сумму значений \(k\) по всем наборам входных данных нет.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES» если Drahyrt может изменить заклинание \(s\) на \(t\) и «NO» иначе.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Первый пример разобран в условии.

Во втором примере можно действовать следующим образом:

  • Поменять местами буквы на позициях \(2\) и \(5\) (расстояние \(3\)), тогда получим заклинание «aaacbba».
  • Поменять местами буквы на позициях \(4\) и \(7\) (расстояние \(3\)), тогда получим заклинание «aaaabbc».

Во третьем примере можно показать, что из строки \(s\) невозможно получить строку \(t\) меняя местами буквы на расстоянии \(3\) или \(4\).

В четвертом примере подходит например следующая последовательность преобразований:

  • «accio» \(\rightarrow\) «aocic» \(\rightarrow\) «cocia» \(\rightarrow\) «iocca» \(\rightarrow\) «aocci» \(\rightarrow\) «aicco» \(\rightarrow\) «cicao».

В пятом примере можно показать, что невозможно получить из строки \(s\) строку \(t\).

В шестом примере достаточно поменять местами две крайние буквы.

E2. Непростительное заклятие (сложная версия)

графы жадные алгоритмы Конструктив Перебор поиск в глубину и подобное снм Строки *1500

Это сложная версия задачи. В этой версии нет дополнительных ограничений на число \(k\).

Верховный чародей Визенгамота однажды поймал злого волшебника Drahyrt, но злой волшебник вернулся и хочет отомстить верховному чародею. Поэтому он украл у его ученика Гарри заклинание \(s\).

Заклинание — это строка длины \(n\), состоящая из строчных латинских букв.

Drahyrt хочет заменить заклинание на непростительное заклятие — строку \(t\).

Drahyrt с помощью древней магии может менять местами буквы на расстоянии \(k\) или \(k+1\) в заклинании сколько угодно раз. Другими словами, Drahyrt может поменять буквы на позициях \(i\) и \(j\) в заклинании \(s\) если \(|i-j|=k\) или \(|i-j|=k+1\).

Например, если \(k = 3, s = \) «talant» и \(t = \) «atltna», то Drahyrt может действовать следующим образом:

  • поменять местами буквы на позициях \(1\) и \(4\), получив заклинание «aaltnt».
  • поменять местами буквы на позициях \(2\) и \(6\), получив заклинание «atltna».

Вам даны заклинания \(s\) и \(t\). Может ли Drahyrt изменить заклинание \(s\) на \(t\)?

Входные данные

В первой строке входных данных дано единственное целое число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке содержится два целых числа \(n, k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le k \le 2 \cdot 10^5\)) — длина заклинаний и число \(k\) такое, что Drahyrt может менять буквы в заклинании на расстоянии \(k\) или \(k+1\).

Во второй строке дано заклинание \(s\) — строка длины \(n\), состоящая из строчных латинских букв.

В третьей строке дано заклинание \(t\) — строка длины \(n\), состоящая из строчных латинских букв.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Обратите внимание, что ограничений на сумму значений \(k\) по всем наборам входных данных нет.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES» если Drahyrt может изменить заклинание \(s\) на \(t\) и «NO» иначе.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Первый пример разобран в условии.

Во втором примере можно менять соседние буквы местами, так что можем отсортировать строку например с помощью сортировки пузырьком.

Во третьем примере можно показать, что из строки \(s\) невозможно получить строку \(t\) меняя местами буквы на расстоянии \(6\) или \(7\).

В четвертом примере подходит например следующая последовательность преобразований:

  • «accio» \(\rightarrow\) «aocic» \(\rightarrow\) «cocia» \(\rightarrow\) «iocca» \(\rightarrow\) «aocci» \(\rightarrow\) «aicco» \(\rightarrow\) «cicao».

В пятом примере можно показать, что невозможно получить из строки \(s\) строку \(t\).

В шестом примере достаточно поменять местами две крайние буквы.

C. Вращайте барабан!

жадные алгоритмы математика Перебор теория чисел *1500

Пока Джеймс уехал по делам, Веспер неторопливо изучает, что интересного легендарное казино «Рояль» может предложить людям, увлекающимся спортивным программированием.

Её внимание привлекла совершенно новая рулетка «Вращайте барабан!», которая работает довольно своеобразно. Колесо рулетки состоит из \(n\) секторов с номерами от \(0\) до \(n - 1\). Шарика нет, а выигрышный сектор определяется статичной стрелкой, указывающей на один из секторов. Секторы пронумерованы последовательно и колесо всегда крутится в сторону увеличения индексов. Это означает, что сектор \(i + 1\) идёт сразу после сектора \(i\) для всех \(i\) от \(0\) до \(n - 2\), а сектор \(0\) идёт сразу после сектора \(n - 1\).

После того, как ставка сделана, игроку разрешается самостоятельно потянуть за ручку старта и заставить колесо вращаться. Если игрок потянет ручку с целочисленной положительной силой \(f\), то колесо будет вращаться в течение \(f\) секунд. В течение первой секунды оно прокрутится \(f\) секторов, в следующую секунду оно прокрутится \(f - 1\) секторов, затем \(f - 2\) секторов и так далее до полной остановки. После того как колесо полностью останавливается, выигрышным объявляется сектор, на который указывает стрелка.

Стрелка рулетки в данный момент указывает на сектор \(x\). Веспер знает, что она может потянуть ручку с любой целочисленной силой от \(1\) до \(p\) включительно. Обратите внимание, что потянуть ручку с силой \(0\) (то есть не потянуть вообще) нельзя. Самый большой приз — автомобиль — присуждается, если выигрывает сектор \(0\). Теперь Веспер задается вопросом, сможет ли она сделать так, чтобы выиграл сектор \(0\), потянув ручку старта ровно один раз?

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует \(t\) строк, каждая из которых содержит описание одного набора входных данных.

Описание каждого набора входных данных состоит из трёх целых чисел \(n\), \(x\) и \(p\) (\(3 \leq n \leq 10^5\), \(0 \leq x < n\), \(1 \leq p \leq 10^9\)) — количество секторов на колесе, текущий сектор, на который указывает стрелка, и максимальная сила, с которой Веспер может потянуть ручку старта, соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, \(i\)-я строка должна содержать ответ для \(i\)-го набора входных данных. Если возможно потянуть за ручку старта с целочисленной силой от \(1\) до \(p\), чтобы сектор \(0\) выиграл, выведите «Yes». В противном случае выведите «No».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных единственный возможный способ потянуть ручку — с усилием \(1\). Этого недостаточно, чтобы стрелка указывала на сектор \(0\), для этого требуется как минимум сила \(2\).

Во втором наборе входных данных Веспер может потянуть ручку с силой \(2\), так что колесо повернётся на \(2 + 1 = 3\) сектора, а стрелка будет указывать на сектор \(0\).

В третьем наборе входных данных Веспер может потянуть за ручку с силой \(4\), так что колесо повернётся на \(4 + 3 + 2 + 1 = 10\) секторов, после чего стрелка будет снова показывать на сектор \(0\).

В четвёртом наборе входных данных Веспер может потянуть за ручку с силой \(5\), так что колесо повернётся на \(5 + 4 + 3 + 2 + 1 = 15\) секторов. Это заставит колесо сделать один полный оборот плюс ещё \(4\) сектора.

В пятом наборе входных данных, какую бы силу ни выбрала Веспер, чтобы потянуть за ручку, она может сделать выигрышными только секторы \(1\) и \(2\).

D. Размещение

дп жадные алгоритмы Перебор реализация *2000

Энни — фотограф-любитель. Ей нравится фотографировать гигантские жилые дома ночью. Она только что сфотографировала огромное прямоугольное здание, которое можно представить как таблицу из \(n \times m\) окон. Это означает, что в здании \(n\) этажей и на каждом этаже ровно \(m\) окон. Каждое окно либо тёмное, либо светлое, то есть в комнате за ним горит свет.

Энни знает, что каждая квартира в этом доме либо однокомнатная, либо двухкомнатная. Каждая однокомнатная квартира представлена на фотографии ровно одним окном, а каждая двухкомнатная квартира представлена на фотографии двумя подряд идущими окнами на одном этаже. Более того, \(m\) гарантированно делится на \(4\) и известно, что на каждом этаже ровно \(\frac{m}{4}\) двухкомнатных квартир и ровно \(\frac{m}{2}\) однокомнатных квартир. Точное расположение квартир неизвестно и может быть разным для каждого этажа.

Энни считает, что квартира заселена, если хотя бы в одном из её окон горит свет. Теперь она задаётся вопросом, какое может быть минимальное и максимальное количество заселённых квартир в доме, если судить по данной фотографии?

Формально, для каждого из этажей Энни придумывает возможное расположение квартир, в котором есть ровно \(\frac{m}{4}\) двухкомнатных квартир (два последовательных окна) и \(\frac{m}{2}\) однокомнатных квартир (одно окно). Затем она подсчитывает общее количество квартир, в которых есть хотя бы одно светлое окно. Какое минимальное и максимальное число она может получить?

Входные данные

Первая строка входных данных содержит два положительных целых числа \(n\) и \(m\) (\(1 \leq n \cdot m \leq 5 \cdot 10^5\)) — количество этажей в здании и количество окон на этаже соответственно. Гарантируется, что \(m\) делится на \(4\).

Затем следует \(n\) строк, каждая из которых содержит \(m\) символов. \(j\)-й символ \(i\)-й строки равен «0», если \(j\)-е окно на \(i\)-м этаже тёмное, и равен «1», если это окно светлое.

Выходные данные

Выведите два целых числа, минимальное и максимальное возможное количество заселённых квартир, если на каждом этаже возможно своё собственное расположение \(\frac{m}{4}\) двухкомнатных и \(\frac{m}{2}\) однокомнатных квартир.

Примечание

В первом примере каждый этаж состоит из одной двухкомнатной квартиры и двух однокомнатных квартир.

При следующей планировке квартир достигается минимально возможное количество заселённых квартир, равное \(7\).


|0 1|0|0|
|1 1|0|0|
|0|1 1|0|
|1|0 1|0|
|1|0|1 1|

При следующей планировке квартир достигается максимально возможное количество заселённых квартир, равное \(10\).


|0 1|0|0|
|1|1 0|0|
|0 1|1|0|
|1|0 1|0|
|1 0|1|1|

E. Маршрутизация

битмаски графы дп Перебор поиск в глубину и подобное *2400

Ада управляет сетью, состоящей из \(n\) серверов и \(m\) прямых соединений между ними. Каждое прямое соединение между парой различных серверов позволяет осуществлять двустороннюю передачу информации между этими двумя серверами. Ада знает, что с помощью этих \(m\) прямых соединений возможна передача информации между любыми двумя серверами в этой сети (напрямую или через промежуточные серверы). Будем называть сервер \(v\) соседом сервера \(u\), если существует прямое соединение между этими двумя серверами.

Аде нужно настроить в своей сети WRP (Weird Routing Protocol — Странный протокол маршрутизации). Для каждого сервера \(u\) ей нужно выбрать ровно одного соседа и назначить его вспомогательным сервером \(a(u)\). Рассмотрим процесс того, как будет работать маршрутизация после определения всех \(a(u)\). Предположим, сервер \(u\) хочет найти путь до сервера \(v\), отличного от \(u\).

  • Сервер \(u\) смотрит на все свои прямые соединения с другими серверами. Если он видит прямое соединение с сервером \(v\), он знает путь и процесс завершается.
  • Если путь не был найден на первом шаге, сервер \(u\) запрашивает поиск пути у своего вспомогательного сервера \(a(u)\).
  • Вспомогательный сервер \(a(u)\) следует этому процессу, начиная с первого шага.
  • После того, как \(a(u)\) находит путь, он возвращает его \(u\). Затем сервер \(u\) строит результирующий путь как объединение прямого соединения между \(u\) и \(a(u)\) и пути от \(a(u)\) до \(v\).

Как видите, эта процедура либо создает правильный путь и завершается, либо работает вечно. Таким образом, для Ады крайне важно правильно настроить WRP своей сети.

Ваша цель — назначить вспомогательный сервер \(a(u)\) для каждого сервера \(u\) в данной сети таким образом, чтобы WRP мог построить путь от любого сервера \(u\) к любому другому серверу \(v\), используя вышеупомянутую процедуру. Или же требуется определить, что такое назначение вспомогательных серверов невозможно.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 20\), \(n - 1 \leq m \leq \frac{n \cdot (n - 1)}{2}\)) — количество серверов и количество прямых соединений в данной сети.

Далее следуют \(m\) строк, содержащих по два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \ne v_i\)), \(i\)-я строка описывает \(i\)-е прямое соединение.

Гарантируется, что между любыми двумя серверами существует не более одного прямого соединения. Гарантируется, что существует прямой или непрямой маршрут (состоящий только из заданных прямых соединений) между любыми двумя серверами.

Выходные данные

Если нет возможности назначить вспомогательный сервер \(a(u)\) для каждого сервера \(u\) таким образом, чтобы WRP смог найти путь от любого сервера \(u\) к любому другому серверу \(v\), выведите «No» в единственной строке вывода.

В противном случае выведите «Yes» в первой строке вывода. Во второй строке выведите \(n\) целых чисел, \(i\)-е из которых должно быть равно \(a(i)\) – номеру вспомогательного сервера для сервера \(i\). Не забывайте, что должно быть прямое соединение между сервером \(i\) и сервером \(a(i)\).

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

A. Нам нужен ноль

битмаски Перебор *800

Дан массив \(a\), состоящий из целых неотрицательных чисел. Вы можете выбрать целое число \(x\) и обозначить \(b_i=a_i \oplus x\) для всех \(1 \le i \le n\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ. Можно ли выбрать такое число \(x\), что значение выражения \(b_1 \oplus b_2 \oplus \ldots \oplus b_n\) будет равняться \(0\)?

Можно показать, что если искомый \(x\) существует, то существует и такой подходящий \(x\) такой, что (\(0 \le x < 2^8\)).

Входные данные

В первой строке дано число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка набора содержит одно целое число \(n\) (\(1 \le n \le 10^3\)) — длину массива \(a\).

Вторая строка набора содержит \(n\) целых чисел — массив \(a\) (\(0 \le a_i < 2^8\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^3\).

Выходные данные

Для каждого набора входных данных выведите искомое целое число \(x\) (\(0 \le x < 2^8\)), если оно существует, или \(-1\) иначе.

Примечание

В первом наборе входных данных после применения операции с числом \(6\) массив \(b\) становится равен \([7, 4, 3]\), \(7 \oplus 4 \oplus 3 = 0\).

В третьем наборе есть и другие ответы, например, число \(0\).

E. Максимумов должно быть много

Деревья дп Перебор поиск в глубину и подобное Структуры данных *2300

Дано дерево (связный граф без циклов). В каждой вершине дерева записано число. Назовём характеристикой \(\mathrm{MAD}\) (maximum double) дерева максимальное число, которое встречается в вершинах этого дерева хотя бы \(2\) раза. Если же никакое число не встречается в дереве больше одного раза, то положим \(\mathrm{MAD}=0\).

Заметим, что если удалить ребро из дерева, то оно распадётся на два дерева. Вычислим \(\mathrm{MAD}\) в каждом из деревьев и возьмем максимум из этих двух значений. Полученный результат назовем значением удаленного ребра.

Для каждого ребра найдите его значение. Обратите внимание, что мы в действительности не удаляем ребра из дерева, и каждое значение должно быть вычислено независимо.

Входные данные

В первой строке находится одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество вершин в дереве.

Далее в \(n - 1\) строке находятся по два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\)) — концы рёбер дерева. Гарантируется, что данные ребра образуют дерево.

В последней строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — числа, записанные в вершинах.

Выходные данные

Для каждого ребра в порядке ввода выведите одно число — максимум из \(\mathrm{MAD}\) двух деревьев, получающихся после удаления из начального дерева данного ребра.

Примечание

В первом примере после удаления ребра \((1, 2)\) ни в одном из получившихся поддеревьев никакое число не будет повторяться \(2\) раза, поэтому ответ равен \(\max(0, 0)=0\).

После удаления ребра \((2, 3)\) в бо́льшем поддереве будет два раза повторяться \(1\) и два раза повторяться \(2\), поэтому \(\mathrm{MAD}\) этого дерева будет равен \(2\).

После удаления ребра \((2, 4)\) в бо́льшем поддереве будет повторяться только число \(1\), а во втором будет только одно число, поэтому ответом будет \(1\).

Во втором примере, если ребро \(1 \leftrightarrow 4\) не удалено, то в одном из поддеревьев будет две \(1\), поэтому ответ — \(1\). А если удалено ребро \(1 \leftrightarrow 4\), то в обоих поддеревьях нет повторяющихся значений, поэтому ответом будет \(0\).

F1. Выживание слабейших (простая версия)

Бинарный поиск математика Перебор реализация сортировки *2600

Это простая версия задачи. Она отличается от сложной только ограничением на \(n\). Вы можете делать взломы, только если заблокируете обе версии задачи.

Пусть \(a_1, a_2, \ldots, a_n\) — массив, состоящий из целых неотрицательных чисел. Определим \(F(a_1, a_2, \ldots, a_n)\) как отсортированный по неубыванию массив, состоящий из \(n - 1\) минимальных чисел вида \(a_i + a_j\), где \(1 \le i < j \le n\). Другими словами, \(F(a_1, a_2, \ldots, a_n)\) — это отсортированный по неубыванию массив из \(n - 1\) минимальных сумм всевозможных пар элементов массива \(a_1, a_2, \ldots, a_n\). Например, \(F(1, 2, 5, 7) = [1 + 2, 1 + 5, 2 + 5] = [3, 6, 7]\).

Вам дан массив, состоящий из целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\). Определите, чему равен единственный элемент массива \(\underbrace{F(F(F\ldots F}_{n-1}(a_1, a_2, \ldots, a_n)\ldots))\). Так как ответ может быть достаточно большим, выведите его по модулю \(10^9+7\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 3000\)) — начальную длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы массива.

Выходные данные

Выведите единственное число — ответ на задачу по модулю \(10^9 + 7\).

Примечание

В первом тесте массив трансформируется следующим образом: \([1, 2, 4, 5, 6] \to [3, 5, 6, 6] \to [8, 9, 9] \to [17, 17] \to [34]\). Единственный элемент конечного массива равен \(34\).

Во втором тесте \(F(a_1, a_2, \ldots, a_n)\) будет равен \([2, 2, 2, 8, 8, 8, 8, 8]\). Этот массив составлен из \(3\) чисел вида \(1 + 1\) и из \(5\) чисел вида \(1 + 7\).

В четвёртом тесте массив трансформируется следующим образом: \([10^9, 10^9, 777] \to [10^9+777, 10^9+777] \to [2 \cdot 10^9 + 1554]\). \(2 \cdot 10^9 + 1554\) по модулю \(10^9+7\) равняется \(1540\).

C. Мастер последовательностей

Конструктив математика Перебор *1600

Для некоторого положительного целого числа \(m\) YunQian считает массив \(q\) из \(2m\) (возможно, отрицательных) целых чисел хорошим, если и только если для каждой подпоследовательности \(q\), имеющей длину \(m\), произведение \(m\) элементов в подпоследовательности равно сумме оставшихся \(m\) элементов. Формально, пусть \(U=\{1,2,\ldots,2m\}\). Для всех множеств \(S \subseteq U\) таких, что \(|S|=m\), должно выполняться \(\prod\limits_{i \in S} q_i = \sum\limits_{i \in U \setminus S} q_i\).

Определим расстояние между двумя массивами \(a\) и \(b\) длиной \(k\) как \(\sum\limits_{i=1}^k|a_i-b_i|\).

Вам дано целое положительное число \(n\) и массив \(p\) из \(2n\) целых чисел.

Найдите минимальное расстояние между \(p\) и \(q\) среди всех хороших массивов \(q\) длины \(2n\). Можно показать, что для всех положительных целых чисел \(n\) существует хотя бы один хороший массив. Обратите внимание, что вам не требуется предъявлять массив \(q\), который достигает этого минимального расстояния.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 2\cdot10^5\)).

Вторая строка каждого набора содержит \(2n\) целых чисел \(p_1, p_2, \ldots, p_{2n}\) (\(|p_i| \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора выведите минимальное расстояние между \(p\) и \(q\).

Примечание

В первом наборе оптимальный массив \(q=[6,6]\).

Во втором наборе оптимальный массив \(q=[2,2,2,2]\).

E. Мастер деревьев

Деревья Перебор поиск в глубину и подобное Структуры данных *2200

Вам дано дерево с \(n\) взвешенными вершинами, пронумерованными от \(1\) до \(n\). Корнем дерева является \(1\). Родитель вершины \(i\) — вершина \(p_i\), а вес вершины \(i\) — число \(a_i\). Для удобства определим \(p_1=0\).

Для двух вершин \(x\) и \(y\) одинаковой глубины\(^\dagger\), определим \(f(x,y)\) следующим образом:

  • Инициализируем \(\mathrm{ans}=0\).
  • Пока \(x\) и \(y\) не \(0\):
    • \(\mathrm{ans}\leftarrow \mathrm{ans}+a_x\cdot a_y\);
    • \(x\leftarrow p_x\);
    • \(y\leftarrow p_y\).
  • \(f(x,y)\) равно значению \(\mathrm{ans}\).

Вам предстоит обработать \(q\) запросов. В \(i\)-м запросе вам даны два целых числа \(x_i\) и \(y_i\), и вам нужно вычислить \(f(x_i,y_i)\).

\(^\dagger\) Глубина вершины \(v\) — это количество ребер на единственном простом пути от корня дерева до вершины \(v\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 10^5\); \(1 \le q \le 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)).

Третья строка содержит \(n-1\) целое число \(p_2, \ldots, p_n\) (\(1 \le p_i < i\)).

Каждая из следующих \(q\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1\le x_i,y_i\le n\)). Гарантируется, что \(x_i\) и \(y_i\) имеют одинаковую глубину.

Выходные данные

Выведите \(q\) строк, \(i\)-я строка содержит одно целое число — значение \(f(x_i,y_i)\).

Примечание

Рассмотрим первый пример.

В первом запросе ответ – \(a_4\cdot a_5+a_3\cdot a_3+a_2\cdot a_2+a_1\cdot a_1=3+4+25+1=33\).

Во втором запросе ответ – \(a_6\cdot a_6+a_2\cdot a_2+a_1\cdot a_1=1+25+1=27\).

F. Мяч-попрыгунчик

Перебор поиск в глубину и подобное реализация *1700

Вам дана комната, которую можно представить в виде сетки из \(n \times m\). В позиции \((i_1, j_1)\) (пересечение строки \(i_1\) и столбца \(j_1\)) находится шар, который начинает двигаться по диагонали в одном из четырех направлений:

  • Шарик движется вниз и вправо, обозначается \(\texttt{DR}\); это означает, что после шага местоположение шарика изменяется с \((i, j)\) на \((i+1, j+1)\).
  • Мяч движется вниз и влево, обозначается \(\texttt{DL}\); это означает, что после шага местоположение мяча изменяется с \((i, j)\) на \((i+1, j-1)\).
  • Мяч движется вверх и вправо, обозначается \(\texttt{UR}\); это означает, что после шага местоположение мяча изменяется с \((i, j)\) на \((i-1, j+1)\).
  • Мяч движется вверх и влево, обозначается \(\texttt{UL}\); это означает, что после шага местоположение мяча изменяется с \((i, j)\) на \((i-1, j-1)\).

После каждого шага мяч сохраняет свое направление, если только он не ударится о стену (то есть направление выведет его за пределы комнаты на следующем шаге). В этом случае направление мяча изменяется вдоль оси стены; если мяч попадает в угол, то изменяются оба направления. Любой такой случай называется отскоком. Мяч никогда не перестает двигаться.

В приведенном примере мяч стартует с точки \((1, 7)\) и движется в направлении \(\texttt{DL}\), пока не достигнет нижней стены, затем он подпрыгивает и продолжает движение в направлении \(\texttt{UL}\). Достигнув левой стены, мяч подпрыгивает и продолжает двигаться в направлении \(\texttt{UR}\). Когда мяч достигает верхней стены, он подпрыгивает и продолжает движение в направлении \(\texttt{DR}\). Достигнув правого нижнего угла, он отскакивает один раз и продолжает движение в направлении \(\texttt{UL}\), и так далее.

Ваша задача - найти, сколько отскоков произойдёт, пока мяч не достигнет клетки \((i_2, j_2)\) в комнате, или сообщить, что он никогда не достигнет клетки \((i_2, j_2)\), выведя \(-1\).

Обратите внимание, что мяч сначала попадает в клетку и только после этого отскакивает, если это происходит.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит шесть целых чисел и строку \(n, m, i_1, j_1, i_2, j_2, d\) (\(2 \leq n, m \leq 25000\); \(1 \leq i_1, i_2 \leq n\); \(1 \leq j_1, j_2 \leq m\); \(d \in\{ \texttt{DR}, \texttt{DL}, \texttt{UR}, \texttt{UL}\}\)) — размеры сетки, начальные координаты шарика, координаты конечной клетки и начальное направление шарика.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество отскоков мяча, пока он не достигнет клетки \((i_2, j_2)\) в первый раз, или \(-1\), если мяч никогда не достигнет данной клетки.

G1. Последовательное сложение (простая версия)

дп жадные алгоритмы Перебор реализация сортировки Структуры данных *1100

Единственное различие между двумя версиями в том, что в этой версии ограничения ниже.

Изначально массив \(a\) содержит только число \(1\). Вы можете выполнить несколько операций, чтобы изменить массив. За одну операцию можно выбрать некоторую подпоследовательность \(^{\dagger}\) из \(a\) и вставить на любую позицию в \(a\) элемент, равный сумме всех элементов подпоследовательности.

Вам дан массив \(c\). Проверьте, можно ли получить из массива \(a\) массив \(c\), выполнив некоторое количество (возможно, 0) операций над исходным массивом.

\(^{\dagger}\) Последовательность \(b\) является подпоследовательностью последовательности \(a\), если \(b\) может быть получена из \(a\) удалением нескольких (возможно, нуля, но не всех) элементов. Другими словами, операция выглядит так: выберем \(k\) (\(1 \leq k \leq |a|\)) различных индексов \(i_1, i_2, \dots, i_k\) и вставим в любое место \(a\) новый элемент со значением, равным \(a_{i_1} + a_{i_2} + \dots + a_{i_k}\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 5000\)) — длину массива \(c\).

Вторая строка каждого набора входных данных содержит \(n\) разделенных пробелами целых чисел \(c_i\) (\(1 \leq c_i \leq 5000\)) — массив \(c\), который вам нужно получить из массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если такая последовательность операций существует, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Для первого набора входных данных исходный массив \(a\) уже равен \([1]\), поэтому ответ «YES».

Для второго набора входных данных после выполнения любого количества операций длина массива \(a\) станет хотя бы два, а в начальном массиве элемента \(2\) нет, поэтому получить массив \([2]\) невозможно, и ответ будет «NO».

Для третьего набора входных данных мы можем выполнить следующие операции, чтобы получить массив \(c\):

  • Первоначально, \(a = [1]\).
  • Выбрав подпоследовательность \([1]\) и вставив \(1\) в массив, \(a\) станет равным \([1, 1]\).
  • Выбрав подпоследовательность \([1, 1]\) и вставив \(1+1=2\) в середину массива, \(a\) станет равным \([1, 2, 1]\).
  • Выбрав подпоследовательность \([1, 2]\) и вставив \(1+2=3\) после первой \(1\) массива, \(a\) станет равным \([1, 3, 2, 1]\).
  • Выбрав подпоследовательность \([1, 3, 1]\) и вставив \(1+3+1=5\) в начало массива, \(a\) станет равным \([5, 1, 3, 2, 1]\) (именно такой массив нам нужно было получить).

A. Удачливые номера

Перебор реализация *900

В городе Олимп-Сити недавно запустили производство персональных звездолетов. Теперь каждый житель Марса сможет купить себе такое средство передвижения и недорого летать на другие планеты.

Естественно, у каждого звездолета есть номер — некоторое целое положительное число \(x\). Назовем удачливостью числа \(x\) разность между наибольшей и наименьшей цифрами этого числа. Например, у числа \(142857\) наибольшая цифра равна \(8\), а наименьшая — \(1\), поэтому его удачливость равна \(8-1=7\). А у числа \(111\) все цифры равны \(1\), поэтому его удачливость равна нулю.

Лаксап — известный марсианский блогер, который часто летает в разные уголки Солнечной системы. Чтобы выпускать интересные видео еще быстрее, он решил купить себе звездолет. Придя в магазин, он увидел звездолеты с номерами с \(l\) по \(r\) включительно. Находясь в магазине, Лаксап заинтересовался, какие из звездолетов имеют наиболее удачливые номера.

Поскольку звездолетов в магазине много, а Лаксап не умеет программировать, то Вы должны помочь блогеру и написать программу, которая отвечает на его вопрос.

Входные данные

В первой строке находится целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных.

В каждой из следующих \(t\) строк находится описание набора входных данных. Описание состоит из двух целых чисел \(l\) и \(r\) (\(1 \le l \le r \le 10^6\)) — наибольший и наименьший номера звездолета в магазине.

Выходные данные

Выведите \(t\) строк, по одной строке на каждый набор входных данных, содержащей номер самого удачливого звездолета в магазине.

Если способов выбрать наиболее удачливый номер несколько, то выведите любой из них.

Примечание

Рассмотрим два набора входных данных:

  • удачливость числа \(59\) равна \(9 - 5 = 4\);
  • удачливость числа \(60\) равна \(6 - 0 = 6\);
  • удачливость числа \(61\) равна \(6 - 1 = 5\);
  • удачливость числа \(62\) равна \(6 - 2 = 4\);
  • удачливость числа \(63\) равна \(6 - 3 = 3\).
Таким образом, наиболее удачливый номер — \(60\).

В пятом наборе входных данных наибольшую удачливость имеет номер \(90\).

C. Неудачливые номера

дп жадные алгоритмы Перебор реализация *1900

В этой задаче, в отличие от задачи А, требуется искать наименее удачливый номер, а не наиболее удачливый.

Обратите внимание, что ограничения на эту задачу отличаются от ограничений на задачу А.

В городе Олимп-Сити недавно запустили производство персональных звездолетов. Теперь каждый житель Марса сможет купить себе такое средство передвижения и недорого летать на другие планеты.

Естественно, у каждого звездолета есть номер — некоторое целое положительное число \(x\). Назовем удачливостью числа \(x\) разность между наибольшей и наименьшей цифрами этого числа. Например, у числа \(142857\) наибольшая цифра равна \(8\), а наименьшая — \(1\), поэтому его удачливость равна \(8-1=7\). А у числа \(111\) все цифры равны \(1\), поэтому его удачливость равна нулю.

Лаксап — известный марсианский блогер, который часто летает в разные уголки Солнечной системы. Чтобы выпускать интересные видео еще быстрее, он решил купить себе звездолет. Придя в магазин, он увидел звездолеты с номерами с \(l\) по \(r\) включительно. Находясь в магазине, Лаксап заинтересовался, какие из звездолетов имеют наименее удачливые номера.

Поскольку звездолетов в магазине много, а Лаксап не умеет программировать, то Вы должны помочь блогеру и написать программу, которая отвечает на его вопрос.

Входные данные

В первой строке находится целое число \(t\) (\(1 \le t \le 600\)) — количество наборов входных данных.

В каждой из следующих \(t\) строк находится описание набора входных данных. Описание состоит из двух целых чисел \(l\), \(r\) (\(1 \le l \le r \le 10^{18}\)) — наибольший и наименьший номера звездолета в магазине.

Выходные данные

Выведите \(t\) строк, по одной строке на каждый набор входных данных, содержащую номер наименее удачливого звездолета в магазине.

Если способов выбрать наименее удачливый номер несколько, то выведите любой из них.

Примечание

Рассмотрим первые два набора входных данных.

  • удачливость числа \(59\) равна \(9 - 5 = 4\);
  • удачливость числа \(60\) равна \(6 - 0 = 6\);
  • удачливость числа \(61\) равна \(6 - 1 = 5\);
  • удачливость числа \(62\) равна \(6 - 2 = 4\);
  • удачливость числа \(63\) равна \(6 - 3 = 3\).
Таким образом, наименее удачливый номер — \(63\).

В пятом тестовом примере наименьшую удачливость имеют числа \(1\), \(2\), \(3\), \(4\), \(5\), \(6\), \(7\), \(8\), \(9\), \(11\), \(22\), \(33\), \(44\), \(55\), \(66\), \(77\), \(88\), \(99\), поэтому разрешается вывести любое из них.

D. Петя, Petya, Petr и палиндромы

Бинарный поиск Перебор Структуры данных *2100

У мальчика Пети и его друга, робота Petya++, есть общий друг — киборг Petr#. Иногда Petr# заходит к ребятам на чай и рассказывает интересные задачи.

Сегодня Petr# рассказал следующую задачу.

Палиндромом называется последовательность, которая одинаково читается как слева направо, так и справа налево. Например, \([38, 12, 8, 12, 38]\), \([1]\) и \([3, 8, 8, 3]\) — палиндромы.

Назовем палиндромностью последовательности \(a_1, a_2, \dots, a_n\) минимальное количество чисел, которое необходимо заменить, чтобы эта последовательность стала палиндромом. Например, палиндромность последовательности \([38, 12, 8, 38, 38]\) равна \(1\), поскольку достаточно лишь заменить число \(38\) на четвертой позиции на число \(12\). А палиндромность последовательности \([3, 3, 5, 5, 5]\) равна двум, так как можно заменить тройки на первых двух позициях на пятерки, и полученная последовательность \([5, 5, 5, 5, 5]\) станет палиндромом.

Дана последовательность \(a\) длины \(n\). Также дано некоторое нечетное число \(k\). Необходимо найти суммарную палиндромность всех подмассивов длины \(k\), то есть сумму по значениям палиндромности последовательностей \(a_i, a_{i+1}, \dots, a_{i+k-1}\) для всех \(i\) от \(1\) до \(n-k+1\).

Ребята быстро справились с задачей Petr#. А Вы сможете?

Входные данные

В первой строке входных данных находится два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le k \le n\), \(k\) нечетное) — длина последовательности и длина подстрок, для которых надо вычислять палиндромность.

Во второй строке входных данных находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — сама последовательность.

Выходные данные

Выведите одно целое число — суммарную палиндромность всех подмассивов длины \(k\).

Примечание

В первом примере палиндромность подмассива \([1, 2, 8, 2, 5]\) равна \(1\), палиндромность подмассива \([2, 8, 2, 5, 2]\) также равна \(1\), палиндромность подмассива \([8, 2, 5, 2, 8]\) равна \(0\), а палиндромность подмассива \([2, 5, 2, 8, 6]\) равна \(2\). Итого суммарная палиндромность равна \(1+1+0+2 = 4\).

Во втором примере единственный подмассив длины \(9\) совпадает со всем массивом, а его палиндромность равна \(0\), поэтому ответ также равен \(0\).

E3. Маршрутки на Венере (сложная версия)

дп Комбинаторика математика Перебор *2800

Это сложная версия задачи. Различия между версиями заключаются в ограничениях на \(n\) и \(k\). Вы можете делать взломы, только если все три версии задачи сданы.

Максим — водитель маршрутки на планете Венера.

Чтобы проехаться на маршрутке Максима, необходимо иметь билет. У каждого билета есть номер, состоящий из \(n\) цифр. Но, как известно, жители Венеры пользуются не десятичной системой счисления, а системой счисления по основанию \(k\). Поэтому можно считать, что номер билета — это последовательность из \(n\) целых чисел от \(0\) до \(k-1\) включительно.

Жители Венеры считают билет счастливым, если на нем найдется цифра, равная сумме остальных цифр по модулю \(k\). Например, если \(k=10\), то билет \(7135\) является счастливым, поскольку \(7 + 1 + 5 \equiv 3 \pmod{10}\). С другой стороны, билет \(7136\) счастливым не является, поскольку ни одна цифра не равна сумме всех остальных по модулю \(10\).

Однажды Максим, выполняя очередную поездку, задумался: а сколько всего существует счастливых билетов? При этом Максим понимает, что это число может быть очень велико, поэтому его интересует лишь остаток от деления ответа на некоторое простое число \(m\).

Входные данные

В единственной строке входных данных находится три целых числа \(n\), \(k\) и \(m\) (\(1 \le n \le 10^{18}\), \(1 \le k \le 2000\), \(10^8 \le m \le 10^9 + 7\), \(m\) — простое) — количество цифр на билете, основание системы счисления на Венере, и модуль, по которому надо найти ответ.

Выходные данные

Выведите одно целое число — количество счастливых билетов по модулю \(m\), т. е. остаток от деления ответа на \(m\).

Примечание

В первом примере существует всего четыре счастливых билета: \(000\), \(011\), \(101\) и \(110\).

A. Серия преступлений

геометрия Перебор реализация *800

В столице Берляндии переполох, уже три шокирующих преступления совершила известная банда грабителей «Пихстеры».

Карта столицы Берляндии представляет собой прямоугольную таблицу n × m. На карте каждая клетка таблицы обозначает некоторый квартал столицы.

Главный детектив столицы, Поликарп, обозначил на карте звездочками кварталы, в которых произошли первые три ограбления. Дедукция подсказывает Поликарпу, что четвертое ограбление будет совершено в таком квартале, что все четыре ограбленных квартала будут вершинами некоторого прямоугольника, параллельного сторонам карты.

С дедукцией у Поликарпа хорошо, а вот с математикой — плохо. Поэтому он попросил вас найти квартал, в котором произойдет четвертое ограбление.

Входные данные

В первой строке записано два целых числа через пробел n и m (2 ≤ n, m ≤ 100) — количество строк и столбцов карты соответственно.

Далее в n строках записано по m символов — описание карты столицы. Каждый символ может быть либо «.» (точка), либо «*» (звездочка). Символ равен «*» если соответствующий квартал ограбили, или «.» в противном случае.

Гарантируется, что на карте ровно три символа «*» и всегда можно найти четвертый квартал, соответствующий условиям задачи.

Выходные данные

Выведите два целых числа — номер строки и номер столбца на карте квартала, который ограбят четвертым. Строки нумеруются с единицы сверху вниз, столбцы нумеруются с единицы слева направо.

B. Сколько троек

Бинарный поиск Перебор *1300

Заданы n точек на плоскости. Все точки различны.

Найдите количество различных троек точек (A, B, C) таких, что точка B является серединой отрезка AC.

Тройки считаются неупорядоченными, то есть если точка B середина отрезка AC, то тройки (A, B, C) и (C, B, A) считаются одинаковыми.

Входные данные

В первой строке записано единственное целое число n (3 ≤ n ≤ 3000) — количество точек.

В следующих n строках заданы точки. В i-ой строке записаны координаты i-ой точки: два целых числа через пробел xi, yi ( - 1000 ≤ xi, yi ≤ 1000).

Гарантируется, что все заданные точки различны.

Выходные данные

Выведите единственное число — ответ на задачу.

A. Красивая последовательность

жадные алгоритмы Перебор *800

Массив из \(m\) чисел \(a_{1}, a_{2}, \ldots, a_{m}\) является хорошим тогда и только тогда, когда существует один или несколько \(i\) (\(1 \le i \le m\)), таких что \(a_{i} = i\).

Например, массив \([3,2,3]\) является хорошим, так как \(a_{2} = 2\), \(a_{3} = 3\), а массив \([3,1,1]\) не является, так как нет такого \(i\), что \(a_{i} = i\).

Массив \(a\) является красивым тогда и только тогда, когда существует такая подпоследовательность \(a\), что эта подпоследовательность хорошая. Например, \([4,3,2]\) является красивым массивом, так как его подпоследовательность \([4,2]\) хорошая, но \([5,3,4]\) не является красивым массивом.

Последовательность \(b\) является подпоследовательностью последовательности \(a\), если \(b\) получается из \(a\) удалением нескольких (возможно, нуля или всех) элементов.

Теперь вам дан массив, проверьте, красивый он или нет.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 500\)). Далее следует их описание.

Первая строка каждого наборов входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_{1}, a_{2}, \ldots, a_{n}\) (\(1 \le a_{i} \le 10^9\)).

Выходные данные

Для каждого набора входных данных в первой строке выведите «YES» или «NO» (без кавычек), показывая, красивый этот массив или нет.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных хорошей подпоследовательностью является \(b=[3,2]\), где \(b_{2} = 2\).

Во втором наборе входных данных хорошей подпоследовательностью является \(b=[2,4,3]\), где \(b_{3} = 3\).

В четвертом наборе входных данных хорошей подпоследовательностью является \(b=[1]\), где \(b_{1} = 1\).

В пятом наборе входных данных хорошей подпоследовательностью является \(b=[2,2]\), где \(b_{2} = 2\).

C. Сделайте перестановку

жадные алгоритмы Перебор сортировки *1300

У вас есть массив целых чисел \(a\) длины \(n\). Вы можете выполнять два вида операций.

  • Удалить целое число из \(a\). Эта операция стоит \(c\).
  • Вставить произвольное натуральное число \(x\) в любую позицию \(a\) (в начало, в конец или между любыми двумя соседними элементами). Эта операция стоит \(d\).

Вы хотите сделать конечный массив перестановкой любой положительной длины. Пожалуйста, выведите минимальную стоимость, чтобы сделать из массива перестановку. Обратите внимание, что вы можете сделать массив пустым во время операций, но окончательный массив должен содержать хотя бы одно целое число.

Перестановкой длины \(n\) называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — это перестановка, но \([1,2,2]\) не является перестановкой (\(2\) встречается в массиве дважды), также как и \([1,3,4]\) не является перестановкой (\(n=3\), но в массиве есть элемент равный \(4\)).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(c\), \(d\) (\(1 \le n \le 10^5\), \(1 \le c,d \le 10^9\)).

Вторая строка содержит \(n\) целых чисел \(a_{1}, a_{2}, \ldots, a_{n}\) (\(1 \le a_{i} \le 10^9\)).

Гарантируется, что сумма всех \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальную стоимость, которую нужно потратить, чтобы сделать из массива перестановку.

Примечание

В первом наборе входных данных массив уже является перестановкой, поэтому операции не нужны.

Во втором наборе входных данных мы можем удалить числа \(5\), \(6\) и получить перестановку \([1,2,3]\). Стоимость таких операций будет равна \(2\). Обратите внимание, что мы также можем получить перестановку, вставив число \(4\), но это стоит \(5\).

В третьем наборе входных данных мы можем просто удалить все числа, кроме первой \(1\). Это стоит \(8\), а окончательный массив \([1]\) представляет собой перестановку длины \(1\).

В четвертом наборе входных данных мы можем удалить все числа, кроме \(2\), и вставить одно число \(1\) на первую позицию. Это стоит \(4+10=14\), а окончательный массив \([1,2]\) представляет собой перестановку длины \(2\).

E. Монстры

графы жадные алгоритмы Перебор поиск в глубину и подобное снм Структуры данных *2100

Вам дан неориентированный граф с \(n\) вершинами и \(m\) ребрами. Изначально для каждой вершины \(i\) существует монстр с опасностью \(a_{i}\) в этой вершине. Вы можете победить монстра с опасностью \(a_{i}\) тогда и только тогда, когда вы уже победили как минимум \(a_{i}\) других монстров.

Вы хотите победить всех монстров. Сначала вы выбираете некоторую вершину \(s\) и побеждаете монстра в этой вершине (поскольку вы еще не побеждали монстров, \(a_{s}\) должно быть равно \(0\)). Затем вы можете перемещаться в соседние вершины. Если вы хотите переместиться из вершины \(u\) в вершину \(v\), то должно выполняться следующее: либо монстр в вершине \(v\) уже побежден ранее, либо вы можете победить его сейчас. Во втором случае вы побеждаете монстра в вершине \(v\) и достигаете вершины \(v\). Вы можете проходить вершины и ребра любое количество раз.

Определите, сможете ли вы победить всех монстров или нет.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_{1}, a_{2}, \ldots, a_{n}\) (\(0 \le a_{i} \le n\)).

Следующие \(m\) строк содержат по два целых числа \(u\), \(v\) (\(1 \le u, v \le n\)), описывающих ребро между вершинами \(u\) и \(v\). Гарантируется, что в графе нет кратных ребер и петель.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого наборов входных данных выведите «YES», если вы можете победить всех монстров, и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных мы можем начать с вершины \(3\), победить монстра в ней, затем перейти в вершины \(2\), \(1\) в этом порядке, победив монстров в них. Затем вернуться к вершине \(3\) и пойти к вершине \(4\), победив в ней монстра.

В третьем наборе входных данных нет пути к вершине \(4\), если мы начинаем с вершины \(1\). Также нет пути к вершинам \(1\), \(2\), \(3\), если мы начнем с вершины \(4\).

B. Was it rated?

*особая задача *особая задача *особая задача Перебор реализация

Входные данные

Единственная строка входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 25\)).

B. Длинные ноги

математика Перебор *1700

Робот стоит в клетке \((0, 0)\) бесконечной сетки. Длина его ног может регулироваться. Изначально длина его ног равна \(1\).

Пусть робот сейчас стоит в клетке \((x, y)\), а длина его ног равна \(m\). За один ход он может исполнить одно из следующих трех действий:

  • прыгнуть в клетку \((x + m, y)\);
  • прыгнуть в клетку \((x, y + m)\);
  • увеличить длину ног на \(1\), то есть сделать ее равной \(m + 1\).

Какое наименьшее количество ходов ему потребуется, чтобы достичь клетки \((a, b)\)?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записаны два целых числа \(a\) and \(b\) (\(1 \le a, b \le 10^9\)) — финальная клетка.

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее количество ходов, которые потребуется роботу, чтобы достичь клетки \((a, b)\) из клетки \((0, 0)\).

Примечание

В первом наборе входных данных робот может сначала прыгнуть в \((0, 1)\), затем в \((1, 1)\). Если он когда-нибудь увеличит длину своих ног, то он сможет только перепрыгнуть \((1, 1)\).

Во втором наборе робот может прыгнуть в \((1, 0)\), затем увеличить длину своих ног до \(2\), затем прыгнуть трижды до \((1, 6)\).

В третьем наборе робот может увеличить длину своих ног трижды, чтобы сделать ее равной \(4\). Затем прыгнуть в \((0, 4)\). Затем прыгнуть дважды до \((8, 4)\).

D. Балансировка пушек

Бинарный поиск математика Перебор Структуры данных *2500

Вы получили работу в игровой студии, которая разработала и поддерживает онлайн шутер, и ваша первая по-настоящему большая работа — это помочь в балансировке оружия. В игре есть \(n\) пушек: у \(i\)-й пушки есть целочисленная скорость стрельбы \(f_i\) и целочисленный урон от одного выстрела \(d_i\). Таким образом, общая огневая мощь \(i\)-й пушки равна \(p_i = f_i \cdot d_i\).

Для начала, вам дали задачу изменить значения \(d_i\) некоторых пушек таким образом, чтобы новые значения \(d_i\) оставались целыми и огневая мощь всего оружия оказалась сбалансирована. Вам дали число \(k\), и сказали, что оружие сбалансировано, если \(\max\limits_{1 \le i \le n}{p_i} - \min\limits_{1 \le i \le n}{p_i} \le k\).

Так как игроки не любят больших изменений, вам нужно изменить значения \(d_i\) у наименьшего возможного количества пушек. Чему равно наименьшее количество пушек, у которых вы должны изменить урон, чтобы сделать игру сбалансированной?

Заметьте, что новые значения \(d_i\) должны быть целыми и строго больше \(0\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 3000\); \(0 \le k \le 1500\)) — количество пушек в игре и максимально возможный разрыв между самой сильной и самой слабой пушкой.

Во второй строке заданы \(n\) целых чисел \(f_1, f_2, \dots, f_n\) (\(1 \le f_i \le 2000\)), где \(f_i\) равно скорости стрельбы \(i\)-й пушки.

В третьей строке заданы \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(1 \le d_i \le 10^9\)), где \(d_i\) равно урону от одного выстрела \(i\)-й пушки.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных, выведите наименьшее количество пушек, у которых нужно изменить урон \(d_i\), чтобы сделать все оружие сбалансированным.

Заметим, что новые значения \(d_i\) должны быть целыми и больше \(0\).

Примечание

В первом наборе входных данных вы можете выставить \(d_1 = 2\) и \(d_2 = 4\). Вы получите массив \(d = [2, 4, 1, 2]\) и общую огневую мощь \(p = [12, 12, 13, 14]\). Пушки сбалансированы, так как \(14 - 12 \le 2\).

Во втором наборе вы должны изменить урон \(d_i\) всех трех пушек. Например, вы можете сделать \(d = [5151, 5100, 5050]\).

В третьем наборе все оружие уже сбалансировано, и вам не нужно ничего менять.

F. Вышки связи

Перебор разделяй и властвуй снм *2700

Рассмотрим \(n\) вышек связи, пронумерованных от \(1\) до \(n\). Они соединены \(m\) двунаправленными проводами. У каждой вышки есть определенный набор частот, которые она принимает, \(i\)-я из них принимает частоты от \(l_i\) до \(r_i\).

Скажем, что вышка \(b\) доступна из вышки \(a\), если существует такая частота \(x\) и последовательность вышек \(a=v_1, v_2, \dots, v_k=b\), что соседние вышки в последовательности напрямую соединены проводом, и каждая из них принимает частоту \(x\). Обратите внимание, что доступность не является транзитивной, т.е. если \(b\) доступна из \(a\), а \(c\) доступна из \(b\), \(c\) может быть недоступна из \(a\).

Ваша задача — определить номера вышек связи, доступных из \(1\)-й вышки.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\); \(0 \le m \le 4 \cdot 10^5\)) — количество вышек связи и количество проводов соответственно.

Затем следует \(n\) строк, \(i\)-я из них содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le 2 \cdot 10^5\)) — границы допустимых частот для \(i\)-й вышки.

Затем следует \(m\) строк, \(i\)-я из них содержит два целых числа \(v_i\) и \(u_i\) (\(1 \le v_i, u_i \le n\); \(v_i \ne u_i\)) — \(i\)-й провод, соединяющий вышки \(v_i\) и \(u_i\). Нет двух проводов, соединяющих одну и ту же пару вышек.

Выходные данные

В единственную строку выведите различные целые числа от \(1\) до \(n\) в порядке возрастания — номера вышек связи, доступных из \(1\)-й вышки.

B. Граф сумм

графы Деревья интерактив Конструктив кратчайшие пути Перебор реализация *2000

Это интерактивная задача.

Загадана перестановка \(p_1, p_2, \dots, p_n\).

Рассмотрим неориентированный граф с \(n\) вершинами и без рёбер. Вы можете делать два типа запросов:

  1. Укажите целое число \(x\) такое, что \(2 \le x \le 2n\). Тогда для всех целых чисел \(i\) (\(1 \le i \le n\)) таких, что \(1 \le x-i \le n\), будет добавлено ребро между вершинами \(i\) и \(x-i\).
  2. Запросить число рёбер в кратчайшем пути между вершинами \(p_i\) и \(p_j\). В качестве ответа вы получите количество рёбер на кратчайшем пути, если такой путь существует, или \(-1\), если такого пути нет.

Обратите внимание, что вы можете делать оба типа запросов в любом порядке.

Сделав \(2n\) запросов (включая тип \(1\) и тип \(2\)), угадайте две возможные перестановки, хотя бы одна из которых равна \(p_1, p_2, \dots, p_n\). Ваш ответ будет засчитан, если хотя бы одна из перестановок верна. Вы можете вывести одну и ту же перестановку дважды.

Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 10^3\)) — длина перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^3\).

Протокол взаимодействия

Взаимодействие для каждого набора входных данных начинается после считывания \(n\).

Затем, сделайте не более \(2n\) запросов:

  • Если вы хотите сделать запрос типа \(1\), выведите «+ x». \(x\) должно быть целым числом от \(2\) до \(2n\) включительно. После этого считайте \(1\) или \(-2\). Если вы считали \(1\), то ваш запрос был корректным, иначе он был некорректным или вы превысили количество запросов, и ваша программа должна немедленно завершиться, чтобы получить вердикт Неправильный ответ.
  • Если вы хотите сделать запрос типа \(2\), выведите «? i j». \(i\) и \(j\) должны быть целыми числами от \(1\) до \(n\) включительно. После этого, считайте единственное целое число \(r\) (\(-1 \le r \le n\)) — ответ на ваш запрос. Если вы получили число \(−2\) вместо ответа, то ваша программа сделала некорректный запрос или превысила число запросов. Ваша программа должна немедленно завершиться для получения вердикта Неправильный ответ.

В любой момент взаимодействия, если вы хотите угадать две перестановки, выведите «! \(p_{1,1}\) \(p_{1,2}\) \(\dots\) \(p_{1,n}\) \(p_{2,1}\) \(p_{2,2}\) \(\dots\) \(p_{2,n}\)». Обратите внимание, что вы должны выводить две перестановки на одной и той же строке и без восклицательного знака между перестановками. После этого считайте \(1\) или \(-2\). Если вы считали \(1\), то ваш ответ был правильным, иначе он был неправильным, и ваша программа должна немедленно завершиться, чтобы получить вердикт Неправильный ответ. После этого, перейдите к следующему набору входных данных, или завершите программу, если такого нет. Обратите внимание, что вывод ответа не считается как запрос.

Обратите внимание, что даже если вы вывели правильную перестановку, вторая перестановка должна быть именно перестановкой, а не произвольным массивом.

В любой момент, если вы продолжите взаимодействие после считывания числа \(-2\), вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Интерактор является неадаптивным. Это означает, что все перестановки зафиксированы до начала взаимодействия.

Взломы

Чтобы сделать взлом, используйте следующий формат.

Первая строка должна содержать единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных должна содержать единственное целое число \(n\) (\(2 \le n \le 10^3\)) — длину перестановки.

Вторая строка каждого набора входных данных должна содержать \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — загаданную перестановку.

Сумма \(n\) по всем наборам входных данных не превосходит \(10^3\).

Примечание

В первом наборе входных данных \(n=6\) и загадана перестановка \(p = [1,4,2,5,3,6]\).

Сначала сделаем запросы типа \(1\) с \(x=12, 2, 3\) соответственно. Это суммарно добавит в граф четыре ребра:

  • Ребро, соединяющее вершины \(6\) и \(6\).
  • Ребро, соединяющее вершины \(1\) и \(1\).
  • Ребро, соединяющее вершины \(1\) и \(2\).
  • Ребро, соединяющее вершины \(2\) и \(1\).

Поскольку все эти запросы корректны, интерактор вернул \(1\) после каждого из них.

Затем спросим количество рёбер на кратчайшем пути между вершинами \(p_1 = 1\) и \(p_3 = 2\), которое равно \(1\).

Затем сделаем запрос типа \(1\) с \(x=5\). Это суммарно добавит в граф четыре ребра:

  • Ребро, соединяющее вершины \(1\) и \(4\).
  • Ребро, соединяющее вершины \(2\) и \(3\).
  • Ребро, соединяющее вершины \(3\) и \(2\).
  • Ребро, соединяющее вершины \(4\) и \(1\).

Поскольку этот запрос корректен, интерактор вернул \(1\).

Затем спросим количество рёбер на кратчайшем пути между вершинами \(p_1 = 1\) и \(p_5 = 3\), которое равно \(2\).

Затем спросим количество рёбер на кратчайшем пути между вершинами \(p_4 = 5\) и \(p_5 = 3\). Такого пути не существует, поэтому интерактор вернёт \(-1\).

После этого, благодаря некоторой магии, две возможные перестановки, которые могут быть равны \(p\), определены: первая перестановка равна \([1,4,2,5,3,6]\), и вторая перестановка равна \([1,2,3,4,5,6]\). Так как первая перестановка равна загаданной перестановке, этот набор входных данных решён корректно. Всего \(7\) запросов использовано, что находится в пределах \(2 \cdot 6 = 12\) запросов.

Поскольку ответ правильный, интерактор вернул \(1\).

Во втором наборе входных данных \(n=2\) и загадана перестановка \(p = [2,1]\).

Так как есть только \(2! = 2\) возможные перестановки, никаких запросов не требуется. Достаточно просто вывести две перестановки \([1,2]\) и \([2,1]\). Всего \(0\) запросов использовано, что находится в пределах \(2 \cdot 2 = 4\) запросов.

Поскольку ответ правильный, интерактор вернул \(1\).

B. Граф-рыба

графы Конструктив Перебор поиск в глубину и подобное *1900

Дан простой неориентированный граф с \(n\) вершинами и \(m\) ребрами. Граф может не быть связным. Вершины графа пронумерованы от \(1\) до \(n\).

Граф-рыба — это граф, содержащий простой цикл с особой вершиной \(u\), принадлежащей циклу. Помимо ребер цикла, у графа должно быть ровно \(2\) дополнительных ребра. Оба ребра должны быть соединены с вершиной \(u\), но не должны быть соединены с любой другой вершиной цикла.

Определите, содержит ли данный граф подграф-рыбу, и если да, найдите любой такой подграф.

В этой задаче подграф определяется как граф, полученный путем выбора любого подмножества ребер исходного графа.

Визуализация примера 1. Красные ребра образуют один из возможных подграфов, который является графом-рыбой.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа, \(n\) и \(m\) (\(1 \le n, m \le 2\,000\)) — количество вершин и количество ребер.

Каждая из следующих \(m\) строк содержит описание ребра. Каждая строка содержит два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i\neq v_i\)) — ребро соединяет вершину \(u_i\) с вершиной \(v_i\).

Гарантируется, что никакие два ребра не соединяют одну и ту же неупорядоченную пару вершин.

Кроме того, гарантируется, что сумма \(n\) и сумма \(m\) для всех наборов входных данных не превышает \(2\,000\).

Выходные данные

Для каждого набора входных данных выведите «YES», если граф содержит подграф-рыбу, в противном случае выведите «NO». Если ответ «YES», на следующих строках выведите описание подграфа.

Первая строка описания содержит одно целое число \(k\) — количество ребер подграфа.

В следующих \(k\) строках выведите ребра выбранного подграфа. Каждая из \(k\) строк должна содержать два целых числа \(u\) и \(v\) (\(1\le u, v\le n\), \(u\neq v\)) — ребро между \(u\) и \(v\) принадлежит подграфу. Порядок, в котором выводятся \(u\) и \(v\), не имеет значения, если эти две вершины соединены ребром в исходном графе. Порядок вывода ребер не имеет значения, если полученный подграф является графом-рыбой.

Если есть несколько решений, выведите любое.

Примечание

В первом примере возможный допустимый подграф содержит цикл \(1 \rightarrow 2 \rightarrow 3 \rightarrow 4 \rightarrow 1\). Особой вершиной этого цикла является вершина \(4\). Два дополнительных ребра \(4 - 5\) и \(4 - 6\) оба соединены с \(4\), образуя граф-рыбу.

Во втором примере возможный допустимый подграф содержит цикл \(1 \rightarrow 3 \rightarrow 4 \rightarrow 1\). Особой вершиной этого цикла является вершина \(3\). Два дополнительных ребра \(3 - 2\) и \(3 - 5\) оба соединены с \(3\), образуя граф-рыбу.

В последнем примере можно доказать, что у графа нет подграфа-рыбы.

E. Полусумма

жадные алгоритмы Перебор разделяй и властвуй *3400

Вам дано мультимножество неотрицательных целых чисел \(\{a_1, a_2, \dots, a_n\}\).

Вы можете выбрать два элемента \(x\) и \(y\) из мультимножества, удалить их и вставить их полусумму \(\frac{x + y}{2}\) обратно в мультимножество.

Вы повторяете описанное выше действие до тех пор, пока не останется только два числа \(A\) и \(B\). Каково максимально возможное значение их абсолютной разности \(|A-B|\)?

Поскольку ответ не является целым числом, выведите его по модулю \(10^9+7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^6\)) — размер мультимножества.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы мультимножества.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — ответ на задачу по модулю \(10^9+7\).

Формально, пусть \(M = 10^9+7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом примере вы не можете выполнить никаких операций, поэтому ответ равен \(|7-3|=4\).

Во втором примере одна из оптимальных последовательностей операций выглядит так:

  1. Замените \(1\) и \(2\) на \(1.5\);
  2. Замените \(10\) и \(11\) на \(10.5\);
  3. Разница между \(1.5\) и \(10.5\) равна \(9\).

В третьем примере точный ответ равен \(\frac{3}{2}\), и \(500\,000\,005 \cdot 2 \equiv 3 \pmod{10^9+7}\).

A. Конструктивная задача

жадные алгоритмы Перебор *1300

Как известно, любая задача, в которой не требуется использовать сложные структуры данных, считается конструктивной. Вам предлагается решить одну из таких задач.

Дан массив \(a\) из \(n\) целых неотрицательных чисел. Вам разрешается ровно один раз выполнить следующую операцию: выбрать какой-то непустой подотрезок \(a_l, a_{l+1}, \ldots, a_r\) массива \(a\) и целое неотрицательное число \(k\), и присвоить значение \(k\) всем элементам массива на выбранном подотрезке.

Требуется выяснить, можно ли увеличить \(\operatorname{MEX}(a)\) ровно на единицу, проделав такую операцию. Другими словами, если до выполнения операции выполнялось \(\operatorname{MEX}(a) = m\), то после операции должно быть верно, что \(\operatorname{MEX}(a) = m + 1\).

Напомним, что \(\operatorname{MEX}\) набора чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее неотрицательное целое число \(x\), которое не встречается в наборе чисел \(c\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 50\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора данных содержит единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — размер массива \(a\).

Вторая строка каждого набора данных содержит \(n\) целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите «Yes», если можно увеличить \(\operatorname{MEX}(a)\) ровно на единицу, выполнив операцию из условия ровно один раз, иначе выведите «No».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных \(\operatorname{MEX}(a) = 0\). Если присвоить всем элементам \(a\) значение \(0\), то \(\operatorname{MEX}\) полученного массива будет равен \(1\), и тем самым увеличится на единицу.

Во втором наборе входных данных \(\operatorname{MEX}(a) = 1\). Если присвоить значение \(1\) элементам \(a\) на отрезке от \(2\) до \(3\), то получится массив \([0, 1, 1, 0]\), для которого \(\operatorname{MEX}\) равен \(2\), и тем самым увеличился на единицу по сравнению с изначальным.

Можно показать, что в третьем и четвертом наборах входных данных невозможно выполнить операцию, чтобы значение \(\operatorname{MEX}(a)\) увеличилось ровно на единицу.

D. Миша и яблоки

дп Перебор Структуры данных *2800

Школьник Миша устал заниматься спортивным программированием, и поэтому решил все бросить и уйти в магический лес торговать магическими яблоками.

Его друг Даня пришел в этот магический лес, чтобы навестить Мишу. Какого же было его удивление, когда он узнал, что Миша нашел там много друзей, таких же бывших спортивных программистов. И у всех них, как и у Миши, есть своя лавка, где они продают магические яблоки. Чтобы поддержать друзей, так кардинально поменявших свою жизнь, он решил скупить у них весь ассортимент.

Процесс покупки устроен следующим образом: всего есть \(n\) лавок, пронумерованных целыми числами от \(1\) до \(n\), и \(m\) видов магических яблок, пронумерованных целыми числами от \(1\) до \(m\). В каждой лавке продается какое-то множество видов яблок. Даня посещает все лавки в порядке возрастания номера, начиная с первой. Заходя в лавку он покупает по одному магическому яблоку каждого вида, который в этой лавке продается, и кладет их к себе в рюкзак.

Однако, магические яблоки не были бы магическими, если бы с ними было все в порядке. Дело в том, что когда два яблока одного типа оказываются вместе в рюкзаке, все яблоки в нем магическим образом исчезают. Важно, что исчезновение происходит уже после того, как Даня положил яблоки в рюкзак и покинул лавку.

Вернувшись домой, Даня понял, что где-то в лесу он успел потерять свой рюкзак. Помня для некоторых лавок, какие виды магических яблок в них продавались, он хочет узнать, какое максимальное количество яблок могло оказаться у него в рюкзаке после всех покупок в лучшем случае.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 2 \cdot 10^5\)) — количество лавок и видов яблок.

Каждая из следующих \(n\) строк описывает ассортимент очередного прилавка в формате, описанном ниже.

Каждая строка начинается с целого числа \(k_i\) (\(0 \le k_i \le 2 \cdot 10^5\)). За ней следуют \(k_i\) различных целых чисел \(a_{ij}\) (\(1 \le a_{ij} \le m\)) — виды яблок, продаваемых в \(i\)-й лавке. Если \(k_i = 0\), то Даня не помнит какой ассортимент был в этой лавке, и множество видов яблок может быть каким угодно (в том числе и пустым).

Гарантируется, по что сумма всех \(k_i\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\) и сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора данных выведите одно целое число — максимальное количество яблок, которое могло оказаться в рюкзаке Дани после посещения всех лавок в лучшем случае.

Примечание

В первом наборе входных данных Даня помнит про все лавки, поэтому процесс будет детерминированным. В первой лавке он возьмет два яблока, и еще два во второй, но после того как он положит их в рюкзак, они исчезнут. Поэтому в конце останется только \(2\) яблока, которые он возьмет в третьей лавке.

Во втором наборе входных данных, если в третьей лавке будет пусто, то после посещения четвертой лавки все яблоки исчезнут. В любом другом случае яблоки исчезнут после третьей лавки, и в четвертой Даня сможет взять одно яблоко, поэтому ответ \(1\).

В третьем наборе входных данных, в первой лавке могут продаваться все виды яблок, а во второй лавке может ничего не продаваться. Тогда в конце останутся все \(5\) яблок.

D. Общие делители

математика Перебор реализация Строки хэши *1400

Недавно Вася узнал в школе, что такое делитель числа, и решил определить делитель строки. Вот что он придумал.

Строка a является делителем строки b тогда и только тогда, когда существует целое положительное число x такое, что если строку a выписать x раз подряд получится строка b. Например, у строки «abab» два делителя — «ab» и «abab».

Теперь Вася захотел написать программу, которая вычисляет количество общих делителей двух строк. Помогите ему, пожалуйста.

Входные данные

В первой строке входных данных задана непустая строка s1.

Во второй строке входных данных задана непустая строка s2.

Длины строк s1 и s2 положительны и не превосходят 105. Строки состоят только из строчных букв латинского алфавита.

Выходные данные

Выведите количество общих делителей строк s1 и s2.

Примечание

В первом примере общими делителями являются строки «abcd» и «abcdabcd».

В втором примере общим делителем является единственная строка «a». Строка «aa» не входит в ответ, так как не является делителем строки «aaa».

B. Отсортируй подмассив

жадные алгоритмы Перебор *1100

У Монокарпа был массив \(a\) из \(n\) целых чисел. Он решил выбрать два целых числа \(l\) и \(r\), такие, что \(1 \le l \le r \le n\), и отсортировать подмассив \(a[l..r]\) (подмассив \(a[l..r]\) — это подотрезок массива \(a\), содержащий элементы \(a_l, a_{l+1}, a_{l+2}, \dots, a_{r-1}, a_r\)) в порядке неубывания. После сортировки подмассива Монокарп получил новый массив, который мы обозначим за \(a'\).

Например, если \(a = [6, 7, 3, 4, 4, 6, 5]\), и Монокарп выбрал \(l = 2, r = 5\), то \(a' = [6, 3, 4, 4, 7, 6, 5]\).

Вам даны массивы \(a\) и \(a'\). Найдите такие целые числа \(l\) и \(r\), которые мог выбрать Монокарп. Если пар чисел \((l, r)\) несколько, выберите пару, соответствующую подмассиву наибольшей длины.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк:

  • в первой строке задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\));
  • во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\));
  • в третьей строке заданы \(n\) целых чисел \(a'_1, a'_2, \dots, a'_n\) (\(1 \le a'_i \le n\)).

Дополнительные ограничения на входные данные:

  • сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\);
  • существует способ получить массив \(a'\), отсортировав один подмассив в массиве \(a\);
  • \(a' \ne a\) (есть хотя бы одна позиция, в которой эти массивы различаются).
Выходные данные

Для каждого набора входных данных выведите два целых числа — значения \(l\) и \(r\) (\(1 \le l \le r \le n\)). Если ответов несколько, выведите пару чисел, соответствующую наиболее длинному подмассиву. Если ответов все еще несколько, выведите любой из них.

C. Разорвать на части

математика Перебор реализация Строки *1300

Дана строка \(s\), состоящая из строчных латинских букв.

За одно действие вы можете выбрать несколько (одну или больше) позиций в ней так, что никакие две выбранные позиции не соседние друг другу. Затем вы удаляете все буквы на выбранных позициях из строки. Полученные части строки затем склеиваются без изменения порядка.

Какое наименьшее количество действий необходимо совершить, чтобы все буквы в строке \(s\) стали одинаковые?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В единственной строке каждого набора записана строка \(s\), состоящая из строчных латинских букв. Ее длина от \(1\) до \(2 \cdot 10^5\).

Суммарная длина строк по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее количество действий, которые необходимо совершить, чтобы все буквы в строке \(s\) стали одинаковые.

Примечание

В первом наборе входных данных вы можете выбрать позиции \(2, 4\) и \(6\), и удалить соответствующие буквы 'b', 'c' и 'b'.

В третьем примере все буквы в строке уже одинаковые, поэтому не нужно совершать никаких действий.

В четвертом примере одно из возможных решений за \(2\) действия следующее. Сначала выбираете позиции \(1, 4, 6\). Строка становится «bce». Затем выбираете позиции \(1\) и \(3\). Строка становится «c». Все буквы в ней одинаковые, так как это просто одна буква.

D. Черные клетки

Бинарный поиск жадные алгоритмы математика Перебор *1900

Вы играете с очень длинной полоской, состоящей из \(10^{18}\) белых клеток и пронумерованной слева направо числами \(0\), \(1\), \(2\) и так далее. Вы управляете особым указателем, который первоначально указывает на клетку \(0\). Также у вас есть кнопка «Shift», которую вы можете зажимать.

За один шаг, вы можете сделать одно из трех действий:

  • сдвинуть указатель вправо (из клетки \(x\) в клетку \(x + 1\));
  • нажать и держать кнопку «Shift»;
  • отпустить кнопку «Shift»: в момент, когда вы отпустите Shift, все клетки, которые были посещены с зажатым Shift, будут покрашены в черный.
(Конечно же, вы не можете нажать на уже зажатый Shift. Аналогично, вы не можете отпустить уже отпущенный Shift.)

Ваша задача — покрасить хотя бы \(k\) клеток, но есть ограничение: вам заданы \(n\) отрезков \([l_i, r_i]\) — вы можете красить только клетки, которые принадлежат этим отрезкам, т. е. вы можете покрасить клетку \(x\) только если \(l_i \le x \le r_i\) для некоторого \(i\).

Какое наименьшее количество шагов вам нужно выполнить, чтобы покрасить хотя бы \(k\) клеток в черный?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le k \le 10^9\)) — количество отрезков и желаемое количество черных клеток.

Во второй строке заданы \(n\) целых чисел \(l_1, l_2, \dots, l_n\) (\(1 \le l_1 < l_2 < \dots < l_n \le 10^9\)), где \(l_i\) — это левая граница \(i\)-го отрезка.

В третьей строке заданы \(n\) целых чисел \(r_1, r_2, \dots, r_n\) (\(1 \le r_i \le 10^9\); \(l_i \le r_i < l_{i + 1} - 1\)), где \(r_i\) — это правая граница \(i\)-го отрезка.

Дополнительные ограничения на входные данные:

  • каждая клетка принадлежит не более чем одному отрезку;
  • сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите наименьшее количество шагов, необходимых для покраски хотя бы \(k\) клеток в черный, или \(-1\), если это невозможно.

Примечание

В первом наборе входных данных, одна из оптимальных стратегий — следующая:

  1. Сдвинуть вправо: указатель сдвигается в ячейку \(1\);
  2. Зажать Shift;
  3. Отпустить Shift: клетка \(1\) покрасится в черный;
  4. Сдвинуть вправо: указатель сдвигается в ячейку \(2\);
  5. Сдвинуть вправо: указатель сдвигается в ячейку \(3\);
  6. Зажать Shift;
  7. Сдвинуть вправо: указатель сдвигается в ячейку \(4\);
  8. Отпустить Shift: клетки \(3\) и \(4\) покрасятся в черный.
Мы покрасили \(3\) клетки за \(8\) шагов.

Во втором наборе входных данных, мы можем покрасить только \(8\) клеток, а нам нужно покрасить \(20\) клеток.

В третьем наборе, одна из оптимальных стратегий — следующая:

  1. Сдвинуть вправо: указатель сдвигается в ячейку \(1\);
  2. Сдвинуть вправо: указатель сдвигается в ячейку \(2\);
  3. Сдвинуть вправо: указатель сдвигается в ячейку \(3\);
  4. Зажать Shift;
  5. Сдвинуть вправо: указатель сдвигается в ячейку \(4\);
  6. Сдвинуть вправо: указатель сдвигается в ячейку \(5\);
  7. Отпустить Shift: клетки \(3\), \(4\) и \(5\) покрасятся в черный.
Мы покрасили \(3\) клетки за \(7\) шагов.

E. Переставь скобки

дп жадные алгоритмы Перебор сортировки Строки *2100

Правильная скобочная последовательность — это скобочная последовательность, которую можно превратить в корректное арифметическое выражение, вставив символы «1» и «+» между исходными символами. Например:

  • скобочные последовательности «()()» и «(())» — правильные (из них можно получить выражения «(1)+(1)» и «((1+1)+1)»);
  • скобочные последовательности «)(», «(» и «)» — неправильные.

Дана правильная скобочная последовательность. За один ход вы можете удалить пару соседних скобок такую, что левая скобка открывающая, а правая — закрывающая. Затем склеить полученные части, не изменяя порядка. Стоимость такого хода равна количеству скобок справа от правой скобки из этой пары.

Стоимость правильной скобочной последовательности равна наименьшей суммарной стоимости ходов, необходимых, чтобы сделать последовательность пустой.

На самом деле, никаких скобок вы не удаляете. Вместо этого вам дана правильная скобочная последовательность и целое число \(k\). Вы можете проделать следующее действие не больше \(k\) раз:

  • вытащить скобку из последовательности и вставить ее в любую позицию (между двух скобок, в начало или в конец; возможно, туда же, где она и была).

После всех действий скобочная последовательность должна быть правильной. Какая наименьшая стоимость полученной правильной скобочной последовательности?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(k\) (\(0 \le k \le 5\)) — наибольшее количество действий, которые вы можете совершить.

Во второй строке записана непустая скобочная последовательность, она состоит только из символов '(' и ')'.

Суммарная длина скобочных последовательностей по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшая стоимость правильной скобочной последовательности после того, как вы проделаете над ней не более \(k\) действий.

A. Лента TubeTube

Перебор реализация *800

Гриб Филиппов приготовил себе покушать, а за едой решил посмотреть видео на TubeTube. Он может выделить на обед не более \(t\) секунд, поэтому просит вас помочь с выбором видео.

Лента TubeTube представляет собой список из \(n\) видео, пронумерованных от \(1\) до \(n\); \(i\)-е видео длится \(a_i\) секунд и имеет интересность \(b_i\). Изначально лента открыта на первом видео, за \(1\) секунду Гриб может пропустить видео и перейти к следующему (если следующее существует). Переходить к следующему видео Гриб может любое количество раз (в том числе и ноль).

Помогите Грибу выбрать одно видео, которое он сможет открыть и посмотреть за \(t\) секунд. Если таких несколько, он хочет выбрать наиболее интересное. Выведите номер подходящего видео, или \(-1\), если таких нет.

Входные данные

В первой строке входных данных содержится одно целое число \(q\) (\(1 \le q \le 1000\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержится два числа \(n\) и \(t\) (\(1 \le n \le 50\), \(1 \le t \le 200\)) — количество видео в ленте и секунд на обед, соответственно.

Во второй строке набора содержится \(n\) чисел \(a_1, a_2, a_3, \dots, a_n\) (\(1 \le a_i \le 100\)) — продолжительности видео.

В третьей строке набора содержится \(n\) чисел \(b_1, b_2, b_3, \dots, b_n\) (\(1 \le b_i \le 100\)) — интересности видео.

Выходные данные

Выведите \(q\) целых чисел, каждое из которых является ответом на соответствующий набор входных данных. В качестве ответа выведите номер самого интересного видео, которое успеет посмотреть Гриб. Если ответов несколько — выведите любой. Выведите \(-1\), если он не успеет посмотреть ни одно видео до конца обеда.

F. Подружки-садоводы

графы Деревья дп Перебор поиск в глубину и подобное *1700

Две подруги, Алиса и Юки, посадили в своем саду дерево из \(n\) вершин. Дерево — это неориентированный граф без циклов, петель и кратных ребер. Каждое ребро в этом дереве имеет длину \(k\). Изначально вершина \(1\) — корень дерева.

Алиса и Юки выращивают дерево не просто так, они хотят продать его. Стоимостью дерева назовем максимальное расстояние от корня до вершины по всем вершинам дерева. Расстоянием между двумя вершинами \(u\) и \(v\) является сумма длин ребер на пути от \(u\) до \(v\).

Девочки проходили курс юных садоводов, поэтому они умеют модифицировать дерево. За \(c\) монет Алиса и Юки могут поменять корень дерева, выбрав одного из соседей текущего корня и сделав его корнем дерева. Эту операцию можно применять любое количество раз (в том числе и ноль). Обратите внимание, что операция не затрагивает структуру дерева; единственное изменение заключается в том, что корнем дерева становится другая вершина.

Подруги хотят продать дерево с максимальной выгодой. Выгода — это разность стоимости дерева и затрат на все операции.

Помогите девочкам и найдите максимальную выгоду, которую они могут получить, применив к дереву операции произвольное число раз (возможно, ноль).

Входные данные

В первой строке входных данных содержится число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержатся три целых числа \(n\), \(k\), \(c\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le k, c \le 10^9\)) — количество вершин в дереве, длина каждого ребра и стоимость операции.

В каждой из следующих \(n - 1\) строк набора содержится по паре целых чисел \(u_i\), \(v_i\) (\(1 \le u_i, v_i \le n\)) — описания ребер. Эти ребра задают дерево.

Сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — максимальную выгоду, которую могут получить Юки и Алиса.

G1. Магические тройки (простая версия)

математика Перебор Структуры данных теория чисел *1700

Это простая версия задачи. Единственное отличие в том, что в этой версии \(a_i \le 10^6\).

Для данной последовательности целых чисел \(a\) длины \(n\), тройка \((i, j, k)\) называется магической, если

  • \(1 \le i, j, k \le n\).
  • \(i\), \(j\), \(k\) — попарно различны.
  • существует некоторое целое положительное число \(b\), такое что \(a_i \cdot b = a_j\), а \(a_j \cdot b = a_k\).

Коля получил в подарок последовательность целых чисел \(a\), и теперь хочет посчитать количество магических троек для нее. Помогите ему в этом!

Обратите внимание, что нет ограничений на порядок чисел \(i\), \(j\) и \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит единственное целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — длина последовательности.

Вторая строка содержит \(n\) чисел \(a_1, a_2, a_3, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы последовательности \(a\).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество магических троек для последовательности \(a\).

Примечание

В первом примере существует \(6\) магических троек для последовательности \(a\) — \((2, 3, 5)\), \((2, 5, 3)\), \((3, 2, 5)\), \((3, 5, 2)\), \((5, 2, 3)\), \((5, 3, 2)\).

Во втором примере существует единственная магическая тройка для последовательности \(a\) — \((2, 1, 3)\).

G2. Магические тройки (сложная версия)

математика Перебор Структуры данных теория чисел *2200

Это сложная версия задачи. Единственное отличие в том, что в этой версии \(a_i \le 10^9\).

Для данной последовательности целых чисел \(a\) длины \(n\), тройка \((i, j, k)\) называется магической, если

  • \(1 \le i, j, k \le n\).
  • \(i\), \(j\), \(k\) — попарно различны.
  • существует некоторое целое положительное число \(b\), такое что \(a_i \cdot b = a_j\), а \(a_j \cdot b = a_k\).

Коля получил в подарок последовательность целых чисел \(a\), и теперь хочет посчитать количество магических троек для нее. Помогите ему в этом!

Обратите внимание, что нет ограничений на порядок чисел \(i\), \(j\) и \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит единственное целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — длина последовательности.

Вторая строка содержит \(n\) чисел \(a_1, a_2, a_3, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы последовательности \(a\).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество магических троек для последовательности \(a\).

Примечание

В первом примере существует \(6\) магических троек для последовательности \(a\) — \((2, 3, 5)\), \((2, 5, 3)\), \((3, 2, 5)\), \((3, 5, 2)\), \((5, 2, 3)\), \((5, 3, 2)\).

Во втором примере существует единственная магическая тройка для последовательности \(a\) — \((2, 1, 3)\).

B. Шаговая сортировка

математика Перебор сортировки *900

Определим перестановкой длины \(n\) массив \(p\) длины \(n\), в котором каждое число от \(1\) до \(n\) встречается единожды.

Вам дана перестановка \(p_1, p_2, \dots, p_n\) и число \(k\). Вам необходимо отсортировать перестановку в возрастающем порядке. Для этого вы можете выполнить следующую операцию любое количество раз (возможно, ни разу):

  • выбрать два элемента перестановки \(p_i\) и \(p_j\) такие, что \(|i - j| = k\) и поменять их местами.

К сожалению, некоторые перестановки не могут быть отсортированы для некоторых \(k\). Например, невозможно отсортировать \([2, 4, 3, 1]\) для \(k = 2\).

Поэтому, перед началом сортировки, вы можете выполнить не более одного предварительного обмена:

  • выбрать любую пару \(p_i\) и \(p_j\) и поменять их местами.

Ваша задача проверить:

  1. возможно ли отсортировать перестановку без предварительных обменов,
  2. если нет, проверить, возможно ли отсортировать перестановку с использованием ровно одного предварительного обмена.

Например, если \(k = 2\) и дана перестановка \([2, 4, 3, 1]\), то вы можете выполнить предварительный обмен \(p_1\) и \(p_4\), что даст перестановку \([1, 4, 3, 2]\), которую уже можно отсортировать для данного \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le k \le n - 1\)) — длина перестановки, и расстояние между элементами, которые можно обменивать.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)) — элементы перестановки \(p\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных выведите

  • 0, если можно отсортировать перестановку без предварительного обмена;
  • 1, если можно отсортировать перестановку с одним предварительны обменом, но нельзя без предварительных обменов;
  • -1, если нельзя отсортировать перестановку с не более чем одним предварительным обменом.
Примечание

В первом наборе предварительный обмен не нужен, так как можно обменять местами \((p_1, p_2)\) и затем \((p_2, p_3)\).

Во втором наборе предварительный обмен не нужен, так как можно обменять местами \((p_1, p_3)\) и затем \((p_2, p_4)\).

В третьем наборе необходимо применить предварительный обмен к \((p_2, p_3)\), после чего перестановка становится \([3, 4, 1, 2]\), которую уже возможно отсортировать для \(k = 2\).

E. Удалить граф

графы дп игры математика Перебор *2500

Алиса и Боб играют с графом. У них есть неориентированный граф без петель и кратных ребер. Все вершины графа имеют степень равную \(2\). Граф может содержать несколько компонент связности. Обратите внимание, что если такой граф имеет \(n\) вершин, он будет иметь ровно \(n\) ребер.

Алиса и Боб ходят по очереди. Алиса ходит первой. За один ход игрок может выбрать \(k\) (\(l \le k \le r\); \(l < r\)) вершин, которые образуют связный подграф, и удалить эти вершины из графа, включая все инцидентные ребра.

Игрок, который не может сделать ход, проигрывает.

Предположим, для примера, что они играют на заданном графе с заданными \(l = 2\) и \(r = 3\):

Следующие множества вершин допустимы для первого хода Алисы:

  • \(\{1, 2\}\)
  • \(\{1, 3\}\)
  • \(\{2, 3\}\)
  • \(\{4, 5\}\)
  • \(\{4, 6\}\)
  • \(\{5, 6\}\)
  • \(\{1, 2, 3\}\)
  • \(\{4, 5, 6\}\)
Пусть Алиса выбрала подграф \(\{4, 6\}\).

Тогда следующие множества вершин допустимы для первого хода Боба:

  • \(\{1, 2\}\)
  • \(\{1, 3\}\)
  • \(\{2, 3\}\)
  • \(\{1, 2, 3\}\)
Пусть Боб выбрал подграф \(\{1, 2, 3\}\).

Алиса не может сделать ход, поэтому она проигрывает.

Вам дан граф размера \(n\) и целые числа \(l\) и \(r\). Кто победит, если Алиса и Боб играют оптимально.

Входные данные

Первая строка содержит три целых числа \(n\), \(l\) и \(r\) (\(3 \le n \le 2 \cdot 10^5\); \(1 \le l < r \le n\)) — количество вершин в графе и ограничения на количество вершин, которые Алиса или Боб могут выбрать одним ходом.

Следующие \(n\) строк содержат ребра графа: по одному в строке. \(i\)-я строка содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \neq v_i\)) — описание \(i\)-го ребра.

Гарантируется, что степени всех вершин данного графа равны \(2\).

Выходные данные

Выведите Alice (регистро-независимо), если Алиса победит, или Bob в противном случае.

Примечание

В первом тесте даны те же входные данные, что и в условии.

Во втором тесте дан тот же граф, что и в условии, но \(l = 1\) и \(r = 2\)

A. Trust Nobody

жадные алгоритмы Перебор реализация сортировки *1200

Есть группа из \(n\) человек. Некоторые из них могут быть лжецами, которые всегда лгут. Остальные люди всегда говорят правду. \(i\)-й человек сказал: «Среди нас не менее \(l_i\) лжецов». Определите, является ли сказанное людьми противоречивым, или это возможно. Если это возможно, выведите количество лжецов в группе. Если ответов несколько, вы можете вывести любой из них.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 1000\)) — число наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 100\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(l_i\) (\(0 \leq l_i \leq n\)) — число, которое сказал \(i\)-й человек.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите одно целое число. Если сказанное людьми противоречиво, выведите \(-1\). Иначе выведите количество лжецов в группе. Если ответов несколько, вы можете вывести любой из них.

Примечание

В первом примере единственный возможной ответ, это что лжет второй человек, откуда ответ \(1\) лжец.

Во втором примере можно показать, что невозможно выбрать лжецов, так чтобы все высказывания удовлетворяли условию.

В третьем примере все говорят правду, откуда ответ \(0\) лжецов.

D. Running Miles

дп жадные алгоритмы Перебор *1700

Есть улица с \(n\) достопримечательностями, достопримечательность с номером \(i\) находится в \(i\) милях от начала улицы. Достопримечательность номер \(i\) обладает красотой \(b_i\). Вы хотите стартовать утреннюю пробежку в \(l\) милях и закончить в \(r\) милях от начала улицы. Пока вы бежите, вы будете пробегать мимо каких-то достопримечательностей (включая достопримечательности в \(l\) и \(r\) милях от начала). Вам интересны \(3\) наиболее красивых достопримечательности с вашей пробежки, но вы устаете с каждой милей, которую пробегаете.

Выберите \(l\) и \(r\) такие, что вы пробежите мимо хотя бы \(3\) достопримечательностей, и сумма красот \(3\) самых красивых достопримечательностей минус дистанция в милях, которую вы пробегаете, максимальна. Более формально, выберите \(l\) и \(r\) такие, что \(b_{i_1} + b_{i_2} + b_{i_3} - (r - l)\) максимально, где \(i_1, i_2, i_3\) — индексы трех самых красивых достопримечательностей в диапазоне \([l, r]\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — число наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(3 \leq n \leq 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(b_i\) (\(1 \leq b_i \leq 10^8\)) — красоты достопримечательностей в \(i\) милях от начала улицы.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное значение \(b_{i_1} + b_{i_2} + b_{i_3} - (r - l)\) для некоторого отрезка \([l, r]\).

Примечание

В первом примере мы можем выбрать \(l\) и \(r\) равными \(1\) и \(5\). Так мы посетим все достопримечательности, и три достопримечательности с максимальной красотой имеют индексы \(1\), \(3\) и \(5\) с красотами \(5\), \(4\) и \(3\) соответственно. Откуда суммарное значение равно \(5 + 4 + 3 - (5 - 1) = 8\).

Во втором примере отрезок \([l, r]\) может быть равен \([1, 3]\) или \([2, 4]\), с суммарным значением, равным \(1 + 1 + 1 - (3 - 1) = 1\).

E. Walk the Runway

битмаски графы дп Перебор реализация сортировки Структуры данных *2400

Тур состоит из \(m\) идентичных подиумных шоу в разных городах. Всего есть \(n\) моделей, которые хотят участвовать в туре, пронумерованных от \(1\) до \(n\). У людей в разных городах разные взгляды на индустрию моды, поэтому они оценивают моделей по-разному. В частности, люди в городе \(i\) оценивают модель \(j\) рейтингом \(r_{i, j}\).

Из желающих моделей вы выберете \(k\) моделей и некоторый их порядок, пусть эти модели в этом порядке имеют номера \(j_1, j_2, \dots, j_k\). В каждом городе на подиум выйдут эти \(k\) моделей в данном порядке. Чтобы сделать шоу захватывающим, в каждом городе рейтинги моделей должны строго возрастать в порядке их выхода на подиум. Более формально, для любого города \(i\) и индекса \(t\) (\(2 \leq t \leq k\)), рейтинги должны удовлетворять условию \(r_{i,j_{t - 1}} < r_{i,j_t}\).

В конце концов, индустрия моды сфокусирована на деньгах, поэтому выбрав модель \(j\) для участия в туре, вы получите \(p_j\) прибыли. Вычислите, какую максимальную прибыль вы можете получить при правильном выборе моделей и порядка их выступления, при условии соблюдения всех ограничений.

Входные данные

Первая строка содержит два целых числа \(m\) и \(n\) (\(1 \leq m \leq 500\), \(1 \leq n \leq 5000\)) — число шоу и число моделей, желающих участвовать, соответственно.

Вторая строка содержит \(n\) целых чисел \(p_j\) (\(1 \leq p_j \leq 10^9\)) — прибыль от приглашения \(j\)-й модели в тур.

В каждой из следующих \(m\) строк содержится \(n\) целых чисел. Строка под номером \(i\) содержит \(n\) целых чисел \(r_{i, j}\) (\(1 \leq r_{i, j} \leq n\)) — рейтинги моделей в городе \(i\).

Выходные данные

Выведите одно целое число — максимальную суммарную прибыль.

Примечание

В первом примере в тур приглашены \(3\) модели. Шоу состоит из моделей в следующем порядке \([1, 3, 4]\).

Соответственные рейтинги в городах:

  • Город \(1\)\([ 1, 3, 4 ]\).
  • Город \(2\)\([ 1, 2, 3 ]\).
  • Город \(3\)\([ 2, 4, 5 ]\).

Видно, что рейтинги моделей в каждом городе возрастают. Суммарная прибыль равна \(10 + 10 + 10 = 30\). Можно доказать, что невозможно достичь большей прибыли.

Во втором примере мы можем пригласить в тур пятую модель, откуда получаем общую прибыль \(50\). Можно доказать, что невозможно достичь большей прибыли.

В третьем примере мы приглашаем в тур единственную модель, откуда получаем прибыль \(1\,000\,000\,000\).

В четвертом примере мы можем пригласить всех моделей и шоу будет состоять из моделей в следующем порядке \([ 5, 4, 3, 2, 1 ]\). Тогда общая прибыль будет равна \(5 \cdot 1\,000\,000\,000 = 5\,000\,000\,000\).

C. Разбиение на палиндромы

Бинарный поиск дп Перебор Строки Структуры данных хэши *2600

Подстрокой называется непрерывный и непустой подотрезок букв из данной строки, без изменения порядка.

Чётным палиндромом называется строка, которая читается одинаково как слева направо, так и справа налево, и имеет чётную длину. Например, строки «zz», «abba», «abccba» являются чётными палиндромами, а строки «codeforces», «reality», «aba», «c» не являются.

Красивой строкой называется чётный палиндром или строка, которую можно разбить на несколько меньших чётных палиндромов.

Дана строка \(s\), состоящая из \(n\) строчных латинских букв. Подсчитайте количество красивых подстрок в \(s\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Затем следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5\cdot 10^5\)).

Вторая строка каждого набора входных данных содержит строку \(s\). Строка \(s\) состоит только из строчных латинских букв и имеет длину \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество красивых подстрок.

Примечание

В первом наборе входных данных красивыми подстроками являются «abaaba», «baab», «aa».

В последнем наборе входных данных красивыми подстроками являются «aa» (подсчитано дважды), «abba», «bb», «bbaa», «abbaaa».

D. Золотая лихорадка

дп Перебор поиск в глубину и подобное реализация *1000

Изначально у вас есть одна куча золотых самородков, содержащая \(n\) самородков. За одну операцию вы можете сделать следующее:

  • Разделить любую кучу на две кучи так, чтобы одна из полученных куч содержала в два раза больше золотых самородков, чем другая. (Все кучи должны содержать целое число самородков.)

Одно из возможных действий - взять кучу размера \(6\) и разделить ее на кучи размеров \(2\) и \(4\), что является допустимым, так как \(4\) в два раза больше, чем \(2\).

Можете ли вы сделать кучу с ровно \(m\) золотых самородков, используя ноль или более операций?
Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных в тесте.

Единственная строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^7\)) — начальный и целевой размер кучи соответственно.

Выходные данные

Для каждого теста выведите «YES», если вы можете создать кучу размером ровно \(m\), и «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Первый тест изображен в условии. Мы можем создать кучу размером \(4\).

Во втором тесте мы можем выполнить следующие операции: \(\{\color{red}{9}\} \to \{\color{red}{6},3\} \to \{4,2,3\}\). Куча, которая разделяется, выделена красным цветом перед каждой операцией.

В третьем тесте мы не можем выполнить ни одной операции.

В четвертом тесте мы не можем получить кучу большего размера, чем у нас изначально.

B. Зоопарк

геометрия Перебор *1700

Зоопарк в Сеточном Королевстве представляет собой бесконечную сетку. В зоопарке есть n биноклей для наблюдения, расположенных на оси OX. Для каждого i от 1 до n включительно, существует ровно один бинокль, расположенный в точке с координатами (i, 0). В зоопарке есть m фламинго, расположенных в точках с положительными координатами. Сейчас фламинго спят и можно предположить, что они не двигаются.

Чтобы получше рассмотреть фламинго, любой бинокль может быть повернут на любой угол (не обязательно целый). После поворота с помощью бинокля можно увидеть всех фламинго, расположенных на прямой, проходящей через этот бинокль и направленной в сторону, в которую повернут бинокль. Другими словами, вы можете повернуть бинокль по направлению некоторой прямой, проходящей через этот бинокль, тогда с помощью бинокля можно будет увидеть всех фламинго, находящихся на этой прямой.

Сегодня несколько ребят из престижного садика Codeforces отправились в полевые исследования в зоопарк. Их учитель хотел бы повернуть каждый бинокль по направлению, при котором количество фламинго, которых можно увидеть в этот бинокль, максимально. Учителю интересна сумма этих значений по всем биноклям. Пожалуйста, помогите ему найти эту сумму.

Входные данные

Первая строка содержит два целых числа, записанных через пробел: n и m (1 ≤ n ≤ 106, 1 ≤ m ≤ 250) — количество биноклей и количество фламинго, соответственно.

Затем следуют m строк, на i-ой строке записаны через пробел два целых числа xi и yi (1 ≤ xi, yi ≤ 109), что означает, что i-ый фламинго находится в точке (xi, yi).

Все фламинго находятся в разных точках.

Выходные данные

Выведите единственное целое число — наибольшее общее количество фламинго, которых можно увидеть во все бинокли.

Примечание

Ответ на тест из примера проиллюстрирован ниже.

B. BOSS может посчитать пары

математика Перебор *2000

Даны два массива \(a\) и \(b\) длины \(n\).

Ваша задача — посчитать количество пар целых чисел \((i,j)\) таких, что \(1 \leq i < j \leq n\) и \(a_i \cdot a_j = b_i+b_j\).

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов. Затем следует описание наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длину массивов.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le n\)) — элементы массива \(a\).

Третья строка каждого набора содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(1 \le b_i \le n\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество искомых пар.

Примечание

В первом примере есть \(2\) подходящие пары:

  • \((1,2)\),
  • \((1,3)\).

Во втором примере есть \(7\) подходящих пар:

  • \((1,2)\),
  • \((1,5)\),
  • \((2,8)\),
  • \((3,4)\),
  • \((4,7)\),
  • \((5,6)\),
  • \((5,7)\).

D. Дерево MEX

Деревья дп Перебор *2800

Дано дерево с \(n\) вершинами. Каждую вершину дерева вы можете раскрасить в \(0\) или \(1\).

Значение пути \((u,v)\) равно MEX\(^\dagger\) цветов вершин на кратчайшем пути между \(u\) и \(v\).

Значение раскраски равно сумме значений всех путей \((u,v)\) таких, что \(1 \leq u \leq v \leq n\).

Чему равно максимально возможное значение раскраски дерева?

\(^{\dagger}\) MEX (minimum excluded) массива — это наименьшее неотрицательное целое число, которое не принадлежит массиву.

Например:

  • MEX \([2,2,1]\) равно \(0\), потому что \(0\) не принадлежит массиву.
  • MEX \([3,1,0,1]\) равно \(2\), потому что \(0\) и \(1\) принадлежат массиву, но \(2\) нет.
  • MEX \([0,3,1,2]\) равно \(4\), потому что \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, но \(4\) нет.
Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Следующие \(n-1\) строк каждого набора содержат \(2\) целых числа \(a_i\) и \(b_i\) (\(1 \leq a_i, b_i \leq n, a_i \neq b_i\)) — ребро между вершинами \(a_i\) и \(b_i\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимально возможное значение любой раскраски дерева.

Примечание

В первом примере мы закрасим вершину \(2\) в \(1\), а вершины \(1,3\) в \(0\). Затем мы рассмотрим все пути:

  • \((1,1)\) со значением \(1\)
  • \((1,2)\) со значением \(2\)
  • \((1,3)\) со значением \(2\)
  • \((2,2)\) со значением \(0\)
  • \((2,3)\) со значением \(2\)
  • \((3,3)\) со значением \(1\)

Сумма значений равна \(8\), что является максимально возможной суммой.

B. Максимальная сумма

Перебор сортировки *1100

Дан массив \(a_1, a_2, \dots, a_n\), в котором все элементы различны.

Вы должны выполнить ровно \(k\) операций с ним. Во время каждой операции вы выполняете ровно одно из следующих двух действий (вы самостоятельно выбираете, какое именно):

  • найти два минимальных элемента в массиве и удалить их;
  • найти максимальный элемент в массиве и удалить его.

Вы должны вычислить максимальную возможную сумму элементов в полученном массиве.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит два целых числа \(n\) и \(k\) (\(3 \le n \le 2 \cdot 10^5\); \(1 \le k \le 99999\); \(2k < n\)) — количество элементов и операций соответственно.
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\); все \(a_i\) различны) — элементы массива.

Дополнительное ограничение на входные данные: сумма \(n\) не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную возможную сумму элементов в полученном массиве.

Примечание

В первом наборе входных данных применение первой операции приводит к следующему результату:

  • два минимума равны \(1\) и \(2\); их удаление оставляет массив \([5, 10, 6]\) с суммой \(21\);
  • максимум равен \(10\); его удаление оставляет массив \([2, 5, 1, 6]\) с суммой \(14\).

\(21\) — лучший ответ.

Во втором наборе входных данных оптимально сначала удалить два минимума, а затем максимум.

E. Задачка на комбинаторику

дп Комбинаторика Перебор *2200

Напомним, что биномиальный коэффициент \(\binom{x}{y}\) вычисляется следующим образом (\(x\) и \(y\) — неотрицательные целые числа):

  • если \(x < y\), то \(\binom{x}{y} = 0\);
  • в противном случае \(\binom{x}{y} = \frac{x!}{y! \cdot (x-y)!}\).

Дан массив \(a_1, a_2, \dots, a_n\) и целое число \(k\). Вам нужно вычислить новый массив \(b_1, b_2, \dots, b_n\), где

  • \(b_1 = (\binom{1}{k} \cdot a_1) \bmod 998244353\);
  • \(b_2 = (\binom{2}{k} \cdot a_1 + \binom{1}{k} \cdot a_2) \bmod 998244353\);
  • \(b_3 = (\binom{3}{k} \cdot a_1 + \binom{2}{k} \cdot a_2 + \binom{1}{k} \cdot a_3) \bmod 998244353\), и так далее.

Формально, \(b_i = (\sum\limits_{j=1}^{i} \binom{i - j + 1}{k} \cdot a_j) \bmod 998244353\).

Обратите внимание, что массив задан в измененном виде, и вы должны вывести его в измененном виде.

Входные данные

В единственной строке ввода содержатся шесть целых чисел \(n\), \(a_1\), \(x\), \(y\), \(m\) и \(k\) (\(1 \le n \le 10^7\); \(0 \le a_1, x, y < m\); \(2 \le m \le 998244353\); \(1 \le k \le 5\)).

Массив \([a_1, a_2, \dots, a_n]\) генерируется следующим образом:

  • \(a_1\) задан во входных данных;
  • для \(2 \le i \le n\), \(a_i = (a_{i-1} \cdot x + y) \bmod m\).
Выходные данные

Поскольку вывод \(10^7\) целых чисел может быть слишком медленным, вы должны выполнить следующее:

Пусть \(c_i = b_i \cdot i\) (без взятия остатка от деления на \(998244353\) после умножения). Выведите целое число \(c_1 \oplus c_2 \oplus \dots \oplus c_n\), где \(\oplus\) обозначает оператор побитового исключающего ИЛИ.

D. Перевертыш

жадные алгоритмы Конструктив Перебор *1400

Вам дана перестановка \(p\) длины \(n\).

Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \(\{2,3,1,5,4\}\) является перестановкой, а \(\{1,2,2\}\) не является (\(2\) встречается дважды), и \(\{1,3,4\}\) тоже не является перестановкой (\(n=3\), но в массиве есть \(4\)).

К перестановке \(p\) нужно ровно один раз применить следующую операцию:

  • Сначала вы выбираете отрезок \([l, r]\) (\(1 \le l \le r \le n\), отрезок —непрерывная последовательность чисел \(\{p_l, p_{l+1}, \ldots, p_{r-1}, p_r\}\)) и переворачиваете его. Переворот отрезка означает, что меняются местами пары чисел \((p_l, p_r)\), \((p_{l+1}, p_{r-1})\), ..., \((p_{l + i}, p_{r - i})\) (где \(l + i \le r - i\)).
  • Затем вы меняете местами префикс и суффикс: \([r+1, n]\) и \([1, l - 1]\) (обратите внимание, что эти отрезки могут быть пустыми).

Например, \(n = 5, p = \{2, \color{blue}{3}, \color{blue}{1}, 5, 4\}\) и был выбран отрезок \([l = 2, r = 3]\), тогда после переворота отрезка \(p = \{\color{green}{2}, \color{blue}{1}, \color{blue}{3}, \color{green}{5}, \color{green}{4}\}\), затем поменяются местами отрезки \([4, 5]\) и \([1, 1]\). Тогда \(p = \{\color{green}{5}, \color{green}{4}, 1, 3, \color{green}{2}\}\). Можно показать, что это максимальный возможный ответ для данной перестановки.

Требуется вывести лексикографически максимальную перестановку, которую можно получить после применения ровно одной такой операции.

Перестановка \(a\) лексикографически больше перестановки \(b\), если существует \(i\) (\(1 \le i \le n\)) такое, что \(a_j = b_j\) для \(1 \le j < i\) и \(a_i > b_i\).

Входные данные

В первой строке входных данных задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке набора задано одно целое число \(n\) (\(1 \le n \le 2000\)) — размер перестановки.

Во второй строке задано \(n\) целых чисел: \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — сама перестановка \(p\).

Гарантируется, что сумма значений \(n\) по всем тестам не превышает \(2000\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите лексикографически максимальную перестановку длины \(n\), которую можно получить из \(p\), применив операцию, описанную в условии ровно один раз.

Примечание

Первый пример разобран в условии.

Во втором примере следует выбрать отрезок \([l = 9, r = 9]\).

В третьем примере следует выбрать отрезок \([l = 1, r = 1]\).

В четвертом примере следует выбрать отрезок \([l = 1, r = 2]\).

В пятом примере следует выбрать отрезок \([l = 5, r = 6]\).

В шестом примере следует выбрать отрезок \([l = 4, r = 4]\).

В седьмом примере следует выбрать отрезок \([l = 5, r = 5]\).

D. Опрос на уроке

жадные алгоритмы Перебор реализация сортировки Структуры данных *1900

На урок истории к Зинаиде Викторовне пришло \(n\) учеников. На дом было задано \(m\) тем, но у учеников было мало времени для подготовки, поэтому \(i\)-й ученик выучил только темы с \(l_i\) по \(r_i\) включительно.

В начале урока каждый ученик держит свою руку на уровне \(0\). Учительница хочет спросить какие-то темы. Происходит это так:

  • Учительница спрашивает тему \(k\).
  • Если ученик выучил тему \(k\), то он поднимает руку на \(1\), а иначе опускает на \(1\).
Каждую тему Зинаида Викторовна может спросить не более одного раза.

Определите, какая максимальная разность высот самой высокой и самой низкой руки может быть после опроса.

Обратите внимание, рука ученика может опускаться ниже \(0\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 10^5, 1 \le m \le 10^9\)) — количество учеников и количество тем соответственно.

В следующих \(n\) строках каждого набора содержится по два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le m\)), обозначающих границы отрезка тем, которые выучил \(i\)-й ученик.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную разность высот самой высокой и самой низкой руки, которая может быть в классе после опроса.

Примечание

В первом наборе входных данных Зинаида Викторовна может спросить темы \(5, 6, 7, 8\). Тогда рука \(2\)-го ученика будет на высоте \(4\), а \(4\)-го — на высоте \(-2\), то есть разность будет равна \(6\).

Во втором наборе можно спросить темы \(1\) и \(3\). Тогда рука \(1\)-го ученика будет на высоте \(2\), а \(3\)-го ученика — на высоте \(-2\). Значит, разность будет равна \(4\).

В третьем наборе разница высот между самой высокой и низкой рукой будет \(0\) при любом наборе спрашиваемых тем.

В пятом наборе можно спросить все темы. Тогда разность высот рук \(1\)-го и \(3\)-го учеников будет равняться \(12\).

F. Печатная машинка

математика Перебор *2500

Недавно Поликарпу подарили необычную печатную машинку!

Машинка состоит из \(n\) ячеек, пронумерованных слева направо от \(1\) до \(n\), и движущейся над ними каретки. В ячейках печатной машинки лежат \(n\) различных целых чисел от \(1\) до \(n\), причем в каждой ячейке \(i\) изначально лежит число \(p_i\). До всех действий каретка находится на ячейке с номером \(1\) и в ее буферном хранилище ничего нет. Назовем ячейку текущей, если каретка стоит на этой ячейке.

Она может выполнять пять типов операций:

  • Взять число из текущей ячейки, если она не пустая, и положить его в буфер каретки, если в нём нет числа (то есть в буфере может быть не более одного числа).
  • Положить число из буфера каретки, если он не пустой, в текущую ячейку, если она пустая.
  • Поменять местами число, которое находится в буфере каретки, с числом, которое находится в текущей ячейке, если буфер и ячейка имеют в себе числа.
  • Сдвинуть каретку с текущей ячейки \(i\) на ячейку \(i + 1\) (если \(i < n\)), при этом число в буфере сохраняется.
  • Сбросить каретку, то есть переместить ее на ячейку с номером \(1\), при этом число в буфере сохраняется.

Поликарпа очень заинтересовала эта печатная машинка, поэтому он просит вас помочь разобраться в ней и задаст вам \(q\) запросов трех типов:

  1. Выполнить циклический сдвиг последовательности \(p\) на \(k_j\) влево.
  2. Выполнить циклический сдвиг последовательности \(p\) на \(k_j\) вправо.
  3. Развернуть последовательность \(p\).

До всех запросов, а также после каждого запроса Поликарп хочет узнать, какое минимальное количество сбросов каретки нужно сделать для текущей последовательности, чтобы распределить числа по своим ячейкам (то есть чтобы число \(i\) оказалось в ячейке с номером \(i\)).

Обратите внимание, что Поликарп хочет только узнать минимальное количество сбросов каретки для расположения чисел по своим местам, но он не распределяет их на самом деле.

Помогите Поликарпу узнать ответы на интересующие его запросы!

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 4 \cdot 10^5\)) — количество ячеек.

Вторая строка содержит \(n\) целых различных чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — изначальное расположение чисел по ячейкам.

Третья строка содержит единственное число \(q\) (\(0 \le q \le 4 \cdot 10^5\)) — количество запросов.

В каждой из следующих \(q\) строках описываются запросы Поликарпа:

В \(j\)-й строке сначала содержится число \(t_j\) (\(1 \le t_j \le 3\))  — тип запроса .

Если запрос типа \(t_j = 1\) или \(t_j = 2\), то далее, в той же строке, содержится число \(k_j\) (\(1 \le k_j \le n\))  — длина сдвига.

Выходные данные

Выведите \(q + 1\) число — минимальное количество сбросов каретки для последовательности до всех запросов, а также после каждого запроса Поликарпа.

Примечание

В первом примере ответ \(1\). Картинка ниже показывает работу каретки.

Во втором примере последовательности, для которых нужно посчитать ответ, выглядят так:

  1. До всех запросов: \(1\ 2\ 3\) — ответ \(0\).
  2. После сдвига на \(1\) вправо: \(3\ 1\ 2\) — ответ \(2\).
  3. После разворота последовательности: \(2\ 1\ 3\) — ответ \(1\).

В третьем примере последовательности до всех запросов и после каждого запроса выглядят так:

  1. \(3\ 1\ 2\ 5\ 4\) — ответ \(3\).
  2. \(5\ 4\ 3\ 1\ 2\) — ответ \(2\).
  3. \(2\ 1\ 3\ 4\ 5\) — ответ \(1\).
  4. \(3\ 4\ 5\ 2\ 1\) — ответ \(2\).
  5. \(1\ 3\ 4\ 5\ 2\) — ответ \(1\).
  6. \(2\ 5\ 4\ 3\ 1\) — ответ \(2\).

A. k-е равенство

математика Перебор реализация *1700

Рассмотрим все равенства вида \(a + b = c\), где \(a\) имеет \(A\) цифр, \(b\)\(B\) цифр, а \(c\)\(C\) цифр. Все числа — целые, положительны и записаны без ведущих нулей. Найдите \(k\)-е лексикографически наименьшее равенство, записанное в виде строки, как указано выше, или определите, что его не существует.

Например, первые три равенства, удовлетворяющие \(A = 1\), \(B = 1\), \(C = 2\), имеют вид

  • \(1 + 9 = 10\),
  • \(2 + 8 = 10\),
  • \(2 + 9 = 11\).

Равенство \(s\) лексикографически меньше равенства \(t\), в котором все числа имеют ту же длину, если и только если выполняется следующее:

  • в первой позиции, где \(s\) и \(t\) различны, в уравнении \(s\) находится меньшая цифра, чем соответствующая цифра в \(t\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит числа \(A\), \(B\), \(C\), \(k\) (\(1 \leq A, B, C \leq 6\), \(1 \leq k \leq 10^{12}\)).

Каждый тест содержит не более \(5\) наборов входных данных, которые не удовлетворяют \(A, B, C \leq 3\).

Выходные данные

Для каждого набора входных данных, если подходящих равенств строго меньше \(k\), выведите \(-1\).

В противном случае выведите \(k\)-е равенство в виде строки вида \(a + b = c\).

Примечание

В первом наборе входных данных первыми \(9\) решениями являются: \(\langle 1, 1, 2 \rangle, \langle 1, 2, 3 \rangle, \langle 1, 3, 4 \rangle, \langle 1, 4, 5 \rangle, \langle 1, 5, 6 \rangle, \langle 1, 6, 7 \rangle, \langle 1, 7, 8 \rangle, \langle 1, 8, 9 \rangle, \langle 2, 1, 3 \rangle\).

В третьем наборе входных данных решений нет, так как наименьшие возможные значения \(a\) и \(b\) больше, чем максимально возможное значение \(c\)\(10 + 10 = 20 > 9\).

Обратите внимание, что пробелы в выводе имеют значение.

B. Лотерея

Бинарный поиск жадные алгоритмы математика Перебор *2500

Для участия в лотерее пришли \(n\) человек, пронумерованных от \(1\) до \(n\). Каждый получил билет с целым числом от \(0\) до \(m\).

В лотерее равновероятно вытягивается одно целое целевое число от \(0\) до \(m\). Победителями объявляются \(k\) билетов (или меньше, если участников недостаточно) с числами, наиболее близкими к целевому. В случае ничьей победителем объявляется билет, принадлежащий человеку с меньшим номером.

Байтек решил принять в ней участие. Он знает значения на билетах всех предыдущих участников. Он может выбрать любое значение на своем билете, но, к сожалению, поскольку он получил его последним, номер Байтека равен \(n + 1\).

Байтек хочет выиграть в лотерею. Таким образом, он хочет узнать, какое число он должен выбрать, чтобы максимизировать шансы на выигрыш. Он хочет узнать наименьшее целое число в случае, если таких целых чисел много. Ваша задача — найти число и рассчитать шансы на выигрыш.

Входные данные

В первой строке входных данных находятся целые числа \(n\), \(m\) и \(k\) (\(1 \leq n \leq 10^6\), \(0 \leq m \leq 10^{18}\), \(1 \leq k \leq 10^6\)).

В следующей строке находятся \(n\) целых чисел, обозначающих номера на билетах, полученных людьми, участвующими в лотерее. Эти числа — целые числа в диапазоне от \(0\) до \(m\).

Выходные данные

Вы должны вывести два целых числа. Первое должно быть равно количеству значений целевого числа (от \(0\) до \(m\)), при котором Байтек выигрывает, если оптимально выберет свой билет. Второе должно быть равно целому числу, которое Байтек должен выбрать, чтобы максимизировать свой шанс на выигрыш в лотерею.

Примечание

В первом примере Байтек выиграет при \(4\)-х целевых значениях (а именно \(0, 1, 2, 3\)), если выберет целое число \(2\), которое является наименьшим оптимальным значением. Если он выберет \(3\), он также выиграет в четырех случаях, но это значение не является наименьшим.

C. Галактики-близнецы

битмаски Конструктив математика Перебор Теория вероятностей *2600

Известный во всем мире астрофизик Млейл ваГрасс Тайсок недавно прочитал о существовании скоплений галактик-близнецов. Прежде чем поделиться этими знаниями с широкой аудиторией в своем подкасте под названием S.tarT-ok, он хочет доказать их существование самостоятельно. Млейл осознает, что просторы Вселенной поражают воображение (почти так же поражают, как и его наблюдательность), и решает попытать счастья и найти новое скопление галактик-близнецов.

Для этого он использует свой ТЛескоп для наблюдения за еще не исследованной человечеством частью ночного неба, в которой есть ровно \(2^{k + 1}\) галактик, расположенных в ряд. \(i\)-я из них состоит ровно из \(0 \le g_i < 4^k\) звезд.

Скопление галактик — это любой непустой непрерывный подотрезок галактик. Более того, считается, что её признак равен побитовому исключающему ИЛИ всех значений \(g_i\) в этом диапазоне.

Два скопления галактик считаются близнецами тогда и только тогда, когда они имеют равные признаки и их соответствующие отрезки не пересекаются.

Напишите программу, которая для многих сценариев будет читать описание участка ночного неба, наблюдаемого Млейлем, и выводить расположение двух отрезков, принадлежащих некоторой паре галактик-близнецов, или единственное значение \(-1\), если такой пары не существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(k\) (\(0 \le k \le 17\)).

Вторая строка содержит \(2^{k + 1}\) целых чисел \(g_1, g_2, \ldots, g_{2^{k+1}}\) (\(0 \le g_i < 4^k\)).

Гарантируется, что сумма значений \(2^{k + 1}\) по всем наборам входных данных не превосходит \(2^{18}\).

Выходные данные

Ответы для всех наборов входных данных должны содержаться в отдельных строках. Если существует пара галактик-близнецов, то выведите четыре целых числа \(a\), \(b\), \(c\) и \(d\), обозначающие их отрезки \([a, b]\) и \([c, d]\) (первый интервал не обязан начинаться раньше второго, но они должны быть непересекающимися). Если пары таких галактик не существует, выведите единственное значение \(-1\).

Примечание

В первом наборе входных данных мы выбираем интервалы \([2, 4]\) и \([6, 6]\) в качестве наших галактик-близнецов. Признак первого интервала равен \(15 \oplus 0 \oplus 7 = 8\), и признак второго интервала равен \(8\), так что эти скопления галактик действительно являются близнецами.

F. Рельсотроны

графы дп Перебор поиск в глубину и подобное *2200

Тёма играет в одну очень интересную компьютерную игру.

Во время прохождения очередной миссии, персонаж Тёмы оказался на незнакомой планете. В отличие от Земли эта планета плоская и представима в виде прямоугольника \(n \times m\).

Персонаж Тёмы находится в точке с координатами \((0, 0)\), чтобы успешно завершить миссию ему необходимо живым добраться до точки с координатами \((n, m)\).

Пусть персонаж компьютерной игры находится в координате \((i, j)\). Каждую секунду, начиная с первой, Тёма может:

  • либо воспользоваться технологией гиперпрыжка по вертикали, после чего его персонаж попадёт в координату \((i + 1, j)\) в конце секунды,
  • либо воспользоваться технологией гиперпрыжка по горизонтали, после чего его персонаж попадёт в координату \((i, j + 1)\) в конце секунды,
  • либо Тёма может не совершать гиперпрыжок, тогда его персонаж не будет перемещаться в течение этой секунды.

Пришельцы, что обитают на этой планете очень опасны и настроены враждебно. Поэтому они будут стрелять из своих рельсотронов \(r\) раз.

Каждый выстрел полностью простреливает одну координату по вертикали или горизонтали. Если в момент выстрела (в конце секунды) персонаж находится в зоне его поражения, то он умирает.

Так как Тёма посмотрел исходный код игры, он знает полную информацию о каждом выстреле — время, простреливаемую координату, а также направление выстрела.

За какое минимальное время персонаж может добраться до нужной точки? Если он обречён на смерть и не сможет добраться до точки с координатами \((n, m)\), выведите \(-1\).

Входные данные

В первой строке входных данных содержится одно целое число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержатся два целых числа \(n\) и \(m\) (\(1 \le n \cdot m \le 10^4\)) — размеры планеты, её высота и ширина.

Во второй набора данных содержится единственное целое число \(r\) (\(1 \le r \le 100\)) — количество выстрелов.

Далее следует \(r\) строк, каждая из которых описывает один выстрел.

Выстрел описывается тремя целыми числами \(t\), \(d\), \(coord\). Где \(t\) — секунда, в которую будет произведён данный выстрел (\(1 \le t \le 10^9\)). \(d\) — обозначение направления выстрела (\(d = 1\) обозначает выстрел вдоль горизонтали, \(d = 2\) обозначает выстрел вдоль вертикали). \(coord\) — величина простреливаемой координаты (\(0 \le coord \le n\) при \(d = 1\), \(0 \le coord \le m\) при \(d = 2\)).

Cумма произведений \(n \cdot m\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное время, за которое персонаж сможет добраться до координаты \((n, m)\), либо же \(-1\), если ему суждено погибнуть.

Примечание

В первом наборе входных данных персонаж может перемещаться следующим образом: \((0, 0) \rightarrow (0, 1) \rightarrow (0, 2) \rightarrow (0, 3) \rightarrow (0, 3) \rightarrow (1, 3)\).

Во втором примере входных данных персонаж не сможет выйти за пределы прямоугольника, который будет полностью простреливаться выстрелами на \(2\) секунде.

C. Мирские числа

дп жадные алгоритмы математика Перебор Строки *1800

Мирские цифры обозначаются заглавными латинскими буквами от A до E. Кроме того, значение буквы A равно \(1\), B равно \(10\), C равно \(100\), D равно \(1000\), E равно \(10000\).

Мирское число — это последовательность мирских цифр. Значение мирского числа вычисляется следующим образом: суммируются значения всех цифр, но некоторые цифры берутся со знаком минус; цифра берется со знаком минус, если справа от нее есть цифра со значением строго больше (не обязательно сразу после нее); в противном случае цифра берется со знаком плюс.

Например, значение мирского числа DAAABDCA равно \(1000 - 1 - 1 - 1 - 10 + 1000 + 100 + 1 = 2088\).

Вам дано мирское число. Вы можете изменить не более одной цифры в нем. Вычислите максимально возможное значение полученного числа.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит строку \(s\) (\(1 \le |s| \le 2 \cdot 10^5\)), состоящую из заглавных латинских букв от A до E — заданное мирское число.

Сумма длин строк по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможное значение числа, если вы можете изменить в нем не более одной цифры.

Примечание

В первом примере можно получить EAAABDCA со значением \(10000-1-1-1-10+1000+100+1=11088\).

Во втором примере можно получить EB со значением \(10000+10=10010\).

E. Слежка за отрезками

Бинарный поиск Перебор Структуры данных *1600

У вас есть массив \(a\), состоящий из \(n\) нулей. Также, вам дан набор из \(m\) необязательно различных отрезков. Каждый отрезок задается двумя числами \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) и представляет собой подмассив \(a_{l_i}, a_{l_i+1}, \dots, a_{r_i}\) массива \(a\).

Назовём отрезок \(l_i, r_i\) красивым, если количество единиц на этом отрезке строго больше, чем количество нулей. Например, если \(a = [1, 0, 1, 0, 1]\), тогда отрезок \([1, 5]\) является красивым (количество единиц равно \(3\), количество нулей равно \(2\)), но отрезок \([3, 4]\) не является красивым (количество единиц равно \(1\), количество нулей равно \(1\)).

У вас также есть \(q\) изменений. Каждое изменение задано числом \(1 \le x \le n\), это означает, что вы должны присвоить элементу \(a_x\) значение \(1\).

Вы должны найти первое изменение, после которого хотя бы один из \(m\) заданных отрезков становится красивым, или сообщить, что ни один из них не является красивым после применения всех \(q\) изменений.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le m \le n \le 10^5\)) — размер массива \(a\) и количество отрезков соответственно.

Далее следует \(m\) строк, состоящих из двух чисел \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — границы отрезков.

В следующей строке дано целое число \(q\) (\(1 \le q \le n\)) — количество измений.

В следующих \(q\) строках содержится по одному целому числу \(x\) (\(1 \le x \le n\)) — индекс элемента массива, который нужно приравнять к \(1\). Гарантируется, что все индексы в запросах различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наименьший номер изменения, после которого хотя бы один из отрезков окажется красивым, или \(-1\), если ни один отрезок не станет красивым.

Примечание

В первом примере, после первых двух изменений не будет красивых отрезков, а после третьего изменения на отрезке \([1; 5]\) будет 3 единицы и 2 нуля, получается ответ 3.

Во втором примере у нас не будет красивых отрезков.

F1. Перестановка минимальной стоимости (простая версия)

жадные алгоритмы Конструктив математика Перебор *2600

Единственное отличие между этой задачей и сложной версией — в ограничениях на \(t\) и \(n\).

Вам дан массив из \(n\) положительных целых чисел \(a_1,\dots,a_n\), а также целое (возможно, отрицательное) число \(c\).

Среди всех возможных перестановок \(b_1,\dots,b_n\) массива \(a_1,\dots,a_n\), рассмотрим минимально возможное значение \(\)\sum_{i=1}^{n-1} |b_{i+1}-b_i-c|.\(\) Найдите лексикографически наименьшую перестановку \(b\) массива \(a\), на которой достигается этот минимум.

Последовательность \(x\) лексикографически меньше последовательности \(y\), если и только если выполняется один из следующих пунктов:

  • \(x\) — префикс \(y\), но \(x \ne y\);
  • в первой позиции, где \(x\) и \(y\) различны, в последовательности \(x\) находится элемент, меньший соответствующего элемента \(y\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа: \(n\) и \(c\) (\(1 \le n \le 5 \cdot 10^3\), \(-10^9 \le c \le 10^9\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,\dots,a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1,\dots,b_n\), задающих лексикографически наименьшую перестановку \(a\), на которой достигается минимум \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\).

Примечание

В первом наборе входных данных можно доказать, что минимальное значение \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\) равно \(27\), а перестановка \(b = [9,3,1,4,5,1]\) является лексикографически наименьшей перестановкой \(a\), на которой достигается этот минимум: \(|3-9-(-7)|+|1-3-(-7)|+|4-1-(-7)|+|5-4-(-7)|+|1-5-(-7)| = 1+5+10+8+3 = 27\).

Во втором наборе входных данных минимально возможное значение \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\) равно \(0\), при этом \(b = [1,3,5]\) является лексикографически наименьшей перестановкой \(a\), на которой достигается этот минимум.

В третьем наборе входных данных существует всего одна перестановка \(b\).

D. Рейтинговая система

Бинарный поиск дп жадные алгоритмы математика Перебор снм Структуры данных *1800

Вы разрабатываете рейтинговую систему для онлайн-игры. Каждый раз, когда игрок участвует в матче в этой игре, его рейтинг меняется в зависимости от результатов.

Изначально рейтинг игрока равен \(0\). Он будет участвовать в \(n\) матчах; после \(i\)-го матча рейтинг изменяется на \(a_i\) (рейтинг увеличивается на \(a_i\), если \(a_i\) положительное, или уменьшается на \(|a_i|\), если отрицательное. В последовательности \(a\) нет нулей).

В системе есть дополнительное правило: для заданного целого числа \(k\), если рейтинг игрока достиг значения \(k\), он никогда не опустится ниже него. Формально, если рейтинг игрока хотя бы \(k\), а изменение рейтинга должно сделать его меньше \(k\), то рейтинг снизится ровно до \(k\).

Ваша задача состоит в том, чтобы определить значение \(k\) таким образом, чтобы рейтинг игрока после всех \(n\) матчей был максимально возможным (среди всех возможных целочисленных значений \(k\)). Если существует несколько возможных ответов, выведите любой из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество матчей.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\); \(a_i \ne 0\)) — изменение рейтинга после \(i\)-го матча.

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(m\) (\(-10^{18} \le m \le 10^{18}\)) — такое значение \(k\), при котором рейтинг игрока будет максимально возможным. Можно показать, что существует хотя бы одно такое значение, которое удовлетворяет ограничениям \(-10^{18} \le m \le 10^{18}\).

Примечание

В первом примере, если \(k=3\), то рейтинг изменяется следующим образом: \(0 \rightarrow 3 \rightarrow 3 \rightarrow 4 \rightarrow 6\).

Во втором примере, если \(k=0\), то рейтинг изменяется следующим образом: \(0 \rightarrow 0 \rightarrow 0 \rightarrow 0\).

В третьем примере, если \(k=25\), то рейтинг изменяется следующим образом: \(0 \rightarrow 4 \rightarrow 6\).

В четвертом примере, если \(k=6\), то рейтинг изменяется следующим образом: \(0 \rightarrow 5 \rightarrow 6 \rightarrow 6 \rightarrow 8 \rightarrow 7 \rightarrow 6 \rightarrow 8\).

B. Рудольф и крестики-нолики-плюсики

Перебор реализация Строки *800

Рудольф изобрел игру крестики-нолики на троих. Она имеет классические правила, не считая третьего игрока, играющего плюсиками. У Рудольфа есть поле \(3 \times 3\) — результат завершенной игры. Каждая ячейка поля содержит либо крестик, либо нолик, либо плюсик, либо ничего. В игре побеждает игрок, сделавший горизонтальный, вертикальный или диагональный ряд из \(3\)-х своих символов.

Рудольф хочет узнать результат игры. Либо ровно один из трех игроков выиграл, либо игра закончилась вничью. Гарантируется, что несколько игроков не могут победить одновременно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк, каждая из которых состоит из трех символов. Символ может быть одним из четырех: «X» означает крестик, «O» означает нолик, «+» означает плюсик, «.» означает пустую ячейку.

Выходные данные

Для каждого набора входных данных выведите строку «X», если победили крестики, «O», если победили нолики, «+», если победили плюсики, «DRAW», если была ничья.

E1. Рудольф и снежинки (простая версия)

математика Перебор реализация *1300

Это простая версия задачи. Единственное отличие в том, что в этой версии \(n \le 10^6\).

Однажды зимним утром Рудольф задумчиво смотрел в окно и наблюдал за падающими снежинками. Он очень быстро заметил некоторую симметрию в конфигурации снежинок. И как истинный математик, Рудольф придумал математическую модель снежинки.

Он определил снежинку как неориентированный граф, строящийся по следующим правилам:

  • Изначально в графе одна единственная вершина.
  • Далее в граф добавляются ещё вершины. Исходная вершина соединяется ребрами с ещё \(k\) новыми вершинами (\(k > 1\)).
  • Каждая из вершин, соединённая только с одной другой вершиной, соединяется ребрами с ещё \(k\) новыми вершинами. Этот шаг нужно выполнить хотя бы один раз.

Минимальная снежинка для \(k = 4\) приведена на рисунке.

После некоторых математических изысканий Рудольф понял, что такие снежинки могут иметь далеко не любое число вершин. Помогите Рудольфу проверить, может ли существовать снежинка с \(n\) вершинами.

Входные данные

В первой строке входных данных содержится целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержится целое число \(n\) (\(1 \le n \le 10^6\)) — количество вершин, для которого нужно проверить существование снежинки.

Выходные данные

Выведите \(t\) строк, каждая из которых является ответом на соответствующий набор — «YES», если существует такое \(k > 1\), для которого можно построить снежинку с заданным количеством вершин; «NO» в противном случае.

E2. Рудольф и снежинки (сложная версия)

Бинарный поиск математика Перебор реализация *1800

Это сложная версия задачи. Единственное отличие в том, что в этой версии \(n \le 10^{18}\).

Однажды зимним утром Рудольф задумчиво смотрел в окно и наблюдал за падающими снежинками. Он очень быстро заметил некоторую симметрию в конфигурации снежинок. И как истинный математик, Рудольф придумал математическую модель снежинки.

Он определил снежинку как неориентированный граф, строящийся по следующим правилам:

  • Изначально в графе одна единственная вершина.
  • Далее в граф добавляются ещё вершины. Исходная вершина соединяется ребрами с ещё \(k\) новыми вершинами (\(k > 1\)).
  • Каждая из вершин, соединённая только с одной другой вершиной, соединяется ребрами с ещё \(k\) новыми вершинами. Этот шаг нужно выполнить хотя бы один раз.

Минимальная снежинка для \(k = 4\) приведена на рисунке.

После некоторых математических изысканий Рудольф понял, что такие снежинки могут иметь далеко не любое число вершин. Помогите Рудольфу проверить, может ли существовать снежинка с \(n\) вершинами.

Входные данные

В первой строке входных данных содержится целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержится целое число \(n\) (\(1 \le n \le 10^{18}\)) — количество вершин, для которого нужно проверить существование снежинки.

Выходные данные

Выведите \(t\) строк, каждая из которых является ответом на соответствующий набор — «YES», если существует такое \(k > 1\), для которого можно построить снежинку с заданным количеством вершин; «NO» в противном случае.

C. Кто-нибудь хочет вампирские способности?

битмаски дп жадные алгоритмы Перебор *1400

ДИО знает, что Крестоносцы звёздной пыли определили его местоположение и собираются сразиться с ним. Чтобы сорвать их планы, он решает послать несколько пользователей стендов для борьбы с ними. Первоначально он призвал с собой \(n\) пользователей, причем сила \(i\)-го из них равна \(a_i\). Используя свои вампирические способности, он может делать следующее столько раз, сколько пожелает:

  • Пусть текущее число пользователей стенда равно \(m\).
  • DIO выбирает индекс \(i\) (\(1 \le i \le m\)).
  • Затем он вызывает нового пользователя стенда с индексом \(m+1\) и силой, равной \(\)a_{m+1} = a_i \oplus a_{i+1} \oplus \ldots \oplus a_m,\(\)

    где оператор \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

  • В итоге число пользователей стенда становится \(m+1\).

К несчастью для ДИО, используя предсказательные способности Пурпурного отшельника, Крестоносцы знают, что он замышляет это, и они также знают силы первоначальных пользователей стендов. Помогите Крестоносцам найти максимально возможную силу пользователя стенда среди всех возможных способов вызовов.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10\,000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество пользователей Стенда, вызванных первоначально.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^8\)) — сила каждого пользователя Стенда.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число, максимальную силу пользователя Стенда среди всех возможных способов вызовов.

Примечание

В первом наборе входных данных один из способов добавления новых пользователей Стендов выглядит следующим образом:

  • Выбрать \(i=n\). Теперь \(a\) становится \([0,2,5,1,1]\).
  • Выбрать \(i=1\). Теперь \(a\) становится \([0,2,5,1,1,7]\). \(7\) — это максимальная сила пользователя стенда, которого может вызвать ДИО.

Во втором наборе входных данных, ДИО не нужно добавлять больше пользователей стенда, потому что \(3\) — это максимальная сила пользователя стенда, которого ДИО может вызвать.

E. Платиновый треугольник?

интерактив Комбинаторика математика Перебор реализация Теория вероятностей *2900

Это интерактивная задача.

Made in Heaven — довольно любопытный стенд. Конечно, это (возможно) самый сильный Стенд из всех существующих, но он также является ярым любителем головоломок. Например, недавно он задал Qtaro следующую задачу:

Made in Heaven имеет \(n\) скрытых целых чисел \(a_1, a_2, \dots, a_n\) (\(3 \le n \le 5000\), \(1 \le a_i \le 4\)). Qtaro должен определить все \(a_i\), задав Made in Heaven несколько вопросов следующего вида:

  • В одном запросе Qtaro разрешается дать Made in Heaven три различных индекса \(i\), \(j\) и \(k\) (\(1 \leq i, j, k \leq n\)).
  • Если \(a_i, a_j, a_k\) образуют стороны невырожденного треугольника \(^\dagger\), Made in Heaven выдаст площадь этого треугольника.
  • В противном случае, Made in Heaven ответит \(0\).

Задав не более \(5500\) таких вопросов, Qtaro должен либо сказать Made in Heaven все значения \(a_i\), либо сообщить, что нет возможности однозначно определить их.

К сожалению, из-за перезагрузки вселенной, Qtaro не так умен, как Jotaro. Пожалуйста, помогите Qtaro решить задачу Made In Heaven.

——————————————————————

\(^\dagger\) Три целых положительных числа \(a, b, c\) образуют стороны невырожденного треугольника тогда и только тогда, когда выполняются все следующие три неравенства:

  • \(a+b > c\),
  • \(b+c > a\),
  • \(c+a > b\).
Протокол взаимодействия

Взаимодействие начинается с чтения \(n\) (\(3 \le n \le 5000\)) — количества скрытых целых чисел.

Чтобы задать вопрос, соответствующий тройке \((i, j, k)\) (\(1 \leq i < j < k \leq n\)), выведите «? \(i\) \(j\) \(k\)» без кавычек. После этого вы должны прочитать одно целое число \(s\).

  • Если \(s = 0\), то \(a_i\), \(a_j\) и \(a_k\) не являются сторонами невырожденного треугольника.
  • Иначе, \(s = 16 \Delta^2\), где \(\Delta\) — площадь треугольника. Площадь предоставляется в таком формате для удобства, чтобы вам нужно было вводить только целые числа.

Если числа \(a_i\) не могут быть однозначно определены, выведите «! \(-1\)» без кавычек. Иначе, если вы определили все значения \(a_i\), выведите «! \(a_1\) \(a_2\) \(\dots\) \(a_n\)» в одну строку.

Интерактор неадаптивный. Скрытый массив \(a_1, a_2, \dots, a_n\) фиксируется заранее и не изменяется в процессе взаимодействия.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взлома используйте следующий формат.

Первая строка содержат одно целое число \(n\) (\(3 \le n \le 5000\))  – количество скрытых целых чисел.

Вторая строка содержат \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 4\))  – скрытый массив.

Примечание

В первом примере процесс взаимодействия происходит следующим образом:

StdinStdoutОбъяснение
3Прочитаем \(n = 3\). Существует \(3\) скрытых целых чисел
? 1 2 3Попросим найти площадь, образованную \(a_1\), \(a_2\) и \(a_3\)
63Получено \(16\Delta^2 = 63\). Значит, площадь \(\Delta = \sqrt{\frac{63}{16}} \approx 1.984313\)
! -1Ответим, что не существует однозначного массива, удовлетворяющего запросам.

Из полученной площади можно сделать вывод, что числа, образующие треугольник, либо (\(4\), \(4\), \(1\)), либо (\(3\), \(2\), \(2\)) (в определенном порядке). Поскольку существует несколько массивов чисел, удовлетворяющих запросам, уникальный ответ не может быть найден.

Во втором примере процесс взаимодействия происходит следующим образом:

ШагStdinStdoutОбъяснение
16Прочитаем \(n = 6\). Значит, есть \(6\) скрытых чисел
2? 1 2 3Спросим площадь треугольника, образованного \(a_1\), \(a_2\) и \(a_3\)
30Они не образуют невырожденный треугольник
4? 2 3 4Спросим площадь треугольника, образованного \(a_2\), \(a_3\) и \(a_4\)
50Они не образуют невырожденный треугольник
6? 4 5 6Спросим площадь треугольника, образованного \(a_4\), \(a_5\) и \(a_6\)
70Они не образуют невырожденный треугольник
8? 1 5 6Спросим площадь треугольника, образованного \(a_1\), \(a_5\) и \(a_6\)
963Получим \(16\Delta^2 = 63\). Тогда площадь \(\Delta = \sqrt{\frac{63}{16}} \approx 1.984313\)
10? 3 5 6Спросим площадь треугольника, образованного \(a_3\), \(a_5\) и \(a_6\)
1115Получим \(16\Delta^2 = 15\). Тогда площадь \(\Delta = \sqrt{\frac{15}{16}} \approx 0.968245\)
12? 1 2 4Спросим площадь треугольника, образованного \(a_3\), \(a_5\) и \(a_6\)
13135Получим \(16\Delta^2 = 135\). Тогда площадь \(\Delta = \sqrt{\frac{135}{16}} \approx 2.904738\)
14! 3 2 1 4 2 2Однозначный ответ найден, и он равен \(a = [3, 2, 1, 4, 2, 2]\).

Из шагов \(10\) и \(11\) мы можем сделать вывод, что мультимножество \(\left\{a_3, a_5, a_6\right\}\) должно равняться \(\left\{2, 2, 1\right\}\).

Из шагов \(8\) и \(9\), мультимножество \(\left\{a_1, a_5, a_6\right\}\) должно быть либо \(\left\{4, 4, 1\right\}\), либо \(\left\{3, 2, 2\right\}\).

Так как \(\left\{a_3, a_5, a_6\right\}\) и \(\left\{a_1, a_5, a_6\right\}\) пересекаются по \(a_5\) и \(a_6\), делаем вывод, что \(a_5 = a_6 = 2\), а также \(a_1 = 3\), \(a_3 = 1\).

Из шагов \(6\) и \(7\) известно, что \(a_5 = a_6 = 2\), а \(a_4\), \(a_5\) и \(a_6\) не могут образовать невырожденный треугольник, следовательно, \(a_4 = 4\).

При всей известной информации, только \(a_2 = 2\) удовлетворяет запросам, сделанным на шагах \(2\), \(3\), \(4\), \(5\), \(12\) и \(13\).

В третьем примере один массив, удовлетворяющий запросам, — \([1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\).

D. Вика и бонусы

Бинарный поиск математика Перебор Тернарный поиск *2200

В любимом Викином магазине косметики «Золотая груша» новая система бонусов!

Работает эта система следующим образом: пусть у покупателя есть \(b\) бонусов. Перед оплатой покупки он может выбрать одну из двух опций:

  • Получить скидку в размере текущего количества бонусов, при этом бонусы не списываются.
  • Накопить дополнительно \(x\) бонусов, где \(x\) — последняя цифра числа \(b\). В результате чего на счету покупателя станет \(b+x\) бонусов.

Например, если у покупателя было \(24\) бонуса, он может как получить скидку в размере \(24\), так и накопить ещё \(4\) бонуса, после чего на его счету станет \(28\) бонусов.

На данный момент Вика уже успела накопить \(s\) бонусов.

Девушка знает, что за оставшееся время действия бонусной системы она совершит ещё \(k\) покупок в сети магазинов «Золотая груша».

Ознакомившись с правилами работы системы бонусов, Вике стало интересно, какую максимальную суммарную скидку она сможет получить.

Помогите девушке ответить на этот вопрос.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке каждого набора входных данных содержится пара целых чисел \(s\) и \(k\) (\(0 \le s \le 10^9\), \(1 \le k \le 10^9\)) — текущее количество бонусов на счету у Вики и сколько ещё покупок девушка совершит.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможную суммарную скидку, которую можно получить по бонусной системе.

Примечание

В первом наборе входных данных Вика может накопить бонусы после первой и второй покупки, после чего получить скидку \(4\).

Во втором наборе входных данных Вика может три раза получить скидку \(11\), суммарная скидка составит \(33\).

В третьем наборе входных данных независимо от действий Вики у неё всегда будет суммарная скидка \(0\).

E. Вика и блинчики

математика Перебор реализация теория чисел *2600

В родном городе Вики, Владивостоке, очень красивое море.

Часто можно видеть ребят, запускающих «блинчики» или «лягушки». Так называется процесс кидания камня в море под небольшим углом, отчего он далеко летит и несколько раз отскакивает от водной глади.

Вика много раз запускала «блинчики» и знает, что если кинуть камень от берега перпендикулярно береговой линии с силой \(f\), то он сперва коснётся воды на расстоянии \(f\) от берега, затем оттолкнётся и вновь коснётся воды на расстоянии \(f - 1\) от предыдущей точки касания. Так камешек будет лететь по прямой, всё сокращая расстояния между точками, в которых он касается воды, пока не упадёт в море.

Формально, точки в которых камень соприкоснётся с водной гладью будут иметь следующие координаты: \(f\), \(f + (f - 1)\), \(f + (f - 1) + (f - 2)\), ... , \(f + (f - 1) + (f - 2) + \ldots + 1\) (если считать, что \(0\) — координата береговой линии).

Как-то раз прогуливаясь вечером по набережной Владивостока, Вика увидела, как группа ребят запускала «блинчики» в море с одной и той же точки с разными силами.

Ей стало интересно, какое максимальное количество ребят могут запустить камешек со своей силой \(f_i\), так чтобы все \(f_i\) были различными целыми положительными числами, и при этом все \(n\) камешков в процессе полёта коснулись воды в точке с координатой \(x\) (если считать, что \(0\) — координата береговой линии).

Немного подумав, Вика ответила на свой вопрос. После этого она начала анализировать, а как будет изменятся ответ на её вопрос, если координату \(x\) домножать на некоторые положительные целые числа \(x_1\), \(x_2\), ... , \(x_q\), выбранные ей для анализа.

Вике сложно справится с таким анализом самостоятельно, поэтому она обратилась к вам за помощью.

Формально, Вику интересует ответ на её вопрос для координат \(X_1 = x \cdot x_1\), \(X_2 = X_1 \cdot x_2\), ... , \(X_q = X_{q-1} \cdot x_q\). Так как ответ для таких координат может быть очень большой, найдите его по модулю \(M\). Гарантируется, что число \(M\) является простым.

Входные данные

В первой строке входных данных содержится три целых числа \(x\) (\(1 \le x \le 10^9\)), \(q\) (\(1 \le q \le 10^5\)) и \(M\) (\(100 \le M \le 2 \cdot 10^9\)) — изначальная координата, для которой Вика ответила на вопрос самостоятельно, количество чисел \(x_i\), на которые Вика будет домножать изначальную координату и простой модуль \(M\).

Во второй строке входных данных содержится \(q\) чисел \(x_1, x_2, x_3, \ldots, x_q\) (\(1 \le x_i \le 10^6\)) — описанные в условии числа.

Выходные данные

Выведите \(q\) целых чисел, где \(i\)-е число соответствует ответу на вопрос Вики для координаты \(X_i\). Все ответы выводите по модулю \(M\).

Примечание

В первом примере, чтобы камешек коснулся водной глади в точке с координатой \(2\), его нужно кинуть с силой \(2\). Чтобы камешек коснулся воды в точке с координатой \(2 \cdot 3 = 6\), его нужно кинуть с силой \(3\) или с силой \(6\).

Во втором примере можно запустить «блинчик» с силой \(5\) или \(14\), чтобы он коснулся в воды в точке с координатой \(7 \cdot 2 = 14\). Для координаты \(14 \cdot 13 = 182\) есть \(4\) варианта сил — это \(20\), \(29\), \(47\), \(182\).

C. Копирование бинарной строки

Бинарный поиск Перебор Строки Структуры данных хэши *1600

Вам задана строка \(s\), состоящая из \(n\) символов 0 и/или 1.

Вы делаете \(m\) копий этой строки. Пусть \(i\)-я копия — это строка \(t_i\). Затем вы выполняете ровно одну операцию над каждой из копий: в \(i\)-й копии вы сортируете подстроку \([l_i; r_i]\) (подстроку, начинающуюся с \(l_i\)-го символа и заканчивающуюся \(r_i\)-м символом, обе границы включаются). Заметьте, что каждая операция затрагивает только одну копию, и каждая копия затрагивается только одной операцией.

Ваша задача — посчитать количество различных строк среди \(t_1, t_2, \ldots, t_m\). Заметьте, что изначальная строка \(s\) должна считаться только тогда, когда хотя бы одна копия остается неизменной после операции.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — длину строки \(s\) и количество копий соответственно.

Вторая строка содержит \(n\) символов 0 и/или 1 — строку \(s\).

Затем следуют \(m\) строк. В \(i\)-й из них содержатся два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — описание операции, применяемой к \(i\)-й копии.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите одно целое число — количество различных строк среди \(t_1, t_2, \ldots, t_m\).

Примечание

Рассмотрим первый тестовый пример. Копии ниже представлены в порядке операций из входных данных. Сортируемые подстроки подчеркнуты:

  1. 101100 \(\rightarrow\) 011100;
  2. 101100 \(\rightarrow\) 011100;
  3. 101100 \(\rightarrow\) 101100;
  4. 101100 \(\rightarrow\) 101100;
  5. 101100 \(\rightarrow\) 000111.

Среди \(t_1, t_2, t_3, t_4, t_5\) всего три различные строки: 000111, 011100 и 101100.

Рассмотрим второй тестовый пример:

  1. 100111 \(\rightarrow\) 100111;
  2. 100111 \(\rightarrow\) 001111;
  3. 100111 \(\rightarrow\) 001111;
  4. 100111 \(\rightarrow\) 010111.

Среди \(t_1, t_2, t_3, t_4\) всего три различные строки: 001111, 010111 и 100111.

D. Сбалансированный раунд

жадные алгоритмы Перебор реализация сортировки *900

Вы являетесь автором раунда Codeforces и подготовили \(n\) задач, которые вы собираетесь задать, причем задача \(i\) имеет сложность \(a_i\). Вы будете выполнять следующий процесс:

  • удалить некоторые (возможно, ноль) задач из списка;
  • переставить оставшиеся задачи в любом порядке, который вы пожелаете.

Раунд считается сбалансированным, если и только если абсолютная разница между сложностью любых двух последовательных задач не превышает \(k\) (то есть меньше или равен \(k\)).

Какое минимальное количество задач нужно удалить, чтобы расстановка задач была сбалансированной?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит два положительных целых числа \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) и \(k\) (\(1 \leq k \leq 10^9\)) — количество задач и максимально допустимая абсолютная разница между последовательными задачами.

Вторая строка каждого набора содержит \(n\) целых чисел, разделенных пробелами, \(a_i\) (\(1 \leq a_i \leq 10^9\)) — сложность каждой задачи.

Обратите внимание, что сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество задач, которые нужно удалить, чтобы расстановка задач была сбалансированной.

Примечание

В первом примере мы можем удалить первые \(2\) задачи и составить набор, используя задачи со сложностями \([4, 5, 6]\), с разницей между соседними задачами равной \(|5 - 4| = 1 \leq 1\) и \(|6 - 5| = 1 \leq 1\).

Во втором примере мы можем взять одну задачу и составить раунд, используя задачу со сложностью \(10\).

F. We Were Both Children

математика Перебор реализация теория чисел *1300

Михай и Славик смотрели на группу из \(n\) лягушек, пронумерованных от \(1\) до \(n\), которые изначально находились в точке \(0\). Лягушка \(i\) может прыгнуть на расстояние \(a_i\).

Каждую секунду лягушка \(i\) прыгает на \(a_i\) единиц вперед. Прежде чем лягушки начнут прыгать, Славик и Михай могут поставить ровно одну ловушку в координате, чтобы поймать всех лягушек, которые когда-либо пройдут через эту координату.

Однако, дети не могут уйти далеко от своего дома, поэтому они могут поставить ловушку только в одной из первых \(n\) точках (то есть в точке с координатой от \(1\) до \(n\)), и дети не могут поставить ловушку в точке \(0\), так как они боятся лягушек.

Можете ли вы помочь Славику и Михаю определить, сколько лягушек они могут поймать, используя ловушку?

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Затем следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество лягушек, которое равно расстоянию, которое Славик и Михай могут пройти, чтобы установить ловушку.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — длины прыжков соответствующих лягушек.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество лягушек, которых Славик и Михай могут поймать с помощью ловушки.

Примечание

В первом примере лягушки будут прыгать следующим образом:

  • Лягушка 1: \(0 \to 1 \to 2 \to 3 \to \mathbf{\color{red}{4}} \to \cdots\)
  • Лягушка 2: \(0 \to 2 \to \mathbf{\color{red}{4}} \to 6 \to 8 \to \cdots\)
  • Лягушка 3: \(0 \to 3 \to 6 \to 9 \to 12 \to \cdots\)
  • Лягушка 4: \(0 \to \mathbf{\color{red}{4}} \to 8 \to 12 \to 16 \to \cdots\)
  • Лягушка 5: \(0 \to 5 \to 10 \to 15 \to 20 \to \cdots\)
Таким образом, если Славик и Михай поставят ловушку в координате \(4\), они смогут поймать трех лягушек: лягушек 1, 2 и 4. Можно доказать, что они не смогут поймать больше лягушек.

Во втором примере Славик и Михай могут поставить ловушку в координате \(2\) и мгновенно поймать всех трех лягушек.

A. Разговоры на эскалаторе

Конструктив математика Перебор *800

Однажды Владу в метро стало интересно, с кем из пассажиров он может поговорить на эскалаторе. Всего есть \(n\) пассажиров. На эскалаторе всего \(m\) ступенек, все ступеньки пронумерованы от \(1\) до \(m\) и \(i\)-я ступенька имеет высоту \(i \cdot k\).

Влад имеет рост \(H\) сантиметров. Два человека с ростом \(a\) и \(b\) могут поговорить на эскалаторе, если они стоят на разных ступеньках и разница в росте между ними равна разнице высот между ступеньками.

Например, если два человека имеют рост \(170\) и \(180\) сантиметров, и при этом \(m = 10, k = 5\) то они могут встать на ступеньки с номерами \(7\) и \(5\), тогда разница высот между ступеньками равна разнице в росте двух людей: \(k \cdot 2 = 5 \cdot 2 = 10 = 180 - 170\). Есть и другие возможные способы.

Дан массив \(h\) размера \(n\), \(h_i\) означает рост \(i\)-го человека. Владу интересно, со сколькими людьми он может поговорить на эскалаторе по отдельности.

Например, если \(n = 5, m = 3, k = 3, H = 11\), и \(h = [5, 4, 14, 18, 2]\). Влад сможет поговорить с человеком с ростом \(5\) (Влад встанет на ступеньку \(1\), а второй встанет на ступеньку с номером \(3\)) и с человеком с ростом \(14\) (например Влад может встать на ступеньку с номером \(3\), а второй встанет на ступеньку с номером \(2\)). С человеком с ростом \(2\) Влад не сможет поговорить, так как даже если они встанут на крайние ступени эскалатора, разница между ними будет \(6\), а их разница в росте составляет \(9\). С остальными людьми Влад не сможет поговорить на эскалаторе, таким образом, ответ для данного примера: \(2\).

Входные данные

В первой строке содержится единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

В первой строке каждого набора записаны целые числа: \(n, m, k, H\) (\(1 \le n,m \le 50\), \(1 \le k,H \le 10^6\)). Где \(n\) — количество людей, \(m\) — количество ступенек, \(k\) — разница высот между соседними ступеньками, \(H\) — рост Влада.

Во второй строке записано \(n\) целых чисел: \(h_1, h_2, \ldots, h_n\) (\(1 \le h_i \le 10^6\)). \(h_i\) означает рост \(i\)-го человека.

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество человек, с которыми Влад сможет поговорить на эскалаторе по отдельности.

Примечание

Первый пример разобран в условии.

Во втором примере Влад сможет поговорить с человеком с ростом \(11\).

В третьем примере Влад сможет поговорить с людьми с ростом: \(44, 74, 98, 62\). Таким образом, ответ \(4\).

В четвертом примере Влад сможет поговорить с человеком с ростом \(73\).

A. Рассортировка

жадные алгоритмы математика Перебор *800

Назовем массив \(a\) длины \(n\) отсортированным, если \(a_1 \leq a_2 \leq \ldots \leq a_{n-1} \leq a_n\).

У Ntarsis есть массив \(a\) длины \(n\).

Он может выполнить следующую операцию над массивом любое число раз (в том числе ноль):

  • Выбрать индекс \(i\) (\(1 \leq i \leq n-1\)).
  • Добавить \(1\) к \(a_1, a_2, \ldots, a_i\).
  • Вычесть \(1\) из \(a_{i+1}, a_{i+2}, \ldots, a_n\).

Значения \(a\) могут быть отрицательными после операции.

Определите минимальное количество операций, необходимых для того, чтобы сделать \(a\) неотсортированным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 500\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(500\).

Выходные данные

Выведите минимальное количество операций, необходимых для того, чтобы сделать массив неотсортированным.

Примечание

В первом наборе мы можем выполнить \(1\) операцию, чтобы сделать массив неотсортированным:

  • Выберем \(i = 1\). Тогда \(a\) становится равным \([2, 0]\), то есть перестаёт быть отсортированным.

Во втором случае мы можем выполнить \(2\) операции, чтобы сделать массив неотсортированным:

  • Выберем \(i = 3\). Тогда \(a\) становится \([2, 9, 11, 12]\).
  • Выберем \(i = 3\). Тогда \(a\) становится \([3, 10, 12, 11]\), то есть он становится неотсортированным.

Можно доказать, что \(1\) и \(2\) операции являются минимальным необходимым количеством операций в первом и втором наборе соответственно.

В третьем случае массив уже неотсортирован, поэтому мы выполняем \(0\) операций.

B. Фибоначчарсис

Бинарный поиск математика Перебор *1200

На день рождения Ntarsis получил два целых числа \(n\) и \(k\). Он задался вопросом, сколько фибоначчи-подобных последовательностей длины \(k\) можно сформировать таким образом, чтобы \(n\) было \(k\)-м элементом последовательности.

Последовательность неубывающих неотрицательных целых чисел считается фибоначчи-подобной, если \(f_i = f_{i-1} + f_{i-2}\) для всех \(i > 2\), где \(f_i\) обозначает \(i\)-й элемент последовательности. Обратите внимание, что \(f_1\) и \(f_2\) могут быть произвольными.

Например, последовательности \([4,5,9,14]\) и \([0,1,1]\) считаются допустимыми, в то время как \([0,0,0,1,1]\), \([1, 2, 1, 3]\) и \([-1,-1,-2]\) — нет: первые две не везде удовлетворяют \(f_i = f_{i-1} + f_{i-2}\), а последняя не выполняет условие, что элементы неотрицательны.

Произведите впечатление на Ntarsis, оказав ему помощь в решении этой задачи.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 2 \cdot 10^5\), \(3 \leq k \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — количество допустимых фибоначчи-подобных последовательностей длины \(k\), в которых \(k\)-м элементом является \(n\). Иными словами, выведите количество последовательностей \(f\) из \(k\) элементов таких, что \(f\) — фибоначчи-подобная, и \(f_k = n\). Можно показать, что это число конечно.

Примечание

Для \(n = 22\), \(k = 4\) существует \(4\) допустимые фибоначчи-подобные последовательности:

  • \([6,8,14,22]\)
  • \([4,9,13,22]\)
  • \([2,10,12,22]\)
  • \([0,11,11,22]\)

Для \(n = 3\), \(k = 9\) можно показать, что не существует допустимой фибоначчи-подобной последовательности, удовлетворяющей данным условиям.

Для \(n = 55\), \(k = 11\), единственная подходящая фибоначчи-подобная последовательность это \([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]\).

B. Заработать или разблокировать

битмаски дп Перебор *2200

Андрей играет в игру Tanto Cuore.

У него есть колода из \(n\) карт со значениями \(a_1, \ldots, a_n\) сверху вниз. Каждая карта может быть либо заблокирована, либо разблокирована. Первоначально разблокирована только самая верхняя карта.

Ходы происходят по очереди. В каждый ход Андрей выбирает незаблокированную карту из колоды. Пусть значение, записанное на этой карте, равно \(v\). Тогда он выполняет ровно одну из следующих двух операций:

  1. Разблокировать первые \(v\) заблокированных карт в колоде сверху. Если в колоде меньше \(v\) заблокированных карт, то разблокировать все заблокированные карты.
  2. Заработать \(v\) очков победы.
В обоих случаях после выполнения операции он убирает карту из колоды.

Игра заканчивается, когда все оставшиеся в колоде карты закрыты или в колоде больше нет карт.

Какое максимальное количество очков победы может заработать Андрей?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество карт в колоде.

Вторая строка содержит \(n\) целых чисел \(a_1, \ldots, a_n\) (\(0 \leq a_1, \ldots, a_n \leq n\)) — значения карт в колоде.

Выходные данные

Выведите одно целое число — максимальное количество очков победы, которое может заработать Андрей.

Примечание

В первом примере колода в колоде сначала лежит разблокированная карта, потом заблокированная. Андрей использует первую карту, чтобы разблокировать вторую карту. Затем он использует вторую карту, чтобы заработать \(2\) победных очка.

Во втором примере Андрей может использовать первую карту для разблокировки второй и третьей карт. Затем он использует вторую и третью карты, чтобы заработать \(4+5=9\) победных очков.

В третьем примере Андрей не может разблокировать ни одну карту и получить победные очки с помощью первой карты.

E. Комплекты игр

дп жадные алгоритмы Конструктив математика Перебор *3000

Риши разрабатывает игры в 2D-метаверсе и хочет предлагать своим клиентам комплекты игр. Каждая игра имеет соответствующее значение удовольствия. Комплект игр состоит из подмножества игр, суммарное удовольствие которых составляет \(60\).

Ваша задача — выбрать \(k\) игр, где \(1 \leq k \leq 60\), и соответствующие им значения удовольствия \(a_1, a_2, \dots, a_k\) таким образом, чтобы сформировать ровно \(m\) различных комплектов игр.

Входные данные

На вход подается одно целое число \(m\) (\(1 \le m \le 10^{10}\)) — желаемое количество комплектов игр.

Выходные данные

Первая строка должна содержать целое число \(k\) (\(1 \le k \le 60\)) — количество игр.

Вторая строка должна содержать \(k\) целых чисел, \(a_1, a_2, \dots, a_k\) (\(1 \le a_1, a_2, \dots, a_k \le 60\)) — значения удовольствия данных \(k\) игр.

Примечание

В первом примере любое подмножество размера \(3\) является комплектом игр. Таких подмножеств \(4\).

F. Марк и космический корабль

дп Перебор *3500

Марк любит быстро перемещаться. Поэтому он создал космический корабль, перемещающийся в \(4\)-мерном пространстве.

Он хочет использовать космический корабль для выполнения миссий как можно быстрее. В каждой миссии космический корабль стартует из точки \((0, 0, 0, 0)\) и должен оказаться в точке \((a, b, c, d)\). Для этого он дает команду компьютеру корабля выполнить серию перемещений, где каждое перемещение — это единичный шаг по одной из восьми сторон света: \((\pm 1, 0, 0, 0)\), \((0, \pm 1, 0, 0)\), \((0, 0, \pm 1, 0)\), \((0, 0, 0, \pm 1)\).

К сожалению, постройка космического корабля также шла очень быстро, поэтому в коде космического корабля есть ошибка. Первый ход будет выполнен один раз, второй — два, третий — три и так далее. В общем случае \(i\)-й ход будет выполнен \(i\) раз.

Для любых четырех целых чисел \(a, b, c, d\) пусть \(f(a, b, c, d)\) — минимальное количество ходов миссии, которая заканчивается в точке \((a, b, c, d)\). Вычислите сумму \(f(a, b, c, d)\) по всем точкам (с целочисленными координатами), таким, что \(-A\le a\le A\), \(-B\le b\le B\), \(-C\le c\le C\), \(-D\le d\le D\).

Входные данные

Единственная строка входных данных содержит четыре целых числа \(A, B, C, D\) (\(0\le A,B,C,D\le 1000\)).

Выходные данные

Выведите сумму \(f(a, b, c, d)\) по множеству точек, описанному в условии.

Примечание

В первом примере необходимо вычислить \(f(-1, 0, 0, 0)+f(0, 0, 0, 0) + f(1, 0, 0, 0) = 1 + 0 + 1 = 2\).

Во втором примере необходимо вычислить сумму \(f(a, b, c, d)\) по \(27\) различным точкам \((a, b, c, d)\). Опишем значение \(f(a, b, c, d)\) для некоторых из них:

  • Выполняется условие \(f(-1, 0, 0, -1)=3\), которое достигается следующей последовательностью перемещений (стрелка \(\xrightarrow{\pm i}\) обозначает, что перемещение выполняется по \(i\)-й координате): \(\)(0, 0, 0, 0) \xrightarrow{-1} (-1, 0, 0, 0) \xrightarrow{+4} (-1, 0, 0, 2) \xrightarrow{-4} (-1, 0, 0, -1).\(\)
  • Выполняется условие \(f(1, 1, 0, 1) = 5\), и оно достигается следующей последовательностью ходов: \(\)(0, 0, 0, 0) \xrightarrow{+1} (1, 0, 0, 0) \xrightarrow{-2} (1, -2, 0, 0) \xrightarrow{+2} (1, 1, 0, 0) \xrightarrow{-4} (1, 1, 0, -4) \xrightarrow{+4} (1, 1, 0, 1).\(\)

В третьем примере необходимо вычислить сумму \(f(a, b, c, d)\) по \(7\cdot5\cdot 9\cdot 3\) точкам. Одна из них — \((3, 2, 4, 1)\). Она имеет значение \(f(3, 2, 4, 1) = 4\) и может быть достигнута следующей последовательностью ходов: \(\)(0, 0, 0, 0) \xrightarrow{+4} (0, 0, 0, 1) \xrightarrow{+2} (0, 2, 0, 1) \xrightarrow{+1} (3, 2, 0, 1) \xrightarrow{+3} (3, 2, 4, 1).\(\)

B. Наибольший интервал делителей

жадные алгоритмы Комбинаторика математика Перебор теория чисел *900

Дано число \(n\). Найдите максимальный размер интервала \([l, r]\) из целых положительных чисел такого, что для каждого числа \(i\) из этого интервала (т.е. \(l \leq i \leq r\)) \(n\) кратно \(i\).

Если вам даны два целых числа \(l\le r\), то размер интервала \([l, r]\) равен \(r-l+1\) (т.е. совпадает с количеством целых чисел, принадлежащих интервалу).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^{18}\)).

Выходные данные

Для каждого набора входных данных вывести одно целое число: максимальный размер допустимого интервала.

Примечание

В первом наборе входных данных допустимым интервалом с максимальным размером является \([1, 1]\) (он допустим, так как \(n = 1\) кратно \(1\)) и его размер равен \(1\).

Во втором наборе входных данных допустимым интервалом с максимальным размером является \([4, 5]\) (он допустим, так как \(n = 40\) кратно \(4\) и \(5\)), а его размер равен \(2\).

В третьем наборе входных данных допустимым интервалом с максимальным размером является \([9, 11]\).

В четвертом наборе входных данных допустимым интервалом с максимальным размером является \([8, 13]\).

В седьмом наборе входных данных допустимым интервалом с максимальным размером является \([327869, 327871]\).

C. Стать максимумом

Бинарный поиск дп Перебор Структуры данных *1600

Вам дан массив целых чисел \(a\) длины \(n\).

Одна операция состоит из:

  • Выбора индекса \(i\) такого, что \(1 \le i \le n - 1\) и \(a_i \le a_{i + 1}\).
  • Увеличения \(a_i\) на \(1\).

Найдите максимально возможное значение \(\max(a_1, a_2, \ldots a_n)\), которое можно получить, выполнив эту операцию не более \(k\) раз.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 1000\), \(1 \le k \le 10^{8}\)) — длина массива \(a\) и максимальное количество операций, которых можно выполнить.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le 10^{8}\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможный максимум массива после выполнения не более \(k\) операций.

Примечание

В первом наборе входных данных одной возможной оптимальной последовательностью операций является: \([\color{red}{1}, 3, 3] \rightarrow [2, \color{red}{3}, 3] \rightarrow [\color{red}{2}, 4, 3] \rightarrow [\color{red}{3}, 4, 3] \rightarrow [4, 4, 3]\).

Во втором наборе вдодных данных одной возможной оптимальной последовательностью операций является: \([1, \color{red}{3}, 4, 5, 1] \rightarrow [1, \color{red}{4}, 4, 5, 1] \rightarrow [1, 5, \color{red}{4}, 5, 1] \rightarrow [1, 5, \color{red}{5}, 5, 1] \rightarrow [1, \color{red}{5}, 6, 5, 1] \rightarrow [1, \color{red}{6}, 6, 5, 1] \rightarrow [1, 7, 6, 5, 1]\).

B. Прогулка по Aллее

дп жадные алгоритмы математика Перебор теория чисел *1500

На Главной Аллее в ЛКШ расположены \(n\) лавочек, пронумерованных целыми числами от \(1\) до \(n\) слева направо. Также на Аллее есть \(m\) торговых палаток, \(i\)-я (\(1 \le i \le m\)) из которых расположена около \(s_i\)-й лавочки.

Петя сейчас находится в начале Аллеи перед \(1\)-й лавочкой и он хочет дойти до \(n\)-й лавочки. Расстояние между последовательными лавочками Петя проходит за \(1\) минуту. У него с собой есть рюкзак с бесконечным количеством вафель. Петя планирует есть вафли из рюкзака и покупать их в торговых палатках во время прогулки.

Петя ест вафли только находясь около лавочек, причём он съест вафлю, находясь около \(i\)-й (\(1 \le i \le n\)) лавочки тогда и только тогда, когда выполняется хотя бы одно из следующих условий:

  • Около \(i\)-й лавочки есть торговая палатка. Тогда Петя купит вафлю в торговой палатке и сразу съест её.
  • Петя ещё ни разу не ел вафлю. Тогда Петя возьмёт вафлю из рюкзака и сразу съест её.
  • После того, как Петя съел последнюю вафлю, прошло хотя бы \(d\) минут. Иными словами, Петя не ел вафли около каждой из лавочек \(i-1, i-2, \ldots, \max(i-d+1, 1)\). Тогда Петя возьмёт вафлю из рюкзака и сразу съест её.

Вы можете считать, что Петя не тратит время на то, чтобы съесть вафлю. Петя никогда не будет есть две или более вафли около одной лавочки.

Вы хотите минимизировать количество вафель, которые съест Петя в течении прогулки. Для этого вы попросите администрацию ЛКШ убрать ровно одну торговую палатку с Аллеи до того как Петя начнёт движение.

Определите минимальное возможное количество вафель, которые съест Петя в течении прогулки. Также найдите количество торговых палаток, таких что если убрать одну из них, Петя съест минимальное возможное число вафель.

Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны три целых числа \(n\), \(m\) и \(d\) (\(2 \le d \le n \le 10^9\), \(2 \le m \le \min(10^{5}, n)\)) — количество лавочек, количество торговых палаток и параметр \(d\) из условия, соответственно.

Во второй строке даны \(m\) целых чисел \(s_1, s_2, \ldots, s_m\) (\(1 \le s_i \le n\)) — номера лавочек, около которых расположены торговые палатки. Гарантируется, что \(s_{i} < s_{i+1}\) для всех \(1 \leq i \leq m - 1\).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите два целых числа — минимальное количество вафель, которые съест Петя, если будет убрана ровно одна торговая палатка, и количество торговых палаток, таких что если убрать одну из них, Петя съест минимальное возможное число вафель.

Примечание

В первом наборе данных \(n=6\), \(m=2\), \(d=2\) и \(s=[2, 5]\). При таком расположении торговых палаток Петя съест \(4\) вафли в течении прогулки (обратите внимание, что необходимо убрать ровно одну торговую палатку; этот случай разобран только для того, чтобы показать как Петя принимает решение о том, следует ли съесть вафлю у очередной лавочки):

  • Около \(1\)-й лавочки Петя съест вафлю из рюкзака, так как он ещё ни разу не ел вафлю.
  • Около \(2\)-й лавочки Петя съест вафлю из торговой палатки, так как около этой лавочки есть торговая палатка.
  • Около \(3\)-й лавочки Петя не будет есть вафлю, так как с момента как он съел вафлю прошла \(1<d\) минута.
  • Около \(4\)-й лавочки Петя съест вафлю, так как с момента как он съел вафлю прошло \(2\ge d\) минуты.
  • Около \(5\)-й лавочки Петя съест вафлю из торговой палатки, так как около этой лавочки есть торговая палатка.
  • Около \(6\)-й лавочки Петя не будет есть вафлю, так как с момента как он съел вафлю прошла \(1<d\) минута.

Если убрать \(1\)-ю торговую палатку, то Петя съест \(3\) вафли (около лавочек \(1\), \(3\) и \(5\)). Если же убрать \(2\)-ю торговую палатку, то Петя съест \(4\) вафли (около лавочек \(1\), \(2\), \(4\) и \(6\)).

Таким образом, минимальное количество вафель, которые съест Петя — \(3\); существует только одна палатка, убрав которую можно достигнуть такого количества вафель.

Во втором наборе входных данных

  • если убрать \(1\)-ю или \(2\)-ю палатку, то Петя съест \(5\) вафель около лавочек \(1\), \(3\), \(5\), \(7\), \(8\);
  • если убрать \(3\)-ю палатку, то Петя съест \(4\) вафли около лавочек \(1\), \(3\), \(5\), \(7\).

В третьем наборе входных данных Петя съест \(4\) вафли вне зависимости от вашего выбора.

Обратите внимание, что Петя не заинтересован в минимизации количества вафель, которые он съест, поэтому он будет есть вафли строго в соответствии с правилом, описанным в условии.

D. Деревья и отрезки

дп жадные алгоритмы Перебор Структуры данных *2200

Преподаватели ЛКШ решили посадить \(n\) деревьев в ряд, причём было решено сажать только дубы и ели. Для этого они составили план, который можно представить в виде двоичной строки \(s\) длины \(n\). Если \(s_i = 0\), то \(i\)-м деревом в ряду должен быть дуб, а если \(s_i = 1\), то \(i\)-м деревом в ряду должна быть ель.

День посадки деревьев уже завтра, а послезавтра в ЛКШ приедет проверяющий. Проверяющий очень любит природу, и он оценит красоту ряда деревьев следующим образом:

  • Он вычислит \(l_0\) как максимальное количество подряд идущих дубов в ряду (максимальная подстрока из нулей в плане \(s\)). Если в ряду нет дубов, то \(l_0 = 0\).
  • Он вычислит \(l_1\) как максимальное количество подряд идущих елей в ряду (максимальная подстрока из единиц в плане \(s\)). Если в ряду нет елей, то \(l_1 = 0\).
  • Красота ряда деревьев будет равна \(a \cdot l_0 + l_1\) для некоторого \(a\) — любимого числа проверяющего.

Преподаватели знают значение параметра \(a\), но не могут сказать его вам из соображений безопасности. Они готовы сказать вам лишь то, что \(a\) является целым числом от \(1\) до \(n\).

Поскольку деревья ещё не посажены, преподаватели решили изменить вид не более чем \(k\) деревьев на противоположный (то есть изменить \(s_i\) с \(0\) на \(1\) или с \(1\) на \(0\) в плане), чтобы максимизировать красоту ряда деревьев по мнению проверяющего.

Для каждого целого \(j\) от \(1\) до \(n\) найдите независимо ответ на следующий вопрос:

  • Какой максимальной красоты ряда деревьев могут добиться преподаватели, изменив вид не более чем \(k\) деревьев, если любимое число проверяющего \(a\) равно \(j\)?
Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны два целых числа \(n\) и \(k\) (\(1 \le n \le 3000\), \(0 \le k \le n\)) — количество деревьев в ряду и максимальное количество изменений.

Вторая строка содержит строку \(s\) длины \(n\), состоящую из нулей и единиц — описание плана.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел, \(j\)-е (\(1 \le j \le n\)) из которых — максимальная красота ряда деревьев после не более, чем \(k\) изменений, если для вычисления красоты используется \(a = j\).

Примечание

В первом наборе входных данных не разрешаются изменения, поэтому всегда выполняется \(l_0 = 0\) и \(l_1 = 3\). Таким образом, вне зависимости от значения \(a\), красота ряда деревьев будет равна \(3\).

Во втором наборе входных данных для \(a \in \{1, 2\}\) преподаватели могут, например, изменить план \(s\) на \(0111\) (изменив \(s_4\)), а для \(a \in \{3, 4\}\) — на \(0010\) (изменив \(s_2\)). В таком случае, красота аллеи для каждого \(a\) вычисляется следующим образом:

  • Для \(a = 1\): \(l_0 = 1\), \(l_1 = 3\). Красота аллеи равна \(1\cdot 1 + 3 = 4\).
  • Для \(a = 2\): \(l_0 = 1\), \(l_1 = 3\). Красота аллеи равна \(2\cdot 1 + 3 = 5\).
  • Для \(a = 3\): \(l_0 = 2\), \(l_1 = 1\). Красота аллеи равна \(3\cdot 2 + 1 = 7\).
  • Для \(a = 4\): \(l_0 = 2\), \(l_1 = 1\). Красота аллеи равна \(4\cdot 2 + 1 = 9\).

Можно показать, приведённые выше изменения являются оптимальными для всех \(a\) от \(1\) до \(4\).

E1. Откаты (простая версия)

Деревья Перебор поиск в глубину и подобное Структуры данных *2500

Это простая версия задачи. Единственное отличие между простой и сложной версиями в том, что в сложной версии вы должны отвечать на запросы в режиме онлайн. Вы можете делать взломы, только если обе версии задачи решены.

У вас есть массив \(a\), изначально пустой. Вам нужно обрабатывать запросы следующих типов:

  • + \(x\) — добавить число \(x\) в конец массива \(a\).
  • - \(k\) — удалить \(k\) последних чисел из массива \(a\).
  • ! — откатить последнее действующее изменение (т. е. сделать массив \(a\) таким, каким он был до изменения). В данной задаче изменениями считаются только запросы первых двух типов (+ и -).
  • ? — найти количество различных чисел в массиве \(a\).
Входные данные

В первой строке задано одно целое число \(q\) (\(1 \leq q \leq 10^6\)) — количество запросов.

В следующих \(q\) строках даны запросы в формате, описанном выше.

Гарантируется, что

  • в запросах первого типа \(1 \le x \le 10^6\);
  • в запросах второго типа \(k \ge 1\) и \(k\) не превосходит текущей длины массива \(a\);
  • в момент запроса третьего типа есть хотя бы один запрос первого или второго типа, который можно откатить.

Также гарантируется, что количество запросов четвёртого типа не превосходит \(10^5\).

Выходные данные

Для каждого запроса четвёртого типа выведите одно целое число: количество различных элементов в массиве \(a\) в момент запроса.

Примечание

В первом тесте из условия массив \(a\) изменяется следующим образом:

  1. После первого запроса \(a=[1]\).
  2. После второго запроса \(a=[1,2]\).
  3. После третьего запроса \(a=[1,2,2]\).
  4. В момент четвёртого запроса в массиве \(a\) встречаются \(2\) различных числа: \(1\) и \(2\).
  5. После пятого запроса \(a=[1,2]\) (откатили изменение + 2).
  6. После шестого запроса \(a=[1,2,3]\).
  7. После седьмого запроса \(a=[1]\).
  8. В момент восьмого запроса массиве \(a\) состоит только из одной \(1\).
  9. После девятого запроса \(a=[1,1]\).
  10. В момент десятого запроса массиве \(a\) состоит только из двух \(1\).

Во втором тесте из условия массив \(a\) изменяется следующим образом:

  1. После первого запроса \(a=[1]\).
  2. После второго запроса \(a=[1,1\,000\,000]\).
  3. В момент третьего запроса в массиве \(a\) встречаются \(2\) различных числа: \(1\) и \(1\,000\,000\).
  4. После четвёртого запроса \(a=[1]\) (откатили изменение + 1000000).
  5. После пятого запроса \(a=[]\) (откатили изменение + 1).
  6. В момент шестого запроса в массиве \(a\) нет чисел, поэтому ответ на этот запрос равен \(0\).

C. Ещё одна задача про перестановки

дп жадные алгоритмы математика Перебор *1200

Андрей только начинает придумывать задачи, и это ему тяжело даётся. Поэтому он придумал странную задачу про перестановки\(^{\dagger}\), и просит её решить. Получится ли у вас это сделать?

Назовем стоимостью перестановки \(p\) длины \(n\) значение выражения:

\((\sum_{i = 1}^{n} p_i \cdot i) - (\max_{j = 1}^{n} p_j \cdot j)\).

Найдите максимальную стоимость среди всех перестановок длины \(n\).

\(^{\dagger}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 30\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 250\)) — длину перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(500\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную стоимость среди всех перестановок длины \(n\).

Примечание

В первом наборе входных данных перестановкой с максимальной стоимостью является \([2, 1]\). Стоимость равна \(2 \cdot 1 + 1 \cdot 2 - \max (2 \cdot 1, 1 \cdot 2)= 2 + 2 - 2 = 2\).

Во втором наборе входных данных перестановкой с максимальной стоимостью является \([1, 2, 4, 3]\). Стоимость равна \(1 \cdot 1 + 2 \cdot 2 + 4 \cdot 3 + 3 \cdot 4 - 4 \cdot 3 = 17\).

E. Максимальная моногонность

дп математика Перебор *2500

Вам дан массив \(a\) длины \(n\) и массив \(b\) длины \(n\). Назовем стоимостью отрезка \([l, r]\), \(1 \le l \le r \le n\), значение \(|b_l - a_r| + |b_r - a_l|\).

Напомним, что два отрезка \([l_1, r_1]\), \(1 \le l_1 \le r_1 \le n\), и \([l_2, r_2]\), \(1 \le l_2 \le r_2 \le n\), являются непересекающимися, если выполнено одно из двух условий: \(r_1 < l_2\) или \(r_2 < l_1\).

Также длиной отрезка \([l, r]\), \(1 \le l \le r \le n\), мы называем значение \(r - l + 1\).

Найдите максимально возможную суммарную стоимость попарно непересекающихся отрезков \([l_j, r_j]\), \(1 \le l_j \le r_j \le n\), суммарная длина которых равна \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) \((1 \le t \le 1000)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 3000\)) — длину массива \(a\) и суммарную длину отрезков.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(-10^9 \le b_i \le 10^9\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3000\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимально возможную суммарную стоимость таких отрезков.

Примечание

В первом наборе входных данных стоимость любого отрезка равна \(0\), поэтому суммарная стоимость равна \(0\).

Во втором наборе входных данных можно взять отрезок \([1, 1]\) со стоимостью \(8\) и отрезок \([3, 3]\) со стоимостью \(2\), чтобы получить сумму \(10\). Можно показать, что это оптимальное решение.

В третьем наборе входных данных нас интересуют только отрезки длины \(1\), а стоимость любого такого отрезка равна \(0\).

В четвертом наборе входных данных можно показать, что оптимальная сумма равна \(16\). Например, можно взять отрезки \([3, 3]\) и \([4, 4]\).

B. Юбилейные монеты

Бинарный поиск жадные алгоритмы математика Перебор *1200

Монокарп собирается сделать покупку на ровно \(m\) бурлей.

У него есть два типа монет в следующем количестве:

  • монеты номиналом \(1\) бурль: \(a_1\) обычных монет и бесконечно много юбилейных монет;
  • монеты номиналом \(k\) бурлей: \(a_k\) обычных монет и бесконечно много юбилейных монет.

Монокарп планирует совершить покупку так, чтобы не получить сдачи — суммарный номинал предоставленных монет должен быть ровно \(m\). Он может использовать и обычные, и юбилейные монеты. Однако, он хочет потратить как можно меньше юбилейных монет.

Какое наименьшее суммарное количество юбилейных монет Монокарп может потратить на покупку?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 3 \cdot 10^4\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записаны четыре целых числа \(m, k, a_1\) и \(a_k\) (\(1 \le m \le 10^8\); \(2 \le k \le 10^8\); \(0 \le a_1, a_k \le 10^8\)) — стоимость покупки, номинал второго типа монет и количества обычных монет каждого из двух типов, соответственно.

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее суммарное количество юбилейных монет, которые Монокарп может потратить на покупку.

Примечание

В первом наборе входных данных нет обычных монет ни одного из типов. Монокарп может использовать \(2\) юбилейные монеты номиналом \(1\) бурль и \(3\) юбилейные монеты номиналом \(3\) (так как \(k=3\)) бурля, чтобы получить суммарно \(11\) бурлей за \(5\) юбилейных монет.

Во втором наборе у Монокарпа очень много обычных монет обоих типов. Он может использовать \(11\) монет номиналом \(1\) бурль, например. Обратите внимание, что Монокарп не обязан минимизировать суммарное количество использованных монет. Таким образом, он использует \(0\) юбилейных монет.

В третьем наборе Монокарп может использовать \(5\) обычных монет номиналом \(1\) бурль и \(1\) обычную монету номиналом \(3\) бурля. Так он получит \(8\) бурлей суммарно, когда ему нужно \(11\). Так что \(1\) юбилейной монеты номиналом \(3\) бурля хватит.

F. Волшебство спасёт мир

Бинарный поиск битмаски дп Перебор *1800

На границе миров открылся портал тёмных сил, и теперь всему миру грозит страшная угроза. Чтобы закрыть портал и спасти мир, нужно сперва победить \(n\) чудовищ, что последовательно вылезают из портала.

Справиться с этим может только волшебница Вика. Она владеет двумя магическими силами — магией воды и магией огня. За секунду Вика может сгенерировать \(w\) единиц водяной маны и \(f\) единиц огненной маны. Мана понадобится ей для создания заклинаний. Изначально у Вики \(0\) единиц водяной маны и \(0\) единиц огненной маны.

Каждое из \(n\) чудовищ, что вылезают из портала, имеет свою силу, выраженную натуральным числом. Чтобы победить \(i\)-е чудовище силы \(s_i\), нужно применить заклинание воды или заклинание огня не меньшей силы. Иначе говоря, Вика может потратить не менее единиц \(s_i\) водяной маны на заклинание воды, либо же не менее единиц \(s_i\) огненной маны на заклинание огня.

Вика умеет создавать и применять заклинания мгновенно. Вика может применять любое количество заклинаний каждую секунду, пока у неё хватает на это маны.

Волшебница хочет спасти мир как можно быстрее, подскажите, сколько времени ей на это понадобится.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке входных содержится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(w\), \(f\) (\(1 \le w, f \le 10^9\)) — количество водяной и огненной маны, которое может сгенерировать Вика за секунду.

Во второй строке набора содержится единственное целое число \(n\) (\(1 \le n \le 100\)) — количество чудовищ.

В третьей строке набора содержится \(n\) натуральных чисел \(s_1, s_2, s_3, \dots, s_n\) (\(1 \le s_i \le 10^4\)) — силы чудовищ.

Cумма значений \(n\) по всем наборам входных данных не превосходит \(100\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное время в секундах, за которое Вика сможет победить всех чудовищ.

Примечание

В первом наборе входных данных Вика может после первой секунды потратить \(2\) единицы огненной маны, чтобы убить первое чудовище. После этого у неё останется \(2\) единицы водяной маны и \(1\) единица огненной. После третьей секунды в её распоряжении будет \(6\) единиц водяной маны и \(7\) огненной маны. Этого хватит, чтобы сразу убить второе и третьей чудовище.

E. Спидран

графы дп жадные алгоритмы математика Перебор поиск в глубину и подобное сортировки *2100

Вы играете в компьютерную игру, в которой есть \(n\) заданий, которые вам нужно выполнить. Однако \(j\)-е задание можно выполнить только в начале \(h_j\)-го часа игрового дня. Каждый игровой день длится ровно \(k\) часов. Часы каждого игрового дня пронумерованы числами \(0, 1, \ldots, k - 1\). После конца первого дня начинается следующий, и так далее.

Между заданиями есть зависимости: для некоторых пар \((a_i, b_i)\) задание с номером \(b_i\) может быть выполнено только после выполнения задания с номером \(a_i\). Гарантируется, что циклических зависимостей нет, поскольку иначе игру пройти было бы невозможно и никто не стал бы в неё играть.

Вы очень хорошо умеете играть в эту игру, поэтому вы можете выполнить любое число заданий за пренебрежимо малое время (т. е. вы можете выполнить любое число заданий в начале одного и того же часа, даже если между ними есть зависимости). Вам нужно выполнить все задания как можно быстрее. Вы можете выполнять их в любом доступном порядке. Время прохождения игры равно разнице между временем завершения последнего задания и временем завершения первого задания в этом порядке.

Найдите наименьшее время, за которое можно пройти игру.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 100\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(1\le n\le 200\,000\), \(0\le m\le 200\,000\), \(1\le k\le 10^9\)) — количество заданий, количество зависимостей между ними, а также длительность игрового дня в часах.

Следующая строка содержит \(n\) целых чисел \(h_1, h_2, \ldots, h_n\) (\(0\le h_i < k\)).

Следующие \(m\) строк описывают зависимости. В \(i\)-й из них содержатся два целых числа \(a_i\) и \(b_i\) (\(1\le a_i < b_i\le n\)): это означает, что задание с номером \(b_i\) может быть выполнено только после выполнения задания \(a_i\). Гарантируется, что все зависимости попарно различны.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите одно число — наименьшее время, необходимое для прохождения игры.

Примечание

В первом наборе входных данных задания \(1\) и \(4\) нужно выполнить в начале \(12\)-го часа дня, но они не могут быть выполнены в течение одного часа, поскольку между ними нужно выполнить задания \(2\) и \(3\). Однако всё это можно сделать за \(24\) часа. Для этого можно начать в \(12\) часов первого игрового дня, выполнив первое задание. В \(16\) часов можно выполнить задание \(2\). В \(18\) часов можно выполнить задание \(3\). Наконец, в \(12\) часов следующего дня можно выполнить задание \(4\). С момента выполнения первого задания до момента выполнения последнего прошло \(24\) часа.

В третьем наборе входных данных можно выполнить первое задание, а затем сразу же выполнить второе. Можно начать в \(5\) часов первого дня, выполнив первое задание. Сразу после этого становится доступным второе задание, его можно выполнять немедленно. Суммарное прошедшее время равно \(0\).

В четвёртом наборе входных данных можно начать с третьего задания. Можно начать в \(555\) часов первого дня и закончить в \(35\) часов второго дня. Суммарное прошедшее время равно \(1035-555=480\).

D. Матричный каскад

дп жадные алгоритмы Конструктив математика Перебор Структуры данных *1700

Дана матрица размера \(n \times n\), состоящая из 0 и 1. Строки матрицы пронумерованы от \(1\) до \(n\) сверху вниз, столбцы пронумерованы от \(1\) до \(n\) слева направо. Клетку на пересечении \(x\)-й строки и \(y\)-го столбца обозначим как \((x, y)\).

AquaMoon хочет превратить все элементы матрицы в 0. За один шаг она может выполнить следующую операцию:

  • выбрать произвольную клетку, пусть это \((i, j)\), затем инвертировать элемент в клетке \((i, j)\), а также инвертировать все элементы в клетках \((x, y)\), для которых \(x > i\) и \(x - i \ge \left|y - j\right|\). Инвертирование — это замена символа на противоположный: 0 на 1, 1 на 0.

Помогите AquaMoon определить наименьшее число шагов, необходимых для того, чтобы превратить все элементы матрицы в 0. Можно показать, что ответ всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \le n \le 3000\)).

В \(i\)-й из следующих \(n\) строк содержится бинарная строка, состоящая только из символов 0 и 1, имеющая длину \(n\).

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных не превосходит \(9\,000\,000\).

Выходные данные

Для каждого набора входных данных выведите наименьшее необходимое число шагов.

Примечание

В первом наборе входных данных можно действовать так:

  1. выполнить операцию для клетки \((1, 3)\).

Очевидно, изначально не все элементы матрицы равны 0, так что необходима как минимум одна операция. Значит, \(1\) и есть ответ.

В втором наборе входных данных можно действовать так:

  1. выполнить операцию для клетки \((3, 3)\);
  2. выполнить операцию для клетки \((1, 1)\).

Можно показать, что невозможно превратить все элементы в 0 за \(0\) шагов или за \(1\) шаг, так что ответ равен \(2\).

L. Lihmuf Balling

Бинарный поиск математика Перебор *2400

After working at a factory (Lihmuf Sorting), Lihmuf wants to play a game with his good friend, Pak Chanek. There are \(N\) boxes numbered from \(1\) to \(N\). The \(i\)-th box contains \(i\) balls. Pak Chanek and Lihmuf will play a game using those boxes.

There will be \(N\) turns numbered from \(1\) to \(N\). On each turn, Pak Chanek chooses one box and takes all balls from that box, then Lihmuf does the same thing for one box he chooses (it is possible that the two chosen boxes are the same).

Given an integer \(M\). Before the game begins, Lihmuf must choose an integer \(K\) satisfying \(1 \leq K \leq M\). It is known that on the \(j\)-th turn, Pak Chanek will choose the \(j\)-th box, while Lihmuf will choose the \(y\)-th box, with \(y=((j \times K - 1) \bmod N) + 1\). Help Lihmuf choose the correct value of \(K\) so that he will get as many balls as possible! If there are more than one possible values of \(K\) that result in the maximum total balls, find the minimum such value of \(K\).

Keep in mind that each box can be chosen more than once, but after a box is chosen for the first time, the box becomes empty.

Input

The only line contains two integers \(N\) and \(M\) (\(1 \leq N \leq 10^9\); \(1 \leq M \leq 2000\)) — the number of boxes and the maximum limit for the value of \(K\).

Output

An integer representing the value of \(K\) that will make Lihmuf get as many balls as possible. If there are more than one possible value of \(K\) that result in the maximum total balls, find the minimum such value of \(K\).

Note

In the first example, if Lihmuf chooses \(K=1\), the game will go as follows:

  1. Pak Chanek chooses the \(1\)-st box and gets \(1\) ball, then Lihmuf chooses the \(1\)-st box and gets \(0\) balls.
  2. Pak Chanek chooses the \(2\)-nd box and gets \(2\) balls, then Lihmuf chooses the \(2\)-nd box and gets \(0\) balls.
  3. Pak Chanek chooses the \(3\)-rd box and gets \(3\) balls, then Lihmuf chooses the \(3\)-rd box and gets \(0\) balls.

In total, Lihmuf gets \(0+0+0=0\) balls.

The maximum total balls that can be earned by Lihmuf is \(0\) because he can only choose \(K=1\). Therefore, \(K=1\) is the minimum possible value of \(K\) that results in the maximum total balls.

In the second example, if Lihmuf chooses \(K=3\), the game will go as follows:

  1. Pak Chanek chooses the \(1\)-st box and gets \(1\) ball, then Lihmuf chooses the \(3\)-rd box and gets \(3\) balls.
  2. Pak Chanek chooses the \(2\)-nd box and gets \(2\) balls, then Lihmuf chooses the \(1\)-st box and gets \(0\) balls.
  3. Pak Chanek chooses the \(3\)-rd box and gets \(0\) balls, then Lihmuf chooses the \(4\)-th box and gets \(4\) balls.
  4. Pak Chanek chooses the \(4\)-th box and gets \(0\) balls, then Lihmuf chooses the \(2\)-nd box and gets \(0\) balls.
  5. Pak Chanek chooses the \(5\)-th box and gets \(5\) balls, then Lihmuf chooses the \(5\)-th box and gets \(0\) balls.

In total, Lihmuf gets \(3+0+4+0+0=7\) balls.

It can be obtained that \(7\) is the maximum total balls that can be earned by Lihmuf. The possible values of \(K\) that result in \(7\) total balls are \(3\) and \(4\). Therefore, \(K=3\) is the minimum possible value of \(K\) that results in the maximum total balls.

M. Mighty Rock Tower

дп Комбинаторика математика Перебор Теория вероятностей *2400

Pak Chanek comes up with an idea in the midst of boredom to play a game. The game is a rock tower game. There is a big rock that is used as a base. There are also \(N\) small identical rocks that Pak Chanek will use to build a rock tower with a height of \(N\) above the base rock.

Initially, there are no small rocks that are located above the base rock. In other words, the height of the tower above the base rock is initially \(0\). In one move, Pak Chanek can place one small rock onto the top of the tower which makes the height of the tower above the base rock increase by \(1\). Each time Pak Chanek place one small rock, the following will happen after the small rock is placed:

  • Let's say \(x\) is the height of the tower above the base rock right after the small rock is placed.
  • There is a probability of \(P_x\) percent that the topmost rock falls.
  • If \(x \geq 2\) and the topmost rock falls, then there is another probability of \(P_x\) percent that the \(2\)-nd topmost rock also falls.
  • If \(x \geq 3\) and the \(2\)-nd topmost rock falls, then there is another probability of \(P_x\) percent that the \(3\)-rd topmost rock also falls.
  • If \(x \geq 4\) and the \(3\)-rd topmost rock falls, then there is another probability of \(P_x\) percent that the \(4\)-th topmost rock also falls.
  • And so on.

If the tower successfully reaches a height of \(N\) without any rocks falling after that, then the game is ended.

If given an integer array \([P_1, P_2, \ldots, P_N]\), what is the expected value of the number of moves that Pak Chanek needs to do to end the game? It can be proven that the expected value can be represented as an simple fraction \(\frac{P}{Q}\) where \(Q\) is coprime to \(998\,244\,353\). Output the value of \(P \times Q^{-1}\) modulo \(998\,244\,353\).

Input

The first line contains a single integer \(N\) (\(1 \leq N \leq 2\cdot10^5\)) — the required height of the rock tower.

The second line contains \(N\) integers \(P_1, P_2, P_3, \ldots, P_N\) (\(0 \leq P_i \leq 99\)).

Output

An integer representing the expected value of the number of moves that Pak Chanek needs to do to end the game, modulo \(998\,244\,353\).

Note

In the first example, the expected value of the number of moves that Pak Chanek needs to do to end the game is \(\frac{19}{2}\).

D. Циклические операции

графы жадные алгоритмы Конструктив Перебор поиск в глубину и подобное реализация *1800

У Егора был массив \(a\) длины \(n\), изначально состоящий из нулей. Однако он захотел сделать из него другой массив \(b\) длины \(n\).

Поскольку Егор не ищет легких путей, разрешено использовать только такую операцию (возможно ноль или несколько раз):

  • выбрать массив \(l\) длины \(k\) (\(1 \leq l_i \leq n\), все \(l_i\) различны) и поменять каждый элемент \(a_{l_i}\) на \(l_{(i\%k)+1}\) (\(1 \leq i \leq k\)).

Ему стало интересно, а можно ли вообще получить массив \(b\) с помощью таких операций. Поскольку Егор еще только начинающий программист, он попросил Вас помочь ему решить эту задачу.

Операция \(\%\) означает взятие по модулю, то есть \(a\%b\) равно остатку от деления числа \(a\) на число \(b\).

Входные данные

В первой строке входных данных дано целое число \(t\) (\(1 \leq t \leq 10^5\)) - количество наборов входных данных.

Каждый набор состоит из двух строк. В первой строке даны целые числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 10^5\)).

Во второй строке вводится массив \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если существует способ получить массив \(b\), используя только заданную операцию. Иначе выведите «NO» (без кавычек). Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Рассмотрим первый пример:

  • Применим операцию с \(l\) = \([1,2,3]\). Теперь \(a\) = \([2,3,1,0,0]\).
  • Применим операцию с \(l\) = \([3,5,4]\). Теперь \(a\) = \([2,3,5,3,4]\) = \(b\).
Мы видим, что получить массив \(b\) можно. Следовательно ответ YES.

Во втором примере можно доказать, что массив \(b\) получить нельзя, следовательно ответ NO.

F. Максимально не похожее дерево

жадные алгоритмы Конструктив Перебор поиск в глубину и подобное хэши *2700

Дано дерево с \(n\) вершинами с корнем в вершине \(1\), обозначим его за \(G\). Также обозначим за \(P(G)\) мультимножество поддеревьев всех вершин дерева \(G\). Вам надо найти дерево \(G'\) размера \(n\) с корнем в вершине \(1\) такое, что количество поддеревьев в \(P(G')\) к которым есть изоморфные в \(P(G)\) было минимально.

Поддерево вершины \(v\) - это граф, который содержит все вершины, для которых вершина \(v\) лежит на пути от корня дерева до нее самой, а так же все ребра между этими вершинами.

Два корневых дерева считаются изоморфными если можно так перенумеровать вершины одного из них, чтобы оно стало равно второму, при этом корень первого дерева должен получить номер корня второго дерева.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^6\)) - количество вершин в дереве \(G\). Каждая из следующих \(n-1\) строк содержит два целых числа \(a\) и \(b\) \((1 \leq a,b \leq n)\), означающие, что между вершинами \(a\) и \(b\) в дереве есть ребро.

Выходные данные

Выведите \(n-1\) строку, каждая строка содержит два числа \(a\), \(b\) \((1 \leq a,b \leq n)\) - рёбра дерева \(G'\). Если существует несколько оптимальных ответов, выведите любой.

E. Очередная задача на MEX

битмаски дп кратчайшие пути Перебор *2300

Вам дан массив целых чисел \(a\) размера \(n\). Вы можете выбрать некое множество непересекающихся подотрезков данного массива (заметим, что некоторые элементы могут не попасть ни в один из отрезков, это не запрещено), для каждого выбранного подотрезка посчитать MEX его элементов, а затем посчитать побитовое исключающее ИЛИ (XOR) всех полученных значений MEX. Какое наибольшее значение XOR может получиться?

MEX (minimum excluded, минимальное отсутствующее) массива — это наименьшее целое неотрицательное целое число, которое не принадлежит массиву. Например:

  • MEX массива \([2,2,1]\) равен \(0\), потому что \(0\) не принадлежит массиву.
  • MEX массива \([3,1,0,1]\) равен \(2\), потому что \(0\) и \(1\) принадлежат массиву, а \(2\) — нет.
  • MEX массива \([0,3,1,2]\) равен \(4\), потому что \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, а \(4\) — нет.
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 5000\)) — размер массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq n\)) — массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

На каждый набор входных данных выведите одно число — наибольший возможный XOR значений MEX элементов выбранных отрезков.

Примечание

В первом наборе входных данных максимальный XOR равен \(2\), если взять весь массив, \(\operatorname{MEX}([1, 0]) = 2\).

Во втором наборе входных данных максимальный XOR равен \(6\), если выделить отрезки \([1, 2, 0]\) и \([7, 1, 2, 0, 2, 4, 3]\):

  • \(\operatorname{MEX}([1, 2, 0]) = 3\),
  • \(\operatorname{MEX}([7, 1, 2, 0, 2, 4, 3]) = 5\),
таким образом, побитовое исключающее ИЛИ равно \(5 \oplus 3=6\).

В третьем наборе входных данных максимальный XOR равен \(7\), если выделить отрезки \([1, 0]\) и \([7, 1, 2, 0, 2, 4, 3]\):

  • \(\operatorname{MEX}([1, 0]) = 2\),
  • \(\operatorname{MEX}([7, 1, 2, 0, 2, 4, 3]) = 5\),
таким образом, побитовое исключающее ИЛИ равно \(5 \oplus 2 = 7\).

A. Два сосуда

жадные алгоритмы математика Перебор *800

У вас есть два сосуда с водой. В первом сосуде сейчас находится \(a\) грамм воды, во втором сосуде сейчас находится \(b\) грамм воды. Оба сосуда очень большие, в каждый из них может поместиться любое количество воды.

Также у вас есть пустая чашка, в которую может поместиться не более \(c\) грамм воды.

За один ход вы можете зачерпнуть из любого сосуда не более \(c\) грамм воды и перелить её в другой сосуд. Заметим, что масса перелитой за один ход воды — не обязательно целое число.

Какое минимальное количество ходов потребуется, чтобы массы воды в сосудах стали равны? Обратите внимание, что производить какие-либо действия помимо описанных ходов нельзя.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора содержит три целых числа \(a\), \(b\) и \(c\) (\(1 \le a, b, c \le 100\)) — масса воды в сосудах и вместимость чашки, соответственно.

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное количество ходов, необходимое для того, чтобы в сосудах стало одинаковое количество воды. Можно показать, что это всегда возможно.

Примечание

В первом наборе входных данных примера достаточно одного хода: если перелить \(2\) грамма воды из второго сосуда в первый, то в каждом из них окажется по \(5\) грамм воды.

Во втором наборе входных данных примера достаточно совершить три хода:

  • перельём \(3\) грамма воды из первого сосуда во второй, после этого хода в первом сосуде будет \(17 - 3 = 14\) грамм воды, а во втором \(4 + 3 = 7\) грамм;
  • перельём \(2\) грамма воды из первого сосуда во второй, после этого хода в первом сосуде будет \(14 - 2 = 12\) грамм воды, а во втором \(7 + 2 = 9\) грамм;
  • наконец перельём \(1.5\) грамма воды из первого сосуда во второй, после этого хода в первом сосуде будет \(12 - 1.5 = 10.5\) грамм воды, а во втором \(9 + 1.5 = 10.5\) грамм.

Заметьте, что это не единственный способ уравнять сосуды за \(3\) хода, но не существует способа сделать это за \(2\) хода.

В третьем наборе входных данных примера сосуды изначально содержат одинаковое количество воды, следовательно, совершать ходы не нужно. Ответ — \(0\).

G. Замените на произведение

жадные алгоритмы математика Перебор *2000

Дан массив \(a\) из \(n\) целых положительных чисел. Вам нужно ровно один раз сделать следующую операцию:

  • Выбрать \(2\) целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) и заменить подотрезок \(a[l \ldots r]\) на единственный элемент: произведение элементов этого отрезка \((a_l \cdot \ldots \cdot a_r)\).

Например, если к массиву \([5, 4, 3, 2, 1]\) применить операцию с параметрами \(l = 2, r = 4\), массив превратится в \([5, 24, 1]\).

Ваша задача — максимизировать сумму массива после применения данной операции. Найдите оптимальный отрезок для применения этой операции.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(2\) числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — границы заменяемого на произведение отрезка.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных, после применения операции с параметрами \(l = 2, r = 4\), массив из \([1, 3, 1, 3]\) превращается в \([1, 9]\), с суммой \(10\). Несложно видеть, что при замене любого другого отрезка на произведение, сумма будет меньше \(10\).

Во втором наборе входных данных, после применения операции с параметрами \(l = 3, r = 4\), массив из \([1, 1, 2, 3]\) превращается в \([1, 1, 6]\), с суммой \(8\). Несложно видеть, что при замене любого другого отрезка на произведение, сумма будет меньше \(8\).

В третьем наборе входных данных, оптимально будет выбрать любую операцию с \(l = r\), тогда сумма массива останется равна \(5\), а при применении любой другой операции сумма массива уменьшится.

A. Короткая сортировка

Перебор реализация *800

Есть три карты с буквами \(\texttt{a}\), \(\texttt{b}\), \(\texttt{c}\), расположенные в ряд в некотором порядке. Вы можете выполнить следующую операцию не более одного раза:

  • Выберите две карты и поменяйте их местами.
Возможно ли, чтобы ряд стал \(\texttt{abc}\) после выполнения операции? Выведите «YES», если это возможно, и «NO» в противном случае.
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 6\)) — количество наборов входных данных.

Единственная строка каждого набора содержит одну строку, состоящую из трех символов \(\texttt{a}\), \(\texttt{b}\) и \(\texttt{c}\) ровно по одному, представляющих карты.

Выходные данные

Для каждого набора входных данных выведите «YES», если вы можете сделать ряд \(\texttt{abc}\) с помощью не более одной операции, или «NO» в противном случае.

Вы можете вывести ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных примера нам не нужно выполнять никаких операций, так как ряд уже \(\texttt{abc}\).

Во втором наборе входных данных примера мы можем поменять местами \(\texttt{c}\) и \(\texttt{b}\): \(\texttt{acb} \to \texttt{abc}\).

В третьем наборе входных данных примера мы можем поменять местами \(\texttt{b}\) и \(\texttt{a}\): \(\texttt{bac} \to \texttt{abc}\).

В четвертом наборе входных данных примера невозможно получить \(\texttt{abc}\) с помощью не более одной операции.

B. Хороший ребенок

жадные алгоритмы математика Перебор *800

Славик готовит подарок для дня рождения друга. У него есть массив \(a\) из \(n\) цифр, и подарком будет произведение всех этих цифр. Поскольку Славик - хороший ребенок, он хочет сделать наибольшее возможное произведение, для этого он может добавить \(1\) к ровно одной из своих цифр.

Какое максимальное произведение может получить Славик?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 9\)) — количество цифр.

Вторая строка каждого набора содержит \(n\) целых чисел, разделенных пробелом, \(a_i\) (\(0 \leq a_i \leq 9\)) — цифры в массиве.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное произведение, которое может получить Славик, добавив \(1\) к ровно одной из своих цифр.

A. Медуза и игра

жадные алгоритмы игры Перебор реализация *1200

У Медузы есть \(n\) зеленых яблок со значениями \(a_1, a_2, \dots, a_n\), а у Гедузы есть \(m\) зеленых яблок со значениями \(b_1,b_2,\ldots,b_m\).

Они будут играть в игру, состоящую из \(k\) раундов. Для \(i=1,2,\ldots,k\) в этом порядке они будут выполнять следующие действия:

  • Если \(i\) нечетное, то Медуза может поменять одно свое яблоко на одно яблоко Гедузы или ничего не делать.
  • Если \(i\) четное, то Гедуза может поменять одно из своих яблок на одно из яблок Медузы или ничего не делать.

Оба игрока хотят максимизировать сумму стоимостей своих яблок.

Поскольку вы — один из самых умных людей в мире, Медуза хочет, чтобы вы сообщили ей окончательную сумму стоимости ее яблок после всех \(k\) раундов игры. Предположим, что и Медуза, и Гедуза играют оптимально, стремясь максимизировать сумму стоимостей своих яблок.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указывается количество наборов входных данных \(t\) (\(1 \leq t \leq 2000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа, \(n\), \(m\) и \(k\) (\(1 \leq n, m \leq 50\), \(1 \leq k \leq 10^9\)) — количество зеленых яблок у Медузы, количество зеленых яблок у Гедузы и количество раундов игры соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)) — значения зеленых яблок Медузы.

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \leq b_i \leq 10^9\)) — значения зеленых яблок Гедузы.

Заметим, что суммы \(n\) и \(m\) по всем наборам входных данных не ограничены.

Выходные данные

Для каждого набора входных данных выведите одно целое число — конечную сумму значений яблок Медузы.

Примечание

В первом наборе входных данных Медуза поменяет местами яблоки стоимостью \(1\) и \(4\).

Во втором наборе входных данных оба игрока поменяют местами два яблока \(10,000\) раз.

В четвертом наборе входных данных Медуза ничего не будет делать.

B. Медуза и математика

битмаски графы дп кратчайшие пути Перебор поиск в глубину и подобное *2400

Медузе даны целые неотрицательные числа \(a\), \(b\), \(c\), \(d\) и \(m\). Первоначально \((x,y)=(a,b)\). Медуза хочет выполнить несколько операций так, чтобы получилось \((x,y)=(c,d)\).

Одна операция заключается в выполенении одного из следующих действий:

  • \(x := x\,\&\,y\),
  • \(x := x\,|\,y\),
  • \(y := x \oplus y\),
  • \(y := y \oplus m\).

Здесь \(\&\) обозначает побитовую операцию И, \(|\) обозначает побитовую операцию ИЛИ, \(\oplus\) обозначает побитовое исключающее ИЛИ.

Медуза хочет узнать минимальное количество операций, после которого можно получить \((x,y)=(c,d)\).

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указывается количество наборов входных данных \(t\) (\(1 \leq t \leq 10^5\)). Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит пять целых чисел \(a\), \(b\), \(c\), \(d\) и \(m\) (\(0 \leq a, b, c, d, m < 2^{30}\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций. Если требуемые значения не достижимы, то вместо этого выведите \(-1\).

Примечание

В первом наборе входных данных мы можем выполнить операцию \(y = x \oplus y\).

Во втором наборе входных данных получить \((x,y)=(1,2)\) с помощью какой-либо последовательности операций невозможно.

В третьем наборе входных данных можно выполнить операцию \(x = x\,\&\,y\), а после \(y = y \oplus m\).

A. Медуза и Undertale

жадные алгоритмы Перебор *900

Медуза установила бомбу в Сноудине!

Бомба оснащена таймером, который первоначально установлен на \(b\). Каждую секунду таймер будет уменьшаться на \(1\). Когда таймер достигнет отметки \(0\), бомба взорвется! Чтобы дать жителям Сноудина достаточно времени для эвакуации, необходимо как можно дольше задержать взрыв бомбы.

У вас есть \(n\) инструментов. Каждый инструмент может быть использован не более одного раза. Если Вы используете \(i\)-й инструмент, то таймер увеличится на \(x_i\). Однако, если после изменения значение таймера становится больше \(a\), то из-за ошибки таймер будет установлен на \(a\).

Более конкретно, каждую секунду будут происходить следующие события в следующем порядке:

  1. Вы выберете некоторые (возможно, ни одного) из своих инструментов, которые не использовались ранее. Если вы выбрали \(i\)-й инструмент, а таймер бомбы в данный момент установлен на \(c\), то таймер будет изменен на \(\min(c + x_i, a)\).
  2. Таймер уменьшается на \(1\).
  3. Если таймер достигнет \(0\), бомба взорвется.

Теперь Медуза хочет узнать максимальное время в секундах до взрыва бомбы при оптимальном использовании инструментов.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указывается количество наборов входных данных \(t\) (\(1 \leq t \leq 2000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(a\), \(b\) и \(n\) (\(1 \leq b \leq a \leq 10^9\), \(1 \leq n \leq 100\)) — максимальное значение таймера бомбы, начальное значение таймера бомбы и количество инструментов.

Вторая строка каждого набора содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \leq x_i \leq 10^9\)) — число, на которое может увеличиться таймер при использовании \(i\)-го инструмента.

Следует отметить, что сумма \(n\) по всем наборам входных данных не ограничена.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное время в секундах до взрыва бомбы.

Примечание

Пусть \(c\) обозначает значение таймера бомбы. В первом наборе входных данных:

  • Секунда \(1\): выбираем инструменты \(1\) и \(2\) в эту секунду, получаем \(c=5\); таймер уменьшается на \(1\), получаем \(c=4\).
  • Секунда \(2\): таймер уменьшается на \(1\), получаем \(c=3\).
  • Секунда \(3\): таймер уменьшается на \(1\), получаем \(c=2\).
  • Секунда \(4\): таймер уменьшается на \(1\), получаем \(c=1\).
  • Секунда \(5\): выбераем инструмент \(3\), получаем \(c=5\); таймер уменьшается на \(1\), получаем \(c=4\).
  • Секунда \(6\): таймер уменьшается на \(1\), получаем \(c=3\).
  • Секунда \(7\): таймер уменьшается на \(1\), получаем \(c=2\).
  • Секунда \(8\): таймер уменьшается на \(1\), получаем \(c=1\).
  • Секунда \(9\): таймер уменьшается на \(1\), получаем \(c=0\). Бомба взрывается.

Можно показать, что не существует способа использовать инструменты так, чтобы бомба взорвалась более чем через \(9\) секунд.

G. Clubstep

Бинарный поиск Деревья жадные алгоритмы Перебор Структуры данных *3500

Существует чрезвычайно сложная видеоигра, которая является одной из любимых видеоигр Чанеки. Один из самых трудных уровней в игре называется Clubstep. Clubstep состоит из \(n\) частей, пронумерованных от \(1\) до \(n\). Чанека хорошо натренировалась в прохождении уровня, поэтому на данный момент ее уровень знакомства с каждой частью \(i\) составляет \(a_i\).

После этого Чанека может сделать несколько (возможно, ноль) попыток пройти Clubstep. В каждой попытке она погибает на одной из \(n\) частей. Если попытка заканчивается на части \(p\), то это означает, что она успешно проходит только через каждую часть \(k\) для всех \(1 \leq k \leq p-1\) и не достигает ни одной части \(k\) для всех \(p+1 \leq k \leq n\). Попытка, закончившаяся на части \(p\), занимает \(p\) секунд.

Известно, что Чанека улучшает ту часть, на которой она погибает, гораздо больше, чем все остальные. Известно также, что во время попытки Чанека не успевает потренироваться на тех частях, до которых она не дошла. Таким образом, эффект от попытки, которая заканчивается на части \(p\), будет следующим:

  • Значение знакомства Чанеки с частью \(p\) увеличивается на \(2\).
  • Значение знакомства Чанеки с каждой частью \(k\) для всех \(1 \leq k \leq p-1\) увеличивается на \(1\).
Имеется \(q\) вопросов. В \(j\)-м вопросе Вам даются три целых числа \(l_j\), \(r_j\) и \(x_j\). Затем требуется найти минимальное время (в секундах), которое потребуется Чанеке для того, чтобы значение знакомства с каждой частью \(p\) (\(l_j \leq p \leq r_j\)) стало не меньше \(x_j\).

Заметим, что каждый запрос является независимым, поэтому попытка, которую предпринимает Чанека в одном запросе, не влияет на значения знакомства в других запросах.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 3\cdot10^5\)) — количество частей в Clubstep.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,a_3,\ldots,a_n\) (\(1\leq a_i\leq10^9\)) — значение знакомства Чанеки с каждой частью.

Третья строка содержит одно целое число \(q\) (\(1\leq q\leq3\cdot10^5\)) — количество запросов.

В \(j\)-й из следующих \(q\) строк содержатся три целых числа \(l_j\), \(r_j\) и \(x_j\) (\(1\leq l_j\leq r_j\leq n\); \(1\leq x_j\leq10^9\)) — описание \(j\)-го запроса.

Выходные данные

Выведите \(q\) целых чисел в отдельных строках. Число в \(j\)-й строке равняется минимальнму времени (в секундах), за которое Чанека может сделать так, чтобы значение знакомства для каждой части \(p\) (\(l_j \leq p \leq r_j\)) было не менее \(x_j\).

Примечание

Для ответа на \(1\)-й вопрос можно поступить следующим образом:

  1. Сделать \(1\) попытку, которая заканчивается на части \(1\). Это занимает \(1\) секунду. Значения знакомства становятся \([3, 3, 2, 1, 2]\).
  2. Выполнить \(1\) попытку, которая заканчивается на части \(4\). Это занимает \(4\) секунды. Значения знакомства становятся \([4, 4, 3, 3, 2]\).
  3. Выполнить \(2\) попытки, которые заканчиваются на части \(5\). Это занимает \(10\) секунд. Значения знакомства становятся \([6, 6, 5, 5, 6]\).

Общее время (в секундах) составляет \(1+4+10=15\).

Для ответа на \(2\)-й вопрос можно поступить следующим образом:

  1. Сделать попытку \(1\), которая заканчивается на части \(3\). Это занимает \(3\) секунды. Значения знакомства становятся \([2, 4, 4, 1, 2]\).
  2. Выполнить \(2\) попытки, которые заканчиваются на части \(4\). Это занимает \(8\) секунд. Значения знакомства становятся \([4, 6, 6, 5, 2]\).

Общее время (в секундах) составляет \(3+8=11\).

F. Василий любит теорию чисел

математика Перебор теория чисел *1900

Василий - умный студент, и его преподаватель дискретной математики Соня хорошо преподала ему теорию чисел.

Он дал Огнену положительное целое число \(n\).

Обозначим \(d(n)\) как количество положительных делителей числа \(n\), а \(gcd(a, b)\) как наибольшее целое число \(g\), такое что \(a\) делится на \(g\) и \(b\) делится на \(g\).

После этого он дал Огнену \(q\) запросов, и есть \(2\) типа запросов.

  • \(1\), \(x\) — сделать \(n\) равным \(n \cdot x\), а затем ответить на следующий вопрос: существует ли положительное целое число \(a\), такое что \(gcd(a, n) = 1\), и \(d(n \cdot a) = n\)?
  • \(2\) — сбросить \(n\) до его исходного значения (до применения запросов).

Обратите внимание, что \(n\) не возвращается к своему исходному значению после запроса типа 1.

Поскольку Огнен боится теории чисел, Василий обещал ему, что после каждого запроса \(d(n) \le 10^9\), однако, даже с таким ограничением, ему все равно нужна ваша помощь с этой задачей.

Входные данные

Первая строка содержит положительное целое число \(t\), (\(1 \le t \le 100\))  — количество наборов входных данных.

Первая строка каждого набора содержит \(2\) целых числа, \(n\) и \(q\) (\(1 \le n \le 10^{6}\), \(1\le q \le 1000\)) — число \(n\) и количество запросов.

Следующие \(q\) строк содержат целое число \(k\) (\(1 \le k \le 2\)), если \(k=1\), то в этой строке есть еще одно целое число \(x\) (\(1 \le x \le 10^6\))  — описание запросов.

Гарантируется, что для данного ввода \(d(n)\) в любой момент не превышает \(10^9\).

Гарантируется, что сумма \(q\) по всем наборам входных данных не превышает \(10^3\).

Выходные данные

Для каждого запроса типа 1, вы должны вывести «YES», если существует такое положительное \(a\), что \(gcd(a, n) = 1\) и \(d(n \cdot a)=n\), и «NO» в противном случае.

Вы можете вывести ответ в любом регистре (например, строки «yEs», «yes», «Yes», и «YES» будут распознаны как положительный ответ).

Примечание

В первом наборе примера, изначально \(n=1\).

После первого запроса: \(n=1\), \(d(n)=1\), поэтому, взяв \(a = 1\), \(d(n \cdot a) = n\), и ответ на этот запрос «YES».

После второго запроса: \(n=2\), \(d(n)=2\), мы можем снова взять \(a = 1\), \(d(n \cdot a) = n\), и ответ на этот запрос «YES».

После третьего запроса \(n=1\), и это запрос типа \(2\), поэтому мы не отвечаем на него.

После четвертого запроса: \(n=8\), и взяв \(a=3\), \(d(n \cdot a) = d(24) = 8 = n\), поэтому ответ «YES».

После пятого запроса: \(n=72\), теперь мы можем взять \(a=637\), чтобы получить \(n \cdot a = 45864\), и \(d(n \cdot a) = 72 = n\), поэтому ответ «YES».

Во втором наборе примера, изначально \(n=20\).

После первого запроса: \(n=60\), и ответ «YES».

После второго запроса: \(n=20\), это запрос типа \(2\), поэтому мы не отвечаем на него.

После третьего запроса: \(n=140\), и можно доказать, что независимо от того, какое положительное целое число \(a\) мы возьмем, \(d(n \cdot a)\) никогда не будет равно \(n\), поэтому ответ на этот запрос «NO».

После четвертого запроса: \(n=1680\). Можно доказать, что существует положительное целое число \(a\), такое что \(d(n \cdot a) = n\), поэтому ответ «YES».

G. Дерево wxhtzdy ORO

Бинарный поиск битмаски Деревья Перебор поиск в глубину и подобное реализация Структуры данных *2300

После (наконец-то) прохождения отбора на IOI 2023, wxhtzdy был очень счастлив и решил сделать то, что делают многие люди: попытаться угадать задачи, которые будут на IOI. В процессе этого он случайно создал задачу, которая, по его мнению, была очень крутой.

Дано дерево (связный ациклический граф) с \(n\) вершинами и \(n-1\) ребром. Вершине \(i\) (\(1 \le i \le n\)) соответствует значение \(a_i\). Пусть \(g(u, v)\) - это побитовое ИЛИ значений всех вершин на кратчайшем пути от \(u\) до \(v\). Например, если мы хотим вычислить \(g(3, 4)\) на дереве из первого набора данных примера. На пути от \(3\) до \(4\) находятся вершины \(3\), \(1\), \(4\). Тогда \(g(3, 4) = a_3 \ | \ a_1 \ | \ a_4\) (здесь \(|\) обозначает побитовое ИЛИ).

Также дано \(q\) запросов, и каждый запрос выглядит следующим образом:

Вам даны \(x\) и \(y\). Рассмотрим все вершины \(z\) такие, что \(z\) находится на кратчайшем пути от \(x\) до \(y\) (включительно).

Определим красоту вершины \(z\) как сумму количества ненулевых битов в \(g(x, z)\) и количества ненулевых битов в \(g(y, z)\). Вам нужно найти максимальную красоту среди всех вершин \(z\) на кратчайшем пути от \(x\) до \(y\).

Так как его мозг очень устал после решения output only задачи на SIO (он должен был это сделать, чтобы пройти отбор на IOI), он хочет вашей помощи в этой задаче.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин.

Вторая строка каждого набора содержит \(n\) положительных целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_v \le 10^9\)) — значение каждой вершины, \(i\)-е число в этой строке соответствует вершине \(i\).

Следующие \(n - 1\) строк описывают дерево.

Каждая строка содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n, u \ne v\)) указывающие, что вершины \(u\) и \(v\) соединены ребром.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Следующие \(q\) строк содержат 2 целых числа \(x, y\) (\(1 \le x, y \le n\)) — вершины \(x\) и \(y\) для каждого запроса.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Гарантируется, что сумма \(q\) по всем наборам не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел, каждое из которых является ответом на соответствующий запрос.

Примечание

На изображении ниже показано дерево из первого набора входных данных второго примера.

Дерево из первого набора входных данных второго примера.

В первом запросе \(x=7\), \(y=5\). Самый короткий путь от \(7\) до \(5\) это \(7-4-2-1-5\).

Давайте вычислим красоту вершины \(7\) на этом пути. У нас есть \(g(7,7)=a_7=10=(1010)_2\) и \(g(5,7)=a_5 \ | \ a_1 \ | \ a_2 \ | \ a_4 \ | \ a_7=10 \ | \ 4 \ | \ 7 \ | \ 4 \ | \ 10=15=(1111)_2\), поэтому ее красота равна \(2 + 4 = 6\).

Теперь давайте вычислим красоту вершины \(4\) на этом пути. У нас есть \(g(7,4)=a_7 \ | \ a_4=10 \ | \ 4=14=(1110)_2\) и \(g(5,4)=a_5 \ | \ a_1 \ | \ a_2 \ | \ a_4=10 \ | \ 4 \ | \ 7 \ | \ 4=15=(1111)_2\), поэтому ее красота равна \(3 + 4 = 7\).

Теперь давайте вычислим красоту вершины \(2\) на этом пути. У нас есть \(g(7,2)=a_7 \ | \ a_4 \ | \ a_2=10 \ | \ 4 \ | \ 7=15=(1111)_2\) и \(g(5,2)=a_5 \ | \ a_1 \ | \ a_2=10 \ | \ 4 \ | \ 7=15=(1111)_2\), поэтому ее красота равна \(4 + 4 = 8\).

Теперь давайте вычислим красоту вершины \(1\) на этом пути. У нас есть \(g(7,1)=a_7 \ | \ a_4 \ | \ a_2 \ | \ a_1=10 \ | \ 4 \ | \ 7 \ | \ 4=15=(1111)_2\) и \(g(5,1)=a_5 \ | \ a_1=10 \ | \ 4=14=(1110)_2\), поэтому ее красота равна \(4 + 3 = 7\).

Наконец, давайте вычислим красоту вершины \(5\) на этом пути. У нас есть \(g(7,5)=a_7 \ | \ a_4 \ | \ a_2 \ | \ a_1 \ | \ a_5=10 \ | \ 4 \ | \ 7 \ | \ 4 \ | \ 10=15=(1111)_2\) и \(g(5,5)=a_5=10=(1010)_2\), поэтому ее красота равна \(4 + 2 = 6\).

Максимальная красота на этом пути у вершины \(2\), и она равна \(8\).

E. Интерактивная игра с раскраской

графы Деревья интерактив Конструктив Перебор поиск в глубину и подобное реализация *2400

Это интерактивная задача. Не забывайте о том, что ваша программа должна каждый раз после вывода запроса сбрасывать буфер вывода. Для сброса буфера вывода можно использовать fflush(stdout) в C++, system.out.flush() в Java, stdout.flush() в Python или flush(output) в Pascal. Если вы используете другой язык программирования, посмотрите в его документации, как выполняется эта операция. Также рекомендуем вам прочесть руководство по интерактивным задачам: https://cf.m27.workers.dev/blog/entry/45307.

Дано дерево с \(n\) вершинами; вершина \(1\) является корнем дерева. Для каждого \(i \in [2, n]\) вам дан родитель \(i\)-й вершины \(p_i\); для каждой вершины соблюдается \(p_i < i\).

Вам предстоит раскрасить все ребра дерева, используя минимально возможное количество цветов, таким образом, чтобы выиграть в игру на этом дереве (каждое ребро должно быть окрашено в ровно один цвет).

Игра, в которую мы собираемся играть, будет проходить следующим образом. После того как вы раскрасите ребра и выведите их цвета, жюри поместит фишку в одну из вершин дерева (кроме корня). Ваша цель — переместить эту фишку в корень ровно за \(d\) ходов, где \(d\) — расстояние от вершины до корня (расстояние равно количеству ребер на пути). Если фишка достигает корня за \(d\) ходов, вы выигрываете. В противном случае вы проигрываете.

Жюри не сообщит вам, где находится фишка. Вы даже не будете знать значение \(d\) заранее. Однако в начале каждого хода вам будет сообщено, сколько ребер каждого цвета инцидентно текущей вершине (это включает как ребро, ведущее вверх по дереву, так и ребра, ведущие вниз). Вы должны выбрать один из этих цветов, и фишка будет перемещена вдоль ребра выбранного цвета (если есть несколько ребер с этим цветом, жюри выбирает одно из них). После перемещения фишки вам снова будет сообщена та же информация о текущей вершине, и игра продолжается, пока вы не достигнете корня или не сделаете \(d\) ходов, не достигнув корня.

Интерактор для этой задачи является адаптивным. Это означает, что начальная вершина и текущая вершина не фиксированы и могут изменяться «на ходу» в зависимости от вывода вашей программы. Однако состояние игры всегда будет согласовано с информацией, которую вы получаете: всегда будет как минимум одна начальная вершина и как минимум один путь вашей фишки из этой вершины, согласующийся как с информацией о цветах, которую вы получаете, так и с цветами, которые вы выбирали во время ходов.

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \le n \le 100\)) — количество вершин в дереве.

Вторая строка содержит \(n-1\) целых чисел \(p_2, p_3, \dots, p_n\) (\(1 \le p_i < i\)), где \(p_i\) — родитель \(i\)-й вершины в дереве.

Протокол взаимодействия

Сначала вы должны вывести выбранную вами раскраску ребер следующим образом:

  • в первой строке выведите одно целое число \(k\) (\(1 \le k \le n - 1\)) — количество используемых вами цветов;
  • во второй строке выведите \(n-1\) целых чисел \(c_2, c_3, \dots, c_n\) (\(1 \le c_i \le k\)), где \(c_i\) — цвет ребра, соединяющего вершины \(p_i\) и \(i\).

Затем начинается игра. В начале каждого хода программа жюри выводит что-то одно из следующего:

  • целое число \(1\) на отдельной строке, указывающее, что фишка достигла корня, и вы выиграли;
  • целое число \(-1\) на отдельной строке, указывающее, что вы не достигли корня за \(d\) ходов и проиграли, или вы сделали что-то неправильно (либо раскраска, которую вы предоставили, не соответствует ограничениям, либо ваш предыдущий ход невозможен);
  • или целое число \(0\) на отдельной строке, за которым следует строка, содержащая \(k\) целых чисел \(e_1, e_2, \dots, e_k\), где \(e_i\) — количество ребер с цветом \(i\), инцидентных текущей вершине.

Если вы получаете \(1\) или \(-1\), ваша программа должна немедленно завершиться, в противном случае вердикт для вашей посылки может быть неопределенным. Если вы получаете \(0\), за которым следуют \(k\) целых чисел \(e_1, e_2, \dots, e_k\), вы должны вывести одно целое число, указывающее цвет, который вы выбираете во время хода (конечно, \(e_i\) для этого цвета не должно быть равно \(0\)).

Не забывайте сбрасывать буфер вывода каждый раз, когда что-то выводите!

Примечание

В первом примере каждая вершина от \(2\) до \(n\) соединена с корнем. Поэтому мы можем покрасить все ребра в один цвет \(1\), и когда игра начнется, будет только одно ребро, инцидентное текущей вершине (и оно будет вести к корню).

Во втором примере дерево представляет собой путь из \(4\) вершин. Мы должны покрасить его ребра в разные цвета, потому что можно показать, что у нас нет выигрышной стратегии с двумя цветами.

F. Остаться в живых

Перебор Структуры данных теория чисел *2800

В компьютерной игре есть \(n\) героев. У каждого героя есть здоровье \(h\) и изначальная броня \(a\). Пусть текущее количество брони равно \(a_{\mathit{cur}}\), изначально равное \(a\).

Когда герою наносится \(x\) урона, происходит следующее: если \(x < a_{\mathit{cur}}\), то из \(a_{\mathit{cur}}\) вычитается \(x\); иначе из \(h\) вычитается \(1\), а \(a_{\mathit{cur}}\) снова становится равно \(a\).

В начале игры вы выбираете значение \(x\) (целое число, строго большее \(0\)). Затем вы атакуете героев, пока все не погибнут: за один раунд вы наносите \(x\) урона каждому живому герою. Герой погибает, когда его здоровье становится равно \(0\). Игра заканчивается, когда все герои погибают.

Последний погибший герой получает количество очков, равное количеству раундов, в течение которых он был единственным живым героем. Остальные герои получают \(0\) очков. В частности, если в последнем раунде погибают несколько героев, то все герои получают \(0\) очков.

Вы сыграли по одной игре на каждое возможное значение \(x\) (от \(1\) до бесконечности). Между играми очки сбрасывались. Какое наибольшее количество очков было у каждого героя?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество героев.

Во второй строке записаны \(n\) целых чисел \(h_1, h_2, \dots, h_n\) (\(1 \le h_i \le 2 \cdot 10^5\)) — здоровье каждого героя.

В третьей строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — изначальное количество брони каждого героя.

Выходные данные

На каждый набор входных данных выведите \(n\) целых чисел — максимальное количество очков, которое было у героя в течение игр, сыгранных для каждого возможного \(x\).

Примечание

В первом наборе входных данных игра на \(x = 1\) играется так:

  • до всех раундов: у героев \(h = [3, 1, 2]\), \(a_{\mathit{cur}} = [3, 11, 5]\);
  • раунд \(1\): \(1\) урона наносится всем героям: \(h\) остается \([3, 1, 2]\), \(a_{\mathit{cur}}\) становится \([2, 10, 4]\);
  • раунд \(2\): \(h = [3, 1, 2]\), \(a_{\mathit{cur}} = [1, 9, 3]\);
  • раунд \(3\): у первого героя заканчивается броня, поэтому он теряет очко здоровья: \(h = [2, 1, 2]\), \(a_{\mathit{cur}} = [3, 8, 2]\);
  • ...
  • раунд \(9\): первый герой погибает, так как его здоровье становится равно \(0\): \(h = [0, 1, 1]\), \(a_{\mathit{cur}} = [0, 2, 1]\);
  • раунд \(10\): третий герой погибает: \(h = [0, 1, 0]\), \(a_{\mathit{cur}} = [0, 1, 0]\);
  • раунд \(11\): второй герой погибает: \(h = [0, 0, 0]\), \(a_{\mathit{cur}} = [0, 0, 0]\).

Второй герой погиб последним, и был единственным живым героев в течение одного раунда. Поэтому он получает \(1\) очко за эту игру.

Игра на \(x = 4\) играется так:

  • раунд \(1\): \(h = [2, 1, 2]\), \(a_{\mathit{cur}} = [3, 7, 1]\);
  • раунд \(2\): \(h = [1, 1, 1]\), \(a_{\mathit{cur}} = [3, 3, 5]\);
  • раунд \(3\): \(h = [0, 0, 1]\), \(a_{\mathit{cur}} = [0, 0, 1]\);
  • раунд \(4\): \(h = [0, 0, 0]\), \(a_{\mathit{cur}} = [0, 0, 0]\);

Третий герой погиб последним, и был единственным живым героев в течение одного раунда.

A. Не пытайтесь посчитать

Перебор Строки *800

Даны строка \(x\) длины \(n\) и строка \(s\) длины \(m\) (\(n \cdot m \le 25\)), состоящие из строчных латинских букв. Вы можете применить любое количество операций к строке \(x\).

За одну операцию вы приписываете текущее значение строки \(x\) к концу \(x\). Обратите внимание, что значение \(x\) после этого изменится.

Например, если \(x =\)«aba», то при применении операций \(x\) будет меняться следующим образом: «aba» \(\rightarrow\) «abaaba» \(\rightarrow\) «abaabaabaaba».

После какого минимального количества операций \(s\) встретится в \(x\) в качестве подстроки? Подстрокой строки называется любой её непрерывный отрезок.

Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит два числа \(n\) и \(m\) (\(1 \le n \cdot m \le 25\)) — длины строк \(x\) и \(s\) соответственно.

Вторая строка каждого набора содержит строку \(x\) длины \(n\).

Третья строка каждого набора содержит строку \(s\) длины \(m\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество операций, после которых \(s\) встретится в \(x\) в качестве подстроки. Если это невозможно, выведите \(-1\).

Примечание

В первом наборе входных данных примера, после \(2\) применений операции строка станет равна «aaaa», а после \(3\) «aaaaaaaa», так что ответ \(3\).

Во втором наборе входных данных примера после применения \(1\) операции строка станет равна «\(\text{e}\color{red}{\text{force}}\text{forc}\)», вхождение подстроки выделено красным.

В четвёртом наборе входных данных примера можно показать, что получить нужную строку как подстроку невозможно.

C. Идеальный квадрат

Перебор реализация *1200

У Кристины есть матрица размера \(n\) на \(n\), заполненная строчными латинскими буквами. При этом значение \(n\) четное.

Ей хочется изменить некоторые символы так, чтобы ее матрица стала идеальным квадратом. Назовём матрицу идеальным квадратом, если после одного поворота на \(90^\circ\) по часовой стрелке она не изменится.

Пример поворота матрицы на \(90^\circ\):

За одну операцию Кристина может выбрать любой элемент и заменить его значение на следующий символ в алфавите. Если символ равен «z», то его значение не изменится.

Найдите минимальное количество операций, которое необходимо применить для того, чтобы матрица стала идеальным квадратом.

Например, если матрица размера \(4\) на \(4\) выглядит так:

\(\)\matrix{ a & b & b & a \cr b & c & \textbf{b} & b \cr b & c & c & b\cr a & b & b & a \cr }\(\)

то в ней достаточно применить \(1\) операцию к букве b, выделенной жирным.

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^2\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит единственное целое четное число \(n\) (\(2 \le n \le 10^3\)) — количество строк и столбцов в матрице.

Далее следуют \(n\) строк, каждая из которых содержит ровно \(n\) строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^3\).

Выходные данные

В отдельной строке для каждого набора входных данных выведите единственное число: минимальное количество операций, которое необходимо применить, чтобы у Кристины получился идеальный квадрат.

Примечание

Первый набор входных данных разобран в условии.

B. Объединение множеств

битмаски жадные алгоритмы Конструктив Перебор *1300

Даны \(n\) множеств \(S_{1}, S_{2}, \ldots, S_{n}\), состоящих из целых чисел. Назовём множество \(S\) доступным, если можно выбрать некоторые из множеств \(S_{1}, S_{2}, \ldots, S_{n}\) (возможно, ни одного) так, что \(S\) равно их объединению\(^{\dagger}\). Если ни одно из множеств \(S_{1}, S_{2}, \ldots, S_{n}\) не выбрано, то объединение равно пустому множеству.

Найдите наибольшее возможное число элементов в доступном \(S\), таком что \(S \neq S_{1} \cup S_{2} \cup \ldots \cup S_{n}\).

\(^{\dagger}\) Объединение множеств \(A_1, A_2, \ldots, A_k\) определяется как множество элементов, присутствующих по крайней мере в одном из этих множеств. Результат обозначается через \(A_1 \cup A_2 \cup \ldots \cup A_k\). Например, \(\{2, 4, 6\} \cup \{2, 3\} \cup \{3, 6, 7\} = \{2, 3, 4, 6, 7\}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)).

Следующие \(n\) строк каждого набора входных данных описывают множества \(S_1, S_2, \ldots, S_n\). В \(i\)-й из этих строк содержится целое число \(k_{i}\) (\(1 \le k_{i} \le 50\)) — число элементов в \(S_{i}\), а затем \(k_{i}\) целых чисел \(s_{i, 1}, s_{i, 2}, \ldots, s_{i, k_{i}}\) (\(1 \le s_{i, 1} < s_{i, 2} < \ldots < s_{i, k_{i}} \le 50\)) — элементы \(S_{i}\).

Выходные данные

Для каждого набора входных данных выведите одно число — наибольшее возможное число элементов в доступном \(S\), таком что \(S \neq S_{1} \cup S_{2} \cup \ldots \cup S_{n}\).

Примечание

В первом наборе входных данных \(S = S_{1} \cup S_{3} = \{1, 2, 3, 4\}\) — самое большое доступное множество, не равное \(S_1 \cup S_2 \cup S_3 = \{1, 2, 3, 4, 5\}\).

Во втором наборе входных данных можно выбрать \(S = S_{2} \cup S_{3} \cup S_{4} = \{2, 3, 4, 5, 6\}\).

В третьем наборе входных данных можно выбрать \(S = S_{2} \cup S_{5} = S_{2} \cup S_{3} \cup S_{5} = \{3, 5, 6, 8, 9, 10\}\).

В четвёртом наборе входных данных единственным доступным множеством является \(S = \varnothing\).

C. Карточная игра

жадные алгоритмы Перебор *1500

Колода состоит из \(n\) карт. Изначально на \(i\)-й сверху карте написано число \(a_{i}\). Числа, записанные на картах, не изменяются.

Вы играете в следующую игру. Изначально ваш счёт равен \(0\). На каждом шаге вы производите одну из следующих операций:

  • Выбрать нечётное\(^{\dagger}\) целое положительное число \(i\), не превосходящее числа карт в колоде на данный момент. Убрать \(i\)-ю сверху карту из колоды и прибавить число, записанное на этой карте, к вашему счёту. Оставшиеся карты нумеруются заново, начиная сверху.
  • Выбрать чётное\(^{\ddagger}\) целое положительное \(i\), не превосходящее числа карт в колоде на данный момент. Убрать \(i\)-ю сверху карту из колоды. Оставшиеся карты нумеруются заново, начиная сверху.
  • Завершить игру. Завершить игру можно в любой момент, вы не обязаны убирать все карты из изначальной колоды.

Чему равен максимальный счёт, который можно получить по окончании игры?

\(^{\dagger}\) Целое число \(i\) называется нечётным, если существует целое \(k\), такое что \(i = 2k + 1\).

\(^{\ddagger}\) Целое число \(i\) называется чётным, если существует целое \(k\), такое что \(i = 2k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^{5}\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^{9} \le a_i \le 10^{9}\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите одно число — наибольший возможный счёт, достижимый к концу игры.

Примечание

В первом наборе входных данных можно получить итоговый счёт \(5\) следующим образом:

  1. На первом шаге выбрать \(i=2\). Счёт остаётся равным \(0\), а числа, записанные на картах, образуют последовательность \([-4, -3, 5]\).
  2. На втором шаге выбрать \(i=3\). Счёт становится равным \(5\), а числа, записанные на картах, образуют последовательность \([-4, -3]\).
  3. На третьем шаге завершить игру с итоговым счётом \(5\).

Во втором наборе входных данных можно получить итоговый счёт \(4\) следующим образом:

  1. На первом шаге выбрать \(i=3\). Счёт становится равным \(3\), а числа, записанные на картах, образуют последовательность \([1, -2, -4]\).
  2. На втором шаге выбрать \(i=1\). Счёт становится равным \(4\), а числа, записанные на картах, образуют последовательность \([-2, -4]\).
  3. На третьем шаге завершить игру с итоговым счётом \(4\).

В третьем наборе входных данных можно получить итоговый счёт \(2\) следующим образом:

  1. На первом шаге выбрать \(i=1\). Счёт становится равным \(-1\), а числа, записанные на картах, образуют последовательность \([3, -5]\).
  2. На втором шаге выбрать \(i=1\). Счёт становится равным \(2\), а числа, записанные на картах, образуют последовательность \([-5]\).
  3. На третьем шаге завершить игру с итоговым счётом \(2\).

E1. Две перестановки (простая версия)

жадные алгоритмы Конструктив Перебор теория чисел *2400

Это простая версия задачи. Различие между двумя версиями заключается в том, что в этой версии не нужно минимизировать число выполняемых операций. Делать взломы можно только в том случае, если решены обе версии задачи.

Даны две перестановки\(^{\dagger}\) \(p_{1}, p_{2}, \ldots, p_{n}\) (чисел от \(1\) до \(n\)) и \(q_{1}, q_{2}, \ldots, q_{m}\) (чисел от \(1\) до \(m\)). Изначально \(p_{i}=a_{i}\) для всех \(i=1, 2, \ldots, n\), а также \(q_{j} = b_{j}\) для всех \(j = 1, 2, \ldots, m\). Вы можете применять к перестановкам следующую операцию несколько раз (возможно, ни одного).

За одну операцию \(p\) и \(q\) меняются в соответствии с тремя следующими шагами:

  • Вы выбираете целые числа \(i\), \(j\), такие что \(1 \le i \le n\) and \(1 \le j \le m\).
  • Перестановка \(p\) разбивается на три части, получающиеся пр и рассмотрении \(p_i\) в качестве разделителя: левая часть состоит из \(p_1, p_2, \ldots, p_{i-1}\) (эта часть может быть пустой), средняя часть состоит из одного числа \(p_i\), а правая часть состоит из \(p_{i+1}, p_{i+2}, \ldots, p_n\) (эта часть может быть пустой). Далее, нужно переставить местами левую и правую часть в этом разбиении. Формально, после этого шага \(p\) становится равной \(p_{i+1}, p_{i+2}, \ldots, p_{n}, p_{i}, p_{1}, p_{2}, \ldots, p_{i-1}\). Элементы вновь образованной \(p\) нумеруются заново, начиная с \(1\).
  • Проделайте то же преобразование над \(q\) с индексом \(j\). Формально, после этого шага \(q\) становится равной \(q_{j+1}, q_{j+2}, \ldots, q_{m}, q_{j}, q_{1}, q_{2}, \ldots, q_{j-1}\). Элементы вновь образованной \(q\) нумеруются заново, начиная с \(1\).

Ваша цель — добиться одновременного выполнения равенств \(p_{i}=i\) для всех \(i=1, 2, \ldots, n\), а также \(q_{j} = j\) для всех \(j = 1, 2, \ldots, m\).

Найдите произвольный способ добиться этого, используя не более \(10\,000\) операций, или сообщите, что это невозможно. Обратите внимание: вам не нужно минимизировать число выполненных операций.

Можно показать, что если цель достижима, то существует способ добиться её, используя не более \(10\,000\) операций.

\(^{\dagger}\) Перестановкой длины \(k\) является массив, состоящий из \(k\) различных целых чисел от \(1\) до \(k\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(k=3\), но в массиве встречается \(4\)).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2500\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i \le m\)).

Гарантируется, что \(a\) и \(b\) являются перестановками.

Выходные данные

Если решения не существует, выведите одно целое число \(-1\).

Иначе сначала выведите целое число \(k\) (\(0 \le k \le 10\,000\)) — число выполняемых операций, а в каждой из последующих \(k\) строк выведите два числа \(i\) и \(j\) (\(1 \le i \le n\), \(1 \le j \le m\)) — числа, выбранные на очередной итерации.

Если существует несколько решений, выведите любое из них.

Обратите внимание: вам не нужно минимизировать число выполненных операций.

Примечание

В первом тесте можно достичь цели за \(2\) операции:

  1. На первой операции выбрать \(i = 3\), \(j = 4\). После этого \(p\) станет \([3, 2, 1]\), а \(q\) станет \([3, 4, 5, 2, 1]\).
  2. На второй операции выбрать \(i = 2\), \(j = 4\). После этого \(p\) станет \([1, 2, 3]\), а \(q\) станет \([1, 2, 3, 4, 5]\).

В третьем тесте достичь цели невозможно.

A. Простая конструкция

жадные алгоритмы математика Перебор *800

Целое положительное число назовем \(k\)-красивым, если сумма цифр этого числа в десятичной записи делится на \(k^{\dagger}\). Например, \(9272\) является \(5\)-красивым, поскольку сумма цифр числа \(9272\) равна \(9 + 2 + 7 + 2 = 20\).

Вам даны два числа \(x\) и \(k\). Найдите наименьшее целое число \(y \ge x\), которое является \(k\)-красивым.

\(^{\dagger}\) Целое число \(n\) делится на \(k\), если существует целое \(m\), такое что \(n = k \cdot m\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(x\) и \(k\) (\(1 \le x \le 10^9\), \(1 \le k \le 10\)).

Выходные данные

Для каждого набора входных данных выведите наименьшее целое число \(y \ge x\), которое является \(k\)-красивым.

Примечание

В первом наборе входных данных числа от \(1\) до \(4\) состоят из одной цифры и, значит, сумма цифр числа равна его значению. Ни одно из чисел от \(1\) до \(4\) не делится на \(5\).

В четвертом наборе входных данных сумма цифр числа \(777\) равна \(7 + 7 + 7 = 21\), что уже делится на \(3\).

C. Средняя конструкция

дп жадные алгоритмы Перебор сортировки Структуры данных *1700

Массив \(a_1, a_2, \ldots, a_m\) изначально заполнен нулями. Вам даны \(n\) попарно различных отрезков \(1 \le l_i \le r_i \le m\). Вы должны выбрать произвольное подмножество этих отрезков (в частности, можно выбрать пустое множество). После этого происходит следующее:

  • Для каждого \(i = 1, 2, \ldots, n\), если отрезок \((l_i, r_i)\) выбран в подмножество, то для каждого индекса \(l_i \le j \le r_i\) вы увеличиваете \(a_j\) на \(1\) (то есть \(a_j\) заменяете на \(a_j + 1\)). Если отрезок \((l_i, r_i)\) не выбран, массив не изменяется.
  • После этого (после обработки всех значений \(i = 1, 2, \ldots, n\)) вы считаете \(\max(a)\) как максимальное значение среди всех элементов \(a\). Аналогично, \(\min(a)\) считается как минимальное значение.
  • Наконец, стоимость выбранного подмножества отрезков объявляется равной \(\max(a) - \min(a)\).

Найдите наибольшую стоимость по всем подмножествам данного множества отрезков.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10^5\), \(1 \le m \le 10^9\)) — количество отрезков и длина массива.

Следующие \(n\) строк каждого набора входных данных описывают отрезки: \(i\)-я из них содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le m\)). Гарантируется, что все отрезки попарно различны.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите наибольшую стоимость среди всех подмножеств данного множества отрезков.

Примечание

В первом наборе входных данных доступен всего один отрезок. Если его не выбирать, то массив будет равен \(a = [0, 0, 0]\), стоимость такого (пустого) подмножества отрезков равна \(0\). Если же выбрать единственный доступный отрезок, то массив станет равен \(a = [0, 1, 0]\), и стоимость будет равна \(1 - 0 = 1\).

Во втором наборе входных данных можно выбрать все отрезки: массив в таком случае будет равен \(a = [0, 1, 2, 3, 2, 1, 0, 0]\). Стоимость будет равна \(3 - 0 = 3\).

A. Сумма трех

Конструктив математика Перебор *800

У Монокарпа есть целое число \(n\).

Он хочет представить свое число в виде суммы трех различных целых положительных чисел \(x\), \(y\) и \(z\). При этом Монокарп хочет, чтобы никакое из чисел \(x\), \(y\) и \(z\) не было кратно трем, то есть ни одно из этих чисел не делилось нацело на \(3\).

Перед вами стоит задача помочь Монокарпу и найти любую подходящую тройку различных целых положительных чисел \(x\), \(y\) и \(z\), либо сообщить, что такой тройки не существует.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 10^{9}\)).

Выходные данные

На каждый набор входных данных, если не существует подходящей тройки \(x\), \(y\) и \(z\), в первую строку выведите NO.

В противном случае, в первую строку выведите YES. Во вторую строку выведите подходящую тройку различных целых положительных чисел \(x\), \(y\) и \(z\) таких, что \(x + y + z = n\), и никакое из выведенных чисел не кратно числу \(3\). Если подходящих троек несколько, выведите любую из них.

Примечание

В первом наборе входных данных одна из подходящих троек \(x = 4\), \(y = 5\), \(z = 1\). Никакое из этих чисел не кратно трем, а \(4 + 5 + 1 = 10\).

Во втором наборе не существует ни одной подходящей тройки чисел.

В третьем наборе одна из подходящих троек \(x = 2\), \(y = 8\), \(z = 5\). Никакое из этих чисел не кратно трем, а \(2 + 8 + 5 = 15\).

В четвертом наборе не существует ни одной подходящей тройки чисел.

C. Минимальный массив

Бинарный поиск жадные алгоритмы Конструктив Перебор Структуры данных хэши *2400

Дан массив \(a\) длины \(n\), состоящий из целых чисел. Далее к нему последовательно \(q\) раз применяют следующую операцию:

  • Выбирают индексы \(l\) и \(r\) (\(1 \le l \le r \le n\)) и целое число \(x\);
  • Ко всем элементам массива \(a\) на отрезке \([l, r]\) прибавляют \(x\). Более формально, присваивают \(a_i := a_i + x\) для всех \(l \le i \le r\).

Пусть \(b_j\) — массив \(a\), полученный после применения первых \(j\) операций (\(0 \le j \le q\)). Обратите внимание, что \(b_0\) — это массив \(a\) до применения всех операций.

Вам нужно найти лексикографически минимальный\(^{\dagger}\) массив среди всех \(b_j\).

\(^{\dagger}\)Массив \(x\) лексикографически меньше чем массив \(y\), если есть индекс \(i\) такой, что \(x_i < y_i\), и \(x_j = y_j\) для всех \(j < i\). Иными словами, для первого такого индекса \(i\), где массивы различны, \(x_i < y_i\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит одно целое число \(q\) (\(0 \le q \le 5 \cdot 10^5\)) — количество операций с массивом.

В каждой из следующих \(q\) строк находятся по три целых числа \(l_j\), \(r_j\) и \(x_j\) \((1 \le l_j \le r_j \le n, -10^9 \le x_j \le 10^9)\) — описание каждой операции. Операции следуют в порядке их применения.

Гарантируется, что сумма \(n\) по всем наборам входных данных и сумма \(q\) по всем наборам входных данных не превосходят \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически минимальный массив среди всех \(b_j\).

Примечание

В первом наборе входных данных:

  • \(b_0 = [1,2,3,4]\);
  • \(b_1 = [1,2,3,4]\);
  • \(b_2 = [-99,-98,-97,4]\).

Таким образом, лексикографически минимальным является массив \(b_2\).

Во втором наборе входных данных лексикографически минимальным является массив \(b_0\).

C1. План осушения от Дореми (простая версия)

дп жадные алгоритмы Перебор сортировки Структуры данных *2000

Единственное различие между двумя версиями этой задачи — ограничение на \(k\), ограничение по времени и ограничение по памяти. Делать взломы можно только в том случае, если решены обе версии задачи.

Дореми живет в дождливой стране, состоящей из \(n\) городов, пронумерованных от \(1\) до \(n\).

По метеорологической трансляции было предсказано распределение дождей в ближайшие \(m\) дней. В \(i\)-й день дождь пойдет в городах, находящихся на отрезке \([l_i, r_i]\). Город называется сухим, если в ближайшие \(m\) дней в нем не будет дождя.

Оказалось, что Дореми обладает особой способностью. Она может выбрать \(k\) (в простой версии: \(k = 2\)) дней, и в течение этих дней дождя не будет. Дореми хочет вычислить максимальное количество сухих городов после использования специальной силы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1\le n\le 2\cdot 10^5\), \(2 \le m \le 2\cdot 10^5\), \(k = 2\)) — количество городов, количество дней и количество дней дождя, которые может предотвратить Дореми.

Далее следуют \(m\) строк. В \(i\)-й строке содержатся два целых числа \(l_i\), \(r_i\) (\(1\le l_i\le r_i\le n\)) — отрезок городов, в которых будет дождь в день \(i\).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество сухих городов.

Примечание

В первом наборе входных данных, если Дореми использует свою силу в дни

  • \(1,2\), то город \(2\) будет сухим;
  • \(2,3\), то ни один город не будет сухим;
  • \(1,3\), то ни один город не будет сухим;

Таким образом, существует не более \(1\) сухого города.

Во втором наборе входных данных, если Дореми предотвращает

  • дождь в дни \(1,2\), то города \(1,2\) будут сухими;
  • дождь в дни \(2,3\), то города \(4,5\) будут сухими;
  • дождь в дни \(1,3\), то города \(1,5\) будут сухими.

Таким образом, существует не более \(2\) сухих городов.

В третьем наборе входных данных оптимальным является предотвращение дождя в дни \(2,5\).

В четвертом наборе входных данных всегда есть \(4\) дня дождя, которые промочат все города, вне зависимости от использования силы.

D. Игра со стеками

графы Деревья Перебор поиск в глубину и подобное реализация *3000

У вас есть \(n\) стеков \(r_1,r_2,\ldots,r_n\). Каждый стек содержит некоторое количество целых положительных чисел в диапазоне от \(1\) до \(n\).

Определим следующие функции:

function init(pos):
stacks := массив, содержащий n стеков r[1], r[2], ..., r[n].
return get(stacks, pos)

function get(stacks, pos):
if stacks[pos] пуст:
return pos
else:
new_pos := верхний элемент stacks[pos]
удалить верхний элемент stacks[pos]
return get(stacks, new_pos)

Вы хотите узнать значения, возвращаемые \(\texttt{init(1)}, \texttt{init(2)}, \ldots, \texttt{init(n)}\).

Заметим, что во время этих вызовов стеки \(r_1,r_2,\ldots,r_n\) не изменяются, поэтому вызовы \(\texttt{init(1)}, \texttt{init(2)}, \ldots, \texttt{init(n)}\) являются независимыми.

Входные данные

Первая строка ввода содержит одно целое число \(n\) (\(1\le n\le 10^5\)) — длина массива \(r\).

Каждая из последующих \(n\) строк содержит несколько целых чисел. Первое целое число \(k_i\) (\(0\le k_i\le 10^5\)) представляет собой количество элементов в \(i\)-м стеке, а следующие \(k_i\) положительных целых чисел \(c_{i,1},c_{i,2},\ldots,c_{i,k_i}\) (\(1\le c_{i,j}\le n\)) представляют элементы в \(i\)-м стеке. \(c_{i,1}\) - нижний элемент.

В каждом тесте \(\sum k_i\le 10^6\).

Выходные данные

Необходимо вывести \(n\) значений, \(i\)-м из которых является значение, возвращаемое \(\texttt{init(i)}\).

Примечание

В первом примере:

  • При вызове \(\texttt{init(1)}\) присваивается \(\texttt{stacks := [[1,2,2],[3,1,2],[1,2,1]]}\), а затем вызывается \(\texttt{get(stacks, 1)}\).
    • \(\texttt{stacks[1]}\) не пуст, присваивается \(\texttt{new_pos := 2}\) и удаляется верхний элемент \(\texttt{stacks[1]}\), в результате чего \(\texttt{stacks}\) станет \([[1,2],[3,1,2],[1,2,1]]\), а затем вызывается \(\texttt{get(stacks, 2)}\).
    • \(\texttt{stacks[2]}\) не пуст, присваивается \(\texttt{new_pos := 2}\) и удаляется верхний элемент \(\texttt{stacks[2]}\), в результате чего \(\texttt{stacks}\) станет \([[1,2],[3,1],[1,2,1]]\), а затем вызывается \(\texttt{get(stacks, 2)}\).
    • \(\texttt{stacks[2]}\) не пуст, присваивается \(\texttt{new_pos := 1}\) и удаляется верхний элемент \(\texttt{stacks[2]}\), в результате чего \(\texttt{stacks}\) станет \([[1,2],[3],[1,2,1]]\), а затем вызывается \(\texttt{get(stacks, 1)}\).
    • \(\texttt{stacks[1]}\) не пуст, присваивается \(\texttt{new_pos := 2}\) и удаляется верхний элемент \(\texttt{stacks[1]}\), в результате чего \(\texttt{stacks}\) станет \([[1],[3],[1,2,1]]\), а затем вызывается \(\texttt{get(stacks, 2)}\).
    • \(\texttt{stacks[2]}\) не пуст, присваивается \(\texttt{new_pos := 3}\) и удаляется верхний элемент \(\texttt{stacks[2]}\), в результате чего \(\texttt{stacks}\) станет \([[1],[],[1,2,1]]\), а затем вызывается \(\texttt{get(stacks, 3)}\).
    • \(\texttt{stacks[3]}\) не пуст, присваивается \(\texttt{new_pos := 1}\) и удаляется верхний элемент \(\texttt{stacks[3]}\), в результате чего \(\texttt{stacks}\) станет \([[1],[],[1,2]]\), а затем вызывается \(\texttt{get(stacks, 1)}\).
    • \(\texttt{stacks[1]}\) не пуст, присваивается \(\texttt{new_pos := 1}\) и удаляется верхний элемент \(\texttt{stacks[1]}\), в результате чего \(\texttt{stacks}\) станет \([[],[],[1,2]]\), а затем вызывается \(\texttt{get(stacks, 1)}\).
    • \(\texttt{stacks[1]}\) пуст, возвращается \(1\).
  • При вызове \(\texttt{init(2)}\) присваивается \(\texttt{stacks := [[1,2,2],[3,1,2],[1,2,1]]}\), а затем вызывается \(\texttt{get(stacks, 2)}\).
    • \(\texttt{stacks[2]}\) не пуст, присваивается \(\texttt{new_pos := 2}\) и удаляется верхний элемент \(\texttt{stacks[2]}\), в результате чего \(\texttt{stacks}\) станет \([[1,2,2],[3,1],[1,2,1]]\), а затем вызывается \(\texttt{get(stacks, 2)}\).
    • \(\texttt{stacks[2]}\) не пуст, присваивается \(\texttt{new_pos := 1}\) и удаляется верхний элемент \(\texttt{stacks[2]}\), в результате чего \(\texttt{stacks}\) станет \([[1,2,2],[3],[1,2,1]]\), а затем вызывается \(\texttt{get(stacks, 1)}\).
    • \(\texttt{stacks[1]}\) не пуст, присваивается \(\texttt{new_pos := 2}\) и удаляется верхний элемент \(\texttt{stacks[1]}\), в результате чего \(\texttt{stacks}\) станет \([[1,2],[3],[1,2,1]]\), а затем вызывается \(\texttt{get(stacks, 2)}\).
    • \(\texttt{stacks[2]}\) не пуст, присваивается \(\texttt{new_pos := 3}\) и удаляется верхний элемент \(\texttt{stacks[2]}\), в результате чего \(\texttt{stacks}\) станет \([[1,2],[],[1,2,1]]\), а затем вызывается \(\texttt{get(stacks, 3)}\).
    • \(\texttt{stacks[3]}\) не пуст, присваивается \(\texttt{new_pos := 1}\) и удаляется верхний элемент \(\texttt{stacks[3]}\), в результате чего \(\texttt{stacks}\) станет \([[1,2],[],[1,2]]\), а затем вызывается \(\texttt{get(stacks, 1)}\).
    • \(\texttt{stacks[1]}\) не пуст, присваивается \(\texttt{new_pos := 2}\) и удаляется верхний элемент \(\texttt{stacks[1]}\), в результате чего \(\texttt{stacks}\) станет \([[1],[],[1,2]]\), а затем вызывается \(\texttt{get(stacks, 2)}\).
    • \(\texttt{stacks[2]}\) пуст, возвращается \(2\).
  • При вызове \(\texttt{init(3)}\) присваивается \(\texttt{stacks := [[1,2,2],[3,1,2],[1,2,1]]}\), а затем вызывается \(\texttt{get(stacks, 3)}\).
    • \(\texttt{stacks[3]}\) не пуст, присваивается \(\texttt{new_pos := 1}\) и удаляется верхний элемент \(\texttt{stacks[3]}\), в результате чего \(\texttt{stacks}\) станет \([[1,2,2],[3,1,2],[1,2]]\), а затем вызывается \(\texttt{get(stacks, 1)}\).
    • \(\texttt{stacks[1]}\) не пуст, присваивается \(\texttt{new_pos := 2}\) и удаляется верхний элемент \(\texttt{stacks[1]}\), в результате чего \(\texttt{stacks}\) станет \([[1,2],[3,1,2],[1,2]]\), а затем вызывается \(\texttt{get(stacks, 2)}\).
    • \(\texttt{stacks[2]}\) не пуст, присваивается \(\texttt{new_pos := 2}\) и удаляется верхний элемент \(\texttt{stacks[2]}\), в результате чего \(\texttt{stacks}\) станет \([[1,2],[3,1],[1,2]]\), а затем вызывается \(\texttt{get(stacks, 2)}\).
    • \(\texttt{stacks[2]}\) не пуст, присваивается \(\texttt{new_pos := 1}\) и удаляется верхний элемент \(\texttt{stacks[2]}\), в результате чего \(\texttt{stacks}\) станет \([[1,2],[3],[1,2]]\), а затем вызывается \(\texttt{get(stacks, 1)}\).
    • \(\texttt{stacks[1]}\) не пуст, присваивается \(\texttt{new_pos := 2}\) и удаляется верхний элемент \(\texttt{stacks[1]}\), в результате чего \(\texttt{stacks}\) станет \([[1],[3],[1,2]]\), а затем вызывается \(\texttt{get(stacks, 2)}\).
    • \(\texttt{stacks[2]}\) не пуст, присваивается \(\texttt{new_pos := 3}\) и удаляется верхний элемент \(\texttt{stacks[2]}\), в результате чего \(\texttt{stacks}\) станет \([[1],[],[1,2]]\), а затем вызывается \(\texttt{get(stacks, 3)}\).
    • \(\texttt{stacks[3]}\) не пуст, присваивается \(\texttt{new_pos := 2}\) и удаляется верхний элемент \(\texttt{stacks[3]}\), в результате чего \(\texttt{stacks}\) станет \([[1],[],[1]]\), а затем вызывается \(\texttt{get(stacks, 2)}\).
    • \(\texttt{stacks[2]}\) пуст, возвращается \(2\).

A. Разрежь ленточку

дп Перебор *1300

У Поликарпа есть ленточка длины n. Он хочет разрезать ее так, чтобы выполнялись два условия:

  • После разрезания, каждый кусочек ленточки должен быть длины a, b или c.
  • Количество кусочков ленточки после разрезания должно быть как можно больше.

Помогите Поликарпу, найдите количество кусочков ленточки после требуемого разрезания.

Входные данные

В первой строке записано через пробел четыре целых числа n, a, b и c (1 ≤ n, a, b, c ≤ 4000) — длина исходной ленточки и разрешенные длины кусочков ленточки после разрезания, соответственно. Числа a, b и c могут совпадать.

Выходные данные

Выведите одно число — максимально возможное количество кусочков ленточки. Гарантируется, что существует хотя бы одно корректное разрезание ленточки.

Примечание

В первом тестовом примере нужно разрезать ленточку на два кусочка: один из них длины 2, второй длины 3.

Во втором примере нужно разрезать ленточку на два кусочка: один из них длины 5, второй длины 2.

B. Посчитай ромбы

математика Перебор *1300

Задано два целых положительных числа w и h. Требуется посчитать количество ромбов, которые обладают следующими свойствами:

  • Имеют положительную площадь.
  • Вершины находятся в целочисленных точках.
  • Все вершины ромба находятся внутри или на границе прямоугольника с вершинами в точках (0, 0), (w, 0), (w, h), (0, h). Другими словами, для всех вершин (xi, yi) ромба должны выполняться неравенства 0 ≤ xi ≤ w и 0 ≤ yi ≤ h.
  • Диагонали ромба параллельны осям координат.

Посчитайте сколько таких ромбов.

Напоминаем, что ромбом называется четырёхугольник, у которого все стороны равны.

Входные данные

В первой строке записаны два целых числа w и h (1 ≤ w, h ≤ 4000) — размеры прямоугольника.

Выходные данные

Выведите одно число — количество искомых ромбов.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Примечание

В первом примере можно построить только один ромб удовлетворяющий ограничениям. Его вершины находятся в точках (1, 0), (2, 1), (1, 2), (0, 1).

B. Дежавю

математика Перебор сортировки *1100

Дан массив \(a\) длины \(n\), состоящий из целых положительных чисел и массив \(x\) длины \(q\), также состоящий из целых положительных чисел.

Происходят \(q\) изменений. На \(i\)-м изменении (\(1 \leq i \leq q\)) для каждого \(j\) (\(1 \leq j \leq n\)), такого что \(a_j\) делится на \(2^{x_i}\), к \(a_j\) прибавляется \(2^{x_i-1}\). Обратите внимание, \(x_i\) (\(1 \leq x_i \leq 30\)) — целое положительное число, не превосходящее 30.

После всех запросов изменения нужно вывести итоговый массив.

Входные данные

В первой строке содержится единственное число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 10^5\)) — длину массива \(a\) и количество запросов соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, a_3, \ldots, a_n\) — элементы массива \(a\) (\(1 \leq a_i \leq 10^9\)).

Третья строка каждого набора входных данных содержит \(q\) целых чисел \(x_1, x_2, x_3, \ldots, x_q\) — элементы массива \(x\) (\(1 \leq x_i \leq 30\)), которые являются запросами изменения.

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите массив после всех изменений.

Примечание

В первом наборе входных данных первая операция изменения прибавит \(2\) к числам на позициях \(4\) и \(5\). После этого прибавления массив будет выглядеть так: \([1, 2, 3, 6, 6]\). Остальные операции не будут изменять массив.

Во втором наборе входных данных первая операция не изменит массив. Вторая операция изменения прибавит \(8\) к числу на позиции \(5\), а массив будет выглядеть так: \([7, 8, 12, 36, 56, 6, 3]\). Третья операция изменения прибавит \(2\) к числам на позициях \(2, 3\), \(4\) и \(5\). Массив будет выглядеть так: \([7, 10, 14, 38, 58, 6, 3]\).

D. Подозрительные логарифмы

Бинарный поиск математика Перебор *1900

Пусть \(f\)(\(x\)) — это округленный вниз двоичный логарифм \(x\). То есть \(f\)(\(x\)) — наибольшее такое целое неотрицательное число \(y\), что \(2^y\) не превосходит \(x\).

Пусть \(g\)(\(x\)) — это округленный вниз логарифм числа \(x\) по основанию \(f\)(\(x\)). То есть \(g\)(\(x\)) — наибольшее такое целое неотрицательное число \(z\), что \({f(x)}^{z}\) не превосходит \(x\).

Вам даны \(q\) запросов. \(i\)-й запрос выглядит как два числа \(l_i\), \(r_i\). Ответом на запрос является сумма \(g\)(\(k\)) по всем целым положительным \(k\) таким, что \(l_i \leq k \leq r_i\). Ответы на запросы выводите по модулю \({10^9 + 7}\).

Входные данные

В первой строке дано число \(q\) — число запросов (\(1 \leq q \leq 10^5\)).

В следующих \(q\) строках заданы два числа \(l_i\), \(r_i\) — границы отрезка \(i\)-го запроса (\(4 \leq l_i \leq r_i \leq 10^{18}\)).

Выходные данные

Для каждого запроса выведите ответ на него по модулю \(10^9 + 7\).

Примечание

В таблице снизу приведены значения функций \(f\)(\(x\)) и \(g\)(\(x\)) при целых \(x\), таких что \(1 \leq x \leq 8\).

\(x\)\(1\)\(2\)\(3\)\(4\)\(5\)\(6\)\(7\)\(8\)
\(f\)\(0\)\(1\)\(1\)\(2\)\(2\)\(2\)\(2\)\(3\)
\(g\)\(-\)\(-\)\(-\)\(2\)\(2\)\(2\)\(2\)\(1\)

E. Брухович и контрольные

жадные алгоритмы математика Перебор реализация сортировки *2500

Мальчик Смайло учится алгоритмам у учителя по имени Брухович.

В течение года Брухович проведет \(n\) контрольных. Для каждой контрольной известна ее сложность \(a_i\) — неотрицательное целое число. Смайло не нравится, когда у двух последовательных контрольных наибольший общий делитель их сложностей равен \(1\). Поэтому он считает грустностью учебного года количество таких пар контрольных. Формально, грустность — это количество таких индексов \(i\) (\(1 \leq i \leq n - 1\)), что \(gcd(a_i, a_{i+1}) = 1\), где \(gcd(x, y)\) — наибольший общий делитель чисел \(x\) и \(y\).

Брухович хочет минимизировать грустность учебного года для Смайло. Для этого он может сделать сложность любой контрольной равной \(0\). Понятно, что Брухович не хочет слишком сильно облегчать жизнь своим ученикам. Поэтому он выполнит описанное выше действие не более \(k\) раз.

Помогите Смайло узнать, какой минимальной грустности может добиться Брухович, если применит не более \(k\) операций.

Напоминаем, что наибольшим общим делителем (НОД) двух неотрицательных целых чисел \(x\) и \(y\) называется максимальное такое число, которое является делителем и \(x\), и \(y\), обозначается как \(gcd(x, y)\). В частности, \(gcd(x, 0) = gcd(0, x) = x\) для любого целого неотрицательного \(x\).

Входные данные

В первой строке содержится единственное число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 10^5\)) — количество контрольных всего и количество контрольных, сложности которых можно обнулить, соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, a_3, \ldots, a_n\) — элементы массива \(a\), которые являются сложностями контрольных (\(0 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем тестовым наборам не превосходят \(10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальную возможную грустность, которую можно достичь, выполнив не более \(k\) операций.

Примечание

В первом наборе входных данных можно достичь грустности, равной \(1\). Для этого нужно упростить вторую и четвертую контрольные. После этого будет только одна пара соседних контрольных, имеющая НОД, равный единице - это первая и вторая контрольные.

Во втором наборе входных данных можно достичь грустности, равной \(0\), упростив вторую и четвертую контрольные.

A. Анонимный информатор

графы Перебор поиск в глубину и подобное реализация *1400

Вам дан массив \(b_1, b_2, \ldots, b_n\).

Некий анонимный информатор сообщил вам, что массив \(b\) был получен следующим образом: изначально существовал некоторый массив \(a_1, a_2, \ldots, a_n\), после чего \(k\) раз была произведена следующая двухкомпонентная операция:

  1. Была выбрана некоторая фиксированная точка\(^{\dagger}\) массива \(a\), пусть \(x\).
  2. После чего ровно \(x\) раз массив \(a\) был заменён на свой циклический сдвиг влево\(^{\ddagger}\).

И в результате \(k\) таких операций был получен массив \(b_1, b_2, \ldots, b_n\). Вы хотите проверить, могут ли слова анонимного информатора быть правдивы, или же он гарантированно лжёт.

\(^{\dagger}\)Число \(x\) называется фиксированной точкой массива \(a_1, a_2, \ldots, a_n\), если \(1 \leq x \leq n\) и \(a_x = x\).

\(^{\ddagger}\)Циклический сдвиг влево от массива \(a_1, a_2, \ldots, a_n\) это массив \(a_2, \ldots, a_n, a_1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целые числа \(n, k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le k \le 10^9\)) — длину массива \(b\) и количество проведённых операций.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 10^9\)) — элементы массива \(b\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «Yes», если слова анонимного информатора могут быть правдой, и «No», если он гарантированно лжёт.

Примечание

В первом наборе входных данных массив \(a\) мог быть равен \([3, 2, 3, 4, 3]\). В первой операции была выбрана фиксированная точка \(x = 2\), и после \(2\) сдвигов влево массив принял вид \([3, 4, 3, 3, 2]\). Во второй операции была выбрана фиксированная точка \(x = 3\), и после \(3\) сдвигов влево массив принял вид \([3, 2, 3, 4, 3]\). В третьей же операции была выбрана фиксированная точка \(x = 3\), и после \(3\) сдвигов влево массив принял вид \([4, 3, 3, 2, 3]\), чему и равняется массив \(b\).

Во втором наборе входных данных массив \(a\) мог быть равен \([7, 2, 1]\). После операции с фиксированной точкой \(x = 2\) массив принял вид \([1, 7, 2]\). Далее после операции с фиксированной точкой \(x = 1\) массив снова принял изначальный вид \([7, 2, 1]\). Далее эти же \(2\) операции (с \(x = 2\) и \(x = 1\)) были повторены \(49\) раз. И итого после \(100\) операций массив снова принял вид \([7, 2, 1]\).

В третьем наборе входных данных нетрудно показать, что ответа нет.

C. Свобода выбора

жадные алгоритмы Перебор реализация *2000

Определим анти-красоту мультимножества \(\{b_1, b_2, \ldots, b_{len}\}\) как количество вхождений числа \(len\) в это мультимножество.

Вам дано \(m\) мультимножеств, \(i\)-е мультимножество содержит \(n_i\) различных элементов, а конкретно: \(c_{i, 1}\) копий числа \(a_{i,1}\), \(c_{i, 2}\) копий числа \(a_{i,2}, \ldots, c_{i, n_i}\) копий числа \(a_{i, n_i}\). Гарантируется, что \(a_{i, 1} < a_{i, 2} < \ldots < a_{i, n_i}\). Также вам даны числа \(l_1, l_2, \ldots, l_m\) и \(r_1, r_2, \ldots, r_m\) такие, что \(1 \le l_i \le r_i \le c_{i, 1} + \ldots + c_{i, n_i}\).

Создадим мультимножество \(X\), изначально пустое. Далее, для всех \(i\) от \(1\) до \(m\) вы должны совершить следующее действие ровно один раз:

  1. Выбрать некое \(v_i\) такое, что \(l_i \le v_i \le r_i\)
  2. Выбрать \(v_i\) любых чисел из \(i\)-го мультимножества и добавить их в мультимножество \(X\).

Ваша задача выбрать \(v_1, \ldots, v_m\) и добавленные числа так, чтобы в итоге мультимножество \(X\) имело минимально возможную анти-красоту.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(m\) (\(1 \le m \le 10^5\)) — количество мультимножеств.

Далее для каждого \(i\) от \(1\) до \(m\) следует блок данных из трёх строк.

Первая строка каждого блока содержит целые числа \(n_i, l_i, r_i\) (\(1 \le n_i \le 10^5, 1 \le l_i \le r_i \le c_{i, 1} + \ldots + c_{i, n_i} \le 10^{17}\)) — количество различных чисел в \(i\)-м мультимножестве и границы на количество чисел, которое надо добавить из \(i\)-го мультимножества в \(X\).

Вторая строка каждого блока содержит \(n_i\) целых чисел \(a_{i, 1}, \ldots, a_{i, n_i}\) (\(1 \le a_{i, 1} < \ldots < a_{i, n_i} \le 10^{17}\)) — различные элементы \(i\)-го мультимножества.

Третья строка каждого блока содержит \(n_i\) целых чисел \(c_{i, 1}, \ldots, c_{i, n_i}\) (\(1 \le c_{i, j} \le 10^{12}\)) — количества копий элементов в \(i\)-м мультимножестве.

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(10^5\), а также сумма \(n_i\) по всем блокам всех наборов входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите минимально возможную анти-красоту мультимножества \(X\), которой вы можете добиться.

Примечание

В первом наборе входных данных мультимножества имеют следующий вид:

  1. \(\{10, 10, 10, 11, 11, 11, 12\}\). Из этого мультимножества нужно выбрать от \(5\) до \(6\) чисел.
  2. \(\{12, 12, 12, 12\}\). Из этого мультимножества нужно выбрать от \(1\) до \(3\) чисел.
  3. \(\{12, 13, 13, 13, 13, 13\}\). Из этого мультимножества нужно выбрать \(4\) числа.

Можно выбрать из первого мультимножества элементы \(\{10, 11, 11, 11, 12\}\), из второго: \(\{12\}\), из третьего: \(\{13, 13, 13, 13\}\). Итого \(X = \{10, 11, 11, 11, 12, 12, 13, 13, 13, 13\}\). Размер \(X\) равен \(10\), число \(10\) входит в \(X\) ровно \(1\) раз, а значит анти-красота \(X\) равна \(1\). Можно показать, что анти-красоты меньшей чем \(1\), добиться не получится.

C. Порванный счастливый билет

дп математика Перебор реализация хэши *1400

Билет — это непустая строка из цифр от \(1\) до \(9\).

Счастливый билет — это такой билет, у которого:

  • четная длина;
  • сумма цифр в первой половине равна сумме цифр во второй половине.

У вас есть \(n\) частей билетов \(s_1, s_2, \dots, s_n\). Сколько пар \((i, j)\) (для \(1 \le i, j \le n\)) существует таких, что \(s_i + s_j\) является счастливым билетом? Обратите внимание, что возможно \(i=j\).

Здесь оператор + обозначает конкатенацию двух строк. Например, если \(s_i\) — это 13, а \(s_j\) — это 37, то \(s_i + s_j\) будет 1337.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество частей билетов.

Вторая строка содержит \(n\) непустых строк \(s_1, s_2, \dots, s_n\), каждая длиной не более \(5\) и состоящая только из цифр от \(1\) до \(9\).

Выходные данные

Выведите одно целое число — количество пар \((i, j)\) (для \(1 \le i, j \le n\)), таких что \(s_i + s_j\) является счастливым билетом.

E. Бесконечная карточная игра

Бинарный поиск графы дп жадные алгоритмы игры Перебор поиск в глубину и подобное снм сортировки Структуры данных *2300

Монокарп и Бикарп играют в карточную игру. Каждая карта имеет два параметра: значение атаки и значение защиты. Карта \(s\) бьет карту \(t\), если значение атаки карты \(s\) строго больше значения защиты карты \(t\).

У Монокарпа есть \(n\) карт, \(i\)-я из которых имеет значение атаки \(\mathit{ax}_i\) и значение защиты \(\mathit{ay}_i\). У Бикарпа есть \(m\) карт, \(j\)-я из которых имеет значение атаки \(\mathit{bx}_j\) и значение защиты \(\mathit{by}_j\).

На первом ходе Монокарп выбирает одну из своих карт и кладет ее на стол. Бикарп должен побить эту карту своей картой. Затем Монокарп должен побить карту Бикарпа. Затем ход переходит к Бикарпу, и так далее.

После того, как карта побита, она возвращается в руку игрока, который ее сыграл. Это подразумевает, что у игрока, который сейчас ходит, всегда на руках те же карты, что и в начале игры. Игра заканчивается, когда у текущего игрока нет карт, которые побеждают карту, которую только что сыграл его оппонент, и текущий игрок проигрывает.

Если игра длится \(100^{500}\) ходов, объявляется ничья.

И Монокарп, и Бикарп играют оптимально. То есть, если у игрока есть выигрышная стратегия независимо от ходов его оппонента, он играет на победу. В противном случае, если у него есть стратегия для ничьи, он играет на ничью.

Вам нужно вычислить три значения:

  • количество начальных ходов Монокарпа, которые приводят к победе Монокарпа;
  • количество начальных ходов Монокарпа, которые приводят к ничьей;
  • количество начальных ходов Монокарпа, которые приводят к победе Бикарпа.
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество карт у Монокарпа.

Вторая строка содержит \(n\) целых чисел \(\mathit{ax}_1, \mathit{ax}_2, \dots, \mathit{ax}_n\) (\(1 \le \mathit{ax}_i \le 10^6\)) — значения атаки карт Монокарпа.

Третья строка содержит \(n\) целых чисел \(\mathit{ay}_1, \mathit{ay}_2, \dots, \mathit{ay}_n\) (\(1 \le \mathit{ay}_i \le 10^6\)) — значения защиты карт Монокарпа.

Четвертая строка содержит одно целое число \(m\) (\(1 \le m \le 3 \cdot 10^5\)) — количество карт у Бикарпа.

Пятая строка содержит \(m\) целых чисел \(\mathit{bx}_1, \mathit{bx}_2, \dots, \mathit{bx}_m\) (\(1 \le \mathit{bx}_j \le 10^6\)) — значения атаки карт Бикарпа.

Шестая строка содержит \(m\) целых чисел \(\mathit{by}_1, \mathit{by}_2, \dots, \mathit{by}_m\) (\(1 \le \mathit{by}_j \le 10^6\)) — значения защиты карт Бикарпа.

Дополнительные ограничения на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), сумма \(m\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите три целых числа:

  • количество начальных ходов Монокарпа, которые приводят к победе Монокарпа;
  • количество начальных ходов Монокарпа, которые приводят к ничьей;
  • количество начальных ходов Монокарпа, которые приводят к победе Бикарпа.

H1. Цикличный Хэмминг (простая версия)

бпф дп математика Перебор разделяй и властвуй теория чисел *3400

Это простая версия задачи. Единственное различие между двумя версиями заключается в ограничениях на \(k\). Делать взломы можно только в том случае, если решены обе версии задачи.

В этой задаче все строки индексируются с \(0\).

Для двух строк \(a\), \(b\) одинаковой длины \(p\) определим следующие термины:

  • Расстояние Хэмминга между \(a\) и \(b\), обозначаемое как \(h(a, b)\), определяется как количество позиций \(i\) таких, что \(0 \le i < p\) и \(a_i \ne b_i\).
  • \(b\) является циклическим сдвигом \(a\), если существует некоторое число \(0 \leq k < p\) такое, что \(b_{(i+k) \bmod p} = a_i\) для всех \(0 \le i < p\). Здесь \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Даны две бинарные строки \(s\) и \(t\) длиной \(2^{k+1}\) каждая. Обе строки могут содержать пропущенные символы (обозначаются символом «?»). Ваша задача — подсчитать количество способов заменить отсутствующие символы в обеих строках на символы «0» или «1» таким образом, чтобы:

  • каждая строка \(s\) и \(t\) содержала ровно \(2^k\) вхождений каждого символа «0» и «1»;
  • \(h(s, c) \ge 2^k\) для всех строк \(c\), являющихся циклическим сдвигом \(t\).

Поскольку результат может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит одно целое число \(k\) (\(1 \le k \le 7\)).

Вторая строка содержит строку \(s\) длины \(2^{k+1}\), состоящую из символов «0», «1» и «?».

Третья строка содержит строку \(t\) длины \(2^{k+1}\), состоящую из символов «0», «1» и «?».

Гарантируется, что обе строки \(s\) и \(t\) содержат не более \(2^k\) символов «0» или «1».

Выходные данные

Выведите одно целое число — ответ на задачу по модулю \(998\,244\,353\).

Примечание

В первом примере можно проверить, что для всех циклических сдвигов \(c\) из \(t\) выполняется условие \(h(s, c) \ge 2^k\). В частности:

  • Для \(c = \mathtt{0101}\), \(h(s, c) = h(\mathtt{0110}, \mathtt{0101}) = 2 \ge 2^1\).
  • Для \(c = \mathtt{1010}\), \(h(s, c) = h(\mathtt{0110}, \mathtt{1010}) = 2 \ge 2^1\).

Во втором примере существует циклический сдвиг \(c\) строки \(t\) такой, что \(h(s, c) < 2^k\) (в частности, \(c = \mathtt{0011}\), и \(h(s, c) = h(\mathtt{0011}, \mathtt{0011}) = 0\)).

В третьем примере существует \(2\) возможных способа восстановления недостающих символов:

  • \(s = \mathtt{0101}\), \(t = \mathtt{0110}\);
  • \(s = \mathtt{0011}\), \(t = \mathtt{0101}\).

В четвертом примере существует \(3\) возможных способа восстановления пропущенных символов:

  • \(s = \mathtt{00011110}\), \(t = \mathtt{01010101}\);
  • \(s = \mathtt{00011011}\), \(t = \mathtt{01010101}\);
  • \(s = \mathtt{00001111}\), \(t = \mathtt{01010101}\).

H2. Цикличный Хэмминг (сложная версия)

бпф дп математика Перебор теория чисел *3500

Это сложная версия задачи. Единственное различие между двумя версиями заключается в ограничениях на \(k\). Делать взломы можно только в том случае, если решены обе версии задачи.

В этой задаче все строки индексируются с \(0\).

Для двух строк \(a\), \(b\) одинаковой длины \(p\) определим следующие термины:

  • Расстояние Хэмминга между \(a\) и \(b\), обозначаемое как \(h(a, b)\), определяется как количество позиций \(i\) таких, что \(0 \le i < p\) и \(a_i \ne b_i\).
  • \(b\) является циклическим сдвигом \(a\), если существует некоторое число \(0 \leq k < p\) такое, что \(b_{(i+k) \bmod p} = a_i\) для всех \(0 \le i < p\). Здесь \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Даны две бинарные строки \(s\) и \(t\) длиной \(2^{k+1}\) каждая. Обе строки могут содержать пропущенные символы (обозначаются символом «?»). Ваша задача — подсчитать количество способов заменить отсутствующие символы в обеих строках на символы «0» или «1» таким образом, чтобы:

  • каждая строка \(s\) и \(t\) содержала ровно \(2^k\) вхождений каждого символа «0» и «1»;
  • \(h(s, c) \ge 2^k\) для всех строк \(c\), являющихся циклическим сдвигом \(t\).

Поскольку результат может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит одно целое число \(k\) (\(1 \le k \le 12\)).

Вторая строка содержит строку \(s\) длины \(2^{k+1}\), состоящую из символов «0», «1» и «?».

Третья строка содержит строку \(t\) длины \(2^{k+1}\), состоящую из символов «0», «1» и «?».

Гарантируется, что обе строки \(s\) и \(t\) содержат не более \(2^k\) символов «0» или «1».

Выходные данные

Выведите одно целое число — ответ на задачу по модулю \(998\,244\,353\).

Примечание

В первом примере можно проверить, что для всех циклических сдвигов \(c\) из \(t\) выполняется условие \(h(s, c) \ge 2^k\). В частности:

  • Для \(c = \mathtt{0101}\), \(h(s, c) = h(\mathtt{0110}, \mathtt{0101}) = 2 \ge 2^1\).
  • Для \(c = \mathtt{1010}\), \(h(s, c) = h(\mathtt{0110}, \mathtt{1010}) = 2 \ge 2^1\).

Во втором примере существует циклический сдвиг \(c\) строки \(t\) такой, что \(h(s, c) < 2^k\) (в частности, \(c = \mathtt{0011}\), и \(h(s, c) = h(\mathtt{0011}, \mathtt{0011}) = 0\)).

В третьем примере существует \(2\) возможных способа восстановления недостающих символов:

  • \(s = \mathtt{0101}\), \(t = \mathtt{0110}\);
  • \(s = \mathtt{0011}\), \(t = \mathtt{0101}\).

В четвертом примере существует \(3\) возможных способа восстановления пропущенных символов:

  • \(s = \mathtt{00011110}\), \(t = \mathtt{01010101}\);
  • \(s = \mathtt{00011011}\), \(t = \mathtt{01010101}\);
  • \(s = \mathtt{00001111}\), \(t = \mathtt{01010101}\).

A. Мария и строка

Перебор реализация Строки *800

У Марии есть строка \(s\) длины \(n\), состоящая из букв «A» и «B». Она хочет сделать так, чтобы строка \(s\) содержала ровно \(k\) символов «B». Для этого она может использовать следующую операцию.

  • Выбрать целое число \(i\) (\(1 \leq i \leq n\)) и букву \(c\) (\(c\) должна быть равна «A» или «B»).
  • После этого заменить каждую из первых \(i\) букв строки \(s\) (то есть, буквы \(s_1, s_2, \ldots, s_i\)) на \(c\).

Мария просит вас найти минимальное количество операций, которое необходимо выполнить для того, чтобы строка \(s\) содержала ровно \(k\) символов «B». Также она просит вас найти сами эти операции (то есть, число \(i\) и букву \(c\) в каждой операции).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано два целых числа \(n\) и \(k\) (\(3 \leq n \leq 100\), \(0 \leq k \leq n\)) — длина строки \(s\) и количество букв «B», которое должна содержать строка \(s\) после всех операций.

Во второй строке дана строка \(s\) длины \(n\), состоящая из букв «A» и «B».

Выходные данные

Для каждого набора входных данных в первой строке выведите число \(m\) — минимальное количество операций, которое нужно выполнить Марии.

В \(j\)-й из следующих \(m\) строк выведите число \(i\) (\(1 \le i \le n\)) и букву \(c\) (\(c\) должна быть равна «A» или «B») — параметры \(j\)-й операции.

Если существует несколько решений с минимальным возможным количеством операций, вы можете вывести любое из них.

Примечание

В первом наборе входных данных в строке \(s\) уже \(2\) символа «B», поэтому Марии не нужно выполнять ни одной операции.

Во втором наборе входных данных единственный способ добиться того, чтобы строка \(s\) содержала \(3\) символа «B» после одной операции — заменить первый символ строки \(s\) на «B»: «AABAB» \(\rightarrow\) «BABAB».

В третьем наборе входных данных единственный способ добиться того, чтобы строка \(s\) содержала \(0\) символов «B» после одной операции — заменить первые \(5\) символов строки \(s\) на «A»: «BBBBB» \(\rightarrow\) «AAAAA».

В четвёртом наборе входных один из способов добиться того, чтобы строка \(s\) содержала \(0\) символов «B» после одной операции — заменить первые \(2\) символа строки \(s\) на «A»: «BAA» \(\rightarrow\) «AAA». Обратите внимание, что «1 A» и «3 A» тоже являются правильными решениями в одну операцию.

F. Вова и побег из матрицы

кратчайшие пути Перебор поиск в глубину и подобное разделяй и властвуй *2600

Вова находится в матрице \(n \times m\). Строки этой матрицы пронумерованы числами от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы числами от \(1\) до \(m\) слева направо. Клетка \((i, j)\) — это клетка на пересечении строки \(i\) и столбца \(j\) для \(1 \leq i \leq n\) и \(1 \leq j \leq m\).

Часть клеток матрицы заблокирована препятствиями (все остальные клетки свободны). Вова находится в одной из свободных клеток. Гарантируется, что клетки \((1, 1)\), \((1, m)\), \((n, 1)\), \((n, m)\) (то есть углы матрицы) заблокированы.

Вова может перейти из одной свободной клетки в другую свободную клетку, если у них есть общая сторона. Вова может выйти из матрицы из любой свободной клетки на границе матрицы, такие клетки называются выходами.

Тип матрицы зависит от количества выходов, которые Вова может использовать, чтобы выйти из матрицы. Существуют матрицы трёх типов:

  • \(1\)-го типа: матрицы без выходов, которые Вова может использовать.
  • \(2\)-го типа: матрицы ровно с одним выходом, который Вова может использовать, чтобы покинуть матрицу.
  • \(3\)-го типа: матрицы с несколькими (двумя или более) выходами, которые Вова может использовать, чтобы покинуть матрицу.

До того как Вова начнёт перемещаться, Миша может создать больше препятствий и заблокировать часть свободных клеток. При этом Миша не может менять тип матрицы. Какое максимальное количество клеток может заблокировать Миша, не изменяя тип матрицы? Миша не может заблокировать клетку, в которой сейчас находится Вова.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано два целых числа \(n\) и \(m\) (\(3 \leq n,m \leq 1000\)) — размеры матрицы.

В следующих \(n\) строках дано описание матрицы: в \(i\)-й (\(1 \le i \le n\)) из них дана строка длины \(m\), состоящая из символов «.», «#» и «V». \(j\)-й символ \(i\)-й строки описывает клетку \((i, j)\) матрицы. Точкой «.» обозначена свободная клетка, решёткой «#» обозначена заблокированная клетка, буквой «V» обозначена свободная клетка, в которой находится Вова.

Гарантируется, что углы матрицы заблокированы (первый и последний символы первой и последней строк описания матрицы равны «#»). Гарантируется, что символ «V» встречается в матрице ровно один раз.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(1\,000\,000\).

Выходные данные

Для каждого набора входных данных выведите одно число: максимальное количество клеток, которые может заблокировать Миша.

Примечание

В первом наборе входных данных дана матрица \(3\)-го типа. Миша может заблокировать все клетки, кроме клеток \((1, 3)\), \((2, 3)\), \((2, 4)\). Существует \(9\) таких клеток и их блокировка не меняет тип матрицы.

Во втором наборе входных данных дана матрица \(3\)-го типа. Блокировка любой клетки меняет тип матрицы на \(2\)-й: один из двух выходов становится недостижимым для Вовы. Поэтому, ответ \(0\).

В третьем наборе входных данных дана матрица \(1\)-го типа. В ней нет свободных клеток (кроме клетки Вовы), поэтому Миша не может заблокировать ни одну клетку.

В четвёртом наборе входных данных дана матрица \(2\)-го типа. Миша может заблокировать \(3\) клетки \((5, 2)\), \((6, 3)\), \((6, 4)\), не изменяя тип матрицы.

В пятом наборе входных данных дана матрица \(3\)-го типа. Миша может заблокировать \(4\) клетки \((2, 2)\), \((3, 2)\), \((4, 2)\), \((5, 2)\) либо \(4\) клетки \((2, 4)\), \((3, 4)\), \((4, 4)\), \((5, 4)\), не изменяя тип матрицы.

B. 250 тысяч тонн тротила

Перебор реализация теория чисел *1100

Лёша участвует в съёмке очередного ролика BrMeast, и BrMeast попросил Лёшу подготовить 250 тысяч тонн тротила, но Лёша его не расслышал, поэтому он подготовил \(n\) коробок. Лёша хочет погрузить эти коробки в грузовики, для этого он расставил их в ряд, \(i\)-я слева коробка имеет вес \(a_i\) тонн.

Все грузовики, которые собирается использовать Лёша, вмещают в себя одинаковое количество коробок, обозначим это количество \(k\). Тогда погрузка происходит следующим образом:

  • В первый грузовик помещаются первые \(k\) коробок,
  • Во второй грузовик помещаются вторые \(k\) коробок,
  • \(\dotsb\)
  • В \(\frac{n}{k}\)-й грузовик помещаются последние \(k\) коробок.

По окончании погрузки в каждом грузовике должно быть ровно \(k\) коробок. То есть, если в какой-то момент в грузовик не получится загрузить ровно \(k\) коробок, то вариант погрузки с таким \(k\) невозможен.

Лёша ненавидит справедливость, так что он хочет, чтобы максимальная абсолютная разница между суммарным весом каких-либо двух грузовиков была как можно больше. Если грузовик один, эта величина равна \(0\).

У Лёши есть достаточно много связей, поэтому для каждого \(1 \leq k \leq n\) он может найти такую компанию, что каждый её грузовик вмещает в себя ровно \(k\) коробок. Выведите максимальную абсолютную разницу между суммарным весом каких-либо двух грузовиков.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 150\,000\)) — количество коробок.

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)) — веса коробок.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(150\,000\).

Выходные данные

Для каждого набора данных выведите одно число — ответ на задачу.

Примечание

В первом случае выгодно взять два грузовика, в первом будет только первая коробка, во втором только вторая.

Во втором случае выгодно взять шесть грузовиков, в каждом по одной коробке. Тогда максимум равен \(10\), минимум равен \(1\), ответ равен \(10 - 1 = 9\).

В третьем случае при любом возможном \(k\) в грузовиках будет одинаковый суммарный вес коробок, то есть ответ равен \(0\).

D. НОД меньших

битмаски дп математика Перебор теория чисел *2000

Пусть \(a\), \(b\) и \(c\) — целые числа. Определим функцию \(f(a, b, c)\) следующим образом.

Упорядочить числа \(a\), \(b\), \(c\) таким образом, чтобы выполнялось \(a \le b \le c\). Затем вернуть \(\gcd(a, b)\), где \(\gcd(a, b)\) обозначает наибольший общий делитель (НОД) чисел \(a\) и \(b\).

Иными словами, мы берем \(\gcd\) из \(2\) меньших значений и игнорируем наибольшее.

Вам дан массив \(a\) длины \(n\). Вычислите сумму \(f(a_i, a_j, a_k)\) для всех \(i\), \(j\), \(k\) таких, что \(1 \le i < j < k \le n\).

Более формально, вычислите \(\)\sum_{i = 1}^n \sum_{j = i+1}^n \sum_{k =j +1}^n f(a_i, a_j, a_k).\(\)

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 8 \cdot 10^4\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(8 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите одно число — сумму из условия.

Примечание

В первом наборе входных данных значения \(f\) следующие:

  • \(i=1\), \(j=2\), \(k=3\), \(f(a_i,a_j,a_k)=f(2,3,6)=\gcd(2,3)=1\);
  • \(i=1\), \(j=2\), \(k=4\), \(f(a_i,a_j,a_k)=f(2,3,12)=\gcd(2,3)=1\);
  • \(i=1\), \(j=2\), \(k=5\), \(f(a_i,a_j,a_k)=f(2,3,17)=\gcd(2,3)=1\);
  • \(i=1\), \(j=3\), \(k=4\), \(f(a_i,a_j,a_k)=f(2,6,12)=\gcd(2,6)=2\);
  • \(i=1\), \(j=3\), \(k=5\), \(f(a_i,a_j,a_k)=f(2,6,17)=\gcd(2,6)=2\);
  • \(i=1\), \(j=4\), \(k=5\), \(f(a_i,a_j,a_k)=f(2,12,17)=\gcd(2,12)=2\)
  • \(i=2\), \(j=3\), \(k=4\), \(f(a_i,a_j,a_k)=f(3,6,12)=\gcd(3,6)=3\);
  • \(i=2\), \(j=3\), \(k=5\), \(f(a_i,a_j,a_k)=f(3,6,17)=\gcd(3,6)=3\);
  • \(i=2\), \(j=4\), \(k=5\), \(f(a_i,a_j,a_k)=f(3,12,17)=\gcd(3,12)=3\);
  • \(i=3\), \(j=4\), \(k=5\), \(f(a_i,a_j,a_k)=f(6,12,17)=\gcd(6,12)=6\).
Сумма по всем тройкам равна \(1+1+1+2+2+2+3+3+3+6=24\).

Во втором наборе входных данных существует \(56\) способов выбора значений \(i\), \(j\), \(k\). Сумма по всем \(f(a_i,a_j,a_k)\) равна \(203\).

B. Зарабатывание баллов

Бинарный поиск жадные алгоритмы Перебор *1100

Монокарп — студент Берландского государственного университета. Из-за недавних изменений в системе образования Берландии, Монокарпу приходится изучать только один предмет — программирование.

Учебный семестр состоит из \(n\) дней, и чтобы не быть отчисленным, Монокарп должен заработать как минимум \(P\) баллов в течение этих \(n\) дней. Есть два способа заработать баллы — выполнение практических заданий и посещение лекций. За каждое выполненное практическое задание Монокарп получает \(t\) баллов, а за каждую посещенную лекцию — \(l\) баллов.

Практические задания становятся доступными «каждую неделю» по мере продвижения семестра: первое задание становится доступным в день \(1\) (и может быть выполнено в любой день с \(1\) по \(n\)), второе задание становится доступным в день \(8\) (и может быть выполнено в любой день с \(8\) по \(n\)), третье задание становится доступным в день \(15\), и так далее.

Каждый день с \(1\) по \(n\) проходит лекция, на которую может прийти Монокарп. И каждый день Монокарп выбирает, учиться ему сегодня или отдыхать весь день. Когда Монокарп решает учиться, он посещает лекцию и может выполнить не более \(2\) заданий, которые уже доступны и еще не выполнены. Если Монокарп отдыхает весь день, он пропускает лекцию и игнорирует задания.

Монокарп хочет иметь как можно больше выходных, то есть максимизировать количество дней, которые он может отдыхать. Помогите ему вычислить максимальное количество дней, которые он может отдыхать!

Входные данные

Первая строка содержит одно целое число \(tc\) (\(1 \le tc \le 10^4\)) — количество наборов входных данных. Далее следуют описания самих наборов.

В единственной строке каждого набора входных данных задано четыре целых числа \(n\), \(P\), \(l\) и \(t\) (\(1 \le n, l, t \le 10^9\); \(1 \le P \le 10^{18}\)) — количество дней, минимальное суммарное количество баллов, которое должен заработать Монокарп, баллы за посещение одной лекции и баллы за выполнение одного задания.

Для каждого набора гарантируется, что Монокарп не будет отчислен, если будет посещать все лекции и выполнять все задания.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество дней, которые Монокарп может отдыхать, не будучи отчисленным из университета.

Примечание

В первом наборе семестр длится \(1\) день, поэтому Монокарп должен посетить лекцию в день \(1\). Поскольку посещение одной лекции уже дает \(5\) баллов (\(5 \ge P\)), не имеет значения, выполнит ли Монокарп задание или нет.

Во втором наборе Монокарп может, например, учиться в дни \(8\) и \(9\): в день \(8\) он посетит лекцию за \(10^9\) баллов и выполнит два задания еще на \(5 \cdot 10^8 + 5 \cdot 10^8\) баллов. А в день \(9\) он посетит только лекцию еще на \(10^9\) баллов.

В третьем наборе Монокарп может, например, учиться только в день \(42\): посещение лекции дает ему \(1\) балл, а решение \(2\) из \(6\) доступных заданий дает ему еще \(2 \cdot 10\) баллов.

В четвертом наборе Монокарп должен посетить все лекции и выполнить все задания, чтобы получить \(8 \cdot 10 + 2 \cdot 20 = 120\) баллов.

В пятом наборе Монокарп может, например, учиться в дни: \(8\) — одна лекция и первое и второе задания; \(15\) — одна лекция и третье задание; \(22\) — одна лекция и четвертое задание; \(29\) — одна лекция и пятое задание; \(36\) — одна лекция и шестое задание.

C. Вставь и приравняй

жадные алгоритмы Конструктив математика Перебор теория чисел *1300

Задан массив целых чисел \(a_1, a_2, \dots, a_n\), все его элементы различны.

Сначала вы вставляете в этот массив еще одно целое число \(a_{n+1}\). \(a_{n+1}\) не должно быть равно ни одному из \(a_1, a_2, \dots, a_n\).

Затем все элементы массива надо будет сделать равными. Для этого вы выбираете положительное целое число \(x\) (\(x > 0\)). После этого за одну операцию вы прибавляете \(x\) ровно к одному элементу массива. Обратите внимание, что \(x\) одинаковый для всех операций.

Какое наименьшее количество операций вам потребуется, чтобы сделать все элементы равными, после выбора \(a_{n+1}\) и \(x\)?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)). Все \(a_i\) различны.

Сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее количество операций, которое вам потребуется, чтобы сделать все элементы равными, после выбора целых чисел \(a_{n+1}\) и \(x\).

Примечание

В первом наборе входных данных вы можете выбрать \(a_{n+1} = 4\), массив станет \([1, 2, 3, 4]\). Затем вы можете выбрать \(x = 1\) и применить операцию \(3\) раза к первому элементу, \(2\) раза ко второму элементу, \(1\) раз к третьему элементу и \(0\) раз к четвертому элементу.

Во втором наборе вы можете выбрать \(a_{n+1} = 13, x = 4\).

В третьем наборе вы можете выбрать \(a_{n+1} = 9, x = 1\). Затем применить операцию один раз к \(a_{n+1}\).

A. Коробкии халлуми

жадные алгоритмы Перебор сортировки *800

Теофанис очень занят после предыдущего контеста, ведь теперь ему нужно доставлять халлуми по всему миру. Он сложил сыр в \(n\) коробок, на каждой из которых написано некоторое число \(a_i\).

Теофанис хочет отсортировать коробки по неубыванию чисел на коробках, но его машина работает странным образом. Она может только разворачивать подмассивы\(^{\dagger}\) ящиков длины не более \(k\).

Найдите, можно ли отсортировать ящики за любое число разворотов.

\(^{\dagger}\) Развернуть подмассив массива — значит выбрать два индекса \(i\) и \(j\) (где \(1 \le i \le j \le n\)) и изменить массив \(a_1, a_2, \ldots, a_n\) на \(a_1, a_2, \ldots, a_{i-1}, \; a_j, a_{j-1}, \ldots, a_i, \; a_{j+1}, \ldots, a_{n-1}, a_n\). Тогда длина подмассива равна \(j - i + 1\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 100\)) — количество ящиков и максимальную длину подмассива, который может развернуть Теофанис.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{9}\)) — числа, написанные на коробках.

Выходные данные

Для каждого набора входных данных выведите YES (в любом регистре), если массив может быть отсортирован в неубывающем порядке, или NO (в любом регистре) в противном случае.

Примечание

В первых двух наборах входных данных коробки уже отсортированы в неубывающем порядке.

В третьем наборе входных данных мы можем развернуть весь массив.

В четвертом наборе входных данных мы можем развернуть первые два ящика и последние два ящика.

В пятом наборе входных данных можно показать, что отсортировать ящики невозможно.

B. ХранИЛИще

битмаски жадные алгоритмы Конструктив Перебор *1200

На Кипре стоит довольно жаркая погода. Поэтому Теофанис увидел в этом возможность создать компанию по производству мороженого.

Он хранит мороженое в безопасности от других производителей мороженого, запирая его в больших складских помещениях. Однако он забыл пароль. К счастью, у замка есть специальная функция для забывчивых людей!

Дана таблица \(M\) с \(n\) строками и \(n\) столбцами неотрицательных целых чисел, и, чтобы открыть замок, вам нужно найти массив \(a\) из \(n\) элементов такой, что:

  • \(0 \le a_i < 2^{30}\), и
  • \(M_{i,j} = a_i | a_j\) для всех \(i \neq j\), где \(|\) обозначает операцию побитового ИЛИ.

Замок может иногда выдавать таблицы, для которых нет решения. В этом случае мороженое останется замороженным до конца времен.

Сможете ли вы найти массив, чтобы открыть замок?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^{3}\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^{3}\)) — размер искомого массива.

Следующие \(n\) строк описывают строки таблицы \(M\), строка \(i\) содержит значения \(M_{i,1}, M_{i,2}, \ldots, M_{i,n}\) (\(0 \le M_{i,j} < 2^{30}\)).

Гарантируется, что \(M_{i,i} = 0\) и \(M_{i,j} = M_{j,i}\) для всех \(1 \le i,j \le n\).

Также гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^{3}\).

Выходные данные

Для каждого набора входных данных, если существует решение, выведите в отдельных строках YES и искомый массив, в противном случае выведите NO.

Если существует несколько решений, выведите любое из них.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

D1. Максимум и запросы (простая версия)

Бинарный поиск битмаски жадные алгоритмы Перебор *1700

Это простая версия задачи. Единственное различие между двумя версиями — это ограничения на \(n\) и \(q\), а также ограничения по времени и памяти. Вы можете делать взломы, только если обе версии задачи решены.

Теофанису очень нравится играть с битами чисел. У него есть массив \(a\) длины \(n\) и целое число \(k\). Он может совершить не более \(k\) операций с массивом, в каждой из которых он выбирает один элемент и увеличивает его на \(1\).

Он нашел максимальное побитовое И, которое может иметь массив \(a\) после выполнения не более чем \(k\) операций.

Теофанис приложил много усилий, чтобы найти это значение, и был очень доволен своим результатом. К сожалению, Адас, будучи злым человеком, решил поиздеваться над ним, неоднократно меняя значение \(k\).

Помогите Теофанису, вычислив максимально возможное побитовое И для \(q\) различных значений \(k\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^5\) и \(n \cdot q \le 10^5\)) — длину массива и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^6\)) — элементы массива.

Следующие \(q\) строк описывают запросы. В \(i\)-й строке содержится одно целое число \(k_i\) (\(0 \le k_i \le 10^{18}\)) — количество операций, которое может быть выполнено в \(i\)-м запросе.

Выходные данные

Для каждого запроса выведите одно целое число — максимальное побитовое И, которое может иметь массив \(a\) после выполнения не более чем \(k_i\) операций.

Примечание

В первом наборе входных данных, в первом запросе, мы добавляем \(1\) к первому и последнему элементу массива.

Таким образом, массив становится равен \([2,3,7,6]\) с побитовым И, равным \(2\).

Во втором наборе входных данных, в первом запросе, мы добавляем \(1\) к первому элементу, \(5\) ко второму и \(3\) к третьему, после чего все элементы становятся равны \(5\).

A. Вилка!

Перебор реализация *900

Ланчбоксу надоело играть в шахматы! Его соперник только что снова поставил вилку королю и ферзю!

В шахматах вилка — ситуация, когда конь атакует две фигуры более высокого достоинства, обычно короля и ферзя. Ланчбокс знает, что кони могут делать очень хитрые ходы, а в той версии шахмат, в которую он играет, кони еще хитрее: вместо того, чтобы двигаться на \(1\) клетку в одну сторону и на \(2\) клетки в другую, кони в модифицированной игре Ланчбокса двигаются на \(a\) клеток в одну сторону и на \(b\) клеток в другую.

Ланчбокс играет в шахматы на бесконечной шахматной доске, которая содержит все клетки \((x,y)\), где \(x\) и \(y\) — (возможно, отрицательные) целые числа. Король и ферзь Ланчбокса размещены на клетках \((x_K,y_K)\) и \((x_Q,y_Q)\) соответственно. Найдите количество позиций, для которых, если на эту клетку поставить коня, он будет атаковать и короля, и ферзя.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(1 \le a, b \le 10^8\)) — описание возможных ходов коня.

Вторая строка каждого набора входных данных содержит два целых числа \(x_K\) и \(y_K\) (\(0 \le x_K, y_K \le 10^8\)) — позицию короля Ланчбокса.

Третья строка в наборе входных данных содержит два целых числа \(x_Q\) и \(y_Q\) (\(0 \le x_Q, y_Q \le 10^8\)) — позицию ферзя Ланчбокса.

Гарантируется, что ферзь и король Ланчбокса находятся на разных клетках. То есть \((x_K,y_K) \neq (x_Q,y_Q)\).

Выходные данные

Для каждого набора входных данных выведите количество позиций на бесконечной шахматной доске, на которых конь может атаковать и короля, и ферзя.

Примечание

В первом наборе входных данных конь может перемещаться на 2 клетки в одну сторону и на 1 клетку в другую (по сути, это то же самое, что и конь в стандартных шахматах). Конь, поставленный на \((2, 1)\) или \((1, 2)\), будет атаковать и короля, и ферзя.

Пример размещения коня, который атакует ферзя и короля в первом наборе входных данных. Клетки, которые атакует конь, выделены красным цветом.

Во втором наборе входных данных конь, размещенный на \((2, 2)\), атакует и короля, и ферзя.

Пример размещения коня, который не ставит вилку на ферзя и короля во втором наборе входных данных. Конь атакует короля, но не ферзя.

В третьем наборе входных данных конь, размещенный на \((4, 4)\) или \((4, -4)\), будет атаковать и короля, и ферзя.

В четвертом наборе входных данных нет позиций, на которых конь мог бы атаковать и короля, и ферзя.

(Спасибо EnDeRBeaT за красивые картинки)

C. Игра с массивом

Бинарный поиск Перебор сортировки Структуры данных *1400

Вам дан массив \(a\) из \(n\) целых положительных чисел. За одну операцию вы должны выбрать некоторую пару \((i, j)\) такую, что \(1\leq i < j\leq |a|\) и добавить \(|a_i - a_j|\) к концу \(a\) (то есть увеличить \(n\) на \(1\) и сделать новый элемент \(a_n\) равным \(|a_i - a_j|\)). Ваша задача — минимизировать и вывести минимальный элемент \(a\) после выполнения \(k\) операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2\le n\le 2\cdot 10^3\), \(1\le k\le 10^9\)) — длину массива и количество операций, которое необходимо выполнить.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1\le a_i\le 10^{18}\)) — элементы массива \(a\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(4\cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наименьшее возможное значение минимума массива \(a\) после выполнения \(k\) операций.

Примечание

В первом наборе входных данных после любых \(k=2\) операций минимальное значение \(a\) будет равно \(1\).

Во втором наборе входных данных оптимальная стратегия состоит в том, чтобы сначала выбрать \(i=1, j=2\) и добавить \(|a_1 - a_2| = 3\) к концу \(a\), получив \(a=[7, 4, 15, 12, 3]\). Затем выбрать \(i=3, j=4\) и добавить \(|a_3 - a_4| = 3\) к концу \(a\), получив \(a=[7, 4, 15, 12, 3, 3]\). В последней операции выбрать \(i=5, j=6\) и добавить \(|a_5 - a_6| = 0\) в конец \(a\). Тогда минимальный элемент \(a\) станет равным \(0\).

В третьем наборе входных данных оптимальная стратегия состоит в том, чтобы сначала выбрать \(i=2, j=3\) и добавить \(|a_2 - a_3| = 3\) к концу \(a\). Любая вторая операция все равно не приведет к тому, чтобы минимальное значение \(a\) стало меньше \(3\).

D1. Присвоить максимум (простая версия)

жадные алгоритмы Конструктив Перебор *1600

Это простая версия задачи. Единственное различие между двумя версиями — это ограничение на \(n\) и ограничение по времени. Вы можете делать взломы, только если обе версии задачи решены.

Вам даны два массива \(a\) и \(b\) длины \(n\).

Вы можете выполнить следующую операцию несколько (возможно, ноль) раз:

  1. выбрать \(l\) и \(r\) такие, что \(1 \leq l \leq r \leq n\).
  2. пусть \(x=\max(a_l,a_{l+1},\ldots,a_r)\).
  3. для всех \(l \leq i \leq r\), присвоить \(a_i := x\).

Определите, можно ли сделать массив \(a\) равным массиву \(b\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — длину массивов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива \(a\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\)) — элементы массива \(b\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если вы можете превратить \(a\) в \(b\) с помощью данных операций, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных мы можем получить массив \(b\), применив единственную операцию: \((l,r)=(2,3)\).

Во втором наборе входных данных можно показать, что мы не можем получить массив \(b\) ни при каком количестве операций.

В третьем наборе входных данных массив \(b\) можно получить, применив две операции: \((l,r)=(2,5)\) и \((l,r)=(1,3)\).

В четвертом и пятом наборах входных данных можно показать, что массив \(b\) не может быть получен ни при каком количестве операций.

F. Поле не должно быть пустым

Перебор разделяй и властвуй Структуры данных *2600

Вам дана перестановка\(^{\dagger}\) \(p\) длины \(n\).

Мы называем индекс \(x\) хорошим, если для всех \(y < x\) выполняется условие \(p_y < p_x\), и для всех \(y > x\) выполняется условие \(p_y > p_x\). Обозначим \(f(p)\) как количество хороших индексов в \(p\).

Вы можете выполнить следующую операцию: выберите \(2\) различных индекса \(i\) и \(j\) и поменяйте местами элементы \(p_i\) и \(p_j\).

Найдите максимальное значение \(f(p)\) после применения вышеупомянутой операции ровно один раз.

\(^{\dagger}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина перестановки \(p\).

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — элементы перестановки \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное значение \(f(p)\) после выполнения операции ровно один раз.

Примечание

В первом наборе входных данных \(p = [1,2,3,4,5]\) и \(f(p)=5\), что уже является максимально возможным. Но операцию нужно выполнить в любом случае. Мы можем получить \(f(p)=3\), выбрав \(i=1\) и \(j=2\), после чего \(p = [2,1,3,4,5]\).

Во втором наборе входных данных мы можем преобразовать \(p\) в \([1,2,3,4,5]\), выбрав \(i=1\) и \(j=2\). Таким образом, \(f(p)=5\).

A. Easy As ABC

Перебор *1000

You are playing a word puzzle. The puzzle starts with a \(3\) by \(3\) grid, where each cell contains either the letter A, B, or C.

The goal of this puzzle is to find the lexicographically smallest possible word of length \(3\). The word can be formed by choosing three different cells where the cell containing the first letter is adjacent to the cell containing the second letter, and the cell containing the second letter is adjacent to the cell containing the third letter.

Two cells are adjacent to each other if they share a border or a corner, as shown in the following illustration. Formally, if \((r, c)\) denotes the cell in the \(r\)-th row and \(c\)-th column, then cell \((r, c)\) is adjacent to cell \((r, c + 1)\), \((r - 1, c + 1)\), \((r - 1, c)\), \((r - 1, c - 1)\), \((r, c - 1)\), \((r + 1, c - 1)\), \((r + 1, c)\), and \((r + 1, c + 1)\).

Determine the lexicographically smallest possible word of length \(3\) that you can find within the grid.

A string \(s\) of length \(n\) is lexicographically smaller than string \(t\) of the same length if there exists an integer \(1 \leq i \leq n\) such that \(s_j = t_j\) for all \(1 \leq j < i\), and \(s_i < t_i\) in alphabetical order. The following illustration shows some examples on some grids and their the lexicographically smallest possible word of length \(3\) that you can find within the grids.

Input

Input consists of three lines, each containing three letters, representing the puzzle grid. Each letter in the grid can only be either A, B, or C.

Output

Output the lexicographically smallest possible word of length \(3\) that you can find within the grid.

E. Хорошие тройки

Комбинаторика Перебор теория чисел *1600

Дано неотрицательное целое число \(n\) (\(n \ge 0\)). Будем называть тройку неотрицательных целых чисел \((a, b, c)\) хорошей, если \(a + b + c = n\) и \(digsum(a) + digsum(b) + digsum(c) = digsum(n)\), где \(digsum(x)\) — это сумма цифр числа \(x\).

Например, если \(n = 26\), то тройка \((4, 12, 10)\) является хорошей, потому что \(4 + 12 + 10 = 26\), и \((4) + (1 + 2) + (1 + 0) = (2 + 6)\).

Ваша задача — найти количество хороших троек для заданного числа \(n\). Порядок чисел в тройке имеет значение. Например, тройки \((4, 12, 10)\) и \((10, 12, 4)\) считаются разными.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Единственная строка набора входных данных содержит одно целое число \(n\) (\(0 \le n \le 10^7\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество хороших троек для заданного числа \(n\). Порядок чисел в тройке имеет значение.

Примечание

В первом примере хорошие тройки следующие: \((0, 0, 11)\), \((0, 1, 10)\), \((0, 10, 1)\), \((0, 11, 0)\), \((1, 0, 10)\), \((1, 10, 0)\), \((10, 0, 1)\), \((10, 1, 0)\), \((11, 0, 0)\).

Во втором примере есть только одна хорошая тройка \((0, 0, 0)\).

G. Освещение

графы жадные алгоритмы Конструктив Перебор поиск в глубину и подобное реализация *2200

В конце дня Анне нужно выключить свет в офисе. Есть \(n\) ламп и \(n\) выключателей, но схема их работы довольно странная. Выключатель \(i\) меняет состояние лампы \(i\), но также меняет состояние другой лампы \(a_i\) (изменение состояния означает, что если лампа была включена, она выключается, и наоборот).

Помогите Анне выключить все лампы, используя минимальное количество выключателей, или скажите, что это невозможно.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит целое число \(n\) (\(2 \le n \le 10^5\)) — количество ламп.

Вторая строка каждого набора содержит строку из \(n\) символов — начальное состояние ламп. Символ «0» означает, что соответствующая лампа выключена, а «1» означает, что она включена.

Третья строка каждого набора содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le n\), \(a_i \neq i\)) — выключатель \(i\) меняет состояние лампы \(i\) и лампы \(a_i\).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\)

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) — минимальное количество выключателей, которое нужно использовать, затем в отдельной строке выведите список из \(k\) выключателей.

Если невозможно выключить все лампы, выведите одно целое число \(-1\).

E. Несколько ламп

битмаски Конструктив математика Перебор теория чисел *2400

У вас есть \(n\) ламп, пронумерованных от \(1\) до \(n\). Изначально все лампы выключены.

У вас также есть \(n\) кнопок. Кнопка \(i\) переключает все лампы, чей индекс кратен \(i\). Когда лампа переключается, если она была выключена, то она включается, а если была включена, то выключается.

Вы должны нажать несколько кнопок в соответствии со следующими правилами.

  • Вы должны нажать хотя бы одну кнопку.
  • Вы не можете нажимать одну и ту же кнопку несколько раз.
  • Вам даны \(m\) пар \((u_i, v_i)\). Если вы нажмете кнопку \(u_i\), вы также должны нажать кнопку \(v_i\) (либо до, либо после нажатия кнопки \(u_i\)). Обратите внимание, что если вы нажимаете кнопку \(v_i\), то вам не нужно нажимать кнопку \(u_i\).

Вы не хотите тратить слишком много электричества. Найдите способ нажимать кнопки так, чтобы в конце горело не более \(\lfloor n/5 \rfloor\) ламп, или выведите \(-1\), если это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 2 \cdot 10^5\), \(0 \leq m \leq 2 \cdot 10^5\)) — количество ламп и количество пар, соответственно.

Каждая из следующих \(m\) строк содержит по два целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \neq v_i\)). Если вы нажимаете кнопку \(u_i\), вы также должны нажать кнопку \(v_i\). Гарантируется, что пары \((u_i, v_i)\) различны.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

  • Если не существует набора кнопок, после нажатия на которые горят не более \(\lfloor n/5 \rfloor\) ламп, выведите одну строку, содержащую \(-1\).
  • В противном случае выведите две строки. Первая строка должна содержать целое число \(k\) (\(1 \le k \le n\)) — количество нажатых кнопок. Вторая строка должна содержать \(k\) целых чисел \(b_1, b_2, \dots, b_k\) (\(1 \le b_i \le n\)) — индексы нажатых кнопок (в любом порядке). Индексы \(b_i\) должны быть различными, и в конце должно быть включено не более \(\lfloor n/5 \rfloor\) ламп.
Примечание

В первом наборе входных данных требуется оставить включенными не более \(\lfloor 4/5 \rfloor\) ламп, а это значит, что ни одна лампа не может остаться включенной в конце. Можно показать, что при нажатии хотя бы одной кнопки в конце не может оказаться \(0\) включенных ламп.

Во втором наборе входных данных можно нажать кнопки \(3\), \(5\), \(1\), \(2\).

  • Изначально все лампы выключены;
  • после нажатия кнопки \(3\), лампы, чей индекс кратен \(3\) (т.е. \(3\)), переключаются, так что лампа \(3\) включается;
  • после нажатия кнопки \(5\), лампы, чей индекс кратен \(5\) (т.е. \(5\)) переключаются, поэтому лампы \(3\), \(5\) включены;
  • после нажатия кнопки \(1\), лампы, чей индекс кратен \(1\) (т.е. \(1\), \(2\), \(3\), \(4\), \(5\)) переключаются, поэтому становятся включенными лампы \(1\), \(2\), \(4\);
  • после нажатия кнопки \(2\), лампы, чей индекс кратен \(2\) (т.е. \(2\), \(4\)) переключаются, поэтому остается включенной только лампа \(1\).

Это решение корректно, потому что

  • вы нажали хотя бы одну кнопку;
  • вы нажали каждую кнопку не более одного раза;
  • вы нажали кнопку \(u_2 = 5\), что означает, что вы должны были также нажать кнопку \(v_2 = 1\), и кнопка \(1\) была нажата;
  • в конце горит только лампа \(1\).

В третьем наборе входных данных нажатие кнопок \(8\), \(9\), \(10\) включает только лампы \(8\), \(9\), \(10\).

F1. Небольшая задачка про перестановки (простая версия)

дп Комбинаторика математика Перебор *2200

В простой версии задачи \(a_i\) находятся в диапазоне \([0, n]\); в сложной версии \(a_i\) находятся в диапазоне \([-1, n]\) и определение хорошей перестановки немного отличается. Вы можете делать взломы, только если обе версии задачи решены.

Вам дано целое число \(n\) и массив \(a_1, a_2 \dots, a_n\) целых чисел в диапазоне \([0, n]\).

Перестановка \(p_1, p_2, \dots, p_n\) элементов \([1, 2, \dots, n]\) называется хорошей, если для каждого \(i\) верно следующее утверждение:

  • количество значений \(\leq i\) в \([p_1, p_2, \dots, p_i]\) в точности равно \(a_i\).

Посчитайте количество хороших перестановок \([1, 2, \dots, n]\) по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n\)), которые описывают критерии хорошей перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую количество хороших перестановок по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных единственной хорошей перестановкой является \([1, 2, 3, 4, 5]\).

Во втором наборе входных данных существует \(4\) хороших перестановки: \([2, 1, 5, 6, 3, 4]\), \([2, 1, 5, 6, 4, 3]\), \([2, 1, 6, 5, 3, 4]\), \([2, 1, 6, 5, 4, 3]\). Например, \([2, 1, 5, 6, 3, 4]\) — хорошая, потому что:

  • \(a_1 = 0\), и в \([p_1] = [2]\) есть \(0\) значений \(\leq 1\);
  • \(a_2 = 2\), и есть \(2\) значения \(\leq 2\) в \([p_1, p_2] = [2, 1]\);
  • \(a_3 = 2\), и есть \(2\) значения \(\leq 3\) в \([p_1, p_2, p_3] = [2, 1, 5]\);
  • \(a_4 = 2\), и есть \(2\) значения \(\leq 4\) в \([p_1, p_2, p_3, p_4] = [2, 1, 5, 6]\);
  • \(a_5 = 4\), и есть \(4\) значения \(\leq 5\) в \([p_1, p_2, p_3, p_4, p_5] = [2, 1, 5, 6, 3]\);
  • \(a_6 = 6\), и есть \(6\) значений \(\leq 6\) в \([p_1, p_2, p_3, p_4, p_5, p_6] = [2, 1, 5, 6, 3, 4]\).

В третьем наборе входных данных нет хороших перестановок, потому что не существует перестановок с \(a_6 = 5\) значениями \(\leq 6\) в \([p_1, p_2, p_3, p_4, p_5, p_6]\).

C. Игра с мультимножеством

Бинарный поиск битмаски жадные алгоритмы Перебор *1300

В этой задаче вам изначально дано пустое мультимножество. Вам нужно обработать два типа запросов:

  1. ADD \(x\) — добавить элемент, равный \(2^{x}\), в мультимножество;
  2. GET \(w\) — сказать, возможно ли взять сумму некоторого подмножества текущего мультимножества и получить значение, равное \(w\).
Входные данные

Первая строка содержит одно целое число \(m\) (\(1 \le m \le 10^5\)) — количество запросов.

Затем следуют \(m\) строк, каждая из которых содержит два целых числа \(t_i\), \(v_i\), обозначающих \(i\)-й запрос. Если \(t_i = 1\), то \(i\)-й запрос — ADD \(v_i\) (\(0 \le v_i \le 29\)). Если \(t_i = 2\), то \(i\)-й запрос — GET \(v_i\) (\(0 \le v_i \le 10^9\)).

Выходные данные

Для каждого запроса GET выведите YES, если возможно выбрать подмножество с суммой, равной \(w\), или NO, если это невозможно.

D. Три активности

дп жадные алгоритмы Перебор реализация сортировки *1200

Приближаются зимние каникулы. Они будут длиться \(n\) дней.

Во время каникул Монокарп с друзьями хочет ровно по одному разу:

  • пойти кататься на лыжах;
  • посмотреть фильм в кинотеатре;
  • поиграть в настольные игры.

Монокарп знает, что в \(i\)-й день ровно \(a_i\) друзей соберутся на катание на лыжах, \(b_i\) друзей — на просмотр фильма и \(c_i\) друзей — на настольные игры.

Монокарп также знает, что он не может заниматься более чем одной активностью в течение одного дня.

Поэтому он просит вас помочь ему выбрать три различных дня \(x, y, z\) таким образом, чтобы общее количество друзей, присоединившихся к нему на активности (\(a_x + b_y + c_z\)), было максимальным.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого теста содержит одно целое число \(n\) (\(3 \le n \le 10^5\)) — продолжительность зимних каникул в днях.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^8\)) — количество друзей, которые присоединятся к Монокарпу для катания на лыжах в \(i\)-й день.

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^8\)) — количество друзей, которые присоединятся к Монокарпу для просмотра фильма в \(i\)-й день.

Четвертая строка содержит \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le 10^8\)) — количество друзей, которые присоединятся к Монокарпу для настольных игры в \(i\)-й день.

Сумма \(n\) по всем тестам не превышает \(10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — максимальное суммарное количество друзей, которые могут присоединиться к Монокарпу за три различных дня.

Примечание

В первом наборе входных данных Монокарп может выбрать день \(2\) для катания на лыжах, день \(1\) для просмотра фильма и день \(3\) для настольных игр. Таким образом, \(a_2 = 10\) друзей присоединятся к нему для катания на лыжах, \(b_1 = 10\) друзей присоединятся к нему для просмотра фильма и \(c_3 = 10\) друзей присоединятся к нему для настольных игр. Общее количество друзей составляет \(30\).

Во втором наборе Монокарп может выбрать день \(1\) для катания на лыжах, день \(4\) для просмотра фильма и день \(2\) для настольных игр. Всего соберется \(30 + 20 + 25 = 75\) друзей. Обратите внимание, что Монокарп не может выбрать день \(1\) для всех активностей, потому что он не может заниматься более чем одной активностью в течение одного дня.

В третьем наборе Монокарп может выбрать день \(2\) для катания на лыжах, день \(3\) для просмотра фильма и день \(7\) для настольных игр. Всего соберется \(19 + 19 + 17 = 55\) друзей.

В третьем наборе Монокарп может выбрать день \(1\) для катания на лыжах, день \(4\) для просмотра фильма и день \(9\) для настольных игр. Всего соберется \(17 + 19 + 20 = 56\) друзей.

E1. Игра с шариками (простая версия)

жадные алгоритмы игры Перебор сортировки *1400

Простая и сложная версии этой задачи отличаются друг от друга только ограничениями на количество наборов входных данных и \(n\). В простой версии количество наборов входных данных не превосходит \(10^3\), а \(n\) не превосходит \(6\).

Недавно Алисе и Бобу родители подарили шарики \(n\) различных цветов: получилось, что у Алисы \(a_1\) шариков цвета \(1\), \(a_2\) шариков цвета \(2\),..., \(a_n\) шариков цвета \(n\). У Боба: \(b_1\) шариков цвета \(1\), \(b_2\) шариков цвета \(2\), ..., \(b_n\) шариков цвета \(n\). Все \(a_i\) и \(b_i\) от \(1\) до \(10^9\).

Посовещавшись, Алиса и Боб придумали следующую игру: игроки ходят по очереди, начиная с Алисы. На своём ходу игрок выбирает такой цвет \(i\), что у обоих игроков есть хотя бы по одному шарику этого цвета. Он выбрасывает один шарик цвета \(i\), а его противник — все шарики цвета \(i\). Игра заканчивается, когда не существует такого цвета \(i\), что у обоих игроков есть хотя бы по одному шарику этого цвета.

Счёт в игре — это количество оставшихся шариков у Алисы минус количество оставшихся шариков у Боба по окончании игры. То есть счёт равен \((A-B)\), где \(A\) — количество шариков у Алисы, а \(B\) — количество шариков у Боба в конце игры. Алиса хочет максимизировать счёт, а Боб — минимизировать.

Посчитайте, какой счёт будет в конце игры, если оба игрока играют оптимально.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк:

  • в первой строке задано одно целое число \(n\) (\(2 \le n \le 6\)) — количество цветов шариков;
  • во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — количество шариков \(i\)-го цвета у Алисы;
  • в третьей строке заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)), где \(b_i\) — количество шариков \(i\)-го цвета у Боба.
Выходные данные

Для каждого набора входных данных выведите одно целое число — счёт в конце игры, если и Алиса и Боб будут действовать оптимально.

Примечание

В первом примере один из способов получить счёт \(1\) — следующий:

  1. Алиса выбирает цвет \(1\), выбрасывает \(1\) шарик. Боб также выбрасывает \(1\) шарик;
  2. Боб выбирает цвет \(3\), выбрасывает \(1\) шарик. Алиса также выбрасывает \(1\) шарик;
  3. Алиса выбирает цвет \(2\), выбрасывает \(1\) шарик, а Боб — \(2\) шарика.

В результате у Алисы остается \(a = [3, 1, 0]\), а у Боба — \(b = [0, 0, 3]\). Счёт равен \(3 + 1 - 3 = 1\).

Можно показать, что ни Алиса ни Боб не могут получить лучший счёт, если оба играют оптимально.

Во втором примере Алиса может сначала выбрать цвет \(1\), далее Боб выберет цвет \(4\), после этого Алиса выберет цвет \(2\), и Боб — цвет \(3\). Можно показать, что это оптимальная игра.

G1. Лампочки (простая версия)

графы Деревья дп Комбинаторика математика Перебор поиск в глубину и подобное снм *2100

Простая и сложная версии этой задачи отличаются друг от друга только ограничениями на \(n\). В простой версии сумма значений \(n^2\) по всем наборам входных данных не превосходит \(10^6\). Кроме того, \(n\) не превосходит \(1000\) в каждом наборе входных данных.

В ряд расположены \(2n\) лампочек. У каждой лампочки есть цвет от \(1\) до \(n\) (ровно по две лампочки каждого цвета).

Изначально все лампочки выключены. Вы выбираете некоторое множество лампочек \(S\), которое вы изначально включите. После этого вы можете выполнять следующие операции в любом порядке любое количество раз:

  • выбрать две лампочки \(i\) и \(j\) одинакового цвета, ровно одна из которых включена, и включить вторую из них;
  • выбрать три лампочки \(i, j, k\), такие, что обе лампочки \(i\) и \(k\) включены и имеют одинаковый цвет, а лампочка \(j\) находится между ними (\(i < j < k\)), и включить лампочку \(j\).

Вы хотите выбрать такое множество лампочек \(S\), которые вы изначально включаете, чтобы путем выполнения описанных операций можно было добиться того, чтобы все лампочки оказались включены.

Посчитайте два числа:

  • минимальный размер множества \(S\), которое вы изначально включаете;
  • количество множеств \(S\) минимального размера (по модулю \(998244353\)).
Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 1000\)) — количество пар лампочек.

Во второй строке каждого набора заданы \(2n\) целых чисел \(c_1, c_2, \dots, c_{2n}\) (\(1 \le c_i \le n\)), где \(c_i\) — цвет \(i\)-й лампочки. Для каждого цвета от \(1\) до \(n\) ровно две лампочки имеют этот цвет.

Дополнительное ограничение на входные данные: сумма значений \(n^2\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите два целых числа:

  • минимальный размер множества \(S\), которое вы изначально включаете;
  • количество множеств \(S\) минимального размера (по модулю \(998244353\)).

B. Не совсем латинский квадрат

битмаски Перебор реализация *800

Латинский квадрат — это сетка \(3 \times 3\), состоящая из букв \(\texttt{A}\), \(\texttt{B}\) и \(\texttt{C}\) таким образом, что:

  • в каждой строке буквы \(\texttt{A}\), \(\texttt{B}\) и \(\texttt{C}\) появляются по одному разу, и
  • в каждом столбце буквы \(\texttt{A}\), \(\texttt{B}\) и \(\texttt{C}\) появляются по одному разу.
Например, один из возможных латинских квадратов показан ниже. \(\)\begin{bmatrix} \texttt{A} & \texttt{B} & \texttt{C} \\ \texttt{C} & \texttt{A} & \texttt{B} \\ \texttt{B} & \texttt{C} & \texttt{A} \\ \end{bmatrix}\(\)

Вам дан латинский квадрат, но одна из букв была заменена вопросительным знаком \(\texttt{?}\). Найдите букву, которая была заменена.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 108\)) — количество наборов входных данных.

Каждый набор состоит из трех строк, каждая из которых состоит из трех символов, представляющих латинский квадрат. Каждый символ — это одна из букв \(\texttt{A}\), \(\texttt{B}\), \(\texttt{C}\) или \(\texttt{?}\).

Каждый набор представляет собой латинский квадрат, в котором ровно одна из букв заменена вопросительным знаком \(\texttt{?}\).

Выходные данные

Для каждого набора входных данных выведите букву, которая была заменена.

Примечание

Правильные латинские квадраты для наборов входных данных примера показаны ниже:

\(\)\begin{bmatrix} \texttt{A} & \texttt{B} & \texttt{C} \\ \texttt{C} & \color{red}{\texttt{A}} & \texttt{B} \\ \texttt{B} & \texttt{C} & \texttt{A} \\ \end{bmatrix} \quad \begin{bmatrix} \texttt{B} & \texttt{C} & \texttt{A} \\ \texttt{C} & \texttt{A} & \color{red}{\texttt{B}} \\ \texttt{A} & \texttt{B} & \texttt{C} \\ \end{bmatrix} \quad \begin{bmatrix} \color{red}{\texttt{C}} & \texttt{A} & \texttt{B} \\ \texttt{B} & \texttt{C} & \texttt{A} \\ \texttt{A} & \texttt{B} & \texttt{C} \\ \end{bmatrix}\(\)

D. Математическое задание

геометрия Конструктив математика Перебор *1700

Математикам 31 лицея было предложено следующее задание:

Вам дано нечетное число \(n\) и вам нужно подобрать \(n\) различных чисел, которые являются квадратами целых чисел. Но не всё так просто. Каждое число должно быть длины \(n\) (и при этом не иметь ведущих нулей) и мультимножество цифр всех чисел должно совпадать. Например, у \(\mathtt{234}\) и \(\mathtt{432}\), \(\mathtt{11223}\) и \(\mathtt{32211}\) мультимножества цифр совпадают, а у \(\mathtt{123}\) и \(\mathtt{112233}\) нет.

Математики не справились с этой задачей, а сможете ли вы?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Следующие \(t\) строк содержат одно целое нечетное число \(n\) (\(1 \leq n \leq 99\)) — количество чисел, которые нужно подобрать и их длина.

Гарантируется, что при заданных ограничениях решение существует.

Гарантируется, что сумма по \(n^2\) не превосходит \(10^5\).

Числа можно выводить в любом порядке.

Выходные данные

Для каждого набора нужно вывести \(n\) чисел длины \(n\) — ответ на задачу.

Если существует несколько вариантов ответа, выведите любой.

Примечание

Ниже показано квадратами каких чисел являются ответы для второго набора входных данных:

\(\mathtt{169}\) = \(\mathtt{13}^2\)

\(\mathtt{196}\) = \(\mathtt{14}^2\)

\(\mathtt{961}\) = \(\mathtt{31}^2\)

Ниже показано квадратами каких чисел являются ответы для третьего набора входных данных:

\(\mathtt{16384}\) = \(\mathtt{128}^2\)

\(\mathtt{31684}\) = \(\mathtt{178}^2\)

\(\mathtt{36481}\) = \(\mathtt{191}^2\)

\(\mathtt{38416}\) = \(\mathtt{196}^2\)

\(\mathtt{43681}\) = \(\mathtt{209}^2\)

H1. Ранг матрицы (Простая версия)

дп Комбинаторика математика матрицы Перебор *2700

Это простая версия задачи. Единственное отличие между двумя версиями этой задачи в ограничениях на \(k\). Вы можете делать взломы только если сданы обе версии задачи.

Вам даны целые числа \(n\), \(p\) и \(k\). Гарантируется, что \(p\) является простым числом.

Для каждого \(r\) от \(0\) до \(k\) найдите количество \(n \times n\) матриц \(A\) над полем\(^\dagger\) целых чисел по модулю \(p\), таких что ранг\(^\ddagger\) матрицы \(A\) в точности равен \(r\). Поскольку эти значения могут быть большими, вам требуется вывести их по модулю \(998\,244\,353\).

\(^\dagger\) https://en.wikipedia.org/wiki/Field_(mathematics)

\(^\ddagger\) https://en.wikipedia.org/wiki/Rank_(linear_algebra)

Входные данные

Первая строка ввода содержит три целых числа \(n\), \(p\) и \(k\) (\(1 \leq n \leq 10^{18}\), \(2 \leq p < 998\,244\,353\), \(0 \leq k \leq 5000\)).

Гарантируется, что \(p\) является простым числом.

Выходные данные

Выведите \(k+1\) целое число, ответы для каждого \(r\) от \(0\) до \(k\).

B. Удалить первый или второй символ

дп Комбинаторика Перебор Строки Структуры данных *1100

Вам дана строка \(s\) длины \(n\). Определим две операции, которые можно применить к строке:

  • удалить первый символ строки;
  • удалить второй символ строки.

Ваша задача — найти количество различных непустых строк, которые можно получить, применяя заданные операции над исходной строкой любое количество раз (возможно, нулевое), в любом порядке.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(1 \leq n \leq 10^5\)) — длину строки.

Вторая строка каждого набора входных данных содержит строку \(s\). Гарантируется, что строка содержит только строчные буквы латинского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: количество различных непустых строк, которые вы можете получить.

Примечание

В первом наборе входных данных мы можем получить следующие строки: \(a\), \(aa\), \(aaa\), \(aaaa\), \(aaaaa\).

В третьем наборе входных данных, например, слово \(ba\) можно получить следующим образом:

  • удалить первый символ текущей строки \(ababa\), получив \(baba\);
  • удалить второй символ текущей строки \(baba\), получив \(bba\);
  • удалить второй символ текущей строки \(bba\), получив \(ba\).

C. Поливка массива

жадные алгоритмы математика Перебор реализация *1600

У вас есть массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\). В \(i\)-й из следующих \(d\) дней вы собираетесь выполнить ровно одно из следующих двух действий:

  • Прибавить \(1\) к каждому из первых \(b_i\) элементов массива \(a\) (т.е. присвоить \(a_j := a_j + 1\) для всех \(1 \le j \le b_i\)).
  • Посчитаем количество элементов, которые равны своей позиции (т.е. \(a_j = j\)). Обозначим количество таких элементов за \(c\). Затем нужно прибавить \(c\) к своему счету и сбросить весь массив \(a\) к \(0\)-массиву длины \(n\) (т.е. присвоить \([a_1, a_2, \ldots, a_n] := [0, 0, \ldots, 0]\)).

Изначально ваш счет равен \(0\). Обратите внимание, что в каждый день вы должны выполнить ровно одно из указанных выше действий: нельзя пропустить день или выполнить оба действия в один и тот же день.

Какой максимальный счет вы можете получить в конце?

Поскольку \(d\) может быть довольно большим, последовательность \(b\) дается вам в сжатом виде:

  • Вам дана последовательность целых чисел \(v_1, v_2, \ldots, v_k\). Последовательность \(b\) является конкатенацией бесконечного числа копий \(v\): \(b = [v_1, v_2, \ldots, v_k, v_1, v_2, \ldots, v_k, \ldots]\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(k\) и \(d\) (\(1 \le n \le 2000\), \(1 \le k \le 10^5\), \(k \le d \le 10^9\)) — длину массива \(a\), длину последовательности \(v\) и количество дней, в течение которых будут выполняться операции.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n\)) — массив \(a\).

Третья строка каждого набора входных данных содержит \(k\) целых чисел \(v_1, v_2, \ldots, v_k\) (\(1 \le v_i \le n\)) — последовательность \(v\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\), а сумма \(k\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальный счет, который вы можете получить в конце \(d\)-го дня.

Примечание

В первом наборе входных данных последовательность \(b\) равняется \([1, 3, 2, 3, 1, 3, 2, 3, \ldots]\) и одно из оптимальных решений выглядит следующим образом:

  • Выполнить операцию второго типа в \(1\)-й день: счет увеличится на \(3\), а массив \(a\) станет равным \([0, 0, 0]\).
  • Выполнить операцию первого типа во \(2\)-й день: массив \(a\) станет равным \([1, 1, 1]\).
  • Выполнить операцию первого типа в \(3\)-й день: массив \(a\) станет равным \([2, 2, 1]\).
  • Выполнить операцию второго типа в \(4\)-й день: счет увеличится на \(1\), а массив \(a\) станет равным \([0, 0, 0]\).

Можно показать, что набрать больше \(4\) невозможно, поэтому ответ — \(4\).

Во втором наборе входных данных последовательность \(b\) равняется \([6, 6, 6, 6, \ldots]\). Один из способов набрать \(3\) — это выполнить операции первого типа в \(1\)-й и \(3\)-й дни и выполнить операцию второго типа во \(2\)-й день.

A. Модные числа

Бинарный поиск Перебор реализация *1300

Как вам хорошо известно, в этом году самые модные числа — это так называемые треугольные числа (то есть целые числа, представимые в виде , где k — некоторое целое положительное число), а самые крутые — те, которые представимы в виде суммы двух треугольных.

Небезызвестный хипстер Андрей очень любит все модное и крутое, но, к сожалению, он не дружит с математикой. Помогите ему по числу n сказать, раскладывается ли оно в сумму двух треугольных чисел (не обязательно различных)!

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 109).

Выходные данные

Выведите «YES» (без кавычек), если n раскладывается в сумму двух треугольных, и «NO» (без кавычек) в противном случае.

Примечание

В первом примере число .

Во втором примере число 512 представить в виде суммы двух треугольных невозможно.

B. Прогулки под дождем

Перебор реализация *1100

В Берляндии оппозиционеры собираются устроить массовые гуляния по бульвару. Бульвар состоит из n расположенных в ряд плиток, пронумерованных от 1 до n cправа налево. Прогулка оппозиционеров должна начаться на плитке номер 1 и закончиться на плитке номер n. В ходе прогулки разрешается перемещаться справа налево между соседними в ряду плитками, а также перепрыгивать через одну плитку. Более формально, с плитки номер i (i < n - 1) можно попасть на плитку номер i + 1 или на плитку номер i + 2 (с плитки номер n - 1 можно попасть только на плитку номер n). Можно считать, что все перемещения оппозиционеров происходят мгновенно.

Для того, чтобы сорвать оппозиционную акцию, берляндский кровавый режим организовал дождь. Плитки на бульваре плохого качества и они быстро разрушаются под дождем. Известно, что i-тая плитка приходит в негодность после ai дней дождя (в день ai плитка еще не разрушена, а в день ai + 1 уже разрушена). Конечно же, никому не разрешается ходить по разрушенным плиткам! Поэтому прогулка оппозиционеров считается сорванной, если либо разрушена плитка номер 1, либо разрушена плитка номер n, либо невозможно дойти с плитки номер 1 до плитки номер n, двигаясь по неразрушенным плиткам.

Оппозиционеры хотят собрать побольше единомышленников для своей прогулки. Поэтому чем больше времени у них есть на сборы, тем лучше. Помогите оппозиционерам узнать, сколько у них еще осталось времени, и скажите, в течение скольких дней прогулка с плитки номер 1 на плитку номер n будет возможной.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 103) — длина бульвара в плитках.

Во второй строке заданы n целых чисел ai, разделенных пробелом,  — количество дней, через которое i-тая плитка разрушится (1 ≤ ai ≤ 103).

Выходные данные

Выведите одно число — искомое количество дней.

Примечание

В первом примере после третьего дня будет разрушена вторая плитка, и единственным оставшимся маршрутом для гуляний будет 1 → 3 → 4. После пятого дня между первой и последней плиткой будет промежуток в две плитки, который уже невозможно перепрыгнуть.

Во втором примере до пятого дня включительно будет доступен путь 1 → 3 → 5. На шестой день будет разрушена последняя плитка, и прогулка будет сорвана.

A. Выполнение условий

жадные алгоритмы математика Перебор *800

Алекс решает задачу. У него есть \(n\) ограничений на то, каким может быть целое число \(k\). Существует три типа ограничений:

  1. \(k\) должно быть больше или равно некоторому целому числу \(x\);
  2. \(k\) должно быть меньше или равно некоторому целому числу \(x\);
  3. \(k\) должно быть не равно некоторому целому числу \(x\).

Помогите Алексу найти количество целых чисел \(k\), которые удовлетворяют всем \(n\) ограничениям. Гарантируется, что ответ конечен (существует хотя бы одно ограничение типа \(1\) и хотя бы одно ограничение типа \(2\)). Также гарантируется, что ни одно из ограничений не совпадает в точности с другим.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 100\)) — количество ограничений.

Следующие \(n\) строк описывают ограничения. Каждая строка содержит два целых числа \(a\) и \(x\) (\(a \in \{1,2,3\}, \, 1 \leq x \leq 10^9\)). Число \(a\) обозначает тип ограничения. Если \(a=1\), то \(k\) должно быть больше или равно \(x\). Если \(a=2\), то \(k\) должно быть меньше или равно \(x\). Если \(a=3\), то \(k\) должно быть не равно \(x\).

Гарантируется, что существует конечное количество целых чисел, удовлетворяющих всем \(n\) ограничениям (существует хотя бы одно ограничение типа \(1\) и хотя бы одно ограничение типа \(2\)). Также гарантируется, что ни одно из ограничений не совпадает в точности с другим (другими словами, все пары \((a, x)\) различны).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество целых чисел \(k\), удовлетворяющих всем \(n\) ограничениям.

Примечание

В первом наборе входных данных \(k \geq 3\) и \(k \leq 10\). Кроме того, \(k \neq 1\) и \(k \neq 5\). Возможные целые числа \(k\), удовлетворяющие ограничениям: \(3,4,6,7,8,9,10\). Поэтому ответ равен \(7\).

Во втором наборе входных данных \(k \ge 5\) и \(k \le 4\), что невозможно. Поэтому ответ равен \(0\).

C. Разбиение массива

математика Перебор теория чисел *1600

У Аллена есть массив \(a_1, a_2,\ldots,a_n\). Для каждого положительного целого числа \(k\), которое является делителем \(n\), Аллен делает следующее:

  • Он разбивает массив на \(\frac{n}{k}\) непересекающихся подмассивов длины \(k\). Другими словами, он разбивает массив на следующие подмассивы: \(\)[a_1,a_2,\ldots,a_k],[a_{k+1}, a_{k+2},\ldots,a_{2k}],\ldots,[a_{n-k+1},a_{n-k+2},\ldots,a_{n}]\(\)
  • Аллен получает одно очко, если существует некоторое положительное целое число \(m\) (\(m \geq 2\)), такое что, если он заменит каждый элемент массива на его остаток при делении на \(m\), тогда все подмассивы будут одинаковыми.

Помогите Аллену найти количество очков, которое он заработает.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2,\ldots, a_n\) (\(1 \leq a_i \leq n\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество очков, которое заработает Аллен.

Примечание

В первом наборе входных данных \(k=2\) приносит очко, так как Аллен может выбрать \(m = 2\), и оба подмассива будут равны \([1, 0]\). \(k=4\) также приносит очко, так как независимо от выбора \(m\) у Аллена будет только один подмассив, и следовательно, все подмассивы будут равны.

Во втором наборе входных данных Аллен зарабатывает \(1\) очко при \(k=3\), и при этом выбор \(m\) не имеет значения.

D. Повторение в массиве

Бинарный поиск математика Перебор реализация снм *1900

У Джейдена есть массив \(a\), который изначально пуст. Ему необходимо выполнить \(n\) операций двух типов в заданном порядке.

  1. Джейден добавляет целое число \(x\) (\(1 \leq x \leq n\)) в конец массива \(a\).
  2. Джейден добавляет \(x\) копий массива \(a\) в конец массива \(a\). Другими словами, массив \(a\) становится равным \([a,\underbrace{a,\ldots,a}_{x}]\). Гарантируется, что перед этим была выполнена хотя бы одна операция первого типа.

У Джейдена есть \(q\) запросов. Для каждого запроса вы должны сообщить ему \(k\)-й элемент массива \(a\). Элементы массива нумеруются с \(1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 10^5\)) — количество операций и количество запросов.

Следующие \(n\) строк описывают операции. Каждая строка содержит два целых числа \(b\) и \(x\) (\(b \in \{1, 2\}\)), где \(b\) обозначает тип операции. Если \(b=1\), то \(x\) (\(1 \leq x \leq n\)) является целым числом, которое Джейден добавляет в конец массива. Если \(b=2\), то \(x\) (\(1 \leq x \leq 10^9\)) является количеством копий, которые Джейден добавляет в конец массива.

Следующая строка каждого набора входных данных содержит \(q\) целых чисел \(k_1, k_2, \ldots, k_q\) (\(1 \leq k_i \leq \min(10^{18}, c)\)), которые обозначают запросы, где \(c\) — размер массива после выполнения всех \(n\) операций.

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел — ответы на запросы Джейдена.

Примечание

В первом наборе входных данных:

  • После первой операции \(a = [1]\);
  • После второй операции \(a = [1, 2]\);
  • После третьей операции \(a = [1, 2, 1, 2]\);
  • После четвёртой операции \(a = [1, 2, 1, 2, 3]\);
  • После пятой операции \(a = [1, 2, 1, 2, 3, 1, 2, 1, 2, 3, 1, 2, 1, 2, 3, 1, 2, 1, 2, 3]\).

В четвёртом наборе входных данных после всех операций \(a = [1, 2]\).

F1. Спокойное плавание (простая версия)

Бинарный поиск графы кратчайшие пути Перебор поиск в глубину и подобное снм Структуры данных *2500

Единственное отличие двух версий этой задачи состоит в ограничении на \(q\). Вы можете делать взломы, только если обе версии задачи решены.

Томас плавает вокруг острова, окружённого океаном. Океан и остров можно представить в виде таблицы с \(n\) строками и \(m\) столбцами. Строки пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы от \(1\) до \(m\) слева направо. Позицию клетки в строке \(r\) и в столбце \(c\) обозначим как \((r, c)\). Ниже приведен пример допустимой таблицы.

Пример допустимой таблицы

Существует три типа клеток: остров, океан и подводный вулкан. Клетки, представляющие остров, отмечены символом '#', клетки, представляющие океан, отмечены символом '.', а клетки, представляющие подводный вулкан, отмечены символом 'v'. Гарантируется, что есть хотя бы одна клетка острова и хотя бы одна клетка подводного вулкана. Также гарантируется, что множество всех клеток острова образует единую связную компоненту\(^{\dagger}\), и множество всех клеток океана и подводных вулканов также образует единую связную компоненту. Кроме того, гарантируется, что на краю таблицы (то есть, в строке \(1\), в строке \(n\), в столбце \(1\) и в столбце \(m\)) нет клеток острова.

Определим круговой маршрут, проходимый Томасом, начинающийся в клетке \((x, y)\), как путь, который удовлетворяет следующим условиям:

  • Путь начинается и заканчивается в клетке \((x, y)\).
  • Если Томас находится в клетке \((i, j)\), то он может перейти в клетки \((i+1, j)\), \((i-1, j)\), \((i, j-1)\) и \((i, j+1)\), при условии, что клетка, в которую он переходит, является клеткой океана или подводного вулкана и находится внутри таблицы. Обратите внимание, что Томасу разрешается посещать одну и ту же клетку несколько раз за один круговой маршрут.
  • Путь должен обойти остров и полностью его окружить. Некоторый путь \(p\) полностью окружает остров, если невозможно добраться от клетки острова до клетки на границе таблицы, перемещаясь только в соседние по стороне или диагонали клетки, не посещая при этом клетку на пути \(p\). На изображении ниже путь, начинающийся в \((2, 2)\), приходящий в \((1, 3)\) и возвращающийся в \((2, 2)\) в обратную сторону, не полностью окружает остров и не считается круговым маршрутом.
Пример пути, который не полностью окружает остров

Безопасность кругового маршрута — это минимальное манхэттенское расстояние\(^{\ddagger}\) от клетки на круговом маршруте до подводного вулкана (обратите внимание, что наличие клеток острова не влияет на это расстояние).

У вас есть \(q\) запросов. Запрос можно представить как \((x, y)\), и для каждого запроса вы хотите найти максимальную безопасность кругового маршрута, начинающегося в \((x, y)\). Гарантируется, что \((x, y)\) является клеткой океана или подводного вулкана.

\(^{\dagger}\)Множество клеток образует единую связную компоненту, если из любой клетки этого множества можно добраться до любой другой клетки этого множества, перемещаясь только по клеткам этого множества, каждый раз переходя в клетку с общей стороной.

\(^{\ddagger}\)Манхэттенское расстояние между клетками \((r_1, c_1)\) и \((r_2, c_2)\) равно \(|r_1 - r_2| + |c_1 - c_2|\).

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(3 \leq n, m \leq 10^5\), \(9 \leq n \cdot m \leq 3 \cdot 10^5\), \(1 \leq q \leq 5\)) — количество строк и столбцов таблицы и количество запросов.

Каждая из следующих \(n\) строк содержит \(m\) символов, описывающих клетки таблицы. Символ '#' обозначает клетку острова, '.' обозначает клетку океана, и 'v' обозначает клетку подводного вулкана.

Гарантируется, что есть хотя бы одна клетка острова и хотя бы одна клетка подводного вулкана. Гарантируется, что множество всех клеток острова образует единую связную компоненту, и множество всех клеток океана и подводных вулканов также образует единую связную компоненту. Также гарантируется, что нет клеток острова на краю таблицы (то есть, в строке \(1\), в строке \(n\), в столбце \(1\) и в столбце \(m\)).

Следующие \(q\) строк описывают запросы. Каждая из этих строк содержит два целых числа \(x\) и \(y\) (\(1 \leq x \leq n\), \(1 \leq y \leq m\)), обозначающие круговой маршрут, начинающийся в \((x, y)\).

Гарантируется, что \((x, y)\) является клеткой океана или подводного вулкана.

Выходные данные

Для каждого запроса выведите одно целое число — максимальную безопасность кругового маршрута, начинающегося в указанной клетке.

Примечание

Для первого примера на изображении ниже показан оптимальный круговой маршрут, начинающийся в \((1, 1)\). Безопасность кругового маршрута равна \(3\), так как минимальное манхэттенское расстояние от клетки на круговом маршруте до подводного вулкана равно \(3\).

Пример оптимального кругового маршрута

В четвёртом примере помните, что Томасу разрешается посещать одну и ту же клетку несколько раз за один круговой маршрут. Например, это необходимо для кругового маршрута, начинающегося в \((7, 6)\).

E. Съесть фишку

жадные алгоритмы игры математика Перебор *1600

Алиса и Боб играют в игру на клетчатой доске. Доска имеет \(h\) строк, пронумерованных сверху вниз, и \(w\) столбцов, пронумерованных слева направо. Оба игрока имеют по фишке. Изначально фишка Алисы стоит в клетке с координатами \((x_a, y_a)\) (строка \(x_a\), столбец \(y_a\)), а фишка Боба — в \((x_b, y_b)\). Гарантируется, что начальные позиции фишек не совпадают. Игроки делают ходы по очереди, начинает Алиса.

Алиса в свой ход может подвинуть свою фишку на одну клетку вниз либо на одну клетку вниз-вправо или вниз-влево (по диагонали). Боб же двигает фишку вверх, вверх-вправо или вверх-влево. При этом запрещается делать ходы, выходящие за пределы доски.

Более формально, если в начале хода Алиса стоит в клетке с координатами \((x_a, y_a)\), то она может переместить свою фишку в одну из клеток \((x_a + 1, y_a)\), \((x_a + 1, y_a - 1)\) или \((x_a + 1, y_a + 1)\). Боб же, в свою очередь, из клетки \((x_b, y_b)\) может переместиться в \((x_b - 1, y_b)\), \((x_b - 1, y_b - 1)\) или \((x_b - 1, y_b + 1)\). При этом новые координаты фишки \((x', y')\) должны удовлетворять условиям \(1 \le x' \le h\) и \(1 \le y' \le w\).

Пример состояния игры. Алиса играет белой фишкой, Боб — черной. Стрелками обозначены возможные ходы.

Игрок немедленно побеждает, если ставит свою фишку в клетку, занятую фишкой другого игрока. Если какой-либо из игроков не может сделать ход (Алиса — если находится в последней строке, т. е. \(x_a = h\), Боб — если в первой, т. е. \(x_b = 1\)), игра сразу же завершается ничьей.

Каким будет исход игры при оптимальной игре обоих противников?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей шесть целых чисел \(h\), \(w\), \(x_a\), \(y_a\), \(x_b\), \(y_b\) (\(1 \le x_a, x_b \le h \le 10^6\), \(1 \le y_a, y_b \le w \le 10^9\)) — размеры доски и координаты начальных позиций фишек Алисы и Боба. Гарантируется, что: либо \(x_a \ne x_b\), либо \(y_a \ne y_b\).

Сумма \(h\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите «Alice», если побеждает Алиса, «Bob», если побеждает Боб, и «Draw», если никто из игроков не может обеспечить себе победу. Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «bOb», «bob», «Bob» и «BOB» будут приняты как победа Боба.

F. Сумма на прогрессии

дп математика Перебор реализация Структуры данных *1900

Дан массив \(a\) из \(n\) чисел. Также есть \(q\) запросов вида \(s, d, k\).

Для каждого из \(q\) запросов найдите сумму элементов \(a_s + a_{s+d} \cdot 2 + \dots + a_{s + d \cdot (k - 1)} \cdot k\). Иными словами, для каждого запроса нужно найти сумму \(k\) элементов массива с индексами начиная с \(s\)-го, делая шаги, равные \(d\), умножая на порядковый номер элемента в полученной последовательности.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит два числа \(n, q\) (\(1 \le n \le 10^5, 1 \le q \le 2 \cdot 10^5\)) — количество чисел в массиве \(a\) и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, ... a_n\) (\(-10^8 \le a_1, ..., a_n \le 10^8\)) — элементы массива \(a\).

Следующие \(q\) строк содержат по три целых числа \(s\), \(d\) и \(k\) (\(1 \le s, d, k \le n\), \(s + d\cdot (k - 1) \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам не превосходит \(10^5\), и что сумма значений \(q\) по всем наборам не превосходит \(2 \cdot 10^5 \).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(q\) чисел — желаемые суммы, разделенные пробелом.

G. Озорной стрелок

дп Перебор разделяй и властвуй реализация Структуры данных *2200

Однажды непутёвый озорной стрелок по имени Шел попал на прямоугольное поле размером \(n \times m\), разбитое на единичные квадратики. В каждой из клеток либо стоит мишень, либо нет.

С собой у Шел оказался только счастливый дробовик, из которого можно выстрелить в одну из четырёх сторон: вправо-вниз, влево-вниз, влево-вверх или вправо-вверх. При выстреле дробовик поражает все мишени в выбранном направлении, Манхэттенское расстояние до которых не больше фиксированной для дробовика константы \(k\). Манхэттенское расстояние между двумя точками \((x_1, y_1)\) и \((x_2, y_2)\) равно \(|x_1 - x_2| + |y_1 - y_2|\).

Возможные области поражения для \(k = 3\).

Цель Шел — поразить как можно большее количество мишеней. Помогите ему, пожалуйста, найти это значение.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

На ввод в первой строчке даются размеры поля \(n\), \(m\) и константа для мощности дробовика \(k\) (\(1 \le n, m, k \le 10^5, 1 \le n \cdot m \le 10^5\)).

В следующих \(n\) строках даётся \(m\) символов — описание очередной строки поля, где символ '.' означает, что клетка пуста, а символ '#' означает наличие мишени. Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно число, которое равно максимально возможному количеству поражённых мишеней за один выстрел.

Примечание

Возможные оптимальные выстрелы для примеров из условия:

D. Безумные монстры

математика Перебор реализация снм Структуры данных *1900

Монокарп играет в компьютерную игру (опять). Угадайте, что он делает? Правильно, убивает монстров.

В ряд стоят \(n\) монстров, пронумерованных от \(1\) до \(n\). У \(i\)-го монстра есть два параметра: значение атаки, равное \(a_i\), и значение защиты, равное \(d_i\). Чтобы убить этих монстров, Монокарп наложил на них заклинание безумия, так что они атакуют друг друга, а не персонажа Монокарпа.

Бой состоит из \(n\) раундов. В каждом раунде происходит следующее:

  • сначала каждый живой монстр \(i\) наносит \(a_i\) урона ближайшему живому монстру слева (если он существует) и ближайшему живому монстру справа (если он существует);
  • затем каждый живой монстр \(j\), который получил больше \(d_j\) урона в течение этого раунда, умирает. Т.е. \(j\)-й монстр умирает тогда и только тогда, когда его значение защиты \(d_j\) строго меньше суммарного урона, который он получил в этом раунде.

Для каждого раунда вычислите количество монстров, которые умрут во время этого раунда.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор состоит из трех строк:

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\));
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\));
  • третья строка содержит \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(1 \le d_i \le 10^9\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел. \(i\)-е целое число должно быть равно количеству монстров, которые умрут в \(i\)-м раунде.

Примечание

Объяснение для первого примера:

Во время первого раунда происходит следующее:

  • монстр \(1\) наносит \(3\) урона монстру \(2\);
  • монстр \(2\) наносит \(4\) урона монстру \(1\) и монстру \(3\);
  • монстр \(3\) наносит \(7\) урона монстру \(2\) и монстру \(4\);
  • монстр \(4\) наносит \(5\) урона монстру \(3\) и монстру \(5\);
  • монстр \(5\) наносит \(10\) урона монстру \(4\);
  • монстр \(1\) не умирает, так как он получил \(4\) урона и его защита равна \(4\);
  • монстр \(2\) умирает, так как он получил \(10\) урона и его защита равна \(9\);
  • монстр \(3\) умирает, так как он получил \(9\) урона и его защита равна \(1\);
  • монстр \(4\) не умирает, так как он получил \(17\) урона и его защита равна \(18\);
  • монстр \(5\) умирает, так как он получил \(5\) урона и его защита равна \(1\).

После первого раунда остаются в живых монстры \(1\) и \(4\).

Во время второго раунда происходит следующее:

  • монстр \(1\) наносит \(3\) урона монстру \(4\);
  • монстр \(4\) наносит \(5\) урона монстру \(1\);
  • монстр \(1\) умирает, так как он получил \(5\) урона и его защита равна \(4\);
  • монстр \(4\) не умирает, так как он получил \(3\) урона и его защита равна \(18\).

В следующих трех раундах остается в живых только монстр \(4\), поэтому ничего не происходит.

F. Shrink-Reverse

Бинарный поиск жадные алгоритмы Перебор реализация Строки строковые суфф. структуры хэши *2800

Вам задана бинарная строка \(s\) длины \(n\) (строка, состоящая из \(n\) символов, и каждый символ — либо 0, либо 1).

Посмотрим на строку \(s\) как на двоичное представление некоторого числа, и назовем это число значением строки \(s\). Например, значение строки 000 равно \(0\), значение 01101 равно \(13\), значение 100000 — это \(32\), и так далее.

Вы можете применить не более \(k\) операций к \(s\). Каждая операция должна иметь один из следующих двух типов:

  • SWAP: выбрать два индекса \(i < j\) в \(s\) и поменять местами \(s_i\) и \(s_j\);
  • SHRINK-REVERSE: удалить все лидирующие нули из \(s\) и перевернуть строку \(s\).
Например, после применения SHRINK-REVERSE к строке 000101100 вы получите строку 001101.

Какое минимальное значение строки \(s\) вы можете получить, применив не более \(k\) операций к \(s\)?

Входные данные

В первой строке заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 5 \cdot 10^5\); \(1 \le k \le n\)) — длина строки \(s\) и максимальное количество операций.

Во второй строке задана строка \(s\) длины \(n\), состоящая из символов 0 и/или 1.

Дополнительное ограничение на входные данные: в строке \(s\) есть хотя бы одна цифра 1.

Выходные данные

Выведите одно целое число — наименьшее возможное значение строки \(s\), которое вы можете получить, применив не более \(k\) операций. Так как ответ может быть слишком большим, выведите его по модулю \(10^{9} + 7\).

Заметим, что вы должны минимизировать само значение, а не его остаток.

Примечание

В первом примере, одна из оптимальных стратегий — следующая:

  1. 10010010 \(\xrightarrow{\texttt{SWAP}}\) 00010110;
  2. 00010110 \(\xrightarrow{\texttt{SWAP}}\) 00000111.
Значение строки 00000111 равно \(7\).

Во втором примере, одна из оптимальных стратегий — следующая:

  1. 01101000 \(\xrightarrow{\texttt{SHRINK}}\) 1101000 \(\xrightarrow{\texttt{REVERSE}}\) 0001011;
  2. 0001011 \(\xrightarrow{\texttt{SWAP}}\) 0000111.
Значение строки 0000111 равно \(7\).

B. Сбалансированный набор задач?

жадные алгоритмы математика Перебор теория чисел *1200

Jay удалось создать задачу сложности \(x\) и он решил сделать ее второй в Codeforces Round #921.

Но Yash опасается, что это сделает раунд несбалансированным, и координатор отклонит её. Чтобы избежать этого, он хочет разбить ее на \(n\) подзадач таким образом, чтобы сложность каждой подзадачи была положительным целым числом, а их сумма была равна \(x\).

Координатор Aleksey определяет сбалансированность набора задач как НОД всех их сложностей.

Найдите максимальную сбалансированность, которую Yash может достичь.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\leq t\leq 10^3\)), означающее количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(x\) (\(1\leq x\leq 10^8\)) и \(n\) (\(1\leq n\leq x\)).

Выходные данные

Для каждого тестового примера выведите одну строку, содержащую одно целое число, обозначающее максимальную сбалансированность набора задач, которую может достичь Yash.

Примечание

В первом наборе входных данных один из возможных способов разбить задачу сложности \(10\) на набор из трех подзадач сложности \(4\), \(2\) и \(4\) соответственно, дает сбалансированность \(2\).

Во втором наборе входных данных существует единственный способ разбить задачу сложности \(5\) на набор из \(5\) подзадач, взяв все их сложности по \(1\), дает сбалансированность \(1\).

F. Влад и избегание X

битмаски дп Перебор поиск в глубину и подобное реализация *2200

У Владислава есть квадратное клетчатое поле размером \(7 \times 7\), где каждая клетка окрашена в черный или белый цвет. За одну операцию можно выбрать любую клетку и изменить её цвет (черный \(\leftrightarrow\) белый).

Найдите минимальное количество операций, необходимых для того, чтобы гарантировать, что нет черных клеток, у которых все четыре диагональных соседа также черные.

На левом изображении показано, что изначально есть две черные клетки, нарушающие условие. Переворачивая одну клетку, поле будет соответствовать требованию.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 200\)) — количество наборов входных данных. Затем следует описание наборов.

Каждый набор состоит из \(7\) строк, каждая содержит \(7\) символов. Каждый из этих символов либо \(\texttt{W}\), либо \(\texttt{B}\), обозначая белую или черную клетку соответственно.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимых для того, чтобы гарантировать, что нет черных клеток, у которых все четыре диагональных соседа также черные.

Примечание

Первый набор входных данных изображен в условии.

Второй набор входных данных изображен ниже:

В третьем наборе входных данных поле уже удовлетворяет условию.

C. Выбери различные!

жадные алгоритмы математика Перебор *1000

Даны массив \(a\) из \(n\) целых чисел, массив \(b\) из \(m\) целых чисел и чётное число \(k\).

Ваша задача определить, возможно ли выбрать ровно \(\frac{k}{2}\) элементов из обоих массивов так, чтобы среди выбранных элементов встречалось каждое целое число от \(1\) до \(k\).

Например:

  • Если \(a=[2, 3, 8, 5, 6, 5]\), \(b=[1, 3, 4, 10, 5]\), \(k=6\), то можно выбрать элементы со значениями \(2, 3, 6\) из массива \(a\) и элементы со значениями \(1, 4, 5\) из массива \(b\). В таком случае, среди выбранных элементов будут встречаться все числа от \(1\) до \(k=6\).
  • Если \(a=[2, 3, 4, 5, 6, 5]\), \(b=[1, 3, 8, 10, 3]\), \(k=6\), то выбрать элементы таким образом невозможно.

Обратите внимание, что от вас не требуется найти способ выбора элементов — ваша программа должна лишь проверять, возможно ли выбрать элементы требуемым образом.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m \le 2\cdot10^5\), \(2 \le k \le 2 \cdot \min(n, m)\), \(k\) — чётное число) — длину массива \(a\), длину массива \(b\) и количество элементов, которое нужно выбрать, соответственно.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы массива \(a\).

Третья строка каждого набора содержит \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_j \le 10^6\)) — элементы массива \(b\).

Гарантируется, что сумма значений \(n\) и \(m\) по всем наборам входных данных теста не превосходит \(4 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых является ответом на соответствующий набор входных данных. В качестве ответа выведите «YES», если существует способ выбрать по \(\frac{k}{2}\) чисел из каждого массива так, чтобы среди выбранных элементов встречалось каждое целочисленное значение от \(1\) до \(k\). Иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных примера можно выбрать элементы, равные \(2\), \(3\) и \(6\) из массива \(a\) и элементы равные \(1\), \(4\) и \(5\) из массива \(b\). Таким образом, среди выбранных элементов встречается каждое число от \(1\) до \(k=6\).

Во втором наборе входных данных примера можно показать, что выбрать ровно три элемента из каждого массива требуемым образом невозможно.

В третьем наборе входных данных примера можно выбрать элементы, равные \(1\) и \(3\) из массива \(a\) и элементы равные \(2\) и \(4\) из массива \(b\). Таким образом, среди выбранных элементов встречается каждое число от \(1\) до \(k=4\).

D. Найди различные!

Бинарный поиск дп жадные алгоритмы Перебор снм Структуры данных *1300

Вам дан массив \(a\) из \(n\) целых чисел, а также \(q\) запросов.

Каждый запрос представлен двумя числами \(l\) и \(r\) (\(1 \le l \le r \le n\)). Ваша задача для каждого запроса найти такие два индекса \(i\) и \(j\) (или сообщить, что их не существует), что:

  • \(l \le i \le r\);
  • \(l \le j \le r\);
  • \(a_i \ne a_j\).

Иными словами, вам нужно для каждого запроса найти пару различных элементов среди \(a_l, a_{l+1}, \dots, a_r\) или сообщить, что такой пары не существует.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы массива \(a\).

Третья строка каждого набора содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Следующие \(q\) строк содержат по два целых числа \(l\) и \(r\) (\(1 \le l < r \le n\)) — границы запроса.

Гарантируется, что сумма значений \(n\) по всем наборам не превышает \(2 \cdot 10^5\). Аналогично, гарантируется, что сумма значений \(q\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите два числа: искомые \(i\) и \(j\) (\(l \le i, j \le r\)), для которых \(a_i \ne a_j\). Если такой пары не существует, выведите \(i=-1\) и \(j=-1\).

Вы можете разделять выводы для наборов входных данных пустыми строками. Это не является обязательным требованием.

C. Урок физкультуры

математика Перебор теория чисел *1600

В известной школе прошёл урок физкультуры. Как полагается, всех построили в шеренгу и попросили рассчитаться на «первый–\(k\)-й».

Как известно, расчёт на «первый–\(k\)-й» происходит следующим образом: первые \(k\) человек имеют номера \(1, 2, 3, \ldots, k\), следующие \(k - 2\) человек имеют номера \(k - 1, k - 2, \ldots, 2\), следующие \(k\) человек имеют номера \(1, 2, 3, \ldots, k\) и т.д. Таким образом, расчёт повторяется через каждые \(2k - 2\) позиции. Примеры расчёта приведены в разделе «Примечание».

Мальчик Вася постоянно всё забывает. Например, он забыл число \(k\), описанное выше. Но он помнит позицию, которую занимал в шеренге, а также какой номер он получил при расчёте. Помогите Васе понять, сколько натуральных чисел \(k\) подходят под данные ограничения.

Обратите внимание, что расчёт существует для всех и только для всех \(k > 1\). В частности, это означает, что не существует расчёта для \(k = 1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \le x < n \le 10^9\)) — позиция Васи в шеренге и номер, который Вася получил при расчёте.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество различных \(k\), которые подходят под данные ограничения.

Можно доказать, что при данных ограничениях ответ является конечным.

Примечание

В первом наборе входных данных подходят \(k\) равные \(2, 3, 5, 6\).

Пример расчёта для этих \(k\):

\(k\) / №\(1\)\(2\)\(3\)\(4\)\(5\)\(6\)\(7\)\(8\)\(9\)\(10\)
\(2\)\(1\)\(2\)\(1\)\(2\)\(1\)\(2\)\(1\)\(2\)\(1\)\(2\)
\(3\)\(1\)\(2\)\(3\)\(2\)\(1\)\(2\)\(3\)\(2\)\(1\)\(2\)
\(5\)\(1\)\(2\)\(3\)\(4\)\(5\)\(4\)\(3\)\(2\)\(1\)\(2\)
\(6\)\(1\)\(2\)\(3\)\(4\)\(5\)\(6\)\(5\)\(4\)\(3\)\(2\)

Во втором наборе входных данных подходит \(k = 2\).

D. Подземелья Одинокой горы

жадные алгоритмы математика Перебор Структуры данных Тернарный поиск *1900

Однажды, люди, эльфы, гномы и другие жители Средиземья собрались отнять у Смога украденные у них сокровища. Во имя этой великой цели они сплотились вокруг сильного эльфа Тимофея и начали планировать свержение правителя Одинокой горы.

Армия жителей Средиземья будет состоять из нескольких отрядов. Известно, что каждая пара существ одной расы, которые находятся в разных отрядах, прибавляет \(b\) единиц к суммарной силе армии. Но так как Тимофею будет сложно руководить армией, состоящей из большого числа отрядов, то суммарная сила армии, состоящей из \(k\) отрядов, уменьшается на \((k - 1) \cdot x\) единиц. Обратите внимание, что армия всегда состоит из хотя бы одного отряда.

Известно, что в Средиземье проживают \(n\) рас, и количество существ \(i\)-й расы равно \(c_i\). Помогите жителям Средиземья определить максимальную силу армии, которую они могут составить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(b\) и \(x\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le b \le 10^6, 0 \le x \le 10^9\))— количество рас и константы \(b\) и \(x\), описанные выше.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 2 \cdot 10^5\)) — количества существ каждой из \(n\) рас.

Гарантируется, что сумма значений \(c_1 + c_2 + \ldots + c_n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную силу армии, которую могут составить жители Средиземья.

Примечание

В первом наборе входных данных жители Средиземья могут составить \(3\) отряда. Так как \(x = 0\), то сила армии не уменьшится из-за количества отрядов. Жителей по отрядам можно распределить так:

  • Единственного представителя первой расы можно отправить в первый отряд.
  • Первого представителя второй расы можно отправить в первый отряд, второго представителя второй расы можно отправить во второй отряд. Тогда суммарная сила армии увеличится на \(b = 1\).
  • Первого представителя третьей расы можно отправить в первый отряд, второго представителя третьей расы можно отправить во второй отряд, третьего представителя третьей расы можно отправить в третий отряд. Тогда суммарная сила армии увеличится на \(3 \cdot b = 3\), так как они образуют три пары, находящиеся в разных отрядах.

Таким образом, суммарная сила армии равна \(4\).

Во втором наборе входных данных жители Средиземья могут составить \(3\) отряда. Так как \(x = 10\), то сила армии уменьшится на \(20\). Жителей по отрядам можно распределить так:

  • Первого представителя первой расы можно отправить в первый отряд, второго представителя первой расы можно отправить во второй отряд. Тогда суммарная сила армии увеличится на \(b = 5\).
  • Первого и второго представителя второй расы можно отправить в первый отряд, третьего и четвёртого представителя второй расы можно отправить во второй отряд, пятого представителя третьей расы можно отправить в третий отряд. Тогда суммарная сила армии увеличится на \(8 \cdot b = 40\).
  • Первого представителя третьей расы можно отправить в первый отряд, второго представителя третьей расы можно отправить во второй отряд, третьего представителя третьей расы можно отправить в третий отряд. Тогда суммарная сила армии увеличится на \(3 \cdot b = 15\), так как они образуют три пары, находящиеся в разных отрядах.

Таким образом, суммарная сила армии равна \(5 + 40 + 15 - 20 = 40\).

E. Модообразная последовательность

графы дп жадные алгоритмы Конструктив математика Перебор теория чисел *2300

Даны два целых числа \(x\) и \(y\). Назовем последовательность \(a\) длины \(n\) модообразной, если \(a_1=x\), и для всех \(1 < i \le n\) значение \(a_{i}\) равно либо \(a_{i-1} + y\), либо \(a_{i-1} \bmod y\). Здесь \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Определите, существует ли модообразная последовательность длины \(n\), сумма элементов которой равна \(S\), и если существует, то найдите любую такую последовательность.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит четыре целых числа \(n\), \(x\), \(y\) и \(s\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le x \le 2 \cdot 10^5\), \(1 \le y \le 2 \cdot 10^5\), \(0 \le s \le 2 \cdot 10^5\)) — длина последовательности, параметры \(x\) и \(y\), и необходимая сумма элементов последовательности.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), а также сумма \(s\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если искомая последовательность существует, выведите в первой строке «Yes» (без кавычек). Далее, во второй строке выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) через пробел — элементы последовательности \(a\). Если подходящих последовательностей несколько, выведите любую из них.

Если же последовательность не существует, выведите в единственной строке «No».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных условиям удовлетворяет последовательность \([8, 11, 2, 5, 2]\). Таким образом, \(a_1 = 8 = x\), \(a_2 = 11 = a_1 + 3\), \(a_3 = 2 = a_2 \bmod 3\), \(a_4 = 5 = a_3 + 3\), \(a_5 = 2 = a_4 \bmod 3\).

Во втором наборе входных данных первый элемент последовательности должен равняться \(5\), поэтому последовательность \([2, 2, 2]\) не подходит.

C. Саша и казино

Бинарный поиск жадные алгоритмы игры Конструктив математика Перебор *1400

Саша решил подарить лучшую сумочку своей девушке, но, к несчастью для Саши, она очень дорогая. Поэтому Саша хочет на неё заработать. Посмотрев советы по заработку в интернете, он решил пойти в казино.

Саша знает, что казино работает по следующим правилам. Если Саша сделает ставку в \(y\) монет (где \(y\) — положительное целое число), то в случае победы он получит \(y \cdot k\) монет (то есть количество его монет увеличится на \(y \cdot (k - 1)\)). А в случае поражения он потеряет всю сумму ставки (то есть количество его монет уменьшится на \(y\)).

Обратите внимание, что сумма ставки всегда должна быть положительным (\(> 0\)) целым числом и не может превышать текущее количество монет у Саши.

Также Саше известно, что в казино действует акция: он не может проиграть более \(x\) раз подряд.

Изначально у Саши есть \(a\) монет. Ему интересно, может ли он делать ставки так, чтобы у него гарантированно получилось выиграть сколь угодно много монет. Другими словами, правда ли, что для любого целого числа \(n\), Саша сможет делать ставки так, чтобы при любых их результатах, не противоречащих описанным выше правилам, в какой-то момент времени у него было хотя бы \(n\) монет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(k, x\) и \(a\) (\(2 \leq k \leq 30\), \(1 \leq x \leq 100\), \(1 \leq a \leq 10^9\)) — количество раз, в которое увеличивается ставка при выигрыше, максимальное количество проигрышей подряд и изначальное количество монет у Саши.

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если Саша сможет получить сколь угодно много монет и «NO» (без кавычек) в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных Саша может действовать следующим образом:

  • Если Саша делает ставку в первый раз или в предыдущий раз он выиграл, то он ставит \(1\) монету.
  • Если в предыдущий раз Саша проиграл, то он ставит \(2\) монеты.

Обратите внимание, что Саша не может проиграть более одного раза подряд.

Можно доказать, что при такой стратегии Саша может получить сколько угодно много монет.

Во втором наборе входных данных Саша может в первый раз поставить только \(1\) монету. Но в случае проигрыша он больше не сможет делать ставки, поэтому он не сможет сделать так, чтобы у него гарантированно оказалось сколь угодно много монет.

E. Саша и веселая нарезка дерева

битмаски графы Деревья дп жадные алгоритмы математика Перебор поиск в глубину и подобное *2300

Саше за победу на очередной олимпиаде подарили дерево\(^{\dagger}\) из \(n\) вершин. Но, вернувшись домой после празднования очередной победы, он заметил его потерю. Саша помнит, что он покрасил некоторые рёбра этого дерева. При этом он точно знает, что для любой из \(k\) пар вершин \((a_1, b_1), \ldots, (a_k, b_k)\) он покрасил хотя бы одно ребро на простом пути\(^{\ddagger}\) между вершинами \(a_i\) и \(b_i\).

Саша не помнит, сколько рёбер он точно покрасил, так что он просит вас сказать, какое минимальное количество рёбер он мог покрасить, чтобы выполнялось описанное выше условие.

\(^{\dagger}\)Деревом называется неориентированный связный граф без циклов.

\(^{\ddagger}\)Простой путь — это путь, проходящий через каждую вершину не более одного раза.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 10^5\)) — количество вершин в дереве.

Следующие \((n - 1)\) строка описывают рёбра дерева. \(i\)-я из них содержит два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \ne v_i\)) — номера вершин, которые соединяет \(i\)-е ребро.

Следующая строка содержит одно целое число \(k\) (\(1 \leq k \leq 20\)) — количество пар вершин, на простом пути между которыми Саша покрасил хотя бы одно ребро.

Следующие \(k\) строк описывают пары. \(j\)-я из них содержит два целых числа \(a_j\) и \(b_j\) (\(1 \leq a_j, b_j \leq n, a_j \neq b_j\)) — вершины в \(j\)-й паре.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\). Гарантируется, что сумма \(2^k\) по всем наборам входных данных не превосходит \(2^{20}\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество рёбер, которое мог покрасить Саша.

Примечание

В первом наборе входных данных Саша мог покрасить только одно ребро \((1, 2)\). Тогда на простом пути между вершинами \(1\) и \(3\) и вершинами \(4\) и \(1\) будет хотя бы одно покрашенное ребро.

Во втором наборе входных данных Саша мог покрасить рёбра \((1, 6)\) и \((1, 3)\).

F. Саша и свадебное бинарное дерево поиска

Деревья Комбинаторика математика Перебор поиск в глубину и подобное Структуры данных *2300

Пройдя все трудности и невзгоды, Саша наконец решил жениться на своей девушке. Для этого нужно подарить ей обручальное кольцо. Однако его девушке не нравятся подобные романтические жесты, но нравятся бинарные деревья поиска\(^{\dagger}\). Поэтому Саша решил ей подарить такое дерево.

Проведя немало времени на свадебных сайтах для программистов, он нашел идеальное бинарное дерево поиска с корнем в вершине \(1\). В нём значение в вершине \(v\) равно \(val_v\).

Но спустя некоторое время он забыл значения в некоторых вершинах. Пытаясь вспомнить найденное дерево, Саша задался вопросом — сколько существует бинарных деревьев поиска, которые он мог найти на сайте, если известно, что значения во всех вершинах являются целыми числами и принадлежат отрезку \([1, C]\). Поскольку это число может быть очень большим, выведите его по модулю \(998\,244\,353\).

\(^{\dagger}\)Бинарным деревом поиска называется корневое бинарное дерево, у которого для любой вершины \(x\) выполняется свойство: значения всех вершин в левом поддереве вершины \(x\) (если оно существует) меньше или равны значению в вершине \(x\) и значения всех вершин в правом поддереве вершины \(x\) (если оно существует) больше или равны значению в вершине \(x\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(C\) (\(2 \leq n \leq 5 \cdot 10^5\), \(1 \leq C \leq 10^9\)) — количество вершин в дереве и максимально допустимое значение в вершине.

Следующие \(n\) строк описывают вершины дерева. \(i\)-я из них содержит три целых числа \(L_i, R_i\) и \(val_i\) (\(-1 \le L_i, R_i \le n\), \(-1 \le val_i \le C\), \(L_i, R_i, val_i \ne 0\)) — номер левого сына, правого сына и значение в \(i\)-й вершине, соответственно. Если \(L_i = -1\), то у \(i\)-й вершины нет левого сына. Если \(R_i = -1\), то у \(i\)-й вершины нет правого сына. Если \(val_i = -1\), то значение в \(i\)-й вершине неизвестно.

Гарантируется, что существует хотя бы одно подходящее бинарное дерево поиска.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество подходящих бинарных деревьев поиска по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных, бинарное дерево поиска имеет следующий вид:

Тогда возможными значениями в вершинах являются: \([2, 2, 3, 2, 2]\), \([2, 2, 3, 2, 3]\), \([2, 2, 3, 3, 3]\) и \([3, 2, 3, 3, 3]\).

Во втором наборе входных данных значения во всех вершинах известны, поэтому существует единственное подходящее бинарное дерево поиска.

B. Xor

Перебор *2000

У Джона Доу есть четыре массива a, b, k и p. Каждый из них состоит из n целых чисел. Элементы всех массивов индексируются начиная c 1. Массив p является перестановкой целых чисел от 1 до n.

Джон придумал игру для себя и своих друзей. Изначально игроку предлагается массив a. Игрок должен последовательно выполнить ровно u операций над a. Разрешается выполнять следующие операции:

  • Операция 1: Для каждого изменить ai на . Выражение обозначает применение операции побитового исключающего или к числам x и y. Данная операция есть во всех современных языках программирования, например, в языке C++ и Java она обозначается «^», в Pascal — «xor».
  • Операция 2: Для каждого изменить ai на api + r. При выполнении этой операции все изменения происходят одновременно.

После применения всех u операций, количество очков, которые получает игрок, определяется по формуле .

Джон хочет узнать какое максимальное количество очков можно набрать в его игре. Помогите ему.

Входные данные

В первой строке записаны разделенные пробелом целые числа n, u и r (1 ≤ n, u ≤ 30, 0 ≤ r ≤ 100) — количество элементов в каждом массиве, количество операций и число, описывающее одну из операций.

В следующих четырех строках через пробел записаны по n целых чисел — массивы a, b, k, p. В первой строке — массив a, во второй — массив b, в третьей — k и в четвертой — p.

Гарантируется, что элементы массивов a и b положительны и не превышают 104 (1 ≤ ai, bi ≤ 104), элементы массива k не превышают 104 по модулю (|ki| ≤ 104) и p является перестановкой чисел от 1 до n.

Выходные данные

Выведите в единственной строке число s — максимальное количество очков, которое можно получить в игре Джона.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере нужно применить сначала операцию первого типа, а затем операцию второго типа.

E. Число Фибоначчи

математика матрицы Перебор *2900

У Джона Доу есть список всех чисел Фибоначчи по модулю 1013. Этот список бесконечен, он начинается с чисел 0 и 1. Каждое число в этом списке, кроме двух первых, является суммой двух предыдущих по модулю 1013, то есть список Джона получается из списка чисел Фибоначчи заменой каждого числа в нем его остатком от деления на 1013.

Теперь Джон загадал число f (0 ≤ f < 1013), и хочет найти его первое вхождение в описанный выше список. Помогите Джону, найдите номер первого вхождения числа f в список или сообщите, что число f в списке не встречается.

Нумерация в списке ведется с нуля. Под номером 0 в списке Джона стоит число 0, под номером 1 — число 1, под номером 2 — число 1, под номером 3 — число 2, под номером 4 — число 3 и так далее. Таким образом, начало списка выглядит следующим образом: 0, 1, 1, 2, 3, 5, 8, 13, 21, ...

Входные данные

В первой строке записано единственное целое число f (0 ≤ f < 1013) — число, позицию которого в списке нужно найти.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите единственное число — номер первого вхождения заданного числа в список Джона или -1, если это число не входит в список Джона.

B. Печать перестановки

Конструктив математика Перебор *1000

Вам дано целое положительное число \(n\).

Найдите перестановку\(^\dagger\) \(p\) длины \(n\) такую, что не существует двух различных индексов \(i\) и \(j\) (\(1 \leq i, j < n\); \(i \neq j\)) таких, что \(p_i\) делит \(p_j\) и \(p_{i+1}\) делит \(p_{j+1}\).

Посмотрите примечание для примеров подходящих перестановок.

Можно доказать, что при ограничениях задачи существует по крайней мере одна подходящая перестановка \(p\).

\(^\dagger\) Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \leq n \leq 10^5\)) — длину перестановки \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(p_1, p_2, \ldots, p_n\).

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных \(p=[4,1,2,3]\) является допустимой перестановкой. Однако перестановка \(p=[1,2,3,4]\) не является допустимой перестановкой, так как мы можем выбрать \(i=1\) и \(j=3\). Тогда \(p_1=1\) делит \(p_3=3\), а \(p_2=2\) делит \(p_4=4\). Отметим, что и перестановка \(p=[3, 4, 2, 1]\) не является допустимой, так как при выборе \(i=3\) и \(j=2\) будет верно: \(p_3=2\) делит \(p_2=4\) и одновременно \(p_4=1\) делит \(p_3=2\).

Во втором наборе входных данных \(p=[1,2,3]\) является допустимой перестановкой. На самом деле все \(6\) перестановок длины \(3\) являются допустимыми.

D1. Сумма по всем подстрокам (простая версия)

дп жадные алгоритмы Перебор Строки *1800

Это простая версия задачи. Единственное отличие между версиями заключается в ограничениях на \(t\) и \(n\). Вы можете делать взломы только тогда, когда обе версии задачи решены.

Для бинарного\(^\dagger\) шаблона \(p\) и бинарной строки \(q\) одинаковой длины \(m\), скажем, что строка \(q\) называется \(p\)-хорошей, если для каждого \(i\) (\(1 \leq i \leq m\)) существуют индексы \(l\) и \(r\) такие, что:

  • \(1 \leq l \leq i \leq r \leq m\), и
  • \(p_i\) является модой\(^\ddagger\) строки \(q_l q_{l+1} \ldots q_{r}\).

Для шаблона \(p\) определим \(f(p)\) как минимально возможное количество \(\mathtt{1}\) в \(p\)-хорошей бинарной строке (такой же длины, как и шаблон).

Вам дана бинарная строка \(s\) длины \(n\). Найдите \(\)\sum_{i=1}^{n} \sum_{j=i}^{n} f(s_i s_{i+1} \ldots s_j).\(\) Другими словами, вам нужно просуммировать значения \(f\) по всем \(\frac{n(n+1)}{2}\) подстрокам \(s\).

\(^\dagger\) Бинарный шаблон — это строка, состоящая только из символов \(\mathtt{0}\) и \(\mathtt{1}\).

\(^\ddagger\) Символ \(c\) является модой строки \(t\) длины \(m\), если число вхождений \(c\) в \(t\) не меньше \(\lceil \frac{m}{2} \rceil\). Например, \(\mathtt{0}\) является модой \(\mathtt{010}\), \(\mathtt{1}\) не является модой \(\mathtt{010}\), и оба символа \(\mathtt{0}\) и \(\mathtt{1}\) являются модами \(\mathtt{011010}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — длина двоичной строки \(s\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\), состоящую только из символов \(\mathtt{0}\) и \(\mathtt{1}\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите сумму значений \(f\) по всем подстрокам \(s\).

Примечание

В первом наборе входных данных единственной \(\mathtt{1}\)-хорошей строкой является \(\mathtt{1}\). Таким образом, \(f(\mathtt{1})=1\).

Во втором наборе входных данных \(f(\mathtt{10})=1\), так как \(\mathtt{01}\) является \(\mathtt{10}\)-хорошей, а \(\mathtt{00}\) не является \(\mathtt{10}\)-хорошей. Таким образом, ответ равен \(f(\mathtt{1})+f(\mathtt{10})+f(\mathtt{0}) = 1 + 1 + 0 = 2\).

В третьем наборе входных данных \(f\) равна \(0\) для всех \(1 \leq i \leq j \leq 5\). Таким образом, ответ равен \(0\).

F. Максимизируйте разницу

битмаски Перебор поиск в глубину и подобное *2700

Для массива \(b\) из \(m\) целых неотрицательных чисел определим \(f(b)\) как максимальное значение \(\max\limits_{i = 1}^{m} (b_i | x) - \min\limits_{i = 1}^{m} (b_i | x)\) среди всех неотрицательных целых чисел \(x\), где \(|\) обозначает операцию побитового ИЛИ.

Вам даны целые числа \(n\) и \(q\). Вы начинаете с пустого массива \(a\). Выполните следующие \(q\) запросов:

  • \(v\): добавить \(v\) в конец \(a\) и вывести \(f(a)\). Гарантируется, что \(0 \leq v < n\).

Запросы даны в измененном виде.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \leq n \leq 2^{22}\), \(1 \leq q \leq 10^6\)) — количество запросов.

Вторая строка каждого набора входных данных содержит \(q\) разделенных пробелами целых чисел \(e_1,e_2,\ldots,e_q\) (\(0 \leq e_i < n\)) — зашифрованные значения \(v\).

Пусть \(\mathrm{last}_i\) равно результату \((i-1)\)-го запроса для \(i\geq 2\) и \(\mathrm{last}_i=0\) для \(i=1\). Тогда значение \(v\) для \(i\)-го запроса равно (\(e_i + \mathrm{last}_i\)) по модулю \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2^{22}\), а сумма \(q\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел, разделенных пробелами. \(i\)-е число должно равняться результату выполнения \(i\)-го запроса.

Примечание

В первом наборе входных данных в конце \(a=[1,2]\). Для \(i=1\) ответ всегда \(0\), независимо от \(x\). Для \(i=2\) мы можем выбрать \(x=5\).

Во втором наборе входных данных итоговое значение \(a=[3,1,0,5]\).

A. Восстановление маленькой строки

Перебор Строки *800

У Никиты было слово, состоящее ровно из \(3\)-х строчных латинских букв. Буквы в латинском алфавите пронумерованы от \(1\) до \(26\), где буква «a» имеет номер \(1\), буква «z» — номер \(26\).

Он закодировал это слово, сложив позиции всех символов в алфавите. Например, слово «cat» он бы закодировал числом \(3 + 1 + 20 = 24\), так как буква «c» имеет номер \(3\) в алфавите, буква «a» имеет номер \(1\), а буква «t» — номер \(20\).

Однако, такая кодировка оказалась не однозначной! Так, при кодировании слова «ava» также получается число \(1 + 22 + 1 = 24\).

Определите лексикографически минимальное слово из \(3\)-х букв, которое могло быть закодировано.

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\)  — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая и единственная строка каждого набора содержит целое число \(n\) (\(3 \le n \le 78\)) — закодированное слово.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите лексикографически минимальное трехсимвольное слово, которое могло быть закодировано.

C. Снова сделай равными

жадные алгоритмы математика Перебор *1000

У вас есть массив \(a\) из \(n\) целых чисел.

Вы можете не более одного раза применить следующую операцию: выбрать три целых числа \(i\), \(j\), \(x\) (\(1 \le i \le j \le n\)) и присвоить всем элементам массива с индексами от \(i\) до \(j\) значение \(x\). Цена данной операции зависит от выбранных индексов и равна \((j - i + 1)\) бурлей.

Например, массив равен \([1, 2, 3, 4, 5, 1]\). Если мы выберем \(i = 2, j = 4, x = 8\), то после применения данной операции массив будет равен \([1, 8, 8, 8, 5, 1]\).

Какое наименьшее количество бурлей нужно потратить, чтобы сделать все элементы массива равными?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10 ^ 5\)) — размер массива.

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество бурлей, которое придётся потратить, чтобы сделать все элементы массива равными. Можно показать, что это всегда можно сделать.

C. LR-остатки

математика Перебор реализация Структуры данных *1400

Вам задан массив \(a\) длины \(n\), положительное целое число \(m\) и строка команд из \(n\) символов. Каждая команда — это либо символ 'L', либо символ 'R'.

Обработайте все \(n\) команд в порядке их записи в строке \(s\). Обработка команды производится следующим образом:

  • сначала выведите остаток от произведения значений всех элементов массива \(a\) при делении на \(m\),
  • затем, если команда равна 'L', то удалите из массива \(a\) крайний левый элемент, если команда равна 'R', то удалите из массива \(a\) крайний правый элемент.

Обратите внимание, что после каждого хода длина массива \(a\) уменьшается на \(1\) и после обработки всех команд он окажется пустым.

Напишите программу, которая совершит обработку всех команд в порядке из записи в строке \(s\) (слева направо).

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

Каждый набор входных данных задаётся тремя строками.

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2\cdot10^5, 1 \le m \le 10^4\)) — начальная длина массива \(a\) и значение, по которому надо брать остаток.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^4\)) — элементы массива \(a\).

Третья строка состоит из \(n\) букв 'L' и 'R' — строка команд \(s\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1, b_2, \dots, b_n\), где \(b_i\) — остаток при делении произведения всех элементов текущего состояния массива \(a\) на \(m\) в начале выполнения \(i\)-й команды.

Примечание

В первом наборе входных данных примера:

  • \(3 \cdot 1 \cdot 4 \cdot 2 \bmod 6 = 24 \bmod 6 = 0\);
  • \(s_1 = \text{L}\), так что удалим первый элемент и получим массив \([1, 4, 2]\);
  • \(1 \cdot 4 \cdot 2 \bmod 6 = 8 \bmod 6 = 2\);
  • \(s_2 = \text{R}\), так что удалим последний элемент и получим массив \([1, 4]\);
  • \(1 \cdot 4 \bmod 6 = 4 \bmod 6 = 4\);
  • \(s_3 = \text{R}\), так что удалим последний элемент и получим массив \([1]\);
  • \(1 \bmod 6 = 1\);
  • \(s_4 = \text{L}\), так что удалим первый элемент и получим пустой массив.

C. Количество значений k

математика Перебор реализация теория чисел *1100

Вам даны три положительных целых числа \(a\), \(b\) и \(l\) (\(a,b,l>0\)).

Можно показать, что всегда существует способ выбрать неотрицательные (т.е. \(\ge 0\)) целые числа \(k\), \(x\) и \(y\) таким образом, что \(l = k \cdot a^x \cdot b^y\).

Ваша задача — найти количество различных возможных значений \(k\) для всех таких способов.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Следующие \(t\) строк содержат три целых числа, \(a\), \(b\) и \(l\) (\(2 \le a, b \le 100\), \(1 \le l \le 10^6\)) — описание набора входных данных.

Выходные данные

Выведите \(t\) строк, где \(i\)-я (\(1 \le i \le t\)) строка содержит целое число — ответ на \(i\)-й набор входных данных.

Примечание

В первом наборе входных данных примера \(a=2, b=5, l=20\). Возможные значения \(k\) (и соответствующие \(x,y\)) следующие:

  • Выберите \(k = 1, x = 2, y = 1\). Тогда \(k \cdot a^x \cdot b^y = 1 \cdot 2^2 \cdot 5^1 = 20 = l\).
  • Выберите \(k = 2, x = 1, y = 1\). Тогда \(k \cdot a^x \cdot b^y = 2 \cdot 2^1 \cdot 5^1 = 20 = l\).
  • Выберите \(k = 4, x = 0, y = 1\). Тогда \(k \cdot a^x \cdot b^y = 4 \cdot 2^0 \cdot 5^1 = 20 = l\).
  • Выберите \(k = 5, x = 2, y = 0\). Тогда \(k \cdot a^x \cdot b^y = 5 \cdot 2^2 \cdot 5^0 = 20 = l\).
  • Выберите \(k = 10, x = 1, y = 0\). Тогда \(k \cdot a^x \cdot b^y = 10 \cdot 2^1 \cdot 5^0 = 20 = l\).
  • Выберите \(k = 20, x = 0, y = 0\). Тогда \(k \cdot a^x \cdot b^y = 20 \cdot 2^0 \cdot 5^0 = 20 = l\).

Во втором наборе входных данных примера \(a=2, b=5, l=21\). Обратите внимание, что \(l = 21\) не делится ни на \(a = 2\), ни на \(b = 5\). Поэтому мы можем установить только \(x = 0, y = 0\), что соответствует \(k = 21\).

В третьем наборе входных данных примера \(a=4, b=6, l=48\). Возможные значения \(k\) (и соответствующие \(x,y\)) следующие:

  • Выберите \(k = 2, x = 1, y = 1\). Тогда \(k \cdot a^x \cdot b^y = 2 \cdot 4^1 \cdot 6^1 = 48 = l\).
  • Выберите \(k = 3, x = 2, y = 0\). Тогда \(k \cdot a^x \cdot b^y = 3 \cdot 4^2 \cdot 6^0 = 48 = l\).
  • Выберите \(k = 8, x = 0, y = 1\). Тогда \(k \cdot a^x \cdot b^y = 8 \cdot 4^0 \cdot 6^1 = 48 = l\).
  • Выберите \(k = 12, x = 1, y = 0\). Тогда \(k \cdot a^x \cdot b^y = 12 \cdot 4^1 \cdot 6^0 = 48 = l\).
  • Выберите \(k = 48, x = 0, y = 0\). Тогда \(k \cdot a^x \cdot b^y = 48 \cdot 4^0 \cdot 6^0 = 48 = l\).

G. Магический рисунок королевской черепахи

битмаски Комбинаторика Конструктив математика Перебор поиск в глубину и подобное *2300

Черепаха Алиса в настоящее время разрабатывает коробку для печенья с предсказаниями, и она хотела бы включить в нее теорию Лоушу.

Коробку можно рассматривать как таблицу размера \(n \times m\) (\(n, m \ge 5\)), где строки нумеруются \(1, 2, \dots, n\), а столбцы нумеруются \(1, 2, \dots, m\). Каждая клетка может быть либо пустой, либо содержать одно печенье с предсказанием одной из следующих форм: круг или квадрат. Клетка на пересечении \(a\)-й строки \(b\)-го столбца обозначается как \((a, b)\).

Изначально вся таблица пуста. Затем Алиса выполняет \(q\) операций с коробкой для печенья. \(i\)-я операция (\(1 \le i \le q\)) выполняется следующим образом: указывается в настоящее время пустая клетка \((r_i,c_i)\) и форма (круг или квадрат), затем ставится печенье с предсказанием указанной формы в клетку \((r_i,c_i)\). Обратите внимание, что после \(i\)-й операции клетка \((r_i,c_i)\) больше не является пустой.

Перед всеми операциями и после каждой из \(q\) операций Алиса задается вопросом, сколько существует способов разместить печенья с предсказанием во всех оставшихся пустых клетках, так чтобы было удовлетворено следующее требование:

Не существует трёх последовательных клеток с печеньем одинаковой формы в одной строке, одном столбце или на одной диагонали. Формально:

  • Не существует \((i,j)\), удовлетворяющих \(1 \le i \le n, 1 \le j \le m-2\), таких, что в клетках \((i,j), (i,j+1), (i,j+2)\) есть печенье одинаковой формы.
  • Не существует \((i,j)\), удовлетворяющих \(1 \le i \le n-2, 1 \le j \le m\), таких, что в клетках \((i,j), (i+1,j), (i+2,j)\) есть печенье одинаковой формы.
  • Не существует \((i,j)\), удовлетворяющих \(1 \le i \le n-2, 1 \le j \le m-2\), таких, что в клетках \((i,j), (i+1,j+1), (i+2,j+2)\) есть печенье одинаковой формы.
  • Не существует \((i,j)\), удовлетворяющих \(1 \le i \le n-2, 1 \le j \le m-2\), таких, что в клетках \((i,j+2), (i+1,j+1), (i+2,j)\) есть печенье одинаковой формы.

Все ответы должны быть выведены по модулю \(998\,244\,353\). Также обратите внимание, что после некоторых операций требование уже может не быть удовлетворено с уже размещенными печеньями, в этом случае, вы должны выводить \(0\).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\), \(q\) (\(5 \le n, m \le 10^9, 0 \le q \le \min(n \times m, 10^5)\)).

\(i\)-я из следующих \(q\) строк содержит два целых числа \(r_i\), \(c_i\) и одну строку \(\text{shape}_i\) (\(1 \le r_i \le n, 1 \le c_i \le m\), \(\text{shape}_i=\) «circle» или «square»), представляющих операции. Гарантируется, что клетка в \(r_i\)-й строке и \(c_i\)-м столбце изначально пуста. Это означает, что каждая \((r_i,c_i)\) появится не более одного раза в обновлениях.

Сумма \(q\) по всем наборам входных данных теста не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q+1\) строк. Первая строка вывода должна содержать ответ до операций, \(i\)-я строка (\(2 \le i \le q+1\)) должна содержать ответ после первых \(i-1\) операций. Все ответы должны быть взяты по модулю \(998\,244\,353\).

Примечание

Во втором примере, после размещения печенья в форме круга в клетках \((1,1)\), \((1,2)\) и \((1,3)\), Требование уже не удовлетворено. Поэтому вы должны вывести \(0\).

B. Еще одна задача о монетах

дп жадные алгоритмы математика Перебор *1200

У вас есть \(5\) различных типов монет, каждый из которых имеет значение равное одному из первых \(5\) треугольных чисел: \(1\), \(3\), \(6\), \(10\) и \(15\). Все типы монет имеются в неограниченном количестве. Ваша задача — определить, какого минимального количества монет достаточно, чтобы набрать сумму ровно \(n\).

Можно показать, что ответ всегда существует.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке каждого набора входных данных содержится одно целое число \(n\) (\(1 \leq n \leq 10^9\)) — требуемое значение.

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное необходимое число монет.

Примечание

В первом наборе тестовых данных, где \(n = 1\), ответ \(1\), поскольку достаточно использовать одну монету стоимости \(1\). \(1 = 1 \cdot 1\).

В четвертом наборе входных данных, где \(n = 5\), ответ \(3\), который может быть достигнут, используя две монеты стоимости \(1\) и одну монету стоимости \(3\). \(5 = 2 \cdot 1 + 1 \cdot 3\).

В седьмом наборе входных данных, где \(n = 12\), ответ \(2\), который может быть достигнут, используя две монеты стоимости \(6\).

В девятом наборе входных данных, где \(n = 16\), ответ \(2\), который может быть достигнут, используя одну монету стоимости \(1\) и одну монету стоимости \(15\). Альтернативным решением может быть использование одной монеты стоимости \(10\) и одной монеты стоимости \(6\). \(16 = 1 \cdot 1 + 1 \cdot 15 = 1 \cdot 6 + 1 \cdot 10\).

E. Странные НОК операции

Конструктив Перебор теория чисел *3000

Дано целое число \(n\), вы создаете массив \(a\) из \(n\) целых чисел, где \(a_i = i\) для всех целых чисел \(i\) в диапазоне \([1, n]\). Операция над этим массивом определена следующим образом:

  • Выберите в массиве три различных индекса \(i\), \(j\) и \(k\) и присвойте \(x = a_i\), \(y = a_j\) и \(z = a_k\).
  • Обновите массив следующим образом: \(a_i = \operatorname{lcm}(y, z)\), \(a_j = \operatorname{lcm}(x, z)\) и \(a_k = \operatorname{lcm}(x, y)\), где \(\operatorname{lcm}\) обозначает наименьшее общее кратное.
Ваша задача предоставить последовательность из не более чем \(\lfloor \frac{n}{6} \rfloor + 5\) операций таких, что после применения этих операций, если вы возьмете множество, содержащее наибольший общий делитель (НОД) всех подпоследовательностей размера больше \(1\), то каждое число от \(1\) до \(n\) должно принадлежать этому множеству.

После операций должно выполняться \(a_i \le 10^{18}\) для всех \(1 \le i \le n\).

Можно показать, что ответ всегда существует.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^2\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке каждого набора тестовых данных содержится одно целое число \(n\) (\(3 \leq n \leq 3 \cdot 10^{4}\)) — длина массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^{4}\).

Выходные данные

Первая строка должна содержать целое число \(k\) (\(0 \leq k \leq \lfloor \frac{n}{6} \rfloor + 5\)) — где \(k\) обозначает число операций.

Следующие \(k\) строк должны содержать описание операций, то есть \(3\) различных целых числа \(i\), \(j\) и \(k\), где \(1 \leq i, j, k \leq n\).

Примечание

В третьем наборе входных данных \(a = [1, 2, 3, 4, 5, 6, 7]\).

Первая операция:

\(i = 3\), \(j = 5\), \(k = 7\)

\(x = 3\), \(y = 5\), \(z = 7\).

\(a = [1, 2, \operatorname{lcm}(y,z), 4, \operatorname{lcm}(x,z), 6, \operatorname{lcm}(x,y)]\) = \([1, 2, \color{red}{35}, 4, \color{red}{21}, 6, \color{red}{15}]\).

Вторая операция:

\(i = 5\), \(j = 6\), \(k = 7\)

\(x = 21\), \(y = 6\), \(z = 15\).

\(a = [1, 2, 35, 4, \operatorname{lcm}(y,z), \operatorname{lcm}(x,z), \operatorname{lcm}(x,y)]\) = \([1, 2, 35, 4, \color{red}{30}, \color{red}{105}, \color{red}{42}]\).

Третья операция:

\(i = 2\), \(j = 3\), \(k = 4\)

\(x = 2\), \(y = 35\), \(z = 4\).

\(a = [1, \operatorname{lcm}(y,z), \operatorname{lcm}(x,z), \operatorname{lcm}(x,y), 30, 105, 42]\) = \([1, \color{red}{140}, \color{red}{4}, \color{red}{70}, 30, 105, 42]\).

GCD равное \(i\) может быть получено используя следующие подпоследовательности:

\(\gcd(a_1, a_2) = \gcd(1, 140) = 1\)

\(\gcd(a_3, a_4) = \gcd(4, 70) = 2\)

\(\gcd(a_5, a_6, a_7) = \gcd(30, 105, 42) = 3\)

\(\gcd(a_2, a_3) = \gcd(140, 4) = 4\)

\(\gcd(a_2, a_4, a_5, a_6) = \gcd(140, 70, 30, 105) = 5\)

\(\gcd(a_5, a_7) = \gcd(30, 42) = 6\)

\(\gcd(a_2, a_4, a_6, a_7) = \gcd(140, 70, 105, 42) = 7\)

C. Мессенджер в ЦПМ

Бинарный поиск дп жадные алгоритмы Конструктив Перебор сортировки Структуры данных *1800

В новом мессенджере для учащихся Центра Помощи Магистрам, Кефтемерум, планируется обновление, в котором разработчики хотят оптимизировать набор сообщений, показываемых пользователю. Всего есть \(n\) сообщений, каждое сообщение характеризуется двумя целыми числами \(a_i\) и \(b_i\). Время, потраченное на прочтение набора сообщений с номерами \(p_1, p_2, \ldots, p_k\) (\(1 \le p_i \le n\), все \(p_i\) различны) рассчитывается по формуле:

\(\)\Large \sum_{i=1}^{k} a_{p_i} + \sum_{i=1}^{k - 1} |b_{p_i} - b_{p_{i+1}}|\(\)

Обратите внимание, что время прочтения набора сообщений, состоящего из одного сообщения с номером \(p_1\), равно \(a_{p_1}\). Также время прочтения пустого набора сообщений считается равным \(0\).

Пользователь может сам определить время \(l\), которое он готов провести в мессенджере. Мессенджер же должен сообщить пользователю максимально возможный размер набора сообщений, время прочтения которого не превышает \(l\). Обратите внимание, что максимальный размер набора сообщений может быть равен \(0\).

Разработчики популярного мессенджера не справились внедрить данную функцию, поэтому попросили вас решить эту задачу.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(l\) (\(1 \leq n \leq 2000\), \(1 \leq l \leq 10^9\)) — количество сообщений и время, которое пользователь готов провести в мессенджере.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^9\)) — характеристики \(i\)-го сообщения.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(4 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможный размер набора сообщений, время прочтения которого не превышает \(l\).

Примечание

В первом наборе входных данных, можно взять набор из трёх сообщений с номерами \(p_1 = 3\), \(p_2 = 2\) и \(p_3 = 5\). Время, затрачиваемое на прочтение данного набора, равно \(a_3 + a_2 + a_5 + |b_3 - b_2| + |b_2 - b_5| = 2 + 1 + 2 + |4 - 5| + |5 - 3| = 8\).

Во втором наборе входных данных, можно взять набор из одного сообщения со номером \(p_1 = 1\). Время, затрачиваемое на прочтение данного набора, равно \(a_1 = 4\).

В пятом наборе входных данных можно показать, что не существует такого непустого набора сообщений, затрачиваемое время на прочтение которого не превышает \(l\).

E. Дистанционные курсы в ЦПМ

битмаски жадные алгоритмы математика Перебор Структуры данных *2400

В Центре Помощи Магистрам наступил Новый год, а значит время добавить нововведение!

Теперь ученикам даются дистанционные курсы, при этом всего есть \(n\) курсов. За \(i\)-й дистанционный курс ученик может получить оценку от \(x_i\) до \(y_i\).

Но каждому ученику могут быть доступны не все курсы, а именно \(j\)-му ученику даются только курсы с номерами от \(l_j\) до \(r_j\), то есть дистанционные курсы с номерами \(l_j, l_j + 1, \ldots, r_j\).

Создатели дистанционных курсов решили определять итоговую оценку особенным образом. Пусть \(j\)-й ученик получил оценки \(c_{l_j}, c_{l_j + 1}, \ldots, c_{r_j}\) за свои дистанционные курсы, тогда его итоговая оценка будет равна \(c_{l_j}\) \(|\) \(c_{l_j + 1}\) \(|\) \(\ldots\) \(|\) \(c_{r_j}\), где \(|\) обозначает операцию побитового ИЛИ.

Так как чат-бот с решениями дистанционных курсов сломался, то ученики попросили вас помочь. Для каждого из \(q\) учеников скажите, какую максимальную итоговую оценку он может получить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество дистанционных курсов.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i \le y_i < 2^{30}\)) — минимальная и максимальная оценка, которую можно получить за \(i\)-й курс.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 2\cdot10^5\)) — количество учеников.

Каждая из следующих \(q\) строк содержит два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j \le r_j \le n\)) — минимальный и максимальный номер дистанционных курсов, доступных для \(j\)-го ученика.

Гарантируется, что сумма \(n\) по всем наборам входных данных и сумма \(q\) по всем наборам входных данных не превосходят \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел, \(j\)-е из которых является максимальной итоговой оценкой, которую может получить \(j\)-й ученик.

Примечание

В первом наборе входных данных:

  1. Максимальная оценка для первого ученика равна \(1\):
    • На первом дистанционном курсе он получит оценку \(1\).
    Таким образом, итоговая оценка равна \(1\).

  2. Максимальная оценка для второго ученика равна \(5\):
    • На первом дистанционном курсе он получит оценку \(1\).
    • На втором дистанционном курсе он получит оценку \(4\).
    Таким образом, итоговая оценка равна \(1\) \(|\) \(4\) \(=\) \(5\).
  3. Максимальная оценка для третьего ученика равна \(4\):
    • На втором дистанционном курсе он получит оценку \(4\).
    Таким образом, итоговая оценка равна \(4\).

Во втором наборе входных данных:

  1. Максимальная оценка для первого ученика равна \(15\):
    • На первом дистанционном курсе он получит оценку \(7\).
    • На втором дистанционном курсе он получит оценку \(4\).
    • На третьем дистанционном курсе он получит оценку \(8\).
    Тем самым, итоговая оценка равна \(7\) \(|\) \(4\) \(|\) \(8\) \(=\) \(15\).

  2. Максимальная оценка для второго ученика равна \(11\):
    • На третьем дистанционном курсе он получит оценку \(9\).
    • На четвертом дистанционном курсе он получит оценку \(2\).
    Тем самым, итоговая оценка равна \(9\) \(|\) \(2\) \(=\) \(11\).

A. Рудольф и билет

математика Перебор *800

Рудольф собирается в гости к Бернарду, доехать до него он решил на метро. Билет можно купить в автомате, который принимает ровно две монеты, сумма которых не превышает \(k\).

У Рудольфа есть два кармана с монетами. В левом кармане лежат \(n\) монет номиналов \(b_1, b_2, \dots, b_n\). В правом кармане лежат \(m\) монет номиналов \(c_1, c_2, \dots, c_m\). Для оплаты он хочет выбрать ровно одну монету из левого кармана и ровно одну монету из правого кармана (суммарно две монеты).

Помогите Рудольфу узнать, сколько существует способов выбрать такие индексы \(f\) и \(s\), что \(b_f + c_s \le k\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора данных содержит три натуральных числа \(n\), \(m\) и \(k\) (\(1 \le n, m \le 100, 1 \le k \le 2000\)) — количество монет в левом и правом карманах и максимальная сумма двух монет для оплаты билета в кассе, соответственно.

Вторая строка каждого набора содержит \(n\) целых чисел \(b_i\) (\(1 \le b_i \le 1000\)) — номиналы монет в левом кармане.

Третья строка каждого набора содержит \(m\) целых чисел \(c_i\) (\(1 \le c_i \le 1000\)) — номиналы монет в правом кармане.

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество способов, которыми Рудольф может выбрать две монеты, доставая по одной из каждого кармана, чтобы сумма монет не превышала \(k\).

Примечание

Обратите внимание, в парах указаны индексы монет в массиве, а не их номиналы.

В первом наборе Рудольф может выбрать следующие пары монет: \([1, 1], [1, 2], [1, 4], [2, 1], [2, 2], [2, 4]\).

Во втором наборе Рудольф не может выбрать из двух карманов по одной монете ни одним способом, поскольку сумма любых двух элементов из первого и второго массивов будет превышать значение \(k=4\).

В третьем наборе Рудольф может выбрать: \([1, 1], [2, 1], [3, 1], [4, 1]\).

В четвертом наборе Рудольф может выбрать любую монету из левого кармана и любую монету из правого кармана.

B. Рудольф и 121

дп жадные алгоритмы математика Перебор *1000

У Рудольфа есть массив \(a\) из \(n\) целых чисел, элементы которого пронумерованы от \(1\) до \(n\).

За одну операцию он может выбрать индекс \(i\) (\(2 \le i \le n - 1\)) и присвоить:

  • \(a_{i - 1} = a_{i - 1} - 1\);
  • \(a_i = a_i - 2\);
  • \(a_{i + 1} = a_{i + 1} - 1\).

Рудольф может применить эту операцию любое число раз. Любой индекс \(i\) может быть использован ноль или более раз.

Может ли он с помощью этой операции сделать все элементы массива равными нулю?

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество элементов массива.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_j \le 10^9\)) — элементы массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если с помощью описанных операций можно сделать все элементы массива нулями. Иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом примере исходный массив равен \([1, 3, 5, 5, 2]\), чтобы сделать все его элементы равными нулю, Рудольф может действовать так:

  • применить операцию на \(i=4\) и получить массив \([1, 3, 4, 3, 1]\);
  • применить операцию на \(i=3\) и получить массив \([1, 2, 2, 2, 1]\);
  • применить операцию на \(i=2\) и получить массив \([0, 0, 1, 2, 1]\);
  • применить операцию на \(i=4\) и получить массив \([0, 0, 0, 0, 0]\).

F. Любимая функция Фермера Джона

математика Перебор реализация Структуры данных *2700

У Фермера Джона есть массив \(a\) длины \(n\). У него также есть функция \(f\) со следующим рекуррентным соотношением:

  • \(f(1) = \sqrt{a_1}\);
  • Для всех \(i > 1\), \(f(i) = \sqrt{f(i-1)+a_i}\).

Обратите внимание, что \(f(i)\) не обязательно является целым числом.

Он планирует сделать \(q\) обновлений массива. При каждом обновлении он дает вам два целых числа \(k\) и \(x\) и хочет, чтобы вы установили \(a_k = x\). После каждого обновления он хочет узнать \(\lfloor f(n) \rfloor\), где \(\lfloor t \rfloor\) обозначает значение \(t\), округленное вниз до ближайшего целого числа.

Входные данные

Первая строка содержит \(n\) и \(q\) (\(1 \leq n, q \leq 2 \cdot 10^5\)) — длину \(a\) и количество обновлений, которые он будет выполнять.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^{18}\)).

Следующие \(q\) строк содержат по два целых числа \(k\) и \(x\) (\(1 \leq k \leq n\), \(0 \leq x \leq 10^{18}\)) — индекс обновления и элемент, на который он заменит \(a_k\).

Выходные данные

После каждого обновления выведите целое число \(\lfloor f(n) \rfloor\) в отдельной строке.

Примечание

В первом примере массив после первого обновления имеет вид \([4, 14, 0, 7, 6]\). Значения \(f\) следующие:

  • \(f(1)=2\);
  • \(f(2)=4\);
  • \(f(3)=2\);
  • \(f(4)=3\);
  • \(f(5)=3\).

Поскольку \(\lfloor f(5) \rfloor = 3\), ответом будет \(3\).

Массив после второго обновления имеет вид \([3, 14, 0, 7, 6]\). Значения \(f\), округленные до \(6\) знаков после запятой, таковы:

  • \(f(1)\approx 1.732051\);
  • \(f(2)\approx 3.966365\);
  • \(f(3)\approx 1.991573\);
  • \(f(4)\approx 2.998595\);
  • \(f(5)\approx 2.999766\).

Поскольку \(\lfloor f(5) \rfloor = 2\), ответом будет \(2\).

D1. Считать всегда весело (простая версия)

дп Комбинаторика математика Перебор *2400

Это простая версия задачи. Единственное различие между двумя версиями — ограничение на \(n\). Вы можете делать взломы, только если обе версии задачи решены.

Массив \(b\) из \(m\) целых неотрицательных чисел считается хорошим, если все элементы \(b\) можно сделать равными \(0\) с помощью применения следующей операции несколько (возможно, ноль) раз:

  • Выбрать два различных индекса \(l\) и \(r\) (\(1 \leq l \color{red}{<} r \leq m\)) и вычесть \(1\) из всех \(b_i\) таких, что \(l \leq i \leq r\).

Вам даны три целых положительных числа \(n\), \(k\) и простое число \(p\).

Среди всех \((k+1)^n\) массивов длины \(n\), таких, что \(0 \leq a_i \leq k\) для всех \(1 \leq i \leq n\), посчитайте количество хороших массивов.

Поскольку число может быть очень большим, от вас требуется найти его только по модулю \(p\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых положительных числа \(n\), \(k\) и \(p\) (\(3 \leq n \leq 400\), \(1 \leq k \leq n\), \(10^8 < p < 10^9\)) — длина массива \(a\), верхняя граница на элементы \(a\) и модуль \(p\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), а \(p\) является простым.

Выходные данные

Для каждого набора входных данных в новой строке выведите количество хороших массивов по модулю \(p\).

Примечание

В первом наборе входных данных \(4\) хорошими массивами \(a\) являются:

  • \([0,0,0]\);
  • \([0,1,1]\);
  • \([1,1,0]\);
  • \([1,1,1]\).

E1. MEX игра - 2 (простая версия)

Бинарный поиск жадные алгоритмы Перебор *2900

Это простая версия задачи. Единственное различие между двумя версиями заключается в ограничениях на \(t\), \(m\) и сумму \(m\). Вы можете делать взломы, только если обе версии задачи решены.

Алиса и Боб играют в очередную игру на массиве \(a\) длины \(n\). Алиса начинает с пустого массива \(c\). Оба игрока ходят по очереди, причем Алиса начинает первой.

В свой ход Алиса выбирает один элемент из \(a\), добавляет его в \(c\), а затем удаляет из \(a\).

В свой ход Боб выбирает не более \(k\) элементов из \(a\), а затем удаляет их из \(a\).

Игра заканчивается, когда массив \(a\) становится пустым. Счет Алисы определяется как MEX\(^\dagger\) элементов \(c\). Алиса хочет максимизировать свой счет, а Боб — минимизировать его. Найдите итоговый счет Алисы, если оба игрока играют оптимально.

Массив будет дан в сжатом формате. Вместо того, чтобы давать элементы, присутствующие в массиве, мы будем давать их частоты. Формально, вам будет дано \(m\) — максимальный элемент массива, а затем \(m + 1\) целых чисел \(f_0, f_1, \ldots, f_m\), где \(f_i\) представляет собой количество раз, которое \(i\) встречается в массиве \(a\).

\(^\dagger\) \(\operatorname{MEX}\) (minimum excludant) массива целых чисел определяется как наименьшее целое неотрицательное число, которое не встречается в массиве. Например:

  • MEX массива \([2,2,1]\) равен \(0\), потому что \(0\) не принадлежит массиву.
  • MEX массива \([3,1,0,1]\) равен \(2\), потому что \(0\) и \(1\) принадлежат массиву, а \(2\) — нет.
  • MEX массива \([0,3,1,2]\) равен \(4\), потому что \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, а \(4\) — нет.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(m\) и \(k\) (\(1 \le m \le 50, 1 \le k \le 10^9\)).

Вторая строка содержит \(m + 1\) целых чисел \(f_0, f_1, \ldots, f_m\) (\(1 \le f_i \le 10^9\)).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных найдите счет Алисы, если оба игрока играют оптимально.

Примечание

В первом наборе входных данных массив \(a\) равняется \([0, 0, 0, 0, 1, 1, 1, 1, 1]\). Возможная игра со счетом \(2\) выглядит следующим образом:

  1. Алиса выбирает элемент \(0\). После этого хода \(a = [0, 0, 0, 1, 1, 1, 1, 1]\) и \(c=[0]\).
  2. Боб выбирает для удаления \(3\) элемента \(0\), \(0\) и \(1\). После этого хода \(a = [0, 1, 1, 1, 1]\) и \(c=[0]\).
  3. Алиса выбирает элемент \(1\). После этого хода \(a = [0,1,1,1]\) и \(c=[0,1]\).
  4. Боб удаляет оставшиеся \(4\) элемента \(0\), \(1\), \(1\) и \(1\). После этого хода \(a=[\,]\) и \(c=[0,1]\).

В конце массив \(c=[0,1]\), его MEX равен \(2\). Обратите внимание, что это пример игры и не обязательно представляет собой оптимальную стратегию для обоих игроков.

Во втором наборе входных данных Алиса может выбрать \(0\) в свой первый ход, гарантируя, что ее счет будет не меньше \(1\). Боб может удалить все копии элемента \(1\) в свой первый ход, гарантируя тем самым, что счет Алисы не будет превосходить \(1\). Таким образом, счет Алисы равен \(1\), если оба игрока играют оптимально.

C. Левые и правые дома

Перебор *1200

В деревне Летово есть \(n\) домов. Жители деревни решили построить большую дорогу, которая разделит деревню на левую и правую стороны. Житель каждого дома хочет жить либо на правой, либо на левой стороне улицы. Можно описать предпочтения в виде последовательности \(a_1, a_2, \dots, a_n\), где \(a_j = 0\), если житель \(j\)-го дома хочет жить на левой стороне улицы, иначе \(a_j = 1\).

Дорога будет проходить между двумя домами, и дома слева от нее будут левыми, дома справа — правыми. Более формально, пусть дорога проходит между домами \(i\) и \(i+1\). Тогда дома на позициях от \(1\) до \(i\) будут на левой стороне улицы, а на позициях \(i+1\) до \(n\) на правой стороне. Дорога также может проходить перед первым или после последнего дома, в таком случае вся деревня объявляется правой или левой стороной соответственно.

Чтобы всё было честно, было решено спроектировать дорогу так, чтобы не менее половины жителей каждой из сторон деревни в отдельности остались довольны выбором. То есть среди \(x\) жителей одной стороны, хотя бы \(\lceil\frac{x}{2}\rceil\) должны хотеть жить именно на этой стороне, где \(\lceil x \rceil\) означает округление вверх вещественного числа \(x\).

Слева от дороги будет \(i\) домов, среди соответствующих \(a_j\) должно быть не меньше \(\lceil\frac{i}{2}\rceil\) нулей. Справа от дороги будет \(n-i\) домов, среди соответствующих \(a_j\) должно быть не меньше \(\lceil\frac{n-i}{2}\rceil\) единиц.

Определите, после какого дома \(i\) стоит проложить дорогу, чтобы выполнялось описанное условие и она была как можно ближе к середине деревни. Формально, среди всех подходящих позиций \(i\) минимизируйте \(\left|\frac{n}{2} - i\right|\).

Если подходящих позиций \(i\) с минимальным \(\left|\frac{n}{2} - i\right|\) несколько, выведите меньшую из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2\cdot 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(3 \le n \le 3\cdot 10^5\)) — количество домов.

Следующая строка входных данных состоит из строки \(a\) из \(n\) символов, каждый символ равен либо \(0\), либо \(1\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3\cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите одно число \(i\) — позицию такого дома, после которого надо проложить дорогу (если ее надо проложить перед первым домом, выведите \(0\)). Можно показать, что ответ всегда существует.

Примечание

Рассмотрим первый пример входных данных.

Если проложить дорогу после первого дома, на левой стороне улицы будет расположен один дом \(a_1 = 1\), житель которого хотел бы жить на правой стороне улицы. Тогда \(0\) из \(1\) жителей левой стороны останутся довольны выбором, значит, после дома \(1\) дорогу проложить нельзя.

Если проложить дорогу после второго дома, \(1\) из \(2\) жителей левой стороны (с пожеланиями \(a_1 = 1\), \(a_2 = 0\)) и \(1\) из \(1\) жителя правой стороны (с пожеланием \(a_3 = 1\)) останутся довольны выбором. Более половины жителей каждой стороны довольны выбором, значит, после дома \(2\) дорогу проложить разрешено. Можно показать, что это оптимальный ответ.

H. НОД больше

математика Перебор Структуры данных теория чисел *2600

Вечерами в походе нужно как-то коротать время, поэтому Кирилл и Антон решили достать из рюкзака массив целых чисел \(a\) длины \(n\) и сыграть с ним в игру. Правила заключаются в следующем:

  1. Кирилл выбирает себе от \(2\)-х до \((n-2)\)-х чисел и обводит их красным цветом.
  2. Антон обводит синим цветом все остальные числа.
  3. Кирилл считает наибольший общий делитель (НОД) всех красных чисел.
  4. Антон считает побитовое И всех синих чисел и прибавляет к результату число \(x\).
  5. Если НОД всех красных чисел строго больше, чем сумма побитового И всех синих чисел и числа \(x\), то Кирилл выигрывает, иначе выигрывает Антон.

Помогите Кириллу обыграть Антона или скажите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 20\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(x\) (\(4\le n \le 4\cdot 10^5\), \(0 \le x \le 4\cdot 10^5\)) — количество чисел и число \(x\) соответственно.

Во второй строке вводится массив \(a\) длины \(n\) (\(1 \le a_i \le 4\cdot 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(4\cdot 10^5\). Также гарантируется, что сумма максимальных значений \(a_i\) по каждому набору входных данных не превосходит \(4\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в первой строке «YES», если выполнить условие возможно, во второй — количество чисел, которые выбирает Кирилл, а также сами числа в любом порядке через пробел, а в третьей — размер второго множества и числа, попавшие в него.

Иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

D. Подарок на день рождения

битмаски жадные алгоритмы Конструктив Перебор реализация *1900

Совсем скоро у Ярика день рождения, и Марк решил подарить ему массив \(a\) длины \(n\).

Марк знает, что Ярик очень любит битовые операции, а также у него есть любимое число \(x\), поэтому Марк хочет найти такое максимальное число \(k\), что можно выбрать такие пары чисел [\(l_1, r_1\)], [\(l_2, r_2\)], \(\ldots\) [\(l_k, r_k\)], что:

  • \(l_1 = 1\).
  • \(r_k = n\).
  • \(l_i \le r_i\) для всех \(i\) от \(1\) до \(k\).
  • \(r_i + 1 = l_{i + 1}\) для всех \(i\) от \(1\) до \(k - 1\).
  • \((a_{l_1} \oplus a_{l_1 + 1} \oplus \ldots \oplus a_{r_1}) | (a_{l_2} \oplus a_{l_2 + 1} \oplus \ldots \oplus a_{r_2}) | \ldots | (a_{l_k} \oplus a_{l_k + 1} \oplus \ldots \oplus a_{r_k}) \le x\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ, а \(|\) обозначает операцию побитового ИЛИ.

Если такого \(k\) не существует, то нужно вывести \(-1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 10^5, 0 \le x < 2^{30}\)) — длина массива \(a\) и число \(x\) соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^{30}\)) — сам массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число — максимальное подходящее число \(k\), и \(-1\), если такого \(k\) не существует.

Примечание

В первом наборе входных данных можно взять \(k\) равным \(2\) и выбрать два отрезка [\(1, 1\)] и [\(2, 3\)], \((1) | (2 \oplus 3) = 1\). Можно показать, что \(2\) — максимальный возможный ответ.

Во втором наборе входных данных подходят отрезки [\(1, 1\)] и [\(2, 2\)], \((1) | (1) = 1\). Больше отрезков сделать нельзя.

В третьем наборе входных данных нельзя выбрать \(2\) отрезка, так как \((1) | (3) = 3 > 2\), значит оптимальный ответ это \(1\).

A. Специальные символы

Конструктив Перебор *800

Задано целое число \(n\).

Ваша задача — построить строку из заглавных латинских букв. В этой строке должно быть ровно \(n\) специальных символов. Назовем символ специальным, если он равен ровно одному из своих соседей.

Например, в строке AAABAACC есть \(6\) специальных символов (на позициях: \(1\), \(3\), \(5\), \(6\), \(7\) и \(8\)).

Выведите любую подходящую строку или сообщите, что такой строки не существует.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

  • если подходящей строки нет, выведите одну строку, содержащую NO;
  • в противном случае, выведите две строки. Первая строка должна содержать YES; на второй строке выведите строку длиной не более \(200\) — сам ответ (можно показать, что если существует хотя бы один ответ, то существует ответ длиной не более \(200\)). Если есть несколько решений, выведите любое из них.

B. Исправление массива

дп жадные алгоритмы Перебор реализация *1100

Вам задан массив целых чисел \(a\) размера \(n\).

Вы можете выполнять следующую операцию любое количество раз (возможно, ни разу): взять любой элемент массива \(a\), который больше или равен \(10\), удалить его и вставить вместо него цифры, из которых состоял этот элемент, на ту же позицию, в том же порядке, в котором они шли в этом элементе.

Например:

  • если мы применим эту операцию к \(3\)-му элементу массива \([12, 3, 45, 67]\), то массив станет равен \([12, 3, 4, 5, 67]\).
  • если мы применим эту операцию ко \(2\)-му элементу массива \([2, 10]\), то массив станет равен \([2, 1, 0]\).

Ваша задача — определить, возможно ли сделать массив \(a\) отсортированным в неубывающем порядке, используя вышеописанную операцию любое количество раз (возможно, ни разу). Другими словами, вам нужно определить, возможно ли преобразовать массив \(a\) таким образом, чтобы выполнялось \(a_1 \le a_2 \le \dots \le a_k\), где \(k\) — текущая длина массива \(a\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит одно целое число \(n\) (\(2 \le n \le 50\)).
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 99\)).
Выходные данные

Для каждого набора входных данных выведите YES, если возможно сделать \(a\) отсортированным в неубывающем порядке, используя вышеописанную операцию; в противном случае выведите NO.

Вы можете печатать каждую букву в любом регистре. Например, yes, Yes, YeS будут распознаны как положительный ответ.

Примечание

В первом примере вы можете разделить первый элемент, тогда массив станет равен \([1, 2, 3, 45, 67]\).

Во втором примере нет способа получить отсортированный массив.

В третьем примере массив уже отсортирован.

C. Стрелочный путь

графы дп Конструктив кратчайшие пути Перебор поиск в глубину и подобное *1300

Задано поле, состоящее из \(2\) строк и \(n\) столбцов. Строки нумеруются от \(1\) до \(2\) сверху вниз. Столбцы нумеруются от \(1\) до \(n\) слева направо. Каждая клетка поля содержит стрелку, указывающую либо влево, либо вправо. Ни одна стрелка не указывает за пределы поля.

Есть робот, который начинает в клетке \((1, 1)\). Каждую секунду происходят следующие два действия одно за другим:

  1. сначала робот двигается влево, вправо, вниз или вверх (он не может попытаться выйти за пределы поля и не может пропустить ход);
  2. затем он двигается по направлению стрелки, которая находится в текущей ячейке (в ячейке, в которой он окажется после своего хода).

Ваша задача — определить, может ли робот достичь клетки \((2, n)\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число (\(2 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит строку, состоящую ровно из \(n\) символов < и/или > — первая строка поля.

Третья строка содержит строку, состоящую ровно из \(n\) символов < и/или > — вторая строка поля.

Дополнительные ограничения на входные данные:

  • \(n\) — четное число;
  • нет стрелок, указывающих за пределы поля;
  • сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите YES, если робот может достичь клетки \((2, n)\); в противном случае выведите NO.

Вы можете печатать каждую букву в любом регистре. Например, yes, Yes, YeS будут распознаны как положительный ответ.

Примечание

В первом примере один из возможных путей выглядит следующим образом: \((1, 1) \rightarrow (1, 2) \rightarrow (1, 3) \rightarrow (2, 3) \rightarrow (2, 4)\).

Во втором примере один из возможных путей выглядит следующим образом: \((1, 1) \rightarrow (2, 1) \rightarrow (2, 2)\).

В третьем примере нет способа достичь клетки \((2, 4)\).

В четвертом примере один из возможных путей выглядит следующим образом: \((1, 1) \rightarrow (2, 1) \rightarrow (2, 2) \rightarrow (1, 2) \rightarrow (1, 3) \rightarrow (2, 3) \rightarrow (2, 4) \rightarrow (2, 5) \rightarrow (2, 6)\).

D. Тандемные повторы?

Перебор Строки *1700

Вам дана строка \(s\), состоящая из строчных латинских букв и/или знаков вопроса.

Тандемный повтор — это строка четной длины, такая, что ее первая половина равна второй половине.

Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

Ваша цель — заменить каждый знак вопроса некоторой строчной латинской буквой таким образом, чтобы длина самой длинной подстроки, являющейся тандемным повтором, была максимально возможной.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записана строка \(s\) (\(1 \le |s| \le 5000\)), состоящая только из строчных латинских букв и/или знаков вопроса.

Общая длина строк во всех наборах входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную длину самой длинной подстроки, являющейся тандемным повтором после замены каждого знака вопроса в строке некоторой строчной латинской буквой.

Если невозможно создать подстроки, являющиеся тандемными повторами в строке, выведите \(0\).

E. Разделение на клики

графы жадные алгоритмы Конструктив Перебор реализация *2100

Даны два целых числа, \(n\) и \(k\). Рассмотрим граф на \(n\) вершинах, пронумерованных от \(1\) до \(n\), в котором изначально нет ребер.

Вам нужно назначить каждой вершине число; пусть \(a_i\) — число, назначенное вершине \(i\). Все \(a_i\) должны быть различными целыми числами от \(1\) до \(n\).

После того как вы назначили числа для вершин, вы добавляете в граф ребра. Для пары вершин \((i, j)\) добавляется ребро между ними, если \(|i - j| + |a_i - a_j| \le k\).

Ваша цель — создать граф, который можно разбить на минимально возможное (для заданных значений \(n\) и \(k\)) количество клик. Каждая вершина графа должна принадлежать ровно одной клике. Напомним, что клика — это такое множество вершин, что каждая пара вершин в этом множестве соединена ребром.

Поскольку BledDest не особо подтянул свои навыки программирования, он не может решить задачу «дан граф, разбейте его на минимальное количество клик». Поэтому мы также просим вас вывести само разбиение.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1600\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(2 \le n \le 40\); \(1 \le k \le 2n\)).

Выходные данные

Для каждого набора входных данных выведите три строки:

  • первая строка должна содержать \(n\) различных целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — значения, которые вы назначаете вершинам;
  • вторая строка должна содержать одно целое число \(q\) (\(1 \le q \le n\)) — количество клик, на которые вы разбиваете граф;
  • третья строка должна содержать \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le q\)) — разбиение графа на клики. Где две вершины \(u\) и \(v\) в одной клике, если \(c_u = c_v\).

Если существует несколько ответов, выведите любой из них.

G. MST с паросочетанием

битмаски Деревья Паросочетания Перебор снм *3100

Дан неориентированный связный граф, в котором \(n\) вершин. У каждого ребра этого графа есть вес; вес ребра между вершинами \(i\) и \(j\) равен \(w_{i,j}\) (или \(w_{i,j} = 0\), что означает, что между \(i\) и \(j\) нет ребра). Все веса — положительные целые числа.

Также дано положительное целое число \(c\).

Вы должны построить остовное дерево для этого графа, то есть выбрать ровно \((n-1)\) ребер графа так, чтобы можно было из любой вершины добраться до любой другой по выбранным ребрам. Стоимость остовного дерева — это сумма двух значений:

  • сумма весов всех выбранных ребер;
  • максимальное паросочетание в остовном дереве (то есть максимальный размер множества ребер, такого, что каждое ребро принадлежит остовному дереву и каждой вершине инцидентно не более одного ребра из множества), умноженное на заданное число \(c\).

Найдите любое остовное дерево с минимальной стоимостью. Так как граф связный, у него существует хотя бы одно остовное дерево.

Входные данные

В первой строке заданы два целых числа \(n\) и \(c\) (\(2 \le n \le 20\); \(1 \le c \le 10^6\)).

Затем следуют \(n\) строк. В \(i\)-й из них заданы \(n\) целых чисел \(w_{i,1}, w_{i,2}, \dots, w_{i,n}\) (\(0 \le w_{i,j} \le 10^6\)), где \(w_{i,j}\) — вес ребра между вершинами \(i\) и \(j\) (или \(w_{i,j} = 0\), если такого ребра нет).

Дополнительные ограничения на входные данные:

  • для каждого \(i \in [1, n]\), \(w_{i,i} = 0\);
  • для каждой пары целых чисел \((i, j)\), такой, что \(i \in [1, n]\) и \(j \in [1, n]\), выполняется \(w_{i,j} = w_{j,i}\);
  • граф является связным.
Выходные данные

Выведите одно целое число — минимальную стоимость остовного дерева.

Примечание

В первом примере минимальное остовное дерево состоит из ребер \((1, 3)\), \((2, 3)\) и \((3, 4)\). Максимальное паросочетание относительно него равно \(1\).

Во втором примере минимальное остовное дерево состоит из ребер \((1, 2)\), \((2, 3)\) и \((3, 4)\). Максимальное паросочетание относительно него равно \(2\).

A. Grove

геометрия дп Перебор поиск в глубину и подобное Теория вероятностей *3300

You want to plant trees in a square lawn of size \(n \times n\) whose corners have Cartesian coordinates \((0, 0)\), \((n, 0)\), \((0, n)\), and \((n, n)\). Trees can only be planted at locations with integer coordinates. Every tree will grow roots within a disk of radius \(r\) centered at the location where the tree was planted; such disks must be fully contained in the lawn (possibly touching the boundary of the lawn) and can only intersect each other on their boundaries.

Find a configuration that maximizes the number of trees.

Input

The first and only line contains an integer \(n\) (\(1 \leq n \leq 20\)) and a real number \(r\) (\(0 < r \leq n/2\)) — the length of the sides of the lawn, and the radius of the disks where each tree will grow roots. The real number \(r\) is given in decimal notation with at least \(1\) and at most \(3\) digits after the decimal point.

Output

In the first line, print the maximum number \(m\) of trees that can be planted.

In the next \(m\) lines, print a configuration that maximizes the number of trees. Specifically, in the \((i+1)\)-th line, print two integers \(x\) and \(y\) — the coordinates of the location where the \(i\)-th tree should be planted. You can print the trees in any order.

If there are multiple solutions, print any of them.

Note

For the first sample, the sample output is shown in the following figure. Note that this is not the only configuration that maximizes the number of trees.

For the second sample, the sample output is shown in the following figure. Note that this is not the only configuration that maximizes the number of trees.

B. Charming Meals

Бинарный поиск жадные алгоритмы Перебор сортировки *1500

The Czech cuisine features \(n\) appetizers and \(n\) main dishes. The \(i\)-th appetizer has spiciness \(a_i\), and the \(i\)-th main dish has spiciness \(b_i\).

A typical Czech meal consists of exactly one appetizer and one main dish. You want to pair up the \(n\) appetizers and \(n\) main dishes into \(n\) meals with each appetizer and each main dish being included in exactly one meal.

Your meals shall surprise the diners, so you want the spiciness levels of the two parts of the same meal to be as different as possible. The charm of a meal is the difference (in absolute value) between the spiciness of the appetizer and the spiciness of the main dish. So, a meal consisting of an appetizer with spiciness \(x\) and a main dish with spiciness \(y\) has charm equal to \(|x-y|\).

You want to maximize the minimum charm of the resulting \(n\) meals. What is the largest possible value of the minimum charm that you can achieve?

Input

Each test contains multiple test cases. The first line contains an integer \(t\) (\(1\le t\le 1\,000\)) — the number of test cases. The descriptions of the \(t\) test cases follow.

The first line of each test case contains a single integer \(n\) (\(1 \leq n \leq 5\,000\)) —the number of appetizers and main dishes.

The second line of each test case contains \(n\) integers \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^{9}\)) — the spicinesses of the \(n\) appetizers.

The third line of each test case contains \(n\) integers \(b_1, b_2, \ldots, b_n\) (\(0 \leq b_i \leq 10^{9}\)) — the spicinesses of the \(n\) main dishes.

It is guaranteed that the sum of \(n^2\) over all test cases does not exceed \(25\cdot 10^6\).

Output

For each test case, print the largest possible value of the minimum charm you can achieve.

Note

In the first test case, no matter how you pair up the appetizers with the main dishes, each meal will have an appetizer with spiciness \(0\) and a main dish with spiciness \(1000000000\), so the charm of each meal will be \(1000000000\).

In the second test case, one optimal way to pair up appetizers and main dishes is: \((1, 5)\), \((2, 4)\), \((3, 1)\), \((4, 2)\), \((5, 3)\). The corresponding meals have charms: \(4\), \(2\), \(2\), \(2\), \(2\). The resulting minimum charm is \(2\).

In the third test case, one way to maximize the minimum charm is to pair up the three appetizers with spiciness \(0\) with the three main dishes with spiciness \(100\), and the three appetizers with spiciness \(100\) with the three main dishes with spiciness \(0\). Doing so, the charm of each meal will be exactly \(100\).

E. Damage per Second

математика Перебор *2900

You just created a new character in your favourite role-playing game and now have to decide how to skill him.

The two skill attributes to be chosen are: damage per hit and hits per second. Damage per hit is the amount of damage you deal with a single hit, while hits per second is the number of hits you can make in one second. Initially, both skill attributes are set at \(0\). You have \(k\) skill points to distribute as you want; in other words, you can choose the values of the two skills so that they are positive integers with sum at most \(k\).

The tutorial of the game (the boring part you want to finish as soon as possible) consists of \(n\) monsters to be killed one after the other. The \(i\)-th monster has \(h_i\) health points, i.e., it dies after you have inflicted at least \(h_i\) damage.

How can you assign the two skill attributes to minimize the time necessary to kill all the \(n\) monsters?

Input

The first line contains two integers \(n\) and \(k\) (\(1\leq n\leq200\,000\), \(2\leq k\leq200\,000\)) — the number of enemies and the number of skill points.

The second line contains \(n\) integers \(h_i\) (\(1\leq h_i\leq10^{13}\)) — the health of the \(i\)th enemy.

Output

Print two positive integers \(x\) and \(y\) (\(1\le x, y\) and \(x+y\le k\)) — the number of skill points you want to invest in damage per hit and hits per second. If there are multiple optimal solutions, print any of them.

Note

In the first sample, there is only one monster and you have \(7\) skill points to distribute. If you make \(3\) damage per hit, you will need \(5\) hits to kill it. If you do \(4\) hits per second, you will need \(1.25\) seconds to beat the monster. There is no way to beat the monster faster than this.

In the second sample, you will need one hit for each monster and a total time of \(0.8\) seconds if you distribute \(4\) skill points on damage per hit and the remaining \(5\) points on hits per second.

A. Посмотрим футбол

Бинарный поиск математика Перебор *1000

Валерик и Валерко пропустили последний матч чемпионата Европы по футболу и решили посмотреть основные моменты этого матча в интернете. Им хочется побыстрее начать смотреть, но низкая скорость соединения не позволяет этого сделать. Если сразу включить видео, то оно будет «тормозить» из-за того, что размер данных, необходимых для просмотра одной секунды видео, превышает размер данных, которые можно получить за одну секунду.

Ребята хотят посмотреть все видео целиком без задержек, поэтому они должны подождать некоторое целое количество секунд, пока загрузится часть видео, а потом начинать смотреть. При этом не обязательно чтобы видео загрузилось полностью, оно может продолжать загружаться после включения.

Предположим видео идет c секунд, а Валерик и Валерко подождут перед просмотром t секунд. Тогда необходимо, чтобы для любого момента времени t0, t ≤ t0 ≤ c + t, выполнялось условие, что количество данных, полученных за t0 секунд, не меньше, чем количество данных, необходимых для просмотра t0 - t секунд видео.

Конечно же, ребята хотят ждать как можно меньше, поэтому вам предстоит найти минимальное целое количество секунд, которое необходимо подождать перед включением видео, чтобы можно было посмотреть его без задержек.

Входные данные

В первой строке записаны через пробел три целых числа a, b и c (1 ≤ a, b, c ≤ 1000, a > b). Первое число (a) обозначает количество данных, необходимое для просмотра одной секунды видео, второе (b) — количество данных, которое Валерик и Валерко могут загрузить из интернета за одну секунду, третье (c) — длину видео в секундах.

Выходные данные

Выведите одно целое число — минимальное целое количество секунд, которое Валерик и Валерко должны подождать, чтобы посмотреть футбол без задержек.

Примечание

В первом примере длина видео 1 секунда, чтобы посмотреть 1 секунду видео необходимо загрузить 4 единицы данных, таким образом всего ребятам нужно загрузить 4 · 1 = 4 единиц данных для просмотра всего видео. Наиболее оптимально будет подождать 3 секунды пока загрузится 3 единицы данных, а затем начать смотреть. Пока ребята будут смотреть видео, за одну секунду загрузится еще одна единица данных и к моменту окончания просмотра Валерик и Валерко будут иметь необходимые 4 единицы. При этом в любой момент времени до окончания видео у ребят будет загружено данных больше, чем нужно для просмотра.

Во втором примере ребятам нужно загрузить 2 · 10 = 20 единиц данных, поэтому им нужно подождать 5 секунд, и тогда у них загрузятся необходимые 20 единиц еще до окончания второй секунды. Однако если ребята подождут 4 секунды, то они смогут посмотреть первую секунду видео без задержек, но к концу второй секунды у них загрузится всего 18 единиц, что меньше, чем необходимо.

D. Произведение двоичных десятичных чисел

дп Перебор реализация теория чисел *1100

Давайте назовем число двоичным десятичным, если это положительное целое число, и все цифры в его десятичной записи равны \(0\) или \(1\). Например, \(1\,010\,111\) является двоичным десятичным числом, в то время как \(10\,201\) и \(787\,788\) не являются таковыми.

Дано число \(n\), вам нужно определить, возможно ли представить \(n\) в виде произведения некоторых (не обязательно различных) двоичных десятичных чисел.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если \(n\) можно представить в виде произведения двоичных десятичных чисел, и «NO» (без кавычек) в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yES», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

Первые пять примеров можно представить в виде произведения двоичных десятичных чисел следующим образом:

  • \(121 = 11 \times 11\).
  • \(1 = 1\) уже является двоичным десятичным числом.
  • \(14\,641 = 11 \times 11 \times 11 \times 11\).
  • \(12\,221 = 11 \times 11 \times 101\).
  • \(10\,110 = 10\,110\) уже является двоичным десятичным числом.

E. Почти самая короткая повторяющаяся подстрока

Перебор реализация Строки теория чисел *1500

Вам дана строка \(s\) длиной \(n\), состоящая из строчных латинских символов. Найдите длину самой короткой строки \(k\), такой что несколько (возможно одна) копий \(k\) могут быть сконкатенированы вместе, чтобы образовать строку той же длины, что и \(s\), и при этом имеется не более одного отличающегося символа.

Формально, найдите длину самой короткой строки \(k\), такой что \(c = \underbrace{k + \cdots + k}_{x\rm\ \text{раз}}\) для некоторого положительного целого \(x\), строки \(s\) и \(c\) имеют одинаковую длину и \(c_i \neq s_i\) для не более чем одного \(i\) (т.е. существует \(0\) или \(1\) такая позиция).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — длина строки \(s\).

Вторая строка каждого теста содержит строку \(s\), состоящую из строчных латинских символов.

Сумма \(n\) по всем тестам не превышает \(2\cdot10^5\).

Выходные данные

Для каждого теста выведите длину самой короткой строки \(k\), удовлетворяющей условиям в условии.

Примечание

В первом примере вы можете выбрать \(k = \texttt{a}\) и \(k+k+k+k = \texttt{aaaa}\), которая отличается от \(s\) только во второй позиции.

Во втором примере вы не можете выбрать \(k\) длиной один или два. Мы можем взять \(k = \texttt{abba}\), которая равна \(s\).

F. 0, 1, 2, Tree!

битмаски Деревья жадные алгоритмы Перебор реализация *1700

Найдите минимальную высоту корневого дерева\(^{\dagger}\) с \(a+b+c\) вершинами, которое удовлетворяет следующим условиям:

  • \(a\) вершин имеют ровно \(2\) потомка,
  • \(b\) вершин имеют ровно \(1\) потомка, и
  • \(c\) вершин имеют ровно \(0\) потомков (не имеют потомков).
Если такого дерева не существует, вы должны сообщить об этом.

Дерево выше с корнем в верхней вершине, и каждая вершина помечена числом потомков. Здесь \(a=2\), \(b=1\), \(c=3\), и высота равна \(2\).

\(^{\dagger}\) Корневое дерево — это связный граф без циклов, с особой вершиной, называемой корнем. В корневом дереве, среди любых двух вершин, соединенных ребром, одна вершина является родителем (ближе к корню), а другая — потомком.

Расстояние между двумя вершинами в дереве — количество ребер в кратчайшем пути между ними. Высота корневого дерева — это максимальное расстояние от вершины до корня.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(a\), \(b\), и \(c\) (\(0 \leq a, b, c \leq 10^5\); \(1 \leq a + b + c\)).

Сумма \(a + b + c\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если такое дерево не существует, выведите \(-1\). В противном случае выведите одно целое число — минимальную высоту дерева, удовлетворяющего описанным условиям.

Примечание

Первый набор входных данных изображен в условии. Можно доказать, что высота не может быть меньше \(2\).

Во втором наборе входных данных, можно сформировать дерево с одной вершиной и без ребер. Оно имеет высоту \(0\), что является оптимальным.

В третьем наборе входных данных, можно сформировать дерево с двумя вершинами, соединенными одним ребром. Оно имеет высоту \(1\), что является оптимальным.

E. Без палиндромов

жадные алгоритмы Конструктив математика Перебор разделяй и властвуй реализация Строки хэши *2000

Вам дана строка \(s\), состоящая из строчных латинских букв. Вам нужно разбить\(^\dagger\) эту строку на некоторое количество подстрок так, чтобы каждая подстрока не была палиндромом\(^\ddagger\).

\(^\dagger\) Разбиение строки \(s\) — это упорядоченная последовательность некоторых \(k\) строк \(t_1, t_2, \ldots, t_k\), таких, что \(t_1 + t_2 + \ldots + t_k = s\), где \(+\) обозначает операцию конкатенации.

\(^\ddagger\) Строка \(s\) называется палиндромом, если она читается одинаково как слева направо, так и справа налево. Например, \(\mathtt{racecar}\), \(\mathtt{abccba}\) и \(\mathtt{a}\) являются палиндромами, а \(\mathtt{ab}\), \(\mathtt{dokibird}\) и \(\mathtt{kurosanji}\) — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит строку \(s\), состоящую из строчных латинских букв (\(1 \le |s| \le 10^6\)).

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES», если существует разбиение \(s\), части которого не являются палиндромами, или «NO», если такого разбиения не существует.

Если ответ «YES», то во второй строке выведите целое число \(k\) — количество частей, на которое нужно разбить \(s\), чтобы каждая часть не была палиндромом. В третьей строке выведите \(k\) строк \(t_1, t_2, \ldots, t_k\), представляющих такое разбиение. Если таких разбиений несколько, выведите любое из них.

Примечание

В первом наборе входных данных, поскольку \(\mathtt{sinktheyacht}\) уже не является палиндромом, разбиение \([\mathtt{sinktheyacht}]\) является допустимым.

Во втором наборе входных данных, поскольку любая подстрока строки \(s\) является палиндромом, не существует допустимых разбиений.

В третьем наборе входных данных еще одно допустимое разбиение — \([\mathtt{uw},\mathtt{uo}, \mathtt{wou}, \mathtt{wu}]\).

C. Они дурачились

*особая задача Перебор расписания

Входные данные

Первая строка содержит одно целое число \(n\) (\(0 \leq n \leq 12\)).

Выходные данные

Одно целое число — ответ.

F. Сетка

*особая задача Перебор

Входные данные

Входные данные содержат \(21\) строку, каждая строка содержит \(21\) символ \(\texttt{0}\) или \(\texttt{1}\).

J. Помогите, что значит быть «Based»

*особая задача Конструктив Перебор Разбор выражений реализация сортировки

Входные данные

Чё, давай сюда одно целое число \(x\) (\(1 \le x \le 4\)), братишка uwu :3

Выходные данные

Если \(x = 1\), выдай код, который, типа, когда подаёшь ему два целых числа \(a\) и \(b\), он возвращает их сумму.

Если \(x = 2\), напиши код, который принимает целое число \(a\) и возвращает его абсолютное значение, как будто волшебство, без всяких приколов.

Если \(x = 3\), чекай это: сочини код, который берёт целое число \(n\) (\(1 \le n \le 50\)) и массив \(a\) из \(n\) различных целых чисел, а потом возвращает максимальное значение, вжух!

Если \(x = 4\), бросай код, который берёт целое число \(n\) (\(1 \le n \le 50\)), массив \(a\) из \(n\) различных целых чисел и целое число \(k\) (\(1 \le k \le n\)), а потом выдаёт \(k\)-тое по величине значение в массиве. Врубился, братишка?!

Примечание

Загляни на страницу «Мои посылки» и оцени свой код, кликнув на его ID. Ты увидишь, насколько based или cringe он.

E. Длинное инвертирование

жадные алгоритмы Перебор реализация сортировки *1700

Дана бинарная строка \(s\) из \(n\) символов. Бинарной строкой называется строка, состоящая только из символов '1' и '0'.

Вы можете выбрать целое число \(k\) (\(1 \le k \le n\)), после чего применить любое число раз следующую операцию: выбрать \(k\) подряд идущих символов строки и инвертировать их, то есть заменить все '0' на '1' и наоборот.

С помощью операций нужно сделать все символы в строке равными '1'.

Например, если \(n=5\), \(s=00100\), то можно выбрать \(k=3\) и действовать следующим образом:

  • выбрать отрезок от \(1\)-го до \(3\)-го символа и получить \(s=\color{blue}{110}00\);
  • выбрать отрезок от \(3\)-го до \(5\)-го символа и получить \(s=11\color{blue}{111}\);

Найдите максимальное значение \(k\), при котором можно с помощью операций сделать все символы строки равными '1'. Обратите внимание, что количество операций, которые для этого нужно совершить, не имеет значения.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 5000\)) — длину строки \(s\).

Вторая строка каждого набора содержит строку \(s\) длины \(n\), состоящую из символов '1' и '0'.

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных в тесте не превосходит \(25 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите максимальное целое число \(k\) (\(1 \le k \le n\)), при котором возможно с помощью описанных операций получить строку \(s\), состоящую только из символов '1'.

G. НОД на клетчатом поле

дп математика Перебор поиск в глубину и подобное реализация теория чисел *1900

Совсем недавно Егор узнал про алгоритм Евклида нахождения наибольшего общего делителя двух чисел. Наибольшим общим делителем двух чисел \(a\) и \(b\) называется наибольшее число, на которое \(a\) и \(b\) делятся без остатка. С помощью этих знаний Егор может решить задачу, которую он когда-то не решил.

У Василия есть клетчатое поле \(n\) строк на \(m\) столбцов, на пересечении \(i\)-й строки и \(j\)-го столбца находится число \({a_i}_j\). Егор хочет попасть из левого верхнего угла (на пересечении первой строки и первого столбца) в правый нижний угол (на пересечении последней строки и последнего столбца) и узнать, какой НОД у всех чисел на пути. Разрешается двигаться только вниз и вправо. Егор выписал несколько путей и получил разные значения НОД, ему стало интересно, какой максимальный НОД можно получить.

К сожалению, Егор устал считать НОД чисел и поэтому просит Вас помочь ему найти максимальный НОД чисел на пути из левого верхнего угла в правый нижний угол клетчатого поля.

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le {10}^{4}\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 100\)) — количество строк и столбцов клетчатого поля.

Далее следует \(n\) строк, \(i\)-я строка содержит \(m\) целых чисел \((1 \le a_{i,j} \le {10}^{6}\)) — числа, записанные в \(i\)-й строке и \(j\)-м столбце клетчатого поля.

Гарантируется, что сумма \(n \cdot m\) не превосходит \(2 \cdot {10}^{5}\) по всем тестовым случаям.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите максимальное возможный НОД на пути из клетки левой верхней клетки в правую нижнюю клетку.

H. Самая безбашенная оборона

битмаски дп Конструктив кратчайшие пути Паросочетания Перебор Потоки *2300

Вы играете в очень популярную игру в жанре Tower Defense «Runnerfield 2». В ней игрок выставляет защитные башни, которые атакуют врагов, идущих от некоторой начальной точки до базы игрока.

Вам дано клетчатое поле размера \(n \times m\), на котором уже расставлены \(k\) башен и проложен маршрут, через который будут идти враги. Клетка на пересечении \(x\)-й строки и \(y\)-го столбца обозначается как \((x, y)\).

Каждую секунду башня наносит \(p_i\) единиц урона всем врагам в радиусе её действия. Например, если враг расположен в клетке \((x, y)\), а башня в \((x_i, y_i)\), и её радиус равен \(r\), тогда врагу будет нанесён урон \(p_i\), если \((x - x_i) ^ 2 + (y - y_i) ^ 2 \le r ^ 2\).

Враги идут из клетки \((1, 1)\) в клетку \((n, m)\), посещая каждую клетку пути ровно один раз. Враг моментально перемещается на соседнюю по горизонтали или вертикали клетку, однако перед этим он проводит в текущей клетке одну секунду. Если в эту секунду его здоровье стало равно нулю или ниже нуля, то враг больше не может перемещаться. Игрок проигрывает, если враг смог добраться до клетки \((n, m)\) и может сделать ещё одно перемещение.

По умолчанию все башни обладают нулевым радиусом действия, но игрок может сделать радиус башни равным целому числу \(r\) (\(r > 0\)) за это здоровье всех врагов увеличится на \(3^r\), однако каждое \(r\) может быть использовано не более чем для одной башни.

Допустим, враг имел \(h\) единиц базового здоровья. Если радиусы башен \(2\), \(4\) и \(5\), то его здоровье в начале пути будет \(h + 3 ^ 2 + 3 ^ 4 + 3 ^ 5 = h + 9 + 81 + 243 = h + 333\). Выбор радиусов происходит один раз до появления врагов и не может быть изменён после начала игры.

Найдите максимальное количество базового здоровья \(h\), при котором возможно установить радиусы так, чтобы игрок не проиграл при прохождении врага со здоровьем \(h\) (без учёта прибавок за радиусы башен).

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n, m \le 50, 1 \le k < n \cdot m\)) — размеры поля и количество башен на нём.

В следующих \(n\) строках даётся по \(m\) символов — описание очередной строки поля, где символ «.» обозначает пустую клетку, символ «#» клетку пути, по которой пройдут враги.

Далее следует \(k\) строк — описание башен. Каждая строка описания содержит три целых числа \(x_i\), \(y_i\) и \(p_i\) (\(1 \le x_i \le n, 1 \le y_i \le m, 1 \le p_i \le 500\)) — координаты башни и её параметр атаки. Все координаты соответствуют пустым клеткам на игровом поле, а так же все пары \((x_i, y_i)\) попарно различны.

Гарантируется, что сумма \(n \cdot m\) не превосходит \(2500\) по всем тестовым случаям.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите максимальное количество базового здоровья \(h\), при котором возможно установить радиусы так, чтобы игрок не проиграл при прохождении врага со здоровьем \(h\) (без учёта прибавок за радиусы башен).

Если невозможно выбрать радиусы даже для врага с \(1\) единицей базового здоровья, выведите «0».

Примечание

В первом примере нет смысла увеличивать радиус башни, так как она не сможет нанести достаточное количество урона монстру даже с \(1\) единицей здоровья.

Во втором примере радиус башни равен \(1\), она наносит урон монстру в клетках \((1, 1)\) и \((2, 2)\).

В третьем примере радиус башни равен \(2\), она наносит урон монстру на всех клетках пути. Если базовое здоровье врага \(1491\), то после прибавки за радиус башни его здоровье будет \(1491 + 3 ^ 2 = 1500\), что в точности будет равно урону, который ему нанесёт башня за три секунды.

В четвёртом примере у башни \((1, 2)\) радиус \(1\), а у башни \((3, 1)\) радиус \(2\).

A. Игра Нины

Бинарный поиск жадные алгоритмы игры Перебор Структуры данных *800

Нина придумала новую игру, основанную на возрастающей последовательности целых чисел \(a_1, a_2, \ldots, a_k\).

В этой игре, изначально \(n\) игроков встают в ряд. В каждом раунде происходит следующее:

  • Нина находит \(a_1\)-го, \(a_2\)-го, \(\ldots\), \(a_k\)-го игроков в ряду. Они покидают игру одновременно. Если игру должен покинуть \(i\)-й игрок в ряду, но в ряду меньше \(i\) игроков, этот игрок пропускается.

Как только в некотором раунде никто не покинул игру, все игроки, находящиеся в игре в данный момент, объявляются победителями.

Например, рассмотрим игру с \(a=[3, 5]\) и \(n=5\) игроками. Пусть игроков зовут игрок A, игрок B, \(\ldots\), игрок E в том порядке, в котором они выстроились изначально. Тогда,

  • Перед первым раундом, порядок игроков в ряду ABCDE. Нина находит \(3\)-го и \(5\)-го игроков в ряду. Это игроки C и E. Они покидают игру в первом раунде.
  • Теперь порядок игроков ABD. Нина находит \(3\)-го и \(5\)-го игроков в ряду. \(3\)-й игрок это игрок D и в ряду нет \(5\)-го игрока. Поэтому только игрок D покидает игру во втором раунде.
  • В третьем раунде никто не покидает игру, поэтому после этого раунда игра заканчивается.
  • Игроки A и B объявляются победителями.

Нина пока не решила, сколько игроков будут принимать участие в игре. Она даст вам \(q\) целых чисел \(n_1, n_2, \ldots, n_q\), а вы должны ответить на следующий вопрос для всех \(1 \le i \le q\) независимо:

  • Сколько игроков будут объявлены победителями, если изначально в игре будут принимать участие \(n_i\) игроков?
Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 250\)) — количество наборов входных данных.

В первой строке даны два целых числа \(k\) и \(q\) (\(1 \le k, q \le 100\)) — длина последовательности \(a\) и количество значений \(n_i\), для которых вы должны решить задачу.

Во второй строке даны \(k\) целых чисел \(a_1,a_2,\ldots,a_k\) (\(1\leq a_1<a_2<\ldots<a_k\leq 100\)) — последовательность \(a\).

В третьей строке даны \(q\) целых чисел \(n_1,n_2,\ldots,n_q\) (\(1\leq n_i \leq 100\)).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел: \(i\)-е (\(1\le i \le q\)) из них должно быть равно количеству игроков, которые будут объявлены победителями, если изначально в игре будет принимать участие \(n_i\) игроков.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных при \(n=1\), единственный игрок остаётся в игре после первого раунда. После этого, игра заканчивается и он объявляется победителем.

D. Нина и MEX

битмаски дп жадные алгоритмы Конструктив математика Перебор разделяй и властвуй реализация *2000

Нина дала вам массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\).

Вы можете выполнить следующую операцию не более \(5\cdot 10^5\) раз (возможно, ноль):

  • Выбрать два целых числа \(l\) и \(r\) таких, что \(1 \le l \le r \le n\), вычислить \(x\) как \(\operatorname{MEX}(\{a_l, a_{l+1}, \ldots, a_r\})\), и одновременно присвоить \(a_l:=x, a_{l+1}:=x, \ldots, a_r:=x\).

Здесь \(\operatorname{MEX}\) множества целых чисел \(\{c_1, c_2, \ldots, c_k\}\) определяется как наименьшее неотрицательное целое число \(m\), которое не встречается в множестве \(c\).

Ваша цель — максимизировать сумму элементов массива \(a\). Найдите максимальную сумму и постройте последовательность операций, которая достигает этой суммы. Обратите внимание, что вам не нужно минимизировать количество операций в этой последовательности, вам лишь нужно использовать не более \(5\cdot 10^5\) операций в вашем решении.

Входные данные

В первой строке дано одно целое число \(n\) (\(1 \le n \le 18\)) — длина массива \(a\).

Во второй строке даны \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0\leq a_i \leq 10^7\)) — массив \(a\).

Выходные данные

В первой строке выведите два целых числа \(s\) и \(m\) (\(0\le m\le 5\cdot 10^5\)) — максимальную сумму элементов массива \(a\) и количество операций в вашем решении.

В \(i\)-й из следующих \(m\) строк выведите два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)), представляющие параметры \(i\)-й операции.

Можно показать, что максимальная сумма элементов массива \(a\) всегда может быть получена не более чем за \(5 \cdot 10^5\) операций.

Примечание

В первом примере, после операции с \(l=1\) и \(r=2\) массив \(a\) становится равным \([2,2]\). Можно показать, что невозможно достичь большей суммы элементов \(a\), поэтому ответ \(4\).

Во втором примере, начальная сумма элементов равна \(13\), а достичь большей суммы невозможно.

В третьем примере массив \(a\) изменяется следующим образом:

  • после первой операции (\(l=3\), \(r=3\)), массив \(a\) становится равным \([1,100,0,1]\);
  • после второй операции (\(l=3\), \(r=4\)), массив \(a\) становится равным \([1,100,2,2]\).

Можно показать, что большей суммы элементов \(a\) достичь невозможно, поэтому ответ \(105\).

E1. Нина против монстров (простая версия)

математика Перебор реализация *2500

Это простая версия задачи. Единственное отличие между версиями — ограничение на \(a_i\). Вы можете делать взломы, только если обе версии задачи решены.

Нина сражается с \(n\) монстрами, стоящими по кругу. Эти монстры пронумерованы от \(1\) до \(n\), и текущий уровень энергии \(i\)-го (\(1 \le i \le n\)) монстра равен \(a_i\).

Поскольку монстры слишком сильные, Нина решила сразиться с ними, используя заклинание Атакуй своего соседа. Когда Нина использует это заклинание, следующие действия происходят в следующем порядке последовательно:

  • \(1\)-й монстр атакует \(2\)-го монстра;
  • \(2\)-й монстр атакует \(3\)-го монстра;
  • \(\ldots\)
  • \((n-1)\)-й монстр атакует \(n\)-го монстра;
  • \(n\)-й монстр атакует \(1\)-го монстра.

Когда монстр с уровнем энергии \(x\) атакует монстра с уровнем энергии \(y\), уровень энергии защищающегося монстра становится \(\max(0, y-x)\) (уровень энергии атакующего монстра остается равным \(x\)).

Нина собирается использовать это заклинание \(10^{100}\) раз и потом сразиться с монстрами, у которых останется ненулевой уровень энергии. Она хочет, чтобы вы определили, у каких монстров останется ненулевой уровень энергии после того, как она использует описанное заклинание \(10^{100}\) раз.

Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке дано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество монстров.

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 2 \cdot 10^5\)) — текущие уровни энергии монстров.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных

  • в первой строке выведите целое число \(m\) — количество монстров с ненулевым уровнем энергии после \(10^{100}\) использований заклинания;
  • во второй строке выведите \(m\) целых чисел \(i_1,i_2,\ldots,i_m\) (\(1 \le i_1 < i_2 < \ldots < i_m \le n\)) — индексы этих монстров в порядке возрастания.

Если \(m=0\), вы можете либо вывести пустую строку, либо не выводить ее.

Примечание

В первом наборе входных данных в первые \(3\) использования заклинания происходят следующие действия в следующем порядке:

  • Нина использует заклинание Атакуй своего соседа в первый раз;
  • \(1\)-й монстр атакует \(2\)-го монстра, после атаки уровень энергии \(2\)-го монстра становится равным \(\max(0, 5-2)=3\);
  • \(2\)-й монстр атакует \(3\)-го монстра, после атаки уровень энергии \(3\)-го монстра становится равным \(\max(0, 3-3)=0\);
  • \(3\)-й монстр атакует \(1\)-го монстра, после атаки уровень энергии \(1\)-го монстра становится равным \(\max(0, 2-0)=2\);
  • Нина использует заклинание Атакуй своего соседа во второй раз;
  • \(1\)-й монстр атакует \(2\)-го монстра, после атаки уровень энергии \(2\)-го монстра становится равным \(\max(0, 3-2)=1\);
  • \(2\)-й монстр атакует \(3\)-го монстра, после атаки уровень энергии \(3\)-го монстра становится равным \(\max(0, 0-1)=0\);
  • \(3\)-й монстр атакует \(1\)-го монстра, после атаки уровень энергии \(1\)-го монстра становится равным \(\max(0, 2-0)=2\);
  • Нина использует заклинание Атакуй своего соседа в третий раз;
  • \(1\)-й монстр атакует \(2\)-го монстра, после атаки уровень энергии \(2\)-го монстра становится равным \(\max(0, 1-2)=0\);
  • \(2\)-й монстр атакует \(3\)-го монстра, после атаки уровень энергии \(3\)-го монстра становится равным \(\max(0, 0-0)=0\);
  • \(3\)-й монстр атакует \(1\)-го монстра, после атаки уровень энергии \(1\)-го монстра становится равным \(\max(0, 2-0)=2\).

После каждого следующего использования заклинания уровни энергии монстров не изменяются. Таким образом, в конце только у \(1\)-го монстра ненулевой уровень энергии.

Во втором наборе входных данных у обоих монстров изначально нулевой уровень энергии.

E2. Нина против монстров (сложная версия)

жадные алгоритмы математика Перебор реализация *2700

Это сложная версия задачи. Единственное отличие между версиями — ограничение на \(a_i\). Вы можете делать взломы, только если обе версии задачи решены.

Нина сражается с \(n\) монстрами, стоящими по кругу. Эти монстры пронумерованы от \(1\) до \(n\), и текущий уровень энергии \(i\)-го (\(1 \le i \le n\)) монстра равен \(a_i\).

Поскольку монстры слишком сильные, Нина решила сразиться с ними, используя заклинание Атакуй своего соседа. Когда Нина использует это заклинание, следующие действия происходят в следующем порядке последовательно:

  • \(1\)-й монстр атакует \(2\)-го монстра;
  • \(2\)-й монстр атакует \(3\)-го монстра;
  • \(\ldots\)
  • \((n-1)\)-й монстр атакует \(n\)-го монстра;
  • \(n\)-й монстр атакует \(1\)-го монстра.

Когда монстр с уровнем энергии \(x\) атакует монстра с уровнем энергии \(y\), уровень энергии защищающегося монстра становится \(\max(0, y-x)\) (уровень энергии атакующего монстра остается равным \(x\)).

Нина собирается использовать это заклинание \(10^{100}\) раз и потом сразиться с монстрами, у которых останется ненулевой уровень энергии. Она хочет, чтобы вы определили, у каких монстров останется ненулевой уровень энергии после того, как она использует описанное заклинание \(10^{100}\) раз.

Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке дано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество монстров.

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — текущие уровни энергии монстров.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных

  • в первой строке выведите целое число \(m\) — количество монстров с ненулевым уровнем энергии после \(10^{100}\) использований заклинания;
  • во второй строке выведите \(m\) целых чисел \(i_1,i_2,\ldots,i_m\) (\(1 \le i_1 < i_2 < \ldots < i_m \le n\)) — индексы этих монстров в порядке возрастания.

Если \(m=0\), вы можете либо вывести пустую строку, либо не выводить ее.

Примечание

В первом наборе входных данных в первые \(3\) использования заклинания происходят следующие действия в следующем порядке:

  • Нина использует заклинание Атакуй своего соседа в первый раз;
  • \(1\)-й монстр атакует \(2\)-го монстра, после атаки уровень энергии \(2\)-го монстра становится равным \(\max(0, 5-2)=3\);
  • \(2\)-й монстр атакует \(3\)-го монстра, после атаки уровень энергии \(3\)-го монстра становится равным \(\max(0, 3-3)=0\);
  • \(3\)-й монстр атакует \(1\)-го монстра, после атаки уровень энергии \(1\)-го монстра становится равным \(\max(0, 2-0)=2\);
  • Нина использует заклинание Атакуй своего соседа во второй раз;
  • \(1\)-й монстр атакует \(2\)-го монстра, после атаки уровень энергии \(2\)-го монстра становится равным \(\max(0, 3-2)=1\);
  • \(2\)-й монстр атакует \(3\)-го монстра, после атаки уровень энергии \(3\)-го монстра становится равным \(\max(0, 0-1)=0\);
  • \(3\)-й монстр атакует \(1\)-го монстра, после атаки уровень энергии \(1\)-го монстра становится равным \(\max(0, 2-0)=2\);
  • Нина использует заклинание Атакуй своего соседа в третий раз;
  • \(1\)-й монстр атакует \(2\)-го монстра, после атаки уровень энергии \(2\)-го монстра становится равным \(\max(0, 1-2)=0\);
  • \(2\)-й монстр атакует \(3\)-го монстра, после атаки уровень энергии \(3\)-го монстра становится равным \(\max(0, 0-0)=0\);
  • \(3\)-й монстр атакует \(1\)-го монстра, после атаки уровень энергии \(1\)-го монстра становится равным \(\max(0, 2-0)=2\).

После каждого следующего использования заклинания уровни энергии монстров не изменяются. Таким образом, в конце только у \(1\)-го монстра ненулевой уровень энергии.

Во втором наборе входных данных у обоих монстров изначально нулевой уровень энергии.

D. Битовое неравенство

битмаски дп математика Перебор *1900

Вам дан массив \(a_1, a_2, \ldots, a_n\). Найдите количество троек чисел (\(x, y, z\)) таких, что:

  • \(1 \leq x \leq y \leq z \leq n\), и
  • \(f(x, y) \oplus f(y, z) > f(x, z)\).

Определим \(f(l, r) = a_l \oplus a_{l + 1} \oplus \ldots \oplus a_{r}\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(1 \leq n \leq 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число — количество подходящих троек.

Примечание

В первом наборе входных данных для массива \([6, 2, 4]\) есть 4 подходящие тройки чисел:

  • (\(1\), \(2\), \(2\)): \((a_1 \oplus a_2) \oplus (a_2) = 4 \oplus 2 > (a_1 \oplus a_2) = 4\)
  • (\(1\), \(1\), \(3\)): \((a_1) \oplus (a_1 \oplus a_2 \oplus a_3) = 6 \oplus 0 > (a_1 \oplus a_2 \oplus a_3) = 0\)
  • (\(1\), \(2\), \(3\)): \((a_1 \oplus a_2) \oplus (a_2 \oplus a_3) = 4 \oplus 6 > (a_1 \oplus a_2 \oplus a_3) = 0\)
  • (\(1\), \(3\), \(3\)): \((a_1 \oplus a_2 \oplus a_3) \oplus (a_3) = 0 \oplus 4 > (a_1 \oplus a_2 \oplus a_3) = 0\)

Во втором наборе входных данных подходящих троек нет.

E. Карусель комбинаций

дп Комбинаторика математика Перебор теория чисел *2400

Вам дано целое число \(n\). Значение функции \(C(i,k)\) представляет собой количество различных способов, которыми можно выбрать \(k\) различных чисел из множества {\(1, 2, \ldots, i\)} и расположить их по кругу\(^\dagger\).

Найдите значение \(\) \sum\limits_{i=1}^n \sum\limits_{j=1}^i \left( C(i,j) \bmod j \right). \(\) Здесь операция \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Поскольку это значение может быть очень большим, найдите его по модулю \(10^9+7\).

\(^\dagger\) Две последовательности считаются одинаковыми расстановками чисел по кругу, если одну из последовательностей можно циклически сдвинуть так, чтобы она совпала с другой. Например, \([1, 2, 3]\) и \([2, 3, 1]\) являются одинаковыми расстановками по кругу.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^6\)).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке одно число — значение вычисляемого выражения по модулю \(10^9+7\).

Примечание

В первом наборе входных данных \(C(1,1) \bmod 1 = 0\).

Во втором наборе входных данных:

  • \(C(1,1)=1\) (способы: \([1]\));
  • \(C(2,1)=2\) (способы: \([1]\), \([2]\));
  • \(C(2,2)=1\) (способы: \([1, 2]\));
  • \(C(3,1)=3\) (способы: \([1]\), \([2]\), \([3]\));
  • \(C(3,2)=3\) (способы: \([1, 2]\), \([2, 3]\), \([3, 1]\));
  • \(C(3,3)=2\) (способы: \([1, 2, 3]\), \([1, 3, 2]\)).
Итого, \(\left(C(1,1) \bmod 1\right) + \left(C(2,1) \bmod 1\right) + \left(C(2,2) \bmod 2\right) + \left(C(3,1) \bmod 1\right) + \left(C(3,2) \bmod 2\right) + \left(C(3,3) \bmod 3\right) = 4\).

B1. Переворотная карта (простая версия)

математика Перебор теория чисел *1400

Две версии задачи — это разные задачи. Возможно, вы захотите прочитать обе версии. Вы можете делать взломы, только если обе версии задачи решены.

Вам даны два целых положительных числа \(n\) и \(m\).

Посчитайте количество упорядоченных пар \((a, b)\), удовлетворяющих следующим условиям:

  • \(1\le a\le n\), \(1\le b\le m\);
  • \(a+b\) кратно \(b \cdot \gcd(a,b)\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1\le n,m\le 2 \cdot 10^6\)).

Гарантируется, что сумма \(n\), а также сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество подходящих пар.

Примечание

В первом наборе входных данных только \((1,1)\) удовлетворяет условиям.

В четвертом наборе входных данных условиям удовлетворяют \((1,1),(2,1),(2,2),(3,1),(4,1),(5,1),(6,1),(6,2),(6,3),(7,1),(8,1),(9,1),(10,1),(10,2)\).

B2. Переворотная карта (сложная версия)

математика Перебор теория чисел *2200

Две версии задачи — это разные задачи. Возможно, вы захотите прочитать обе версии. Вы можете делать взломы, только если обе версии задачи решены.

Вам даны два целых положительных числа \(n\) и \(m\).

Посчитайте количество упорядоченных пар \((a, b)\), удовлетворяющих следующим условиям:

  • \(1\le a\le n\), \(1\le b\le m\);
  • \(b \cdot \gcd(a,b)\) кратно \(a+b\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1\le n,m\le 2 \cdot 10^6\)).

Гарантируется, что сумма \(n\), а также сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество подходящих пар.

Примечание

В первом наборе входных данных ни одна пара не удовлетворяет условиям.

В четвертом наборе входных данных пары \((2,2),(3,6),(4,4),(6,3),(6,6),(8,8)\) удовлетворяют условиям.

C. Дерево Фенвика

битмаски Деревья дп Комбинаторика математика Перебор Структуры данных *2300

Пусть \(\operatorname{lowbit}(x)\) обозначает значение младшего двоичного бита \(x\), например, \(\operatorname{lowbit}(12)=4\), \(\operatorname{lowbit}(8)=8\).

Для массива \(a\) длины \(n\), если массив \(s\) длины \(n\) удовлетворяет условию \(s_k=\left(\sum\limits_{i=k-\operatorname{lowbit}(k)+1}^{k}a_i\right)\bmod 998\,244\,353\) для всех \(k\), то \(s\) называется Деревом Фенвика массива \(a\). Обозначим его как \(s=f(a)\).

Для целого положительного числа \(k\) и массива \(a\), \(f^k(a)\) определяется следующим образом:

\(\) f^k(a)= \begin{cases} f(a)&\textrm{если }k=1\\ f(f^{k-1}(a))&\textrm{иначе.}\\ \end{cases} \(\)

Вам дан массив \(b\) длины \(n\) и целое положительное число \(k\). Найдите массив \(a\), который удовлетворяет условию \(0\le a_i < 998\,244\,353\) и \(f^k(a)=b\). Можно доказать, что ответ всегда существует. Если существует несколько ответов, вы можете вывести любой из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых положительных числа \(n\) (\(1 \leq n \leq 2\cdot 10^5\)) и \(k\) (\(1\le k\le 10^9\)), обозначающих длину массива и количество раз выполнения функции \(f\).

Вторая строка каждого набора входных данных содержит массив \(b_1, b_2, \ldots, b_n\) (\(0\le b_i < 998\,244\,353\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую корректный массив \(a\) длины \(n\).

Примечание

Из первого набора входных данных видно, что \(f^1([1,1,1,1,1,1,1,1])=[1,2,1,4,1,2,1,8]\).

Во втором наборе входных данных видно, что \(f^2([1,2,3,4,5,6])=f^1([1,3,3,10,5,11])=[1,4,3,17,5,16]\).

F. Следующий и предыдущий

Перебор реализация Структуры данных *3200

Пусть \(p_1, \ldots, p_n\) — перестановка массива \([1, \ldots, n]\).

Пусть \(q\)-последовательность \(p\) — это перестановка \([1, q]\), элементы которой расположены в том же относительном порядке, что и в \(p_1, \ldots, p_n\). То есть мы извлекаем из \(p\) в исходном порядке все элементы, которые не превосходят \(q\), и они составляют \(q\)-последовательность \(p\).

Для заданного массива \(a\) пусть \(pre(i)\) — наибольшее значение, удовлетворяющее \(pre(i) < i\) и \(a_{pre(i)} > a_i\). Если такого значения не существует, пусть \(pre(i) = -10^{100}\). Пусть \(nxt(i)\) — наименьшее значение, удовлетворяющее \(nxt(i) > i\) и \(a_{nxt(i)} > a_i\). Если оно не существует, пусть \(nxt(i) = 10^{100}\).

Для каждого \(q\) такого, что \(1 \leq q \leq n\), пусть \(a_1, \ldots, a_q\) — \(q\)-последовательность \(p\). Для каждого \(i\), такого, что \(1 \leq i \leq q\), \(pre(i)\) и \(nxt(i)\) будут вычислены в соответствии с условиями выше. Затем вам будут даны некоторые целые значения \(x\), и для каждого из них вы должны вычислить \(\sum\limits_{i=1}^q \min(nxt(i) - pre(i), x)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке находится одно целое число \(n\) (\(1 \leq n \leq 3\cdot 10^5\)) — длина перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — начальную перестановку.

Затем, для каждого \(q\) такого, что \(1 \leq q \leq n\), в порядке возрастания, вам будет дано целое число \(k\) (\(0 \leq k \leq 10^5\)), представляющее собой количество запросов для \(q\)-последовательности. Затем в строке следуют \(k\) чисел: каждое из них является значением \(x\) для одного запроса (\(1 \leq x \leq q\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3\cdot 10^5\), а сумма \(k\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, для каждого запроса выведите одну строку с целым числом — ответом на запрос.

Примечание

\(1\)-последовательность — это \([1]\), причем \(pre=[-10^{100}]\), \(nxt=[10^{100}]\). \(ans(1)=\min(10^{100}-(-10^{100}),1)=1\).

\(5\)-последовательностью является \([1,4,3,2,5]\), причем \(pre=[-10^{100},-10^{100},2,3,-10^{100}]\), \(nxt=[2,5,5,5,10^{100}]\). \(ans(1)=5,ans(2)=10,ans(3)=14\).

A. Максимизировать?

математика Перебор теория чисел *800

Вам дано целое число \(x\). Ваша задача — найти любое целое число \(y\) \((1\le y<x)\) такое, что \(\gcd(x,y)+y\) максимально возможное.

Обратите внимание, что если существует несколько значений \(y\), удовлетворяющих условию, вы можете выбрать любое из них.

\(\gcd(a,b)\) — наибольший общий делитель чисел \(a\) и \(b\). Например, \(\gcd(6,4)=2\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждая из следующих \(t\) строк содержит одно целое число \(x\) (\(2 \le x \le 1000\)).

Выходные данные

Для каждого набора входных данных выведите любое значение \(y\) (\(1 \le y < x\)), удовлетворяющее условию.

D. Игра в перестановке

графы жадные алгоритмы игры математика Перебор поиск в глубину и подобное *1300

Бодя и Саша нашли перестановку \(p_1,\dots,p_n\) и массив \(a_1,\dots,a_n\). Они решили сыграть в известную игру в перестановке.

Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Каждый из них выбрал стартовую позицию в перестановке.

Игра длится \(k\) ходов. Игроки делают ходы одновременно. На каждом ходу с каждым игроком происходит две вещи:

  • Если текущая позиция игрока \(x\), его счет увеличивается на \(a_x\).
  • Затем игрок либо остается на своей текущей позиции \(x\), либо перемещается с \(x\) на \(p_x\).
Победителем игры становится игрок с более высоким счетом после ровно \(k\) ходов.

Зная стартовую позицию Боди \(P_B\) и стартовую позицию Саши \(P_S\), определите, кто выигрывает в игре, если оба игрока пытаются победить.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит целые числа \(n\), \(k\), \(P_B\), \(P_S\) (\(1\le P_B,P_S\le n\le 2\cdot 10^5\), \(1\le k\le 10^9\)) — длина перестановки, продолжительность игры, стартовые позиции соответственно.

Следующая строка содержит \(n\) целых чисел \(p_1,\dots,p_n\) (\(1 \le p_i \le n\)) — элементы перестановки \(p\).

Следующая строка содержит \(n\) целых чисел \(a_1,\dots,a_n\) (\(1\le a_i\le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите:

  • «Bodya», если Бодя выигрывает игру.
  • «Sasha», если Саша выигрывает игру.
  • «Draw», если у игроков одинаковый счет.
Примечание

Ниже вы можете найти объяснение для первого набора входных данных, где игра состоит из \(k=2\) ходов.

ХодПозиция БодиОчки БодиХод БодиПозиция СашиОчки СашиХод Саши
первый\(3\)\(0 + a_3 = 0 + 5 = 5\)остаётся в текущей позиции\(2\)\(0 + a_2 = 0 + 2 = 2\)переходит в \(p_2=1\)
второй\(3\)\(5 + a_3 = 5 + 5 = 10\)остаётся в текущей позиции\(1\)\(2 + a_1 = 2 + 7 = 9\)остаётся в текущей позиции
конечный результат\(3\)\(10\)\(1\)\(9\)

Как мы видим, счет Боди больше, поэтому он выигрывает игру. Можно показать, что Бодя всегда может выиграть эту игру.

G2. Деление + LCP (сложная версия)

Бинарный поиск дп математика Перебор Строки строковые суфф. структуры Структуры данных хэши *2200

Это cложная версия задачи. В этой версии \(l\le r\).

Дана строка \(s\). Для фиксированного \(k\) рассмотрим деление \(s\) на ровно \(k\) непрерывных подстрок \(w_1,\dots,w_k\). Пусть \(f_k\) — максимально возможное \(LCP(w_1,\dots,w_k)\) среди всех делений.

\(LCP(w_1,\dots,w_m)\) — это длина самого длинного общего префикса строк \(w_1,\dots,w_m\).

Например, если \(s=abababcab\) и \(k=4\), то возможное деление \(\color{red}{ab}\color{blue}{ab}\color{orange}{abc}\color{green}{ab}\). \(LCP(\color{red}{ab},\color{blue}{ab},\color{orange}{abc},\color{green}{ab})\) равно \(2\), так как \(ab\) — самый длинный общий префикс этих четырех строк. Обратите внимание, что каждая подстрока состоит из непрерывного сегмента символов, и каждый символ принадлежит ровно одной подстроке.

Ваша задача — найти \(f_l,f_{l+1},\dots,f_r\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого теста содержит три целых числа \(n\), \(l\) и \(r\) (\(1 \le l \le r \le n \le 2 \cdot 10^5\)) — длина строки и заданный диапазон.

Вторая строка каждого набора содержит строку \(s\) из \(n\) символов, все символы — строчные буквы английского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(r-l+1\) значений: \(f_l,\dots,f_r\).

A2. Balanced Unshuffle (Medium)

Деревья Конструктив Перебор *2400

The differences with the easy version of this problem are highlighted in bold.

A parentheses sequence is a string consisting of characters "(" and ")", for example "(()((".

A balanced parentheses sequence is a parentheses sequence which can become a valid mathematical expression after inserting numbers and operations into it, for example "(()(()))".

The balance of a parentheses sequence is defined as the number of opening parentheses "(" minus the number of closing parentheses ")". For example, the balance of the sequence "(()((" is 3.

A balanced parentheses sequence can also be defined as a parentheses sequence with balance 0 such that each of its prefixes has a non-negative balance.

We define the balanced shuffle operation that takes a parentheses sequence and returns a parentheses sequence as follows: first, for every character of the input sequence, we compute the balance of the prefix of the sequence before that character and write those down in a table together with the positions of the characters in the input sequence, for example:

Prefix balance01212321
Position12345678
Character(()(()))

Then, we sort the columns of this table in increasing order of prefix balance, breaking ties in decreasing order of position. In the above example, we get:

Prefix balance01112223
Position18427536
Character()(()())

The last row of this table forms another parentheses sequence, in this case "()(()())". This sequence is called the result of applying the balanced shuffle operation to the input sequence, or in short just the balanced shuffle of the input sequence.

Surprisingly, it turns out that the balanced shuffle of any balanced parentheses sequence is always another balanced parentheses sequence (we will omit the proof for brevity). Even more surprisingly, the balanced shuffles of two different balanced parentheses sequences are always different, therefore the balanced shuffle operation is a bijection on the set of balanced parentheses sequences of any given length (we will omit this proof, too).

You are given a balanced parentheses sequence. Find its preimage: the balanced parentheses sequence the balanced shuffle of which is equal to the given sequence.

Input

The only line of input contains a string \(s\) consisting only of characters "(" and ")". This string is guaranteed to be a non-empty balanced parentheses sequence with its length not exceeding \(1\,000\).

Output

Print the balanced parentheses sequence \(t\) such that the balanced shuffle of \(t\) is equal to \(s\). It is guaranteed that the answer always exists and is unique.

D1. Arithmancy (Easy)

интерактив Конструктив Перебор Строки *2100

Professor Vector is preparing to teach her Arithmancy class. She needs to prepare \(n\) distinct magic words for the class. Each magic word is a string consisting of characters X and O. A spell is a string created by concatenating two magic words together. The power of a spell is equal to the number of its different non-empty substrings. For example, the power of the spell XOXO is equal to 7, because it has 7 different substrings: X, O, XO, OX, XOX, OXO and XOXO.

Each student will create their own spell by concatenating two magic words. Since the students are not very good at magic yet, they will choose each of the two words independently and uniformly at random from the \(n\) words provided by Professor Vector. It is therefore also possible that the two words a student chooses are the same. Each student will then compute the power of their spell, and tell it to Professor Vector. In order to check their work, and of course to impress the students, Professor Vector needs to find out which two magic words and in which order were concatenated by each student.

Your program needs to perform the role of Professor Vector: first, create \(n\) distinct magic words, and then handle multiple requests where it is given the spell power and needs to determine the indices of the two magic words, in the correct order, that were used to create the corresponding spell.

Interaction

This is an interactive problem.

First, your program should read a single integer \(n\) (\(1 \le n \le 3\)), the number of magic words to prepare. Then, it should print \(n\) magic words it has created, one per line. The magic words must be distinct, each magic word must have at least 1 and at most \(30\cdot n\) characters, and each character must be either X or O. We will denote the \(i\)-th magic word you printed as \(w_i\) (\(1 \le i \le n\)).

Then, your program should read a single integer \(q\) (\(1 \le q \le 1000\)), the number of students in the class. Then, it should repeat the following process \(q\) times, one per student.

For the \(j\)-th student, it should first read a single integer \(p_j\), the power of their spell. It is guaranteed that this number is computed by choosing two indices \(u_j\) and \(v_j\) independently and uniformly at random between 1 and \(n\) inclusive, concatenating \(w_{u_j}\) and \(w_{v_j}\), and finding the number of different non-empty substrings of the resulting string. Then, your program must print the numbers \(u_j\) and \(v_j\), in this order (\(1 \le u_j, v_j \le n\)).

Note that it is not enough to find any two magic words that concatenate into a spell with the given power. You must find the exact words used by the student in the exact order.

Remember to flush the output stream after printing all magic words and after printing \(u_j\) and \(v_j\) for each student.

G2. Min-Fund Prison (Medium)

графы Деревья дп Перебор поиск в глубину и подобное *2200

In the medium version, \(2 \leq \sum n \leq 300\) and \(1 \leq \sum m \leq 300\)

After a worker's strike organized by the Dementors asking for equal rights, the prison of Azkaban has suffered some damage. After settling the spirits, the Ministry of Magic is looking to renovate the prison to ensure that the Dementors are kept in check. The prison consists of \(n\) prison cells and \(m\) bi-directional corridors. The \(i^{th}\) corridor is from cells \(u_i\) to \(v_i\). A subset of these cells \(S\) is called a complex if any cell in \(S\) is reachable from any other cell in \(S\). Formally, a subset of cells \(S\) is a complex if \(x\) and \(y\) are reachable from each other for all \(x, y \in S\), using only cells from \(S\) on the way. The funding required for a complex \(S\) consisting of \(k\) cells is defined as \(k^2\).

As part of your Intro to Magical Interior Design course at Hogwarts, you have been tasked with designing the prison. The Ministry of Magic has asked that you divide the prison into \(2\) complexes with \(\textbf{exactly one corridor}\) connecting them, so that the Dementors can't organize union meetings. For this purpose, you are allowed to build bi-directional corridors. The funding required to build a corridor between any \(2\) cells is \(c\).

Due to budget cuts and the ongoing fight against the Death Eaters, you must find the \(\textbf{minimum total funding}\) required to divide the prison as per the Ministry's requirements or \(-1\) if no division is possible.

Note: The total funding is the sum of the funding required for the \(2\) complexes and the corridors built. If after the division, the two complexes have \(x\) and \(y\) cells respectively and you have built a total of \(a\) corridors, the total funding will be \(x^2 + y^2 + c \times a\). Note that \(x+y=n\).

Input

The first line contains one integer \(t\) (\(1 \leq t \leq 300\)) — the number of test cases. Then \(t\) test cases follow.

The first line of each test case consists of three integers \(n, m\) and \(c\) (\(2 \leq n \leq 300\), \(1 \leq m \leq 300\), \(1 \leq c \leq 10^9\))

\(m\) lines follow, each consisting of 2 integers — \(u_i, v_i\) indicating a corridor is present between cells \(u_i\) and \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \neq v_i\))

It is guaranteed that the sum of \(n\) over all test cases does not exceed \(300\).

It is guaranteed that the sum of \(m\) over all test cases does not exceed \(300\).

It is guaranteed that there exists at most one corridor between any two cells.

Output

Print the \(\textbf{minimum funding}\) required to divide the prison as per the Ministry's requirements or \(-1\) if no division is possible.

Note

In the first test case of the sample input, there is no way to divide the prison according to the Ministry's requirements.

In the second test case, consider the corridor between cells \(1\) and \(5\) as the connection between the \(2\) complexes consisting of \(\{2, 3, 5, 6\}\) and \(\{1, 4\}\) cells respectively. There are no new corridors built. The total funding is \(4^2 + 2^2 = 20\). You can verify this is the minimum funding required.

In the third test case, build a corridor between \(2\) and \(4\). Consider the corridor between cells \(1\) and \(5\) as the connection between the \(2\) complexes consisting of \(\{3, 5, 6\}\) and \(\{1, 2, 4\}\) cells respectively. The total funding is \(3^2 + 3^2 + 7 \times 1 = 25\). You can verify this is the minimum funding required.

In the fourth test case, build a corridor between \(2\) and \(4\) and between \(5\) and \(7\). Consider the corridor between cells \(5\) and \(7\) as the connection between the \(2\) complexes consisting of \(\{1, 2, 4, 7\}\) and \(\{3, 5, 6\}\) cells respectively. The total funding is \(4^2 + 3^2 + 4 \times 2 = 33\). You can verify this is the minimum funding required.

Note for all test cases that there may be multiple ways to get the same funding but there is no other division which will have a more optimal minimum funding.

F. Периметр круга

Бинарный поиск геометрия математика Перебор поиск в глубину и подобное реализация *1600

Дано целое число \(r\), найдите количество решетчатых точек, Евклидово расстояние от которых до \((0, 0)\) больше или равно \(r\), но строго меньше \(r+1\).

Решетчатая точка — это точка с целыми координатами. Евклидово расстояние от \((0, 0)\) до точки \((x,y)\) равно \(\sqrt{x^2 + y^2}\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(r\) (\(1 \leq r \leq 10^5\)).

Сумма \(r\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество решетчатых точек, расстояние от которых до \((0, 0)\) равно \(d\), где \(r \leq d < r+1\).

Примечание

Точки для первых трех наборов входных данных показаны ниже.

A. Предложение контеста

жадные алгоритмы Перебор *800

Контест состоит из \(n\) задач, и ожидается, что сложность \(i\)-й задачи будет не более \(b_i\). Уже есть \(n\) задач, и сложность \(i\)-й задачи составляет \(a_i\). Изначально массивы \(a_1, a_2, \ldots, a_n\) anи \(b_1, b_2, \ldots, b_n\) отсортированы в порядке неубывания.

Некоторые из задач могут оказаться сложнее, чем требуется, поэтому авторы должны предложить больше задач. Когда будет предложена новая задача со сложностью \(w\), самая сложная задача будет исключена из контеста, а задачи будут отсортированы по неубыванию сложности.

Другими словами, каждую операцию вы выбираете целое число \(w\), вставляете его в массив \(a\), сортируете массив \(a\) в неубывающем порядке и удаляете из него последний элемент.

Найдите минимальное количество новых задач, чтобы для всех \(i\) выполнялось \(a_i\le b_i\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое положительное число \(n\) (\(1 \leq n \leq 100\)), обозначающее количество задач.

Вторая строка каждого набора входных данных содержит массив \(a\) длины \(n\) (\(1\le a_1\le a_2\le\cdots\le a_n\le 10^9\)).

Третья строка каждого набора входных данных содержит массив \(b\) длины \(n\) (\(1\le b_1\le b_2\le\cdots\le b_n\le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите ответ в отдельной строке.

Примечание

В первом наборе входных данных можно действовать следующим образом:

  • Предложить задачу со сложностью \(w=800\), \(a\) станет равным \([800,1000,1400,2000,2000,2200]\).
  • Предложить задачу со сложностью \(w=1800\), \(a\) станет равным \([800,1000,1400,1800,2000,2000]\).

Можно доказать, что невозможно выполнить условие, предложив меньшее число задач.

Во втором наборе входных данных:

  • Предложить задачу со сложностью \(w=1\), \(a\) станет равным \([1,4,5,6,7,8]\).
  • Предложите задачу со сложностью \(w=2\), \(a\) станет равным \([1,2,4,5,6,7]\).
  • Предложите задачу со сложностью \(w=3\), \(a\) станет равным \([1,2,3,4,5,6]\).

Можно доказать, что невозможно выполнить условие, предложив меньшее число задач.

A. Шахматы на троих

дп математика Перебор реализация *900

Три друга собрались, чтобы сыграть несколько партий в шахматы.

В каждой партии двое из них играют друг против друга, победитель получает \(2\) очка, а проигравший — \(0\). В случае ничьей оба игрока получают по \(1\) очку. Обратите внимание, что одна и та же пара игроков могла сыграть любое неотрицательное число раз (возможно, ноль). Также возможно, что игр не было вообще.

Вам известно, что их счета после всех игр были равны \(p_1\), \(p_2\) и \(p_3\). Кроме того, гарантируется, что \(p_1 \leq p_2 \leq p_3\).

Найдите максимальное количество игр вничью, которое могли сыграть друзья, и выведите его. Если не существует способа получить \(p_1\), \(p_2\) и \(p_3\) в результате неотрицательного числа партий между тремя игроками, выведите \(-1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(p_1\), \(p_2\) и \(p_3\) (\(0 \leq p_1 \leq p_2 \leq p_3 \leq 30\)) — счета трех игроков, отсортированные по неубыванию.

Выходные данные

Для каждого набора входных данных выведите одно число — максимальное возможное количество игр вничью, которые могли сыграть друзья, или \(-1\), если значения не соответствуют ни одному набору игр и результатов.

Примечание

В первом наборе входных данных не было сыграно ни одной партии, поэтому ничьих также не могло быть.

Во втором наборе входных данных между вторым и третьим игроком была сыграна ровно одна партия, которая закончилась вничью, поэтому ответом будет \(1\).

В третьем наборе входных данных не существует набора партий, в результате которых достигаются такие счета, поэтому ответом будет \(-1\).

D. Кот, Лиса и максимальное разделение массива

интерактив математика Перебор *2400

Это интерактивная задача.

Лиса дала Коту два целых положительных числа \(n\) и \(k\). У неё есть секретный массив \(a_1, \ldots, a_n\) длины \(n\), такой, что \(1 \leq a_i \leq n\) для каждого \(i\). Она предложила Коту сыграть в следующую игру:

Для любых двух целых чисел \(l, r\) таких, что \(1 \leq l \leq r \leq n\), определим \(f(l, r) = (r - l + 1) \cdot \max\limits_{x=l}^r a_x\). Иными словами, \(f(l, r)\) равно максимуму подмассива \(a_l, \ldots, a_r\), умноженному на его длину.

Кот может задать Лисе не более \(2 n\) вопросов о массиве. За один вопрос он может сообщить ей два целых числа \(l\) и \(x\) (\(1 \leq l \leq n, 1 \leq x \leq 10^9\)), а Лиса в качестве ответа назовет одно целое число \(p\) — наименьшее целое положительное число \(r\), такое, что \(f(l, r) = x\), или \(n+1\), если такого \(r\) не существует.

С помощью этих вопросов Коту нужно найти наибольшее значение \(m\), такое, что существует последовательность \(c_1, \ldots, c_{k-1}\) такая, что \(1 \leq c_1 < \ldots < c_{k-1} < n\) и \(f(1, c_1) = f(c_1 + 1, c_2) = \ldots = f(c_{k-1}+1, n) = m\). Если такого \(m\) не существует, он должен указать на это и принять в качестве ответа \(-1\). Заметьте, что для \(k = 1\), \(m\) всегда равен \(f(1, n)\).

Другими словами, найдите наибольшее \(m\), при котором вы сможете разбить массив ровно на \(k\) подмассивов (\(k\) — константа, данная вам в начале взаимодействия) так, чтобы у всех подмассивов результат умножения их длины на максимум был равен \(m\), или определите, что такого \(m\) не существует. Каждый элемент должен принадлежать ровно одному из подмассивов.

Кот не знает, как решить эту задачу, поэтому он попросил ваc помочь ему.

Протокол взаимодействия

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых положительных числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 10^4\)) — длину секретного массива и количество подмассивов в желаемом разбиении.

Далее вы можете делать запросы следующим образом: выведите одну строку вида «\(\mathtt{?} \ l \ x\)» (должно выполняться условия \(1 \leq l \leq n\), \(1 \leq x \leq 10^9\)), и вы получите наименьшее целое число \(r\) такое, что \(l \leq r \leq n\) и \(f(l, r) = x\), или \(n + 1\), если такого \(r\) не существует.

Если вы хотите вывести ответ, выведите «\(\mathtt{!} \ m\)» и получите \(1\) в случае правильного ответа и \(-1\) в противном случае. В первом случае взаимодействие продолжается со следующим набором входных данных. Обратите внимание, что вывод ответа не засчитывается в количество сделанных запросов. Обратите внимание, что значения для следующего набора входных данных вы получите не сразу, сначала вам необходимо прочитать, был ли ваш ответ на последний набор входных данных правильным.

Если в любой момент вы получите целое число \(-1\), это означает, что ваша программа сделала некорректный запрос, превысила лимит запросов или дала неправильный ответ. Чтобы получить вердикт Неправильный ответ, ваша программа должна немедленно завершиться. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Взломы

Формат взломов должен быть следующим: первая строка должна содержать одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов.

Первая строка каждого набора входных данных должна содержать два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 10^4\)) — длину массива \(a\) и количество подмассивов, на которое вы хотите его разбить.

Вторая строка должна содержать \(n\) целых чисел \(a_1, a_2, \ldots, a_n \) (\(1 \leq a_i \leq n \)).

Сумма \(n\) по всем наборам входных данных не должна превышать \(10^4\).

Примечание

Секретными массивами в трех наборах входных данных являются \([1]\), \([1, 2]\) и \([1, 3, 6, 1, 2, 1]\). Во втором наборе входных данных ни одно разбиение не удовлетворяет ограничениям, поэтому ответ равен \(-1\).

Ответ на первый запрос третьего набора входных данных равен \(7\), так как не существует подходящего \(r\). Для второго запроса третьего набора входных данных, поскольку \(2 \cdot \max(1, 3) = 6\), ответом будет \(2\), так как \(r = 1\) не удовлетворяет условию.

Образец взаимодействия правильно угадал все три ответа (\(1, -1\) и \(6\)), поэтому после каждого ответа он получил \(1\).

F. Запросы максимальной суммы НОД

битмаски дп Перебор реализация теория чисел *3100

Для \(k\) целых положительных чисел \(x_1, x_2, \ldots, x_k\) значение \(\gcd(x_1, x_2, \ldots, x_k)\) является наибольшим общим делителем чисел \(x_1, x_2, \ldots, x_k\) — наибольшим целым числом \(z\) таким, что все числа \(x_1, x_2, \ldots, x_k\) делятся на \(z\).

Вам даны три массива \(a_1, a_2, \ldots, a_n\), \(b_1, b_2, \ldots, b_n\) и \(c_1, c_2, \ldots, c_n\) длины \(n\), содержащие положительные целые числа.

У вас также есть автомат, который позволяет вам менять местами \(a_i\) и \(b_i\) для любого \(i\) (\(1 \le i \le n\)). Каждый обмен стоит вам \(c_i\) монет.

Найдите максимальное возможное значение \(\)\gcd(a_1, a_2, \ldots, a_n) + \gcd(b_1, b_2, \ldots, b_n)\text{,}\(\) которое вы можете получить, поменяв местами несколько элементов, и заплатив при этом не более \(d\) монет в сумме. Количество монет у вас меняется, поэтому найдите ответ на этот вопрос для каждого из \(q\) возможных значений \(d_1, d_2, \ldots, d_q\).

Входные данные

В первой строке находятся два целых числа \(n\) и \(q\) (\(1 \leq n \leq 5 \cdot 10^5\), \(1 \leq q \leq 5 \cdot 10^5\)).

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^8\)).

В третьей строке находятся \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq 10^8\)).

В четвертой строке находятся \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \leq c_i \leq 10^9\)).

В пятой строке находятся \(q\) целых чисел \(d_1, d_2, \ldots, d_q\) (\(0 \leq d_i \leq 10^{15}\)).

Выходные данные

Выведите \(q\) целых чисел — максимальное значение, которое можно получить для каждого из \(q\) возможных значений \(d\).

Примечание

В первом запросе из первого примера нам вообще не разрешается делать никаких обменов, поэтому ответом будет \(\gcd(1, 2, 3) + \gcd(4, 5, 6) = 2\). Во втором запросе одним из способов достижения оптимального значения является обмен \(a_2\) и \(b_2\), тогда ответом будет \(\gcd(1, 5, 3) + \gcd(4, 2, 6) = 3\).

Во втором запросе из второго примера оптимально сделать обмены на позициях \(1\) и \(3\), тогда ответом будет \(\gcd(3, 3, 6, 9, 3) + \gcd(8, 4, 4, 8, 4) = 7\), и нам суммарно придется заплатить \(40\) монет.

F. Игра с отрезанием

Бинарный поиск Перебор реализация сортировки Структуры данных *1900

Алиса и Боб снова играли в игру. У них есть клетчатое поле размера \(a \times b\) (\(1 \le a, b \le 10^9\)), на котором расположены \(n\) фишек, в каждой клетке может быть не более одной фишки. Клетка на пересечении \(x\)-й строки и \(y\)-го столбца имеет координаты \((x, y)\).

Первой ходила Алиса, игроки ходили по очереди. На каждом ходу игрок мог отрезать несколько (но не все) строк или столбцов с начала или конца оставшегося поля и получить очко за каждую фишку, которая находилась на отрезанной части поля. Каждый ход может быть описан символом 'U', 'D', 'L' или 'R' и числом \(k\):

  • Если символ равен 'U', то будут отрезаны \(k\) первых строк среди оставшихся;
  • Если символ равен 'D', то будут отрезаны \(k\) последних строк среди оставшихся;
  • Если символ равен 'L', то будут отрезаны \(k\) первых столбцов среди оставшихся;
  • Если символ равен 'R', то будут отрезаны \(k\) последних столбцов среди оставшихся.

По изначальному состоянию поля и ходам игроков определите количество очков, заработанное Алисой и Бобом соответственно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит четыре целых числа \(a\), \(b\), \(n\) и \(m\) (\(2 \le a, b \le 10^9\), \(1 \le n, m \le 2 \cdot 10^5\)) — размеры поля, количество фишек и количество ходов.

Следующие \(n\) строк содержат по два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le a\), \(1 \le y_i \le b\)) — координаты фишек. Все пары координат различны.

Следующие \(m\) строк содержат символ \(c_j\) и число \(k_j\) — описание \(j\)-го хода. Гарантируется, что \(k\) меньше количества строк/столбцов текущего поля. То есть игрок не мог отрезать всё оставшееся поле на своём ходу.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2 \cdot 10^5\). Гарантируется, что сумма значений \(m\) по всем наборам входных данных в тесте не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два целых числа — количество очков, заработанное Алисой и Бобом соответственно.

Примечание

Ниже показана игра из первого примера:

На своём ходу Алиса отрезала \(2\) строки снизу и получила \(2\) очка, после Боб отрезал \(1\) столбец справа и получил одно очко. Обратите внимание, что если бы Боб отрезал \(1\) строку снизу, он также получил бы \(1\) очко.

A. Массив Базоки и Мокки

жадные алгоритмы Перебор реализация сортировки *800

Мокка любит массивы, поэтому перед отъездом Базока подарил ей массив \(a\), состоящий из \(n\) целых положительных чисел.

Теперь Мокка хочет узнать, может ли массив \(a\) стать отсортированным в порядке неубывания после выполнения следующей операции несколько (возможно, ноль) раз:

  • Разделить массив на две части — префикс и суффикс, затем поменять эти две части местами. Другими словами, пусть \(a=x+y\). Тогда мы можем назначить \(a:= y+x\). Здесь \(+\) обозначает операцию конкатенации массивов.

Например, если \(a=[3,1,4,1,5]\), мы можем выбрать \(x=[3,1]\) и \(y=[4,1,5]\), удовлетворяющие \(a=x+y\). Тогда мы можем назначить \(a:= y + x = [4,1,5,3,1]\). Также для начального массива мы можем выбрать \(x=[3,1,4,1,5]\) и \(y=[\,]\), удовлетворяющие \(a=x+y\). Тогда мы можем назначить \(a := y+x = [3,1,4,1,5]\). Заметим, что мы не можем выбрать \(x=[3,1,1]\) и \(y=[4,5]\), а также \(x=[1,3]\) и \(y=[5,1,4]\), так как оба эти варианта не удовлетворяют \(a=x+y\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\leq n\leq 50\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\leq a_i \leq 10^6\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите «Yes», если массив \(a\) может стать неубывающим после выполнения операции любое количество раз, и «No», если не может.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Для первого набора входных данных можно доказать, что массив \(a\) не может стать неубывающим после выполнения операции любое количество раз.

Во втором наборе входных данных мы можем выполнить следующие операции, чтобы сделать \(a\) отсортированным в неубывающем порядке:

  • Разделить массив на две части: \(x=[7]\) и \(y=[9,2,2,3]\), затем поменять эти две части местами. Массив станет равен \(y+x = [9,2,2,3,7]\).
  • Разделить массив на две части: \(x=[9]\) и \(y=[2,2,3,7]\), затем поменять местами эти две части. Массив станет равен \(y+x=[2,2,3,7,9]\), то есть станет неубывающим.

B. Массив 378QAQ и Мокки

жадные алгоритмы математика Перебор сортировки *1000

Мокка любит массивы, поэтому перед отъездом 378QAQ подарил ей массив \(a\), состоящий из \(n\) целых положительных чисел.

Мокка считает массив \(a\) красивым, если существуют два числа \(i\) и \(j\) (\(1\leq i,j\leq n\), \(i\neq j\)) такие, что для всех \(k\) (\(1 \leq k \leq n\)), \(a_k\) делится\(^\dagger\) либо на \(a_i\), либо на \(a_j\).

Определите, является ли массив \(a\) красивым.

\(^\dagger\) \(x\) делится на \(y\), если существует целое число \(z\) такое, что \(x = y \cdot z\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3\leq n\leq 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\leq a_i \leq 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «Yes», если массив \(a\) красивый, и «No» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных любые два числа в массиве являются взаимно простыми, поэтому ответ «No».

Во втором наборе входных данных мы можем выбрать \(i=2\) и \(j=1\). Так как каждое число в массиве делится на \(a_i = 1\), то ответом будет «Yes».

В третьем наборе входных данных мы можем выбрать \(i=3\) и \(j=5\). \(2\) и \(4\) делятся на \(a_i = 2\), а \(3\), \(6\) и \(12\) делятся на \(a_j = 3\), поэтому ответ «Yes».

C. Массив Чамо и Мокки

Бинарный поиск жадные алгоритмы Перебор *1200

Мокка любит массивы, поэтому перед отъездом Чамо подарил ей массив \(a\), состоящий из \(n\) целых положительных чисел.

Мокка не любит массивы, содержащие разные числа, поэтому Мокка решила использовать магию, чтобы изменить массив. Мокка может выполнить следующую трехэтапную операцию несколько (возможно, ноль) раз:

  1. Выбрать индексы \(l\) и \(r\) (\(1 \leq l < r \leq n\))
  2. Пусть \(x\) — медиана\(^\dagger\) подмассива \([a_l, a_{l+1},\ldots, a_r]\)
  3. Сделать все значения \(a_l, a_{l+1},\ldots, a_r\) равными \(x\)

Предположим, что изначально \(a=[1,2,3,4,5]\):

  • Если Мокка на первой операции выберет \((l,r)=(3,4)\), то \(x=3\), массив изменится на \(a=[1,2,3,3,5]\).
  • Если Мокка на первой операции выберет \((l,r)=(1,3)\), то \(x=2\), массив изменится на \(a=[2,2,2,4,5]\).

Мокка будет выполнять операции до тех пор, пока все элементы массива не станут равными одному числу. Мокка хочет узнать, чему равняется максимально возможное значение этого числа.

\(^\dagger\) Медиана в массиве \(b\) длины \(m\) — это элемент, занимающий позицию номер \(\lfloor \frac{m+1}{2} \rfloor\) после сортировки элементов в неубывающем порядке. Например, медиана \([3,1,4,1,5]\) равна \(3\), а медиана \([5,25,20,24]\) равна \(20\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\leq n\leq 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\leq a_i \leq 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное возможное значение элементов массива.

Примечание

В первом наборе входных данных \(a=[1,2]\). Мокка может выбрать только интервал \((l,r)=(1,2)\). Массив будет изменен на \(a=[1,1]\). Поэтому ответом будет \(1\).

Со вторым набором входных данных Мокка может выполнить следующие операции:

  • Выбрать интервал \((l,r)=(4,5)\), тогда \(a=[1,2,3,4,4]\).
  • Выбрать интервал \((l,r)=(3,5)\), тогда \(a=[1,2,4,4,4]\).
  • Выбрать интервал \((l,r)=(1,5)\), тогда \(a=[4,4,4,4,4]\).

Все элементы массива равны \(4\). Можно доказать, что максимальное значение конечного числа не может быть больше \(4\).

D. Раскрасьте дерево

Деревья дп жадные алгоритмы кратчайшие пути Перебор поиск в глубину и подобное *1700

У 378QAQ есть дерево с \(n\) вершинами. Изначально все вершины белые.

На дереве есть две шахматные фигуры с названиями \(P_A\) и \(P_B\). \(P_A\) и \(P_B\) изначально расположены на вершинах \(a\) и \(b\) соответственно. За один шаг 378QAQ выполняет следующие действия по порядку:

  1. Переместить \(P_A\) в соседнюю вершину. Если вершина, в которую переместилась фигура, белая, то перекрасить эту вершину в красный цвет.
  2. Переместить \(P_B\) в соседнюю вершину. Если вершина, в которую переместилась фигура, красная, то перекрасить эту вершину в синий цвет.

Изначально вершина \(a\) окрашена в красный цвет. Если \(a=b\), то вместо этого вершина \(a\) окрашена в синий цвет. Обратите внимание, что на каждом шаге обе шахматные фигуры должны быть перемещены. Две фигуры могут находиться в одной вершине в любой момент времени.

378QAQ хочет узнать минимальное количество шагов, которое требуется, чтобы покрасить все вершины в синий цвет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\leq n\leq 2\cdot 10^5\)).

Вторая строка каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(1\leq a,b\leq n\)).

Затем следует \(n - 1\) строка, каждая из которых содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i,y_i \le n\)), обозначающие ребро между вершинами \(x_i\) и \(y_i\). Гарантируется, что данные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество шагов, которое требуется, чтобы покрасить все вершины в синий цвет.

Примечание

В первом наборе входных данных 378QAQ может покрасить все вершины в синий цвет следующим образом:

  • Изначально \(P_A\) находится в вершине \(1\), а \(P_B\) — в вершине \(2\). Вершина \(1\) окрашена в красный цвет, а вершина \(2\) — в белый.
  • 378QAQ перемещает \(P_A\) в вершину \(2\) и красит ее в красный цвет. Затем 378QAQ перемещает \(P_B\) в вершину \(1\) и красит её в синий цвет.
  • 378QAQ перемещает \(P_A\) в вершину \(1\). Затем 378QAQ перемещает \(P_B\) в вершину \(2\) и закрашивает её синим цветом.

F. Множество

битмаски дп Комбинаторика математика Перебор поиск в глубину и подобное разделяй и властвуй *2600

Определим бинарное кодирование конечного множества целых неотрицательных чисел \(T \subseteq \{0,1,2,\ldots\}\) как \(f(T) = \sum\limits_{i \in T} 2^i\). Например, \(f(\{0,2\}) = 2^0 + 2^2 = 5\) и \(f(\{\}) = 0\). Обратите внимание, что \(f\) — это биекция от всех таких множеств ко всем неотрицательным целым числам. Таким образом, \(f^{-1}\) также определено.

Дано целое число \(n\) и \(2^n-1\) множество \(V_1,V_2,\ldots,V_{2^n-1}\).

Найдите все множества \(S\), которые удовлетворяют следующим ограничениям:

  • \(S \subseteq \{0,1,\ldots,n-1\}\). Заметим, что \(S\) может быть пустым.
  • Для всех непустых \(T \subseteq \{0,1,\ldots,n-1\}\) выполнено \(|S \cap T| \in V_{f(T)}\).

Для экономии входные и выходные данные будут заданы в терминах двоичных кодировок множеств.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 20\)).

Вторая строка содержит \(2^n-1\) целое число \(v_1,v_2,\ldots,v_{2^n-1}\) (\(0 \leq v_i < 2^{n+1}\)) — множества \(V_i\), заданные их двоичными кодированиями, где \(V_i = f^{-1}(v_i)\).

Выходные данные

Первая строка вывода должна содержать целое число \(k\), обозначающее количество подходящих \(S\).

В следующих \(k\) строках вы должны вывести \(f(S)\) для всех подходящих \(S\) в порядке возрастания.

Примечание

В первом примере одним из возможных \(S\) является \(f^{-1}(3) = \{0,1\}\). Все непустые подмножества \(T \subseteq \{0,1,2\}\) и соответствующие им \(|S \cap T|\), \(f(T)\) и \(V_f(T)\) имеют следующий вид:

\(T\)\(|S\cap T|\)\(f(T)\)\(V_{f(T)}\)
\(\{0\}\)\(1\)\(1\)\(\{0,1,2,3\}\)
\(\{1\}\)\(1\)\(2\)\(\{0,1,2,3\}\)
\(\{2\}\)\(0\)\(4\)\(\{0,1,2,3\}\)
\(\{0,1\}\)\(2\)\(3\)\(\{0,1,2,3\}\)
\(\{0,2\}\)\(1\)\(5\)\(\{0,1,2,3\}\)
\(\{1,2\}\)\(1\)\(6\)\(\{0,1,2,3\}\)
\(\{0,1,2\}\)\(2\)\(7\)\(\{2,3\}\)

C. Никита и ТЧ

дп жадные алгоритмы математика Перебор сортировки Структуры данных теория чисел *1900

Никита — студент, увлеченный теорией чисел и алгоритмами. Он столкнулся с интересной задачей, связанной с массивом чисел.

Допустим, у Никиты есть массив целых чисел \(a\) длины \(n\). Назовём подпоследовательность\(^\dagger\) массива особенной, если её наименьшее общее кратное (НОК) не содержится в \(a\). НОК пустой подпоследовательности равен \(0\).

Никита задался вопросом: какова длина самой длинной особенной подпоследовательности массива \(a\)? Помогите ему ответить на этот важный вопрос!

\(^\dagger\) Последовательность \(b\) является подпоследовательностью \(a\), если \(b\) может быть получена из \(a\) путем удаления нескольких (возможно, нуля или всех) элементов, не изменяя порядок оставшихся элементов. Например, \([5,2,3]\) является подпоследовательностью \([1,5,7,8,2,4,3]\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2000\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2000\).

Выходные данные

Для каждого набора выведите одно целое число — максимальную длину особенной подпоследовательности \(a\).

Примечание

В первом наборе входных данных НОК любой непустой подпоследовательности будет содержаться в \(a\), поэтому ответ \(0\).

Во втором наборе входных данных можно взять подпоследовательность \([3, 2, 10, 1]\), ее НОК — число \(30\), которое не содержится в \(a\).

В третьем наборе входных данных можно взять подпоследовательность \([2, 3, 6, 100\,003]\), ее НОК — число \(600\,018\), которое не содержится в \(a\).

D. XORофикатор

битмаски жадные алгоритмы Перебор хэши *2300

Вам дана бинарная (состоящая из 0 и 1) матрица размера \(n \times m\). Также вам дан XORофикатор, который за одно применение умеет инвертировать все значения в выбранной строке (заменяет 0 на 1 и 1 на 0).

Будем называть столбец матрицы особенным, если в нём ровно одна 1. Вам надо найти максимальное количество столбцов, которые можно сделать особенными одновременно, и сказать, в каких строках нужно для этого применить XORофикатор.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два числа \(n\) и \(m\) (\(1 \leq n, m \leq 3 \cdot 10^5\), \(n \cdot m \leq 3 \cdot 10^5\)).

Каждая из следующих \(n\) строк набора содержит бинарную строку длины \(m\).

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите две строки.

В первой строке выведите максимальное количество особенных столбцов, которых можно получить одновременно.

Во второй строке выведите бинарную строку размера \(n\), где на \(i\)-й позиции стоит 0, если XORофикатор на \(i\)-й строке применять не нужно, и 1, если XORофикатор на \(i\)-й строке применять нужно.

Если есть несколько подходящих конфигураций XORофикатора, вы можете вывести любую из них.

Примечание

В первом наборе входных данных можно применить XORофикатор ко второму ряду, тогда \(2\)-й, \(3\)-й и \(4\)-й столбцы будут особенными.

Во втором наборе входных данных единственный столбец уже особенный, поэтому применять XORофикатор не надо.

E. Вычислительная машина

дп жадные алгоритмы Перебор реализация Структуры данных *2000

У Саши есть две бинарные строки \(s\) и \(t\) одинаковой длины \(n\), состоящие из символов 0 и 1.

Также есть вычислительная машина, которая умеет выполнять два вида операций с бинарными строками \(a\) и \(b\) одинаковой длины \(k\):

  1. Если \(a_{i} = a_{i + 2} =\) 0, то можно присвоить \(b_{i + 1} :=\) 1 (\(1 \le i \le k - 2\)).
  2. Если \(b_{i} = b_{i + 2} =\) 1, то можно присвоить \(a_{i + 1} :=\) 1 (\(1 \le i \le k - 2\)).

Саше стало интересно следующее: если рассмотреть строку \(a=s_ls_{l+1}\ldots s_r\) и строку \(b=t_lt_{l+1}\ldots t_r\), то какое максимальное количество символов 1 в строке \(a\) можно получить с помощью вычислительной машины. Так как Саша очень любознательный, но ленивый, то вам предстоит ответить на этот вопрос для нескольких интересующих его пар \((l_i, r_i)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина строк \(s\) и \(t\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\), состоящую из символов 0 и 1.

Третья строка каждого набора входных данных содержит бинарную строку \(t\) длины \(n\), состоящую из символов 0 и 1.

Четвертая строка каждого набора входных данных содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

\(i\)-я из следующих строк содержит два целых числа \(l_{i}\) и \(r_{i}\) (\(1 \le l_{i} \le r_{i} \le n\)) — границы \(i\)-й пары подстрок, которые интересуют Сашу.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\) и сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел — ответы на все запросы.

Примечание

В первом наборе входных данных:

  • В первом запросе \(a =\) 11, поэтому максимальное количество символов 1 равно \(2\).
  • Во втором запросе \(a =\) 111, поэтому максимальное количество символов 1 равно \(3\).

Во втором наборе входных данных:

  • В первом запросе \(a =\) 101 и \(b =\) 110. Никаких операций сделать нельзя, поэтому максимальное количество символов 1 равно \(2\).
  • Во втором запросе \(a =\) 1010 и \(b =\) 1101. Так как \(a_2 = a_4 =\) 0, то можно присвоить \(b_3 :=\) 1. Теперь \(b_1 = b_3 =\) 1, поэтому можно присвоить \(a_2 :=\) 1. Строка \(a\) стала равна 1110, поэтому максимальное количество символов 1 равно \(3\).

A. Угадай максимум

жадные алгоритмы Перебор реализация *800

Алиса и Боб придумали довольно странную игру. У них есть массив целых чисел \(a_1, a_2,\ldots, a_n\). Алиса выбирает некоторое целое число \(k\) и сообщает его Бобу, после чего происходит следующее:

  • Боб выбирает два целых числа \(i\) и \(j\) (\(1 \le i < j \le n\)), а затем ищет максимум среди чисел \(a_i, a_{i + 1},\ldots, a_j\);
  • Если полученный максимум строго больше \(k\), то побеждает Алиса, иначе Боб.

Помогите Алисе узнать максимальное \(k\), при котором она гарантированно побеждает.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 5 \cdot 10^4\)) — количество элементов в массиве.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2,\ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное целое число \(k\), при котором Алиса гарантированно побеждает.

Примечание

В первом наборе входных данных всевозможные подотрезки, которые может выбрать Боб, выглядят следующим образом: \([2, 4], [2, 4, 1], [2, 4, 1, 7], [4, 1], [4, 1, 7], [1, 7]\). Максимумы на подотрезках соответственно равны \(4, 4, 7, 4, 7, 7\). Можно показать, что \(3\) является наибольшим целым числом, таким что любой из максимумов будет строго больше него.

В третьем наборе входных данных единственным отрезком, который может выбрать Боб, является \([1, 1]\). Поэтому ответ равен \(0\).

D. Исправление бинарной строки

битмаски дп жадные алгоритмы Конструктив Перебор Строки хэши *1800

Вам дана бинарная строка \(s\) длины \(n\), состоящая из нулей и единиц. Вы можете сделать следующую операцию ровно один раз:

  1. Выбрать целое число \(p\) (\(1 \le p \le n\)).
  2. Перевернуть подстроку \(s_1 s_2 \ldots s_p\). После выполнения этого шага строка \(s_1 s_2 \ldots s_n\) превратится в строку \(s_p s_{p-1} \ldots s_1 s_{p+1} s_{p+2} \ldots s_n\).
  3. После этого сделать циклический сдвиг строки \(s\) влево \(p\) раз. После выполнения этого шага изначальная строка \(s_1s_2 \ldots s_n\) превратится в строку \(s_{p+1}s_{p+2} \ldots s_n s_p s_{p-1} \ldots s_1\).

Например, если применить операцию к строке 110001100110 при \(p=3\), то после второго шага получится строка 011001100110, а после третьего шага 001100110011.

Строка \(s\) называется \(k\)-правильной, если выполняются два условия:

  • \(s_1=s_2=\ldots=s_k\);
  • \(s_{i+k} \neq s_i\) для любого \(i\) (\(1 \le i \le n - k\)).

Например, при \(k=3\) строки 000, 111000111 и 111000 являются \(k\)-правильными, а строки 000000, 001100 и 1110000 нет.

Дано целое число \(k\), которое является делителем \(n\). Найдите целое число \(p\) (\(1 \le p \le n\)), после выполнения операции с которым строка \(s\) станет \(k\)-правильной или определите, что это невозможно. Обратите внимание, что если строка изначально является \(k\)-правильной, то к ней всё равно нужно применить ровно одну операцию.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n\), \(2 \le n \le 10^5\)) — длина строки \(s\) и значение \(k\). Гарантируется, что \(k\) является делителем \(n\).

Вторая строка каждого набора содержит бинарную строку \(s\) длины \(n\), состоящую из символов 0 и 1.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — значение \(p\), чтобы сделать строку \(k\)-правильной, или \(-1\), если это невозможно.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных, если применить операцию при \(p=3\), то после второго шага операции строка станет равна 11100001, а после третьего 00001111. Эта строка является \(4\)-правильной.

Во втором наборе входных данных можно показать, что не существует операции, после которой строка становится \(2\)-правильной.

В третьем наборе входных данных, если применить операцию при \(p=7\), то после второго шага операции строка станет равна 100011100011, а после третьего 000111000111. Эта строка является \(3\)-правильной.

В четвертом наборе входных данных после операции c любым \(p\) строка является \(5\)-правильной.

F. Теорема Костяныча

графы интерактив Конструктив Перебор *2900

Это интерактивная задача.

Костяныч загадал полный неориентированный граф\(^{\dagger}\) на \(n\) вершинах, после чего удалил из него ровно \((n - 2)\) ребра. Вы можете делать запросы следующего вида:

  • «? \(d\)» — Костяныч сообщает вам номер вершины \(v\) со степенью хотя бы \(d\). Из всех возможных таких вершин он выбирает вершину с минимальной степенью, если таких несколько, то с минимальным номером. Также он сообщает вам номер другой вершины из графа, с которой \(v\) не соединена ребром (если такой не нашлось, то сообщается \(0\)). Из всех возможных таких вершин он выбирает вершину с минимальным номером. Затем он удаляет вершину \(v\) и все выходящие из неё рёбра. Если требуемой вершины \(v\) не нашлось, то сообщается «\(0\ 0\)».

Найдите в исходном графе гамильтонов путь\(^{\ddagger}\) за не более чем \(n\) запросов. Можно показать, что при данных ограничениях гамильтонов путь всегда существует.

\(^{\dagger}\)Полным неориентированным графом называется граф, в котором между любой парой различных вершин есть ровно одно неориентированное ребро. Таким образом, полный неориентированный граф на \(n\) вершинах содержит \(\frac{n(n-1)}{2}\) рёбер.

\(^{\ddagger}\)Гамильтоновым путём в графе называется путь, который проходит через каждую вершину ровно один раз.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 10^5\)) — количество вершин в графе.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Протокол взаимодействия

Взаимодействие для каждого набора входных данных начинается с чтения целого числа \(n\).

Затем вы можете сделать не более \(n\) запросов.

Чтобы сделать запрос, выведите строку в формате «? \(d\)» (без кавычек) (\(0 \le d \le n - 1\)). После каждого запроса считайте два целых числа — ответ на ваш запрос.

Когда вы будете готовы сообщить ответ, выведите строку в формате «! \(v_1\ v_2 \ldots v_n\)» (без кавычек) — вершины в порядке их следования в гамильтоновом пути. Вывод ответа не считается как один из \(n\) запросов. После решения одного набора входных данных программа должна сразу же переходить к следующему. После решения всех наборов входных данных программа должна быть немедленно завершена.

Если ваша программа сделает более \(n\) запросов для одного набора входных данных или сделает некорректный запрос, то ответом на запрос будет \(-1\), после получения такого ответа ваша программа должна немедленно завершится, чтобы получить вердикт Неправильный ответ. Иначе она может получить любой другой вердикт.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Интерактор неадаптивный. Граф не меняется в процессе взаимодействия.

Взломы

Для взлома используйте следующий формат:

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 10^5\)) — количество вершин в графе.

Каждая из следующих \((n - 2)\) строк должна содержать два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \ne v\)) — концы ребра, которое удалили из графа. Каждое ребро должно встречаться не более одного раза.

Сумма \(n\) по всем наборам входных данных не должна превышать \(10^5\).

Примечание

В первом наборе входных исходный граф выглядит следующим образом:

Рассмотрим запросы:

  • Вершины степени хотя бы \(3\) в графе нет, поэтому сообщается «\(0\ 0\)».
  • Есть четыре вершины степени хотя бы \(2\), и все они имеют степень ровно \(2\): \(1\), \(2\), \(3\), \(4\). Сообщается вершина \(1\), потому что она имеет минимальный номер, и вершина \(4\), потому что только она не соединена с вершиной \(1\). После этого вершина \(1\) удаляется из графа.
  • Есть три вершины степени хотя бы \(1\), из них минимальную степень \(1\) имеют вершины \(2\) и \(3\) (вершина \(4\) имеет степень \(2\)). Сообщается вершина \(2\), потому что она имеет минимальный номер, и вершина \(3\), потому что только она не соединена с вершиной \(2\). После этого вершина \(2\) удаляется из графа.

Путь \(4 - 3 - 1 - 2\) является гамильтоновым.

Во втором наборе входных данных исходный граф выглядит следующим образом:

Рассмотрим запросы:

  • Вершина \(1\) имеет степень хотя бы \(3\), но при этом она соединена со всеми вершинами, поэтому сообщается «\(1\ 0\)». После этого вершина \(1\) удаляется из графа.
  • Оставшиеся вершины \(2\), \(3\) и \(4\) имеют степень хотя бы \(0\), но из них вершина \(4\) имеет минимальную степень \(0\) (вершины \(2\) и \(3\) имеют степень \(1\)). Вершина \(4\) не соединена с обеими вершинами \(2\) и \(3\), поэтому сообщается вершина \(2\) (так как она имеет минимальный номер). После этого вершина \(4\) удаляется из графа.

Путь \(4 - 1 - 2 - 3\) является гамильтоновым.

В третьем наборе входных данных граф состоит из \(2\) вершин, соединённых ребром.

A. Черепаха и Свинка играют в игру

жадные алгоритмы математика Перебор *800

Черепаха и Свинка играют в числовую игру.

Сначала Черепаха выберет целое число \(x\), такое что \(l \le x \le r\), где \(l, r\) заданы. Также гарантируется, что \(2l \le r\).

Затем Свинка будет выполнять следующую операцию, пока \(x\) не станет равным \(1\):

  • Выберите целое число \(p\) такое, что \(p \ge 2\) и \(p \mid x\) (т.е. \(x\) делится на \(p\)).
  • Замените \(x\) на \(\frac{x}{p}\), и увеличьте счет на \(1\).

Счет изначально равен \(0\). И Черепаха, и Свинка хотят максимизировать счет. Пожалуйста, помогите им вычислить максимальный счет.

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка содержит количество тестов \(t\) (\(1 \le t \le 10^4\)). Затем следует описание тестов.

Первая строка каждого теста содержит два целых числа \(l, r\) (\(1 \le l \le r \le 10^9, 2l \le r\)) — отрезок, из которого Черепаха может выбрать целое число.

Выходные данные

Для каждого теста выведите одно целое число — максимальный счет.

Примечание

В первом тесте Черепаха может выбрать целое число \(x\), такое что \(2 \le x \le 4\). Она может выбрать \(x = 4\). Затем Свинка может \(2\) раза выбрать \(p = 2\). После этого \(x\) станет равным \(1\), и счет будет равен \(2\), что является максимальным ответом для этого теста.

Во втором тесте Черепаха может выбрать целое число \(3 \le x \le 6\). Она может выбрать \(x = 6\). Затем Свинка может выбрать \(p = 2\), затем выбрать \(p = 3\). После этого \(x\) станет равным \(1\), и счет будет равен \(2\), что является максимальным ответом для этого теста.

В третьем тесте Черепаха может выбрать \(x = 12\).

В четвертом тесте Черепаха может выбрать \(x = 16\).

C. Черепаха и неполная последовательность

битмаски жадные алгоритмы Конструктив математика Перебор реализация *1800

Черепаха играла с последовательностью \(a_1, a_2, \ldots, a_n\), состоящей из положительных целых чисел. К сожалению, некоторые числа пропали во время игры.

Теперь последовательность стала неполной. Может существовать произвольное количество индексов \(i\), таких что \(a_i\) становится \(-1\). Пусть новая последовательность будет \(a'\).

Черепаха грустит. Но Черепаха помнит, что для каждого целого числа \(i\) от \(1\) до \(n - 1\), либо \(a_i = \left\lfloor\frac{a_{i + 1}}{2}\right\rfloor\), либо \(a_{i + 1} = \left\lfloor\frac{a_i}{2}\right\rfloor\) выполняется для исходной последовательности \(a\).

Черепаха хочет, чтобы вы помогли ей завершить последовательность. Но иногда Черепаха ошибается, поэтому вам нужно сказать ей, если вы не можете завершить последовательность.

Формально, вам нужно найти другую последовательность \(b_1, b_2, \ldots, b_n\), состоящую из положительных целых чисел, такую что:

  • Для каждого целого числа \(i\) от \(1\) до \(n\), если \(a'_i \ne -1\), то \(b_i = a'_i\).
  • Для каждого целого числа \(i\) от \(1\) до \(n - 1\), либо \(b_i = \left\lfloor\frac{b_{i + 1}}{2}\right\rfloor\), либо \(b_{i + 1} = \left\lfloor\frac{b_i}{2}\right\rfloor\) выполняется.
  • Для каждого целого числа \(i\) от \(1\) до \(n\), \(1 \le b_i \le 10^9\).

Если не существует последовательности \(b_1, b_2, \ldots, b_n\), которая удовлетворяет всем условиям выше, вам нужно сообщить \(-1\).

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка содержит количество тестов \(t\) (\(1 \le t \le 10^5\)). Затем следует описание тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина последовательности.

Вторая строка каждого теста содержит \(n\) целых чисел \(a'_1, a'_2, \ldots, a'_n\) (\(a'_i = -1\) или \(1 \le a'_i \le 10^8\)) — элементы последовательности \(a'\).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста, если не существует последовательности \(b_1, b_2, \ldots, b_n\), которая удовлетворяет всем условиям, выведите одно целое число \(-1\).

В противном случае выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) — элементы последовательности \(b_1, b_2, \ldots, b_n\), которую вы нашли. Последовательность должна удовлетворять условию \(1 \le b_i \le 10^9\) для каждого целого числа \(i\) от \(1\) до \(n\). Если есть несколько ответов, выведите любой из них.

Примечание

В первом тесте, \([4, 2, 1, 2, 1, 2, 1, 3]\) также может быть ответом, в то время как \([4, 2, 5, 10, 5, 2, 1, 3]\) и \([4, 2, 1, 2, 1, 2, 1, 4]\) не могут.

Во втором тесте, \([1, 2, 5, 2]\) также может быть ответом.

С четвертого по шестой тесты, можно показать, что ответа нет, поэтому вы должны вывести \(-1\).

B. Гипотеза Коллатца

математика Перебор реализация теория чисел *1200

Недавно первокурсник Максим узнал о гипотезе Коллатца, однако он плохо слушал лекцию, поэтому считает, что в гипотезе упоминается следующий процесс:

Существует переменная \(x\) и константа \(y\). Далее \(k\) раз происходит следующая операция:

  • увеличить \(x\) на \(1\), затем,
  • пока число \(x\) делится нацело на \(y\), делить его на \(y\).
Обратите внимание, что оба этих действия выполняются последовательно в рамках одной операции.

Например, если число \(x = 16\), \(y = 3\) и \(k = 2\), то после одной операции \(x\) станет равен \(17\), а после еще одной операции \(x\) будет равен \(2\), так как после прибавления единицы \(x = 18\) делится два раза на \(3\).

По данным начальным значениям \(x\), \(y\) и \(k\) Максим хочет узнать, какое число \(x\) в итоге получится.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора данных содержит три целых числа \(x\), \(y\) и \(k\) (\(1 \le x, k \le 10^{9}\), \(2 \le y \le 10^{9}\)) — начальная переменная, константа и количество операций.

Выходные данные

Для каждого набора входных данных выведите одно целое число — число, которое получится после применения \(k\) операций.

Примечание

В первом наборе входных данных всего одна операция, которая применяется к \(x = 1\), в результате \(x\) становится равен \(2\).

Во втором наборе входных данных к \(x = 2\) в рамках одной операции прибавляется единица и \(x\) делится на \(y = 3\), в результате \(x\) становится равен \(1\).

В третьем наборе данных \(x\) изменяется так:

  • После первой операции \(x = 1\), так как \(24 + 1 = 25\) и \(25\) делится на \(y = 5\) дважды в рамках одной операции.
  • После второй операции \(x = 2\).
  • После третьей операции \(x = 3\).
  • После четвертой операции \(x = 4\).
  • После пятой операции \(x = 1\).

D. Красота гор

математика Перебор реализация Структуры данных теория чисел *1700

Никита любит горы и наконец-то решил посетить Берляндский горный хребет! Хребет был настолько красив, что Никита решил запечатлеть его на карте. Карта представляет собой таблицу из \(n\) строк и \(m\) столбцов, в каждой клетке записано целое неотрицательное число — высота этой горы.

Также он заметил, что горы бывают двух типов:

  • Со снежными шапками.
  • Без снежных шапок.

Никита — человек очень прагматичный. Он хочет, чтобы сумма всех высот гор со снежными шапками была равна сумме высот гор без них. Он договорился с мэром Берляндии, самим Поликарпом Поликарповичем, чтобы тот разрешил ему трансформировать ландшафт.

Никита может проводить трансформации подматриц размером \(k \times k\) следующим образом: к высотам гор, попавших в этот участок, прибавляется целочисленная константа \(c\), но при этом тип гор не меняется. При этом константу \(c\) Никита может выбирать для каждой трансформации независимо от предыдущих. Обратите внимание, что \(c\) может быть отрицательной.

Прежде чем производить трансформации, Никита просит у вас узнать, возможно ли добиться равенства сумм, или это сделать невозможно. Неважно, какой ценой, даже если горы превратятся в каньоны и будут иметь отрицательную высоту.

Если на карте представлен только один тип гор, то сумма высот другого типа гор принимается равной нулю.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, m, k\) (\(1 \le n, m \le 500, 1 \le k \le min(n, m)\)).

Следующие \(n\) строк каждого набора входных данных содержат по \(m\) целых чисел \(a_{i j}\) (\(0 \le a_{i j} \le 10^{9}\)) — изначальные высоты гор.

Следующие \(n\) бинарных строк длины \(m\) каждого набора входных данных определяют тип гор, '\(0\)' — со снежными шапками, '\(1\)' — без них.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(250\,000\).

Выходные данные

Для каждого набора входных данных выведите «YES» без кавычек, если можно уравнять суммы высот гор, иначе выведите «NO» без кавычек. Вы можете вывести каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

Горный массив из первого набора данных выглядит так:

Изначально сумма высот гор со снежными шапками равна \(11 + 3 + 4 + 3 + 0 + 1 + 15 = 37\), а без них \(7 + 2 = 9\).

Чтобы уравнять эти суммы, мы можем выполнить две трансформации:

Первая трансформация:

Обратите внимание, что константа \(c\) может быть отрицательной.

После первой трансформации горный массив выглядит так:

Вторая трансформация:

В результате горный массив выглядит так:

Сумма высот гор со снежными шапками равна \(17 + 9 + 9 - 16 - 20 - 19 + 15 = -5\), а без них \(7 - 12 = -5\), таким образом ответ YES.

E. Количество k-хороших подотрезков

meet-in-the-middle битмаски дп Комбинаторика математика Перебор разделяй и властвуй *2300

Обозначим за \(bit(x)\) количество единичных бит в двоичной записи неотрицательного целого числа \(x\).

Назовем подотрезок массива \(k\)-хорошим, если он состоит только из чисел, в которых не более \(k\) единичных бит, то есть подотрезок \((l, r)\) массива \(a\) хороший, если для любого \(i\), такого, что \(l \le i \le r\) выполняется \(bit(a_{i}) \le k\).

У вас есть массив \(a\) длины \(n\), состоящий из последовательных неотрицательных целых чисел начиная с \(0\), то есть \(a_{i} = i\) для \(0 \le i \le n - 1\)\(0\)-индексации). Вам необходимо посчитать количество \(k\)-хороших подотрезков в этом массиве.

Поскольку ответ может быть очень большим, выведите его по модулю \(10^{9} + 7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(1 \le n \le 10^{18}, 1 \le k \le 60\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число — количество \(k\)-хороших подотрезков по модулю \(10^{9} + 7\).

Примечание

Для первого набора входных данных \(a = [0, 1, 2, 3, 4, 5]\), \(k = 1\).

Чтобы найти ответ, давайте запишем все числа в двоичной записи:

\(\)a = [\color{green}{000}, \color{green}{001}, \color{green}{010}, \color{red}{011}, \color{green}{100}, \color{red}{101}]\(\)

Отсюда видно, что числа \(3\) и \(5\) имеют \(2 \ge (k = 1)\) единичных бита в двоичной записи, поэтому в ответ должны войти все подотрезки, в которых нет ни \(3\), ни \(5\), это отрезки (в \(0\)-индексации): (\(0\), \(0\)), (\(0\), \(1\)), (\(0\), \(2\)), (\(1\), \(1\)), (\(1\), \(2\)), (\(2\), \(2\)), (\(4\), \(4\)).

C. Трое в лодке, не считая торт

Бинарный поиск жадные алгоритмы Перебор реализация *1400

Алиса, Боб и Чарли хотят разделить прямоугольный торт, разрезанный на \(n\) частей. Каждый считает, что каждый кусок торта имеет определённую ценность. Алиса считает, что \(i\)-й кусок имеет ценность \(a_i\), Боб — \(b_i\), а Чарли — \(c_i\).

Суммы всех \(a_i\), всех \(b_i\) и всех \(c_i\) по отдельности одинаковы и равны \(tot\).

Учитывая ценности каждого куска торта для каждого человека, нужно дать каждому человеку несколько подряд идущих кусков торта. Другими словами, индексы левых и правых концов этих подотрезков (номера кусков, отданных определённому человеку) можно представить как \((l_a, r_a)\), \((l_b, r_b)\) и \((l_c, r_c)\) для Алисы, Боба и Чарли соответственно. Разбиение должно удовлетворять следующим условиям:

  • Ни один кусок не отдан более чем одному человеку, т.е. никакие два подотрезка из \([l_a,\ldots,r_a]\), \([l_b, \ldots, r_b]\) и \([l_c, \ldots, r_c]\) не пересекаются.
  • Каждая из трёх сумм \( \sum_{i = l_a}^{r_a} a_i, \sum_{i = l_b}^{r_b} b_i, \sum_{i = l_c}^{r_c} c_i \geq \lceil \frac{tot}{3} \rceil\).

Здесь запись \(\lceil \frac{a}{b} \rceil\) обозначает деление с округлением вверх. Результат равен наименьшему целому числу, большему или равному результату точного деления \(a\) на \(b\). Иными словами, результат деления округляется вверх до ближайшего целого. Например, \(\lceil \frac{10}{3} \rceil = 4\) и \(\lceil \frac{15}{3} \rceil = 5\).

Входные данные

Первая строка содержит целое число \(t\) — количество наборов входных данных (\(1 \le t \le 10^4\))

Для каждого набора входных данных:

Первая строка содержит целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)).

Следующие три строки содержат по \(n\) целых чисел:

Одна строка с \(n\) целыми числами \(a_1, a_2, \ldots, a_n\) представляет ценности для Алисы (\(1 \le a_i \le 10^6\)).

Следующая строка с \(n\) целыми числами \(b_1, b_2, \ldots, b_n\) представляет ценности для Боба (\(1 \le b_i \le 10^6\)).

Следующая строка с \(n\) целыми числами \(c_1, c_2, \ldots, c_n\) представляет ценности для Чарли (\(1 \le c_i \le 10^6\)).

Гарантируется, что \( \sum_{i = 1}^{n} a_i = \sum_{i = 1}^{n} b_i = \sum_{i = 1}^{n} c_i\).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если искомые подотрезки не существуют.

В противном случае выведите шесть чисел: \(l_a, r_a, l_b, r_b, l_c, r_c\) — соответствующие начальные и конечные индексы (в \(1\)-индексации) подотрезков для Алисы, Боба и Чарли соответственно.

Примечание

В первом наборе входных данных сумма каждого из трех массивов равна \(9\). Каждому человеку нужна часть торта, соответствующая подотрезку с суммарной ценностью не менее \(\lceil \frac{9}{3} \rceil = 3\).

Если мы назначим подотрезок (\(1\),\(1\)) Алисе, то его общая ценность для нее составит \(5\), что \(\ge 3\); назначим подотрезок (\(2\),\(3\)) Бобу, общая ценность для него составит \(1 + 5 = 6\), что \(\ge 3\); и назначим подотрезок (\(4\),\(5\)) Чарли, общая ценность для него составит \(1 + 5 = 6\), что также \(\ge 3\). Каждый человек получает свои куски торта, и ни один кусок не является общим для двух или более человек.

Можно показать, что для третьего набора входных данных невозможно раздать кусочки торта таким образом, чтобы удовлетворить заданным условиям.

G. Ваша потеря

битмаски Деревья дп Перебор *3000

Вам дано дерево с \(n\) вершинами, пронумерованными от \(1\) до \(n\), а также массив длины \(n\). Значение \(i\)-й вершины — \(a_{i}\). Имеется \(q\) запросов. В каждом запросе даны 2 вершины с номерами \(x\) и \(y\).

Рассмотрим путь от вершины с номером \(x\) до вершины с номером \(y\). Пусть путь представлен в виде \(x = p_0, p_1, p_2, \ldots, p_r = y\), где \(p_i\) — промежуточные вершины. Вычислите сумму \(a_{p_i}\oplus i\) по всем \(i\) таким, что \(0 \le i \le r\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Более формально, вычислите \(\)\sum_{i =0}^{r} a_{p_i}\oplus i\(\)

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — количество вершин.

Следующие \(n-1\) строк каждого набора входных данных содержат по \(2\) целых числа \(u\) и \(v\), представляющих собой ребро между вершиной с номером \(u\) и вершиной с номером \(v\). Гарантируется, что \(u \ne v\), и что ребра образуют дерево.

Следующая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 5 \cdot 10^5\)) — значения вершин.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Следующие \(q\) строк описывают запросы. В \(i\)-м запросе содержится \(2\) целых числа \(x\) и \(y\) (\(1 \le x,y \le n\)), обозначающих начальную и конечную вершину пути.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\), а сумма \(q\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого запроса выведите одно число — искомую сумму.

D. Задача про строку "a"

математика Перебор реализация Строки строковые суфф. структуры хэши *2000

Вам дана строка \(s\), состоящая из строчных латинских букв. Подсчитайте количество непустых строк \(t \neq\) «\(\texttt{a}\)», таких, что можно разбить\(^{\dagger}\) \(s\) на некоторые подстроки, удовлетворяющие следующим условиям:

  • каждая подстрока равна либо \(t\), либо «\(\texttt{a}\)», и
  • хотя бы одна подстрока равна \(t\).

\(^{\dagger}\) Разбиение строки \(s\) — это упорядоченная последовательность некоторых \(k\) строк \(t_1, t_2, \ldots, t_k\) (называемых подстроками), таких, что \(t_1 + t_2 + \ldots + t_k = s\), где \(+\) обозначает операцию конкатенации строк.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит строку \(s\), состоящую из строчных латинских букв (\(2 \leq |s| \leq 2 \cdot 10^5\)).

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество непустых строк \(t \neq\) «\(\texttt{a}\)», удовлетворяющих всем ограничениям.

Примечание

В первом наборе входных данных \(t\) может быть «\(\texttt{aa}\)», «\(\texttt{aaa}\)», «\(\texttt{aaaa}\)» или всей строкой.

Во втором наборе входных данных \(t\) может быть «\(\texttt{b}\)», «\(\texttt{bab}\)», «\(\texttt{ba}\)» или всей строкой.

В третьем наборе входных данных единственной подходящей \(t\) является вся строка.

F. Реконструкция

дп математика Перебор *2500

Имеется секретный массив \(a_1, a_2, \ldots, a_n\) длины \(n\), элементами которого являются целые числа от \(-m\) до \(m\) включительно.

Даны массивы \(b_1, b_2, \ldots, b_n\) длины \(n\) и строка \(s\) длины \(n\), состоящая из символов \(\texttt{P}\), \(\texttt{S}\) и \(\texttt{?}\).

Для каждого \(i\) от \(1\) до \(n\) включительно, должно выполняться следующее:

  • Если \(s_i = \texttt{P}\), то \(b_i\) — это сумма элементов с \(a_1\) по \(a_i\).
  • Если \(s_i = \texttt{S}\), то \(b_i\) — это сумма элементов с \(a_i\) по \(a_n\).

Выведите количество способов заменить все \(\texttt{?}\) в \(s\) на \(\texttt{P}\) или \(\texttt{S}\) так, чтобы существовал массив \(a_1, a_2, \ldots, a_n\) с элементами, не превышающими \(m\) по абсолютному значению, удовлетворяющий ограничениям, заданным массивом \(b_1, b_2, \ldots, b_n\) и строкой \(s\).

Поскольку ответ может быть большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 2 \cdot 10^3\), \(2 \leq m \leq 10^{9}\)) — длина секретного массива \(a_1, a_2, \ldots, a_n\) и максимальное абсолютное значение элемента \(a_i\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из символов \(\texttt{P}\), \(\texttt{S}\) и \(\texttt{?}\).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(|b_i| \leq m \cdot n\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество способов заменить все \(\texttt{?}\) в \(s\) на \(\texttt{P}\) или \(\texttt{S}\), которые приводят к существованию допустимого массива \(a_1, a_2, \ldots, a_n\), по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных мы видим, что следующий массив удовлетворяет всем ограничениям, поэтому ответ — \(1\):

  1. \(\texttt{P}\) — \({[\color{red}{\textbf{1}},3,4,2]}\): сумма \(1\).
  2. \(\texttt{S}\) — \({[1,\color{red}{\textbf{3},4,2}]}\): сумма \(9\).
  3. \(\texttt{P}\) — \({[\color{red}{1,3,\textbf{4}},2]}\): сумма \(8\).
  4. \(\texttt{P}\) — \({[\color{red}{1,3,4,\textbf{2}}]}\): сумма \(10\).

Во втором наборе входных данных можно показать, что ни один массив \(a\) со всеми \(|a_i| \leq m = 10^9\) не удовлетворяет ограничениям.

B. Максимальная сумма кратных чисел

математика Перебор теория чисел *800

Дано целое число \(n\), найдите целое число \(x\) такое, что:

  • \(2 \leq x \leq n\).
  • Сумма чисел, кратных \(x\), которые меньше или равны \(n\), максимальна. Формально, \(x + 2x + 3x + \dots + kx\), где \(kx \leq n\), максимальна среди всех возможных значений \(x\).
Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Каждый набор входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 100\)).

Выходные данные

Для каждого набора входных данных выведите целое число, оптимальное значение \(x\). Можно показать, что существует только один подходящий ответ.

Примечание

Для \(n = 3\) возможные значения \(x\) равны \(2\) и \(3\). Сумма всех чисел, кратных \(2\), меньших или равных \(n\), равна \(2\), а сумма всех чисел, кратных \(3\), меньших или равных \(n\), равна \(3\). Следовательно, оптимальное значение \(x\) равно \(3\).

Для \(n = 15\) оптимальное значение \(x\) равно \(2\). Сумма всех кратных чисел \(2\), меньших или равных \(n\), равна \(2 + 4 + 6 + 8 + 10 + 12 + 14 = 56\), что можно доказать как максимальное значение среди всех других возможных значений \(x\).

E. Секретный ящик

Комбинаторика математика Перебор *1200

У Ntarsis есть ящик \(B\) с длиной сторон \(x\), \(y\) и \(z\). Он находится в трехмерной координатной плоскости, простираясь от \((0,0,0)\) до \((x,y,z)\).

У Ntarsis есть секретный ящик \(S\). Он хочет выбрать его размеры так, чтобы все длины сторон были положительными целыми числами, и объем \(S\) был равен \(k\). Он может разместить \(S\) где-то внутри \(B\) так, что:

  • \(S\) параллелен всем осям.
  • каждый угол \(S\) лежит на целочисленной координате.

\(S\) волшебный, поэтому, когда он размещен в целочисленных координатах внутри \(B\), он не упадет на землю.

Среди всех возможных способов выбора размеров \(S\) определите максимальное количество различных мест, где он может разместить свой секретный ящик \(S\) внутри \(B\). Ntarsis не поворачивает \(S\), когда выбраны его длины сторон.

Входные данные

Первая строка состоит из целого числа \(t\), количество наборов входных данных(\(1 \leq t \leq 2000\)). Затем следуют описания наборов.

Первая и единственная строка каждого набора содержит четыре целых числа \(x, y, z\) и \(k\) (\(1 \leq x, y, z \leq 2000\), \(1 \leq k \leq x \cdot y \cdot z\)).

Гарантируется, что сумма всех \(x\), сумма всех \(y\) и сумма всех \(z\) не превышают \(2000\) для всех наборов входных данных.

Обратите внимание, что \(k\) может не поместиться в стандартный 32-битный целочисленный тип данных.

Выходные данные

Для каждого набора входных данных выведите ответ в виде целого числа на новой строке. Если нет способа выбрать размеры \(S\), чтобы он поместился в \(B\), выведите \(0\).

Примечание

Для первого примера оптимально выбрать \(S\) с длиной сторон \(2\), \(2\) и \(2\), что дает объем \(2 \cdot 2 \cdot 2 = 8\). Можно показать, что есть \(8\) способов поместить \(S\) внутри \(B\).

Координаты с наименьшими значениями \(x\), \(y\) и \(z\) для каждого возможного расположения \(S\):

  1. \((0, 0, 0)\)
  2. \((1, 0, 0)\)
  3. \((0, 1, 0)\)
  4. \((0, 0, 1)\)
  5. \((1, 0, 1)\)
  6. \((1, 1, 0)\)
  7. \((0, 1, 1)\)
  8. \((1, 1, 1)\)

Расположение \(S\) с координатой \((0, 0, 0)\) изображено ниже:

Для второго примера оптимально выбрать \(S\) с длиной сторон \(2\), \(3\) и \(3\).

H1. Максимизация наибольшей компоненты (простая версия)

графы Перебор поиск в глубину и подобное реализация снм Структуры данных *1700

Простая и сложная версии фактически представляют собой разные задачи, поэтому внимательно прочитайте условия обеих задач. Единственное различие между двумя версиями — это применяемая операция.

У Алекса есть матрица из \(n\) строк и \(m\) столбцов, состоящая из символов '.' и '#'. Набор '#' ячеек формирует компоненту связности, если из любой ячейки в этом наборе можно достичь любую другую ячейку в этом наборе, перемещаясь только в другую ячейку набора, которая имеет общую сторону. Размер компоненты связности — это количество ячеек в наборе.

За одну операцию Алекс выбирает любую строку \(r\) (\(1 \le r \le n\)) или любой столбец \(c\) (\(1 \le c \le m\)), затем устанавливает каждую ячейку в строке \(r\) или столбце \(c\) равной '#'. Помогите Алексу найти максимально возможный размер наибольшей компоненты связности из ячеек '#', который он может достичь после выполнения операции не более одного раза.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n \cdot m \le 10^6\)) — количество строк и столбцов матрицы.

Следующие \(n\) строк содержат по \(m\) символов. Каждый символ может быть '.' или '#'.

Гарантируется, что сумма \(n \cdot m\) по всем наборам не превышает \(10^6\).

Выходные данные

Для каждого теста выведите одно целое число — максимально возможный размер компоненты связности из ячеек '#', который может достичь Алекс.

Примечание

Во втором примере для Алекса оптимально установить все ячейки в столбце \(2\) равными '#'. Это приведет к тому, что наибольшая компонента связности из '#' будет иметь размер \(6\).

В третьем примере для Алекса оптимально установить все ячейки в строке \(2\) равными '#'. Это приведет к тому, что наибольшая компонента связности из '#' будет иметь размер \(9\).

В четвертом примере для Алекса оптимально установить все ячейки в строке \(4\) равными '#'. Это приведет к тому, что наибольшая компонента связности из '#' будет иметь размер \(11\).

A. Ось X

геометрия математика Перебор сортировки *800

Вам дано три точки с целочисленными координатами \(x_1\), \(x_2\) и \(x_3\) на оси \(X\) (\(1 \leq x_i \leq 10\)). Вы можете выбрать произвольную точку с целочисленной координатой \(a\) на оси \(X\). Обратите внимание, что точка \(a\) может совпадать с \(x_1\), \(x_2\) или \(x_3\). Пусть \(f(a)\) — это суммарное расстояние от данных точек до точки \(a\). Найдите наименьшее значение \(f(a)\).

Расстояние между точками \(a\) и \(b\) равно \(|a - b|\). Например, расстояние между точками \(a = 5\) и \(b = 2\) равно \(3\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следуют их описания.

Единственная строка каждого набора входных данных содержит три целых числа \(x_1\), \(x_2\) и \(x_3\) (\(1 \leq x_i \leq 10\)) — координаты точек.

Выходные данные

Для каждого набора входных данных выведите наименьшее значение \(f(a)\).

Примечание

В первом наборе входных данных при \(a = 1\) достигается наименьшее значение \(f(a)\): \(f(1) = |1 - 1| + |1 - 1| + |1 - 1| = 0\).

Во втором наборе входных данных при \(a = 5\) достигается наименьшее значение \(f(a)\): \(f(5) = |1 - 5| + |5 - 5| + |9 - 5| = 8\).

В третьем наборе входных данных при \(a = 8\) достигается наименьшее значение \(f(a)\): \(f(8) = |8 - 8| + |2 - 8| + |8 - 8| = 6\).

В четвертом наборе входных данных при \(a = 9\) достигается наименьшее значение \(f(a)\): \(f(10) = |10 - 9| + |9 - 9| + |3 - 9| = 7\).

B. Стабилизация матрицы

жадные алгоритмы Перебор сортировки Структуры данных *1000

Вам дана матрица \(n \times m\), где строки пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы от \(1\) до \(m\) слева направо. Элемент на пересечении \(i\)-й строки и \(j\)-го столбца обозначим за \(a_{ij}\).

Рассмотрим алгоритм стабилизации матрицы \(a\):

  1. Найти клетку \((i, j)\), такую что ее значение строго больше значения всех соседних с ней клеток. Если такой клетки нет, завершить алгоритм. Если таких клеток несколько, то выбирается клетка с наименьшим значением \(i\), а если и таких несколько, то среди них с наименьшим значением \(j\).
  2. Сделать \(a_{ij} = a_{ij} - 1\).
  3. Перейти к шагу \(1\).

В этой задаче клетки \((a, b)\) и \((c, d)\) являются соседними, если у них есть общая сторона, то есть \(|a - c| + |b - d| = 1\).

Ваша задача вывести матрицу \(a\) после того, как будет запущен алгоритм стабилизации. Можно показать, что данный алгоритм не может выполняться бесконечное количество итераций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 100, n \cdot m > 1\)) — количество строк и столбцов матрицы \(a\).

Следующие \(n\) строк описывают соответствующие строки матрицы. \(i\)-я строка содержит \(m\) целых чисел \(a_{i1}, a_{i2}, \ldots, a_{im}\) (\(1 \leq a_{ij} \leq 10^9\)).

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк по \(m\) чисел в каждой — значения клеток матрицы \(a\) после алгоритма стабилизации.

Примечание

В первом наборе входных данных два раза подряд алгоритм выберет клетку \((1, 1)\) и завершится.

Во втором наборе входных данных нет клетки, значение которой строго больше значений всех соседних клеток.

В третьем наборе входных данных алгоритм выберет клетку \((2, 2)\) и завершится.

В четвертом наборе входных данных алгоритм три раза выберет клетку \((1, 1)\) и затем два раза клетку \((2, 3)\).

D. Математическая проблема

дп жадные алгоритмы математика Перебор реализация *1400

Вам дана строка \(s\) длины \(n > 1\), состоящая из цифр от \(0\) до \(9\). Вы должны вставить в эту строку ровно \(n - 2\) знака \(+\) (сложение) или \(\times\) (умножение), чтобы получилось корректное арифметическое выражение.

В этой задаче нельзя, чтобы знаки были перед первым или после последнего символа строки \(s\), а также не может быть записано два каких-либо знака подряд. Также обращаем ваше внимание на то, что вы не меняете порядок цифр в строке. Рассмотрим \(s = 987009\):

  • Из этой строки можно получить следующие математические выражения: \(9 \times 8 + 70 \times 0 + 9 = 81\), \(98 \times 7 \times 0 + 0 \times 9 = 0\), \(9 + 8 + 7 + 0 + 09 = 9 + 8 + 7 + 0 + 9 = 33\). Обратите внимание, что число \(09\) считается корректным и преобразуется просто в \(9\).
  • Из этой строки нельзя получить следующие математические выражения: \(+9 \times 8 \times 70 + 09\) (знаки должны стоять только между цифрами), \(98 \times 70 + 0 + 9\) (так как цифр \(6\), должно быть ровно \(4\) знака).

Результат математического выражения считается по правилам математики — сначала выполняются все операции умножения, затем сложения. Вам нужно найти минимальный результат, который можно получить, вставив в данную строку \(s\) ровно \(n - 2\) знака сложения или умножения.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 20\)) — длина строки \(s\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из цифр от \(0\) до \(9\).

Выходные данные

Для каждого набора входных данных выведите минимальный результат математического выражения, который можно получить, вставив в данную строку ровно \(n - 2\) знака сложения или умножения.

Примечание

В первых четырех наборах входных данных мы не можем добавлять знаки, поэтому ответом будет исходное число.

В пятом наборе входных данных оптимальный ответ выглядит следующим образом \(9 \times 01 = 9 \times 1 = 9\).

В шестом наборе входных данных оптимальный ответ выглядит следующим образом \(1 \times 01 = 1 \times 1 = 1\).

В седьмом наборе входных данных оптимальный ответ выглядит следующим образом \(2 + 3 + 3 + 11 = 19\).

В восьмом наборе входных данных один из оптимальных ответов выглядит следующим образом \(98 \times 7 \times 0 + 0 \times 9 = 0\).

G1. Задача на перестановку (простая версия)

Бинарный поиск Комбинаторика математика Перебор Структуры данных теория чисел *2200

Это простая версия задачи. Единственное различие состоит в том, что в этой версии \(n \leq 10^5\) и сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Вам дана перестановка \(p\) длины \(n\). Посчитайте количество пар индексов \(1 \leq i < j \leq n\), таких что \(p_i \cdot p_j\) делится без остатка на \(i \cdot j\).

Перестановка — это последовательность из \(n\) целых чисел, в которой каждое целое число от \(1\) до \(n\) встречается ровно по одному разу. Например, \([1]\), \([3,5,2,1,4]\), \([1,3,2]\) — перестановки, а \([2,3,2]\), \([4,3,1]\), \([0]\) — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — длина перестановки \(p\).

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — перестановку \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите количество пар индексов \(1 \leq i < j \leq n\), таких что \(p_i \cdot p_j\) делится без остатка на \(i \cdot j\).

Примечание

В первом наборе входных данных нет ни одной пары индексов, так как размер перестановки равен \(1\).

Во втором наборе входных данных есть одна пара индексов \((1, 2)\) и она подходит.

В третьем наборе входных данных подходит пара индексов \((1, 2)\).

В четвертом наборе входных данных подходят пары индексов \((1, 2)\), \((1, 5)\) и \((2, 5)\).

G2. Задача на перестановку (сложная версия)

математика Перебор Структуры данных теория чисел хэши *2500

Это сложная версия задачи. Единственное различие состоит в том, что в этой версии \(n \leq 5 \cdot 10^5\) и сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Вам дана перестановка \(p\) длины \(n\). Посчитайте количество пар индексов \(1 \leq i < j \leq n\), таких что \(p_i \cdot p_j\) делится без остатка на \(i \cdot j\).

Перестановка — это последовательность из \(n\) целых чисел, в которой каждое целое число от \(1\) до \(n\) встречается ровно по одному разу. Например, \([1]\), \([3,5,2,1,4]\), \([1,3,2]\) — перестановки, а \([2,3,2]\), \([4,3,1]\), \([0]\) — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)) — длина перестановки \(p\).

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — перестановку \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество пар индексов \(1 \leq i < j \leq n\), таких что \(p_i \cdot p_j\) делится без остатка на \(i \cdot j\).

Примечание

В первом наборе входных данных нет ни одной пары индексов, так как размер перестановки равен \(1\).

Во втором наборе входных данных есть одна пара индексов \((1, 2)\) и она подходит.

В третьем наборе входных данных подходит пара индексов \((1, 2)\).

В четвертом наборе входных данных подходят пары индексов \((1, 2)\), \((1, 5)\) и \((2, 5)\).

E. Прекрасное дерево!

Деревья жадные алгоритмы Перебор поиск в глубину и подобное снм Структуры данных *2000

Да благословят боги этот прекрасный ArrayForces!
Случайная галька

Дано дерево с \(n\) вершинами с корнем в вершине \(1\), в \(i\)-й вершине записано целое число \(a_i\).

Пусть \(L\) — это множество всех прямых сыновей\(^{\text{∗}}\) вершины \(v\). Назовём дерево прекрасным, если для всех вершин \(v\) с непустым \(L\) верно \(\)a_v \le \sum_{u \in L}{a_u}.\(\)

За одну операцию вы можете выбрать любую вершину \(v\) и увеличить значение \(a_v\) на \(1\).

Найдите минимальное количество операций, необходимых для того, чтобы сделать данное дерево прекрасным!

\(^{\text{∗}}\) Вершина \(u\) называется прямым сыном \(v\), если:

  • \(u\) и \(v\) соединены ребром, и
  • \(v\) лежит на (единственном) пути от \(u\) до корня дерева.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 5000\)) — количество вершин в дереве.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — значения, написанные на вершинах дерева.

Третья строка каждого набора входных данных содержит \(n - 1\) целых чисел \(p_2, p_3 , \ldots, p_n\) (\(1 \le p_i < i\)), каждое из которых означает, что в графе есть ребро между вершинами \(i\) и \(p_i\). Гарантируется, что данные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимых для того, чтобы сделать данное дерево прекрасным!

Примечание

Дерево в первом наборе входных данных:

Вы можете применить операцию к вершине \(5\) и дважды к вершине \(2\), чтобы получить прекрасное дерево.

Во втором наборе входных данных вы можете два раза применить операцию к вершине \(2\), чтобы получить прекрасное дерево.

В третьих и четвёртых наборах входных данных дерево уже прекрасно, поэтому применять операций не надо.

A. Разделите мультимножество

жадные алгоритмы математика Перебор реализация *900

Мультимножество — это набор чисел, в котором могут быть равные элементы, и порядок чисел не имеет значения. Например, \(\{2,2,4\}\) — мультимножество.

У вас есть мультимножество \(S\). Изначально мультимножество содержит только одно положительное целое число \(n\). То есть, \(S=\{n\}\). Кроме того, задано положительное целое число \(k\).

За одну операцию вы можете выбрать любое положительное целое число \(u\) из \(S\) и удалить одно вхождение \(u\) из \(S\). Затем вставить не более \(k\) положительных целых чисел в \(S\), чтобы сумма всех вставленных чисел была равна \(u\).

Найдите минимальное количество операций, чтобы сделать \(S\) состоящим из \(n\) единиц.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n,k\) (\(1\le n\le 1000,2\le k\le 1000\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число, которое является требуемым ответом.

Примечание

Для первого набора входных данных изначально \(S=\{1\}\), что уже удовлетворяет требованию. Поэтому нам не нужно делать ни одной операции.

Для второго набора входных данных изначально \(S=\{5\}\). Мы можем применить следующие операции:

  • Выберите \(u=5\), удалите \(u\) из \(S\) и вставьте \(2,3\) в \(S\). Теперь \(S=\{2,3\}\).
  • Выберите \(u=2\), удалите \(u\) из \(S\) и вставьте \(1,1\) в \(S\). Теперь \(S=\{1,1,3\}\).
  • Выберите \(u=3\), удалите \(u\) из \(S\) и вставьте \(1,2\) в \(S\). Теперь \(S=\{1,1,1,2\}\).
  • Выберите \(u=2\), удалите \(u\) из \(S\) и вставьте \(1,1\) в \(S\). Теперь \(S=\{1,1,1,1,1\}\).

Используя \(4\) операции в общей сложности, мы достигаем цели.

Для третьего набора входных данных изначально \(S=\{6\}\). Мы можем применить следующие операции:

  • Выберите \(u=6\), удалите \(u\) из \(S\) и вставьте \(1,2,3\) в \(S\). Теперь \(S=\{1,2,3\}\).
  • Выберите \(u=2\), удалите \(u\) из \(S\) и вставьте \(1,1\) в \(S\). Теперь \(S=\{1,1,1,3\}\).
  • Выберите \(u=3\), удалите \(u\) из \(S\) и вставьте \(1,1,1\) в \(S\). Теперь \(S=\{1,1,1,1,1,1\}\).

Используя \(3\) операции в общей сложности, мы достигаем цели.

Для четвертого набора входных данных изначально \(S=\{16\}\). Мы можем применить следующие операции:

  • Выберите \(u=16\), удалите \(u\) из \(S\) и вставьте \(4,4,4,4\) в \(S\). Теперь \(S=\{4,4,4,4\}\).
  • Повторите \(4\) раза: выберите \(u=4\), удалите \(u\) из \(S\) и вставьте \(1,1,1,1\) в \(S\).

Используя \(5\) операций в общей сложности, мы достигаем цели.

D. Универсальный убийца монстров

Деревья дп Перебор поиск в глубину и подобное *2000

Вы, убийца монстров, хотите убить группу монстров. Монстры находятся в дереве с \(n\) вершинами. В вершине с номером \(i\) (\(1\le i\le n\)) находится монстр с \(a_i\) очками атаки. Вы хотите сражаться с монстрами в течение \(10^{100}\) раундов.

В каждом раунде происходит следующее по порядку:

  1. Все живые монстры атакуют вас. Ваше здоровье уменьшается на сумму очков атаки всех живых монстров.
  2. Вы выбираете некоторых (возможно, всех или ни одного) монстров и убиваете их. После убийства монстр больше не сможет совершать атаки в будущем.

Также есть следующее ограничение: за один раунд вы не можете убить двух монстров, находящихся в соединенных ребром вершинах.

Если вы оптимально выбираете, каких монстров атаковать на каждом шагу, на какую минимальную величину может уменьшиться ваше здоровье за все раунды?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество тестов \(t\) (\(1 \le t \le 10^4\)). Затем следует описание наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1\le n\le 3\cdot 10^5\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,\ldots,a_n\) (\(1\le a_i\le 10^{12}\)).

Следующие \(n-1\) строк каждого набора содержат по два целых числа \(x,y\) (\(1\le x,y\le n\)), обозначающих ребро в дереве, соединяющее вершину \(x\) и \(y\).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(3\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможное уменьшение здоровья.

Примечание

В первом наборе оптимальная последовательность операций следующая:

  • В первом раунде: сначала получите атаку от монстра в вершине \(1\), поэтому ваше здоровье уменьшается на \(10^{12}\). Затем убейте монстра в вершине \(1\).
  • Во втором раунде до \(10^{100}\)-го раунда: все монстры были убиты, поэтому ничего не происходит.

Общее уменьшение здоровья составляет \(10^{12}\).

Во втором наборе оптимальная последовательность операций следующая:

  • В первом раунде: сначала получите атаку от монстров в вершинах \(1,2,3,4,5\), поэтому ваше здоровье уменьшается на \(47+15+32+29+23=146\). Затем убейте монстров в вершинах \(1,4,5\).
  • Во втором раунде: сначала получите атаку от монстров в вершинах \(2,3\), поэтому ваше здоровье уменьшается на \(15+32=47\). Затем убейте монстров в вершинах \(2,3\).
  • В третьем раунде до \(10^{100}\)-го раунда: все монстры были убиты, поэтому ничего не происходит.

Общее уменьшение здоровья составляет \(193\).

В третьем наборе оптимальная последовательность операций следующая:

  • В первом раунде: сначала получите атаку от монстров в вершинах \(1,2,3,4,5,6,7\), поэтому ваше здоровье уменьшается на \(8+10+2+3+5+7+4=39\). Затем убейте монстров в вершинах \(1,3,6,7\).
  • Во втором раунде: сначала получите атаку от монстров на вершинах \(2,4,5\), поэтому ваше здоровье уменьшается на \(10+3+5=18\). Затем убейте монстров на вершинах \(2,4,5\).
  • В третьем раунде до \(10^{100}\)-го раунда: все монстры были убиты, поэтому ничего не происходит.

Общее уменьшение здоровья составляет \(57\).

E. Сумма минимумов на подотрезках

Бинарный поиск Перебор разделяй и властвуй реализация Структуры данных *2300

Для массива \([a_1,a_2,\ldots,a_n]\) длины \(n\) определим \(f(a)\) как сумму минимального элемента по всем подотрезкам этого массива. Иными словами, \(\)f(a)=\sum_{l=1}^n\sum_{r=l}^n \min_{l\le i\le r}a_i.\(\)

Перестановка — это последовательность целых чисел от \(1\) до \(n\) длиной \(n\), содержащая каждое число ровно один раз. Вам дана перестановка \([a_1,a_2,\ldots,a_n]\). Для каждого \(i\) решите следующую задачу независимо:

  • Удалите \(a_i\) из \(a\), объединив оставшиеся части, получив \(b = [a_1,a_2,\ldots,a_{i-1},\;a_{i+1},\ldots,a_{n}]\).
  • Вычислите \(f(b)\).
Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^5\)). Затем следует описание наборов.

Первая строка каждого набора содержит целое число \(n\) (\(1\le n\le 5\cdot 10^5\)).

Вторая строка каждого набора содержит \(n\) различных целых чисел \(a_1,\ldots,a_n\) (\(1\le a_i\le n\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(10^6\).

Выходные данные

Для каждого набора выведите одну строку, содержащую \(n\) целых чисел. \(i\)-е целое число должно быть ответом при удалении \(a_i\).

Примечание

Во втором наборе входных данных \(a=[3,1,2]\).

  • При удалении \(a_1\), \(b=[1,2]\). \(f(b)=1+2+\min\{1,2\}=4\).
  • При удалении \(a_2\), \(b=[3,2]\). \(f(b)=3+2+\min\{3,2\}=7\).
  • При удалении \(a_3\), \(b=[3,1]\). \(f(b)=3+1+\min\{3,1\}=5\).

B. Подстрока и подпоследовательность

жадные алгоритмы Перебор Строки *1200

Задано две строки \(a\) и \(b\), состоящие из строчных латинских букв.

Подпоследовательность строки — это строка, которую можно получить из исходной строки удалением любого количества символов (возможно, ни одного). Подстрока строки — это ее непрерывная подпоследовательность.

Например, рассмотрим строку abac:

  • a, b, c, ab, aa, ac, ba, bc, aba, abc, aac, bac и abac — подпоследовательности этой строки;
  • a, b, c, ab, ba, ac, aba, bac и abac — подстроки этой строки.

Ваша задача — вычислить минимально возможную длину строки, которая содержит \(a\) в качестве подстроки и \(b\) в качестве подпоследовательности.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Первая строка каждого набора содержит строку \(a\) (\(1 \le |a| \le 100\)), состоящую из строчных латинских букв.

Вторая строка каждого набора содержит строку \(b\) (\(1 \le |b| \le 100\)), состоящую из строчных латинских букв.

Выходные данные

Для каждого набора выведите одно целое число — минимально возможную длину строки, которая содержит \(a\) в качестве подстроки и \(b\) в качестве подпоследовательности.

Примечание

В приведенных ниже примерах подпоследовательность символов, соответствующая строке \(b\), выделена жирным шрифтом.

В первом примере один из возможных ответов — caba.

Во втором примере один из возможных ответов — ercf.

В третьем примере один из возможных ответов — mmm.

В четвертом примере один из возможных ответов — contest.

В пятом примере один из возможных ответов — abcdefg.

D. Кузнечное дело

дп жадные алгоритмы математика Перебор сортировки Структуры данных *1900

Вы играете в одну известную игру (которая «просто работает»), в которой у вас есть различные навыки, которые можно прокачивать. Сегодня вы сосредоточились на навыке «Кузнечное дело». Ваша тактика довольно проста: ковать оружие из слитков, а затем их переплавлять, чтобы вернуть часть материалов. Для простоты, каждый раз, когда вы создаете предмет, вы получаете \(1\) очко опыта, и каждый раз, когда вы переплавляете предмет, вы также получаете \(1\) очко опыта.

В игре есть \(n\) классов оружия, которые вы можете создать, и \(m\) типов металлических слитков.

Вы можете создать одно оружие \(i\)-го класса, затратив \(a_i\) слитков металла одного типа. Переплавка одного оружия \(i\)-го класса (которое вы ранее создали) возвращает вам \(b_i\) слитков металла, из которого оно было изготовлено.

У вас есть \(c_j\) слитков металла \(j\)-го типа, и вы знаете, что можете создать оружие любого класса из любого типа металла. Каждую комбинацию класса оружия и типа металла можно использовать любое количество раз.

Какое максимальное количество очков опыта вы можете заработать, создавая и переплавляя оружие?

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^6\)) — количество классов оружия и типов металла.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)), где \(a_i\) — это количество слитков, необходимых для создания одного оружия \(i\)-го класса.

В третьей строке заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(0 \le b_i < a_i\)), где \(b_i\) — количество слитков, возвращаемых при переплавке одного оружия \(i\)-го класса, которое вы ранее создали.

В четвертой строке заданы \(m\) целых чисел \(c_1, c_2, \dots, c_m\) (\(1 \le c_j \le 10^9\)) — количество слитков металла соответствующего типа, которые у вас есть.

Выходные данные

Выведите одно целое число — максимальное общее количество очков опыта, которое вы можете заработать, многократно создавая и переплавляя оружие.

Примечание

В первом тесте вы можете сделать следующее:

  1. создать одно оружие \(1\)-го класса из \(1\)-го типа металла, потратив \(9\) слитков;
  2. переплавить это оружие, вернув \(8\) слитков \(1\)-го типа металла;
  3. снова создать и переплавить одно оружие \(1\)-го класса из \(1\)-го типа металла;
  4. создать и переплавить одно оружие \(3\)-го класса из \(1\)-го типа металла;
  5. создать и переплавить одно оружие \(3\)-го класса из \(3\)-го типа металла;
  6. создать и переплавить одно оружие \(4\)-го класса из \(1\)-го типа металла;
  7. создать и переплавить одно оружие \(5\)-го класса из \(3\)-го типа металла;
В конце у вас останется \(c = [2, 4, 2]\) слитков. Всего вы создали \(6\) оружий и переплавили \(6\) оружий, заработав в общей сложности \(12\) очков опыта.

A. Теорема Хексадесимал

Конструктив Перебор реализация теория чисел *900

Недавно вирус Хексадесимал выдвинула теорему о том, что любое число Фибоначчи представимо в виде суммы трёх не обязательно различных чисел Фибоначчи. Эта теорема должна потрясти Вселенную!

Напомним, что числа Фибоначчи определяются следующим образом: F0 = 0, F1 = 1, а все остальные вычисляются по формуле Fi = Fi - 2 + Fi - 1.

Таким образом, числа Фибоначчи образуют последовательность: 0, 1, 1, 2, 3, 5, 8, 13, ...

Если вы ещё не убежали в ужасе от компьютера, то помогите вирусу подтвердить или опровергнуть её теорему. Разложите заданное число Фибоначчи n на сумму трёх не обязательно различных чисел Фибоначчи, или сообщите, что это невозможно.

Входные данные

Входные данные содержат единственное число n (0 ≤ n < 109) — число, которое необходимо разложить на искомую сумму. Гарантируется, что n является числом Фибоначчи.

Выходные данные

Выведите три числа: a, b и c — искомое разложение, если оно существует. В противном случае выведите «I'm too stupid to solve this problem» без кавычек.

Если решений несколько разрешается выводить любое.

A. Байт на посылку

жадные алгоритмы игры Перебор сортировки *900

Алиса и Боб играют в игру на массиве \(a\) размера \(n\).

Они поочередно выполняют операции, начинает Алиса. Игрок, который не может выполнить операцию, проигрывает. Есть переменная \(mx\) изначально равная \(0\).

За одну операцию игрок может:

  • Выбрать индекс \(i\) (\(1 \le i \le n\)) такой, что \(a_{i} \geq mx\) и присвоить \(mx\) значение \(a_{i}\). Затем сделать \(a_{i}\) равным \(0\).

Определите, есть ли у Алисы выигрышная стратегия.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных.

Для каждого набора входных данных:

  • Первая строка содержит целое число \(n\) (\(2 \leq n \leq 50\)) — размер массива.
  • Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — элементы массива.
Выходные данные

Для каждого набора входных данных, если у Алисы есть выигрышная стратегия, выведите «YES». В противном случае, выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных Алиса может выбрать \(i=1\), поскольку \(a_1=2 \ge mx=0\).

После операции Алисы, \(a=[0,1]\) и \(mx=2\). Боб не может выполнить никакую операцию. Алиса выигрывает.

Во втором наборе входных данных у Алисы нет выигрышной стратегии.

Например, если Алиса выбирает \(i=1\), после операции Алисы: \(a=[0,1]\) и \(mx=1\). Тогда Боб может выбрать \(i=2\), так как \(a_2=1 \ge mx=1\). После операции Боба: \(a=[0,0]\) и \(mx=1\). Алиса не может выполнить никакую операцию. Боб выигрывает.

C. Сумасшедшая MAD сумма

жадные алгоритмы математика Перебор *1500

Определим \(\operatorname{MAD}\) (Максимальное Повторяющееся Значение) в массиве как наибольшее число, которое присутствует в массиве хотя бы дважды. Если нет такого числа, которое присутствует в массиве хотя бы дважды, значение \(\operatorname{MAD}\) равно \(0\).

Например, \(\operatorname{MAD}([1, 2, 1]) = 1\), \(\operatorname{MAD}([2, 2, 3, 3]) = 3\), \(\operatorname{MAD}([1, 2, 3, 4]) = 0\).

Вам дан массив \(a\) размера \(n\). Изначально переменная \(sum\) равна \(0\).

Следующий процесс будет выполняться, пока все числа в массиве \(a\) не станут равными \(0\):

  1. Присвоить \(sum := sum + \sum_{i=1}^{n} a_i\);
  2. Пусть \(b\) — массив размера \(n\). Присвоим \(b_i :=\ \operatorname{MAD}([a_1, a_2, \ldots, a_i])\) для всех \(1 \le i \le n\), затем присвоим \(a_i := b_i\) для всех \(1 \le i \le n\).

Найдите значение \(sum\) после выполнения процесса.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных.

Для каждого набора входных данных:

  • Первая строка содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — размер массива \(a\);
  • Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите финальное значение \(sum\).

Примечание

В первом наборе входных данных, изначально \(a=[1]\).

В первом цикле:

  1. Присвоим \(sum := sum + a_1 = 0+1=1\);
  2. Присвоим \(b_1 :=\ \operatorname{MAD}([a_1])=\ \operatorname{MAD}([1])=0\), затем присвоим \(a_1 := b_1\).

После первого цикла, \(a=[0]\) и процесс завершается. Значение \(sum\) после процесса равно \(1\).

Во втором наборе входных данных, изначально \(a=[2,2,3]\).

После первого цикла, \(a=[0,2,2]\) и \(sum=7\).

После второго цикла, \(a=[0,0,2]\) и \(sum=11\).

После третьего цикла, \(a=[0,0,0]\) и \(sum=13\). После этого процесс завершается.

Финальное значение \(sum\) равно \(13\).

D. Задачка на сетке

битмаски дп жадные алгоритмы Перебор реализация *1800

Дан массив \(a\) размера \(n\).

Есть сетка размером \(n \times n\). В \(i\)-й строке первые \(a_i\) ячеек черные, а остальные ячейки белые. Другими словами, через \((i,j)\) обозначим ячейку в \(i\)-й строке и \(j\)-м столбце, ячейки \((i,1), (i,2), \ldots, (i,a_i)\) черные, а ячейки \((i,a_i+1), \ldots, (i,n)\) белые.

Вы можете выполнять следующие операции любое количество раз в любом порядке:

  • Покрасить подсетку размера \(2 \times 2\) в белый цвет;
  • Покрасить всю строку в белый цвет. Обратите внимание, что вы не можете покрасить всю колонку в белый цвет.

Найдите минимальное количество операций, которое необходимо, чтобы покрасить все ячейки в белый цвет.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Для каждого набора входных данных:

  • Первая строка содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — размер массива \(a\).
  • Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, которое необходимо, чтобы покрасить все ячейки в белый цвет.

Примечание

В первом наборе входных данных вам не нужно выполнять никаких операций.

Во втором наборе входных данных вы можете выполнить следующие операции:

  • Покрасить \((1,1), (1,2), (2,1)\) и \((2,2)\) в белый цвет;
  • Покрасить \((2,3), (2,4), (3,3)\) и \((3,4)\) в белый цвет;
  • Покрасить \((3,1), (3,2), (4,1)\) и \((4,2)\) в белый цвет.

Можно доказать, что минимальное количество операций равно \(3\).

В третьем наборе входных данных вы можете выполнить следующие операции:

  • Покрасить первую строку в белый цвет;
  • Покрасить \((2,1), (2,2), (3,1)\) и \((3,2)\) в белый цвет.

Можно доказать, что минимальное количество операций равно \(2\).

F. Многоугольные отрезки

дп жадные алгоритмы Перебор разделяй и властвуй Структуры данных *2800

У вас есть массив \(a\) размера \(n\).

Отрезок \([l, r](1 \le l < r \le n)\) называется многоугольным отрезком в том случае, если выполняются следующие условия:

  • \((r-l+1) \geq 3\);
  • Используя \(a_l, a_{l+1}, \ldots, a_r\) в качестве длин сторон, эти стороны могут образовать многоугольник с \((r-l+1)\) стороной.

Обработайте \(q\) запросов двух типов:

  • «1 l r»: найти длину самого длинного отрезка среди всех многоугольных отрезков \([l_0,r_0]\), удовлетворяющих условию \(l \le l_0 \le r_0 \le r\). Если такого многоугольного отрезка нет, выведите вместо этого \(-1\);
  • «2 i x»: присвоить \(a_i := x\).
Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Для каждого набора входных данных:

  • Первая строка каждого набора входных данных содержит два целых числа \(n\), \(q\) (\(4 \le n \le 2\cdot 10^5\), \(1 \le q \le 10^5\));
  • Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots, a_n\) (\(1 \le a_i \le 10^{12}\));
  • Следующие \(q\) строк содержат описание запросов. Каждая строка имеет один из двух типов:
    • «1 l r» (\(1 \le l < r \le n\), \(r-l+1\ge 3\));
    • «2 i x» (\(1 \le i \le n\), \(1 \le x \le 10^{12}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), а сумма \(q\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого запроса, если подходящего отрезка нет, выведите в отдельной строке \(-1\). В противном случае выведите длину самого длинного отрезка, удовлетворяющего вышеприведенному условию.

Примечание

В первом запросе первого набора входных данных не существует многоугольного отрезка. Например, если взять отрезок \([1,3]\), нельзя сделать треугольник со сторонами \(a_1=3\), \(a_2=1\) и \(a_3=2\).

Во втором запросе первого набора входных данных самый длинный многоугольный отрезок — \([1,4]\). Вы можете сделать четырехугольник со сторонами \(a_1=3\), \(a_2=1\), \(a_3=2\) и \(a_4=2\).

Пример четырехугольника со сторонами \(3\), \(1\), \(2\) и \(2\).

F. Образуйте треугольники

жадные алгоритмы математика Перебор реализация сортировки *2200

Вам даны \(n\) палочек, пронумерованных от \(1\) до \(n\). Длина \(i\)-й палочки равна \(a_i\).

Вам нужно ответить на \(q\) запросов. В каждом запросе вам даны два целых числа \(l\) и \(r\) (\(1 \le l < r \le n\), \(r - l + 1 \ge 6\)). Определите, можно ли из палочек с номерами от \(l\) до \(r\) выбрать \(6\) различных палочек, чтобы они образовали \(2\) невырожденных треугольника\(^{\text{∗}}\).

\(^{\text{∗}}\)Треугольник с длинами сторон \(a\), \(b\) и \(c\) называется невырожденным, если:

  • \(a < b + c\),
  • \(b < a + c\), и
  • \(c < a + b\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(6 \le n \le 10^5\), \(1 \le q \le 10^5\)) — количество палочек и количество запросов соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — \(a_i\) обозначает длину \(i\)-й палочки.

Каждая из следующих строк \(q\) содержит по два целых числа \(l\) и \(r\) (\(1 \le l < r \le n\), \(r - l + 1 \ge 6\)) — параметры запроса.

Выходные данные

Для каждого запроса выведите «YES» (без кавычек), если можно сформировать \(2\) треугольника, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом запросе длины палочек равны \([5, 2, 2, 10, 4, 10]\). Два набора палочек \([2, 4, 5]\) и \([2, 10, 10]\) могут быть выбраны для образования \(2\) невырожденных треугольников.

Во втором запросе длины палочек равны \([2, 2, 10, 4, 10, 6]\). Можно показать, что невозможно образовать \(2\) невырожденных треугольника.

В третьем запросе длины палочек равны \([2, 2, 10, 4, 10, 6, 1]\). Можно выбрать два набора палочек \([1, 2, 2]\) и \([4, 10, 10]\), чтобы образовать \(2\) невырожденных треугольника.

В четвертом запросе длины палочек равны \([4, 10, 6, 1, 5, 3]\). Можно показать, что невозможно образовать \(2\) невырожденных треугольника.

В пятом запросе длины палочек равны \([10, 4, 10, 6, 1, 5, 3]\). Можно выбрать два набора палочек \([1, 10, 10]\) и \([3, 4, 5]\), чтобы образовать \(2\) невырожденных треугольника.

A. Одни плюсы

жадные алгоритмы Конструктив математика Перебор сортировки *800

Kmes записал три числа \(a\), \(b\) и \(c\), чтобы запомнить, что он должен отдать Noobish_Monk \(a \times b \times c\) бананов.

Noobish_Monk нашёл эти три числа и решил не более \(5\) раз сделать следующее:

  • выбрать одно из трёх чисел;
  • увеличить его на \(1\).

Например, если \(a = 2\), \(b = 3\), \(c = 4\), то можно прибавить единицу три раза к \(a\) и два раза к \(b\). Таким образом, \(a = 5\), \(b = 5\), \(c = 4\). Тогда количество бананов, которое должен Kmes равняется \(5 \times 5 \times 4 = 100\).

Какое максимальное значение \(a \times b \times c\) Noobish_Monk может получить с помощью описанных операций?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\))  — количество наборов входных данных.

В единственной строке каждого набора входных данных вводится три целых числа \(a\), \(b\) и \(c\) (\(1 \le a, b, c \le 10\)) — числа, которые записал Kmes.

Выходные данные

Для каждого набора входных данных выведите максимальное количество бананов, которое сможет получить Noobish_Monk от Kmes.

E. Ошибка новичка

Конструктив математика Перебор реализация Строки *1700

Одна из первых задач K1o0n по программированию выглядела так: «У Noobish_Monk есть \(n\) \((1 \le n \le 100)\) друзей. На день рождения каждый из них подарил \(a\) \((1 \le a \le 10000)\) яблок. Обрадовавшись такому подарку, Noobish_Monk вернул \(b\) \((1 \le b \le \min(10000, a \cdot n))\) яблок друзьям. Сколько яблок осталось у Noobish_Monk?»

K1o0n написал решение, но случайно считал значение \(n\) как строку, поэтому значение \(n \cdot a - b\) было посчитано по-другому. Конкретно:

  • при умножении строки \(n\) на число \(a\) он получит строку \(s=\underbrace{n + n + \dots + n + n}_{a\ \text{раз}}\)
  • при вычитании из строки \(s\) числа \(b\), из неё удалятся последние \(b\) символов, если \(b\) больше или равно длине строки \(s\), то она станет пустой.

Узнав об этом, ErnKor стало интересно, сколько для данного \(n\) существует пар \((a, b)\), удовлетворяющих ограничениям задачи, на которых решение K1o0n выдаёт правильный ответ.

«Решение выдаёт правильный ответ» означает, что оно выводит непустую строку, и эта строка при переводе в целое число равна правильному ответу, то есть значению \(n \cdot a - b\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\))  — количество наборов входных данных.

В единственной строке каждого набора входных данных вводится целое число \(n\) (\(1 \le n \le 100\))

Гарантируется, что во всех наборах данных \(n\) различны.

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате:

В первой строке выведите число \(x\) — количество плохих тестов для заданного \(n\).

В следующих \(x\) строках выведите по два числа \(a_i\) и \(b_i\) — такие числа, что решение K1o0n выдает на тест «\(n\) \(a_i\) \(b_i\)» выдаёт правильный ответ.

Примечание

В первом примере \(a = 20\), \(b = 18\) подходят, так как «\(\text{2}\)» \(\cdot 20 - 18 =\) «\(\text{22222222222222222222}\)» \(- 18 = 22 = 2 \cdot 20 - 18\)

F. Ценные карточки

дп жадные алгоритмы Перебор теория чисел *1900

В своём любимом кафе Kmes захотел в очередной раз отведать селёдку под шубой. Раньше ему бы не доставило труда сделать это, однако кафе недавно выдвинуло новую политику покупки.

Теперь для её совершения Kmes надо решить следующую задачу: перед ним на стол выкладывают \(n\) карточек с ценами на разные позиции, на \(i\)-й карточке написано число \(a_i\), среди этих цен нет целого положительного числа \(x\).

Kmes просят разбить эти карточки на минимальное количество плохих отрезков (так, чтобы каждая карточка принадлежала ровно одному отрезку). Плохим считается такой отрезок, что в нём нельзя выбрать подмножество карточек с произведением, равным \(x\). Все отрезки, на которые Kmes разобьёт карточки, должны быть плохими.

Формально, отрезок \((l, r)\) плохой, если не существует индексов \(i_1 < i_2 < \ldots < i_k\), что \(l \le i_1, i_k \le r\), и \(a_{i_1} \cdot a_{i_2} \ldots \cdot a_{i_k} = x\). Помогите Kmes определить минимальное количество плохих отрезков, чтобы насладиться любимым блюдом.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\))  — количество наборов тестовых данных.

В первой строке каждого набора входных данных вам даны \(2\) числа \(n\) и \(x\) (\(1 \le n \le 10^5, 2 \le x \le 10^5\))  — количество карточек и число соответственно.

Во второй строке каждого набора входных данных содержится \(n\) чисел \(a_i\) (\(1 \le a_i \le 2 \cdot 10^5, a_i \neq x\)) — цены на карточках.

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество плохих отрезков.

F1. Динамически управляемый робот (Легкая версия)

китайская теорема об остатках Конструктив математика Перебор теория чисел *2400

Это легкая версия задачи. Единственное отличие заключается в том, что в этой версии \(k \le n\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Дан прямоугольник размером \(w \times h\) на плоскости \(Oxy\), с точками \((0, 0)\) в нижнем левом углу и \((w, h)\) в верхнем правом углу прямоугольника.

У вас также есть робот, изначально находящийся в точке \((0, 0)\), и сценарий \(s\) из \(n\) символов. Каждый символ является L, R, U или D, что указывает роботу двигаться влево, вправо, вверх или вниз соответственно.

Робот может двигаться только внутри прямоугольника; в противном случае он изменит сценарий \(s\) следующим образом:

  • Если он пытается выйти за вертикальную границу, он меняет все символы L на R (и наоборот, все R на L).
  • Если он пытается выйти за горизонтальную границу, он меняет все символы U на D (и наоборот, все D на U).

Затем он продолжит двигаться, следуя измененному сценарию, начиная с того символа, который не смог выполнить.

Пример процесса движения робота, \(s = \texttt{"ULULURD"}\)

Сценарий \(s\) будет выполняться \(k\) раз подряд. Все изменения в строке \(s\) будут сохраняться даже при повторении. В процессе выполнения, сколько раз робот переместится в точку \((0, 0)\)? Обратите внимание, что начальная позиция не учитывается.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит четыре целых числа \(n\), \(k\), \(w\) и \(h\) (\(1 \le n, w, h \le 10^6\); \(1 \le k \le n\)).

Вторая строка содержит строку \(s\) размера \(n\) (\(s_i \in \{\texttt{L}, \texttt{R}, \texttt{U}, \texttt{D}\}\)) — сценарий, который необходимо выполнить.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество раз, когда робот переместится в \((0, 0)\) при выполнении сценария \(s\) \(k\) раз подряд.

Примечание

В первом наборе входных данных робот движется только вверх и вправо. В конце он занимает позицию \((2, 2)\), но никогда не посещает \((0, 0)\). Поэтому ответ равен \(0\).

Во втором наборе входных данных каждый раз при выполнении сценария робот посещает начало координат дважды. И поскольку \(k=2\), он посещает начало координат \(2 \cdot 2 = 4\) раза в общей сложности.

В третьем наборе входных данных визуализация показана ниже:

G. Minecraft

битмаски графы дп математика Перебор *2600

После победы в очередной игре в Bed Wars, Маша и Оля захотели отдохнуть и решили поиграть в новую игру. Маша дает Оле массив \(a\) длины \(n\) и число \(s\). Теперь задача Оли найти такое неотрицательное число \(x\), что \(\displaystyle\sum_{i=1}^{n} a_i \oplus x = s\). Но она очень устала после напряженного раунда, поэтому, пожалуйста, помогите ей в этом.

Но такая задача показалась им слишком простой, поэтому они решили сделать числа большими (до \(2^k\)) и предоставить вам их двоичное представление.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n, k, n \cdot k \le 2 \cdot 10^6\)) — длина массива \(a\) и длина битовой записи всех чисел.

Вторая строка содержит строку длины \(k\), состоящую из нулей и единиц — битовая запись числа \(s\), начиная со старших битов.

Следующие \(n\) строк также содержат строки длины \(k\), состоящие из нулей и единиц, \(i\)-я из этих строк содержит битовую запись числа \(a_i\), начиная со старших битов.

Гарантируется, что сумма значений \(n \cdot k\) по всем наборам входных данных не превосходит \(2 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите строку длины \(k\), состоящую из нулей или единиц — битовую запись любого подходящего числа \(x\) (\(x \ge 0\)), начиная со старших битов, или \(-1\), если такого \(x\) не существует.

Примечание

В первом наборе входных данных \(s = 11, a = [14, 6, 12, 15]\), если \(x = 14\), то \(\displaystyle\sum_{i=1}^{n} a_i \oplus x = (14 \oplus 14) + (6 \oplus 14) + (12 \oplus 14) + (15 \oplus 14) = 0 + 8 + 2 + 1 = 11 = s\).

Во втором наборе входных данных \(s = 41, a = [191, 158]\), если \(x = 154\), то \(\displaystyle\sum_{i=1}^{n} a_i \oplus x = (191 \oplus 154) + (158 \oplus 154) = 37 + 4 = 41 = s\).

A. Диагонали

жадные алгоритмы математика Перебор реализация *800

У Vitaly503 сегодня оказалась клетчатая доска со стороной \(n\), а также \(k\) фишек. Vitaly503 понял, что все эти \(k\) фишек нужно расположить на клетках доски (на одну клетку можно размещать не более одной фишки).

Обозначим ячейку в \(i\)-й строке и \(j\)-м столбце как \((i ,j)\). Диагональ – это набор ячеек, для которых значение \(i + j\) одинаково. Например, клетки \((3, 1)\), \((2, 2)\) и \((1, 3)\) лежат на одной диагонали, но \((1, 2)\) и \((2, 3)\) не лежат на одной диагонали. Диагональ называется занятой, если она содержит хотя бы одну фишку.

Vitaly503 просит вас помочь ему и сообщить минимальное количество занятых диагоналей, которое он может получить после размещения всех \(k\) фишек.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(1 \le n \le 100, 0 \le k \le n^2\)) — сторона клетчатой доски и количество имеющихся фишек соответственно.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество диагоналей с хотя бы одной фишкой, которое он может получить после размещения всех \(k\) фишек.

Примечание

В первом наборе входных данных фишек нет, поэтому будут заняты 0 диагоналей. Во втором наборе входных данных обе фишки можно разместить на диагонали \((2, 1), (1, 2)\), поэтому ответ — 1. В третьем наборе входных данных 3 фишки нельзя разместить на одной диагонали, но размещение их на \((1, 2), (2, 1), (1, 1)\) делает 2 диагонали занятыми. В 7-м наборе входных данных фишки займут все 5 диагоналей в любой допустимой расстановке.

B1. Букет (легкая версия)

Бинарный поиск жадные алгоритмы Перебор сортировки *1100

Это легкая версия задачи. Единственное отличие в том, что в этой версии цветы заданы перечислением.

Девочка готовится к своему дню рождения и хочет составить невероятной красоты букет. Всего в магазине есть \(n\) цветов, каждый из которых характеризуется своим количеством лепестков; цветок с \(k\) лепестками стоит \(k\) монет. Девочка решила, что количество лепестков у любых двух цветов, которые она будет использовать в составлении своего букета, должно отличаться не более чем на единицу. При этом девочка хочет собрать букет с максимально возможным количеством лепестков. К сожалению, у неё есть только \(m\) монет, и потратить больше она не может. Букет с каким максимальным суммарным количеством лепестков она может собрать?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(1 \le n \le 2 \cdot 10^5, 1 \le m \le 10^{18}\)) — количество цветов в магазине и количество монет у девочки соответственно. Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — количество лепестков у \(i\)-го цветка в магазине.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot {10}^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможное количество лепестков в букете, который может собрать девочка, соблюдая все перечисленные выше условия.

Примечание

В первом наборе входных данных вы можете собрать букет из \((1, 1, 2, 2), (2, 2, 3), (1, 1), (2, 2)\). Максимум из разрешенных букетов, не превышающий \(10\), составляет \(7\) для \((2, 2, 3)\). В третьем наборе входных данных вы можете собрать букет из одного цветка любого типа, поэтому ответ — \(610\). В четвертом наборе входных данных вы можете собрать букет из \((4, 4, 5)\), что даст вам \(13\) лепестков, и это максимальное количество лепестков, которое может купить девочка.

C. Квадратирование

жадные алгоритмы Конструктив математика Перебор реализация теория чисел *1800

ikrpprpp нашел массив \(a\), состоящий из целых чисел. Ему нравится справедливость, поэтому он хочет сделать \(a\) честным — то есть сделать его неубывающим. Для этого он может выполнить акт справедливости на индексе \(1 \le i \le n\) массива, который заменит \(a_i\) на \(a_i ^ 2\) (элемент на позиции \(i\) на его квадрат). Например, если \(a = [2,4,3,3,5,3]\) и ikrpprpp решает выполнить акт справедливости на \(i = 4\), то \(a\) становится \([2,4,3,9,5,3]\).

Каково минимальное количество актов справедливости, необходимых для того, чтобы сделать массив неубывающим?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. За ним следует описание наборов входных данных.

Для каждого набора входных данных первая строка содержит целое число \(n\) — размер массива \(a\). Вторая строка содержит \(n\) (\(1 \le n \le 2 \cdot 10 ^5\)) целых числа \(a_1, a_2,\ldots, a_n\) (\(1 \le a_i \le 10 ^ 6\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot {10}^5\).

Выходные данные

Для каждого набора входных данных выведите целое число — минимальное количество актов справедливости, необходимых для того, чтобы сделать массив \(a\) неубывающим. Если это невозможно, выведите \(-1\).

Примечание

В первом наборе входных данных нет необходимости выполнять акты справедливости. Массив сам по себе честен!

В третьем наборе входных данных можно доказать, что массив не может стать неубывающим.

В пятом наборе входных данных ikrpprppp может выполнить акт справедливости на индексе 3, затем акт справедливости на индексе 2 и, наконец, еще один акт справедливости на индексе 3. После этого \(a\) станет \([4, 9, 16]\).

D. Падежи

битмаски дп Перебор Строки *2300

Вы лингвист, изучающий загадочный древний язык. Вы знаете, что

  1. Его слова состоят только из первых \(c\) букв латинского алфавита.
  2. Каждое слово имеет падеж, который можно однозначно определить по его последней букве (разные буквы соответствуют разным падежам). Например, слова "ABACABA" и "ABA" (если они существуют) имеют одинаковый падеж в этом языке, потому что у них обоих одинаковое окончание 'A', в то время как "ALICE" и "BOB" принадлежат разным падежам. Если в языке нет падежа, соответствующего какой-либо букве, это означает, что слово не может заканчиваться на эту букву.
  3. Длина каждого слова составляет \(k\) или меньше.

У вас есть один текст, написанный на этом языке. К сожалению, поскольку язык действительно древний, пробелы между словами отсутствуют, и все буквы заглавные. Вам интересно, каково минимальное количество падежей может быть в этом языке. Можете ли вы это выяснить?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. За ним следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(c\), \(k\) (\(1 \le k \le n \le 2^{18}\), \(1 \le c \le 18\)) — длина текста, количество букв в языке и максимальная длина слова.

Вторая строка содержит строку из \(n\) символов — сам текст. Каждый символ является одной из первых \(c\) заглавных букв латинского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2^{18}\) и сумма \(2^c\) по всем наборам входных данных не превышает \(2^{18}\).

Выходные данные

Для каждого набора входных данных выведите одну строку, состоящую из одного целого числа, — минимальное количество падежей в языке.

Примечание

В первом наборе входных данных в языке должно быть пять падежей (для каждой из букв 'A', 'B', 'C', 'D', и 'E' должен быть падеж, который имеет соответствующее окончание).

В четвертом наборе входных данных достаточно одного падежа с окончанием 'B'.

D. Веселье

Бинарный поиск Комбинаторика математика Перебор теория чисел *1500

Подсчёт — это весело!
— satyam343

Даны два целых числа \(n\) и \(x\), найдите количество троек (\(a,b,c\)) положительных целых чисел, таких, что \(ab + ac + bc \le n\) и \(a + b + c \le x\).

Обратите внимание, что порядок имеет значение (например, (\(1, 1, 2\)) и (\(1, 2, 1\)) считаются разными) и \(a\), \(b\), \(c\) должны быть строго больше \(0\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\))  — количество наборов входных данных.

Каждый набор содержит два целых числа \(n\) и \(x\) (\(1 \leq n,x \leq 10^6\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\) и сумма \(x\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Выведите одно целое число — количество троек (\(a,b,c\)) положительных целых чисел, таких, что \(ab + ac + bc \le n\) и \(a + b + c \le x\).

Примечание

В первом примере подходящие тройки это (\(1, 1, 1\)), (\(1, 1, 2\)), (\(1, 2, 1\)) и (\(2, 1, 1\)).

Во втором примере подходящие тройки это (\(1, 1, 1\)), (\(1, 1, 2\)), (\(1, 1, 3\)), (\(1, 2, 1\)), (\(1, 2, 2\)), (\(1, 3, 1\)), (\(2, 1, 1\)), (\(2, 1, 2\)), (\(2, 2, 1\)) и (\(3, 1, 1\)).

G. Пенакония

графы жадные алгоритмы Перебор Структуры данных хэши *2200

На Пенаконии, земле грёз существует \(n\) домов и \(n\) дорог. Существует дорога между домом \(i\) и \(i+1\) для всех \(1 \leq i \leq n-1\) и дорога между домом \(n\) и домом \(1\). Все дороги двусторонние. Однако из-за кризиса на Пенаконии, управляющая семья залезла в долги и может не быть в состоянии поддерживать все дороги.

Среди жителей Пенаконии существует \(m\) пар друзей. Если житель, живущий в доме \(a\), дружит с жителем, живущим в доме \(b\), должен существовать путь между домами \(a\) и \(b\) через поддерживаемые дороги.

Какое минимальное количество дорог для этого необходимо поддержать?

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество тестов.

Первая строка каждого теста содержит два целых числа \(n\) и \(m\) (\(3 \leq n \leq 2 \cdot 10^5, 1 \leq m \leq 2 \cdot 10^5\)) — количество домов и количество дружб.

Следующие \(m\) строк содержат два целых числа \(a\) и \(b\) (\(1 \leq a < b \leq n\)) — житель дома \(a\) дружит с жителем дома \(b\). Гарантируется, что все (\(a, b\)) различны.

Гарантируется, что сумма \(n\) и \(m\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите целое число — минимальное количество дорог, которые должны быть поддержаны.

Примечание

В первом примере должны быть поддержаны следующие дороги:

  • \(8 \leftarrow \rightarrow 1\)
  • \(7 \leftarrow \rightarrow 8\)
  • \(1 \leftarrow \rightarrow 2\)
  • \(4 \leftarrow \rightarrow 5\)

A. Сильный пароль

Перебор реализация Строки *800

Текущий пароль Монокарпа на Codeforces — это строка \(s\), состоящая из строчных латинских букв. Монокарп считает, что его текущий пароль слишком слабый, поэтому он хочет вставить ровно одну строчную латинскую букву в пароль, чтобы сделать его сильнее. Монокарп может выбрать любую букву и вставить ее в любое место, даже перед первым символом или после последнего символа.

Монокарп считает, что сила пароля пропорциональна времени, которое ему требуется для его ввода. Время, необходимое для ввода пароля, рассчитывается следующим образом:

  • время для ввода первого символа составляет \(2\) секунды;
  • для каждого символа, кроме первого, время ввода составляет \(1\) секунда, если он такой же, как предыдущий символ, или \(2\) секунды в противном случае.

Например, время, необходимое для ввода пароля abacaba, составляет \(14\); время, необходимое для ввода пароля a, составляет \(2\); время, необходимое для ввода пароля aaabacc, составляет \(11\).

Вам нужно помочь Монокарпу — вставить строчную латинскую букву в его пароль так, чтобы получившийся пароль требовал максимально возможное время для ввода.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей \(s\) (\(1 \le |s| \le 10\)) — последовательность из строчных латинских букв.

Выходные данные

Для каждого набора входных данных выведите новый пароль — строку, которую можно получить из \(s\), вставив одну строчную латинскую букву. Строка, которую вы выводите, должна занимать максимальное возможное время для ввода. Если есть несколько ответов, выведите любой из них.

E. Прокачка персонажа

Бинарный поиск Перебор разделяй и властвуй реализация Структуры данных *2200

Монокарп играет в компьютерную игру. Он начинает игру, будучи \(1\) уровня. Ему предстоит сразиться с \(n\) монстрами в порядке от \(1\) до \(n\). Уровень \(i\)-го из них равен \(a_i\).

Когда Монокарп встречает очередного монстра, происходит следующее:

  • если уровень Монокарпа строго выше уровня монстра, то монстр спасается бегством;
  • иначе Монокарп сражается с монстром.

После каждого \(k\)-го сражения с монстром (сбежавшие монстры не считаются) уровень Монокарпа увеличивается на \(1\). То есть, после \(k\) сражений с монстрами уровень становится равен \(2\), после \(2k\) — равен \(3\), после \(3k\) — равен \(4\) и так далее.

Требуется обработать \(q\) запросов следующего вида:

  • \(i~x\): будет ли Монокарп сражаться с \(i\)-м монстром (или же этот монстр сбежит), если параметр \(k\) равен \(x\)?
Входные данные

В первой строке записаны два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество монстров и количество запросов.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — уровни монстров.

В \(j\)-й из следующих \(q\) строк записаны два целых числа \(i\) и \(x\) (\(1 \le i, x \le n\)) — номер монстра и количество сражений, необходимых для повышения уровня в \(j\)-м запросе.

Выходные данные

На каждый запрос выведите «YES», если Монокарп сразится с \(i\)-м монстром в этом запросе, и «NO», если \(i\)-й монстр сбежит.

F. Фишки на прямой

дп жадные алгоритмы Комбинаторика математика Перебор *2700

У вас есть \(n\) фишек, и вы собираетесь разместить каждую из них в одной из \(x\) точек, пронумерованных от \(1\) до \(x\). В каждой точке может находиться несколько фишек.

После размещения фишек вы можете выполнять следующие четыре операции (в любом порядке, любое количество раз):

  • выбрать фишку в точке \(i \ge 3\), удалить ее и разместить две новых фишки: одну в \(i-1\), одну в \(i-2\);
  • выбрать две фишки в соседних точках \(i\) и \(i+1\), удалить их и разместить новую фишку в \(i+2\);
  • выбрать фишку в точке \(1\) и переместить ее в \(2\);
  • выбрать фишку в точке \(2\) и переместить ее в \(1\).

Обратите внимание, что координаты фишек, которые вы размещаете во время операций, не могут быть меньше \(1\), но могут быть больше \(x\).

Обозначим стоимость размещения фишек как минимальное количество фишек, которое может остаться на прямой после выполнения этих операций, начиная с выбранного вами размещения.

Например, стоимость размещения двух фишек в точках \(3\) и одной фишки в точке \(5\) равна \(2\), потому что вы можете уменьшить количество фишек до \(2\) следующим образом:

  • выбрать фишку в точке \(3\), удалить ее, разместить одну фишку в \(1\) и одну фишку в \(2\);
  • выбрать по одной фишке в точках \(2\) и \(3\), удалить их и разместить фишку в \(4\);
  • выбрать по одной фишке в точках \(4\) и \(5\), удалить их и разместить фишку в \(6\).

Вам даны три целых числа \(n\), \(x\) и \(m\). Вычислите количество размещений ровно \(n\) фишек в точках от \(1\) до \(x\), имеющих стоимость, равную \(m\), и выведите его по модулю \(998244353\). Два размещения считаются разными, если количество фишек в какой-либо точке отличается между этими размещениями.

Входные данные

Единственная строка содержит три целых числа \(n\), \(x\) и \(m\) (\(1 \le m \le n \le 1000\); \(2 \le x \le 10\)).

Выходные данные

Выведите одно целое число — количество размещений со стоимостью, равной \(m\), взятое по модулю \(998244353\).

Примечание

В первом примере существует пять способов разместить \(2\) фишки в точках от \(1\) до \(3\), чтобы стоимость равнялась \(1\):

  • \((1, 1)\);
  • \((1, 2)\);
  • \((1, 3)\);
  • \((2, 2)\);
  • \((2, 3)\).

C. Выполните операции и максимизируйте счёт

Бинарный поиск жадные алгоритмы Конструктив Перебор реализация *1900

Я вижу хендл satyam343. У меня идут мурашки по телу. Пожалуйста, в этот раз больше задач про медианы. Я их обожаю. Пожалуйста, satyam343, мы верим в тебя.
— Самый большой поклонник satyam343

Вам дан массив \(a\) длины \(n\) и целое число \(k\). Вам также дан бинарный массив \(b\) длины \(n\).

Вы можете выполнить следующую операцию не более \(k\) раз:

  • Выбрать индекс \(i\) (\(1 \leq i \leq n\)) такой, что \(b_i = 1\). Установить \(a_i = a_i + 1\) (т.е. увеличить \(a_i\) на \(1\)).

Ваш счёт определяется как \(\max\limits_{i = 1}^{n} \left( a_i + \operatorname{median}(c_i) \right)\), где \(c_i\) обозначает массив длины \(n-1\), который вы получаете, удаляя \(a_i\) из \(a\). Другими словами, ваш счёт — это максимальное значение \(a_i + \operatorname{median}(c_i)\) среди всех \(i\) от \(1\) до \(n\).

Найдите максимальный счёт, который можно получить при оптимальном выполнении операций.

Для произвольного массива \(p\), \(\operatorname{median}(p)\) определяется как \(\left\lfloor \frac{|p|+1}{2} \right\rfloor\)-й элемент в отсортированном \(p\). Например, \(\operatorname{median} \left( [3,2,1,3] \right) = 2\) и \(\operatorname{median} \left( [6,2,4,5,1] \right) = 4\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных начинается с двух целых чисел \(n\) и \(k\) (\(2 \leq n \leq 2 \cdot 10^5\), \(0 \leq k \leq 10^9\)) — длина \(a\) и количество операций, которые вы можете выполнить.

Следующая строка содержит \(n\) разделенных пробелом целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — массив \(a\).

Следующая строка содержит \(n\) разделенных пробелом целых чисел \(b_1, b_2, \ldots, b_n\) (\(b_i\) равно \(0\) или \(1\)) — массив \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке максимальное значение счёт, которое вы можете получить.

Примечание

Для первого набора входных данных оптимально выполнить \(5\) операций над обоими элементами и получить \(a = [8,8]\). Таким образом, максимальная оценка, которую мы можем получить, равна \(\max(8 + \operatorname{median}[8], 8 + \operatorname{median}[8]) = 16\), так как \(c_1 = [a_2] = [8]\). Можно доказать, что получить больший счёт невозможно.

Для второго набора входных данных вы не можете выполнить операции ни над одним элементом, поэтому \(a\) остается \([3,3,3]\). Таким образом, максимальная оценка, которую мы можем получить, равна \(3 + \operatorname{median}[3, 3] = 6\), так как \(c_1 = [a_2, a_3] = [3, 3]\). Можно доказать, что получить больший счёт невозможно.

E1. Удаление шаров с помощью слияния (лёгкая версия)

Бинарный поиск жадные алгоритмы Перебор разделяй и властвуй Структуры данных *2200

Пейте воду.
— Сунь-Цзы, Искусство стать здоровым программистом

Это лёгкая версия задачи. Единственное отличие в том, что в этой версии \(x=n\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам даны два целых числа \(n\) и \(x\) (\(x=n\)). В ряд выстроены \(n\) шаров, пронумерованных от \(1\) до \(n\) слева направо. Изначально на \(i\)-м шаре записано значение \(a_i\).

Для каждого целого числа \(i\) от \(1\) до \(n\) мы определяем функцию \(f(i)\) следующим образом:

  • Предположим, что у вас есть множество \(S = \{1, 2, \ldots, i\}\).

  • В рамках одной операции вам нужно выбрать целое число \(l\) (\(1 \leq l < i\)) из \(S\) такое, что \(l\) не является наибольшим элементом \(S\). Предположим, что \(r\) — наименьший элемент \(S\), значение которого больше \(l\).

    • Если \(a_l > a_r\), то установить \(a_l = a_l + a_r\) и удалить \(r\) из \(S\).
    • Если \(a_l < a_r\), то установить \(a_r = a_l + a_r\) и удалить \(l\) из \(S\).
    • Если \(a_l = a_r\), вы выбираете целое число \(l\) или \(r\) для удаления из \(S\):
      • Если вы решили удалить \(l\) из \(S\), вы устанавливаете \(a_r = a_l + a_r\) и удаляете \(l\) из \(S\).
      • Если вы решили удалить \(r\) из \(S\), вы устанавливаете \(a_l = a_l + a_r\) и удаляете \(r\) из \(S\).

  • \(f(i)\) обозначает количество целых чисел \(j\) (\(1 \le j \le i\)) таких, что можно получить \(S = \{j\}\), выполнив вышеописанную операцию ровно \(i - 1\) раз.

Для каждого целого числа \(i\) от \(x\) до \(n\) необходимо найти \(f(i)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \leq n \leq 2 \cdot 10^5; x = n\)) — количество шаров и наименьший индекс \(i\), для которого нужно найти \(f(i)\).

Вторая строка каждого набора входных данных содержит \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — начальное число, записанное на каждом шаре.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке \(n-x+1\) целых числа, разделенных пробелом, где \(j\)-е целое число равняется \(f(x+j-1)\).

Примечание

В первом наборе входных данных требуется вычислить \(f(5)\). Можно показать, что после \(4\) операций \(S\) может содержать \(2\), \(3\) или \(4\). Ниже показаны операции, необходимые для того, чтобы получить \(S = \{4\}\).

  • Изначально \(S = \{1, 2, 3, 4, 5\}\) и \(a = [1, 2, 3, 2, 1]\).
  • Выбираем \(l = 1\). Тогда \(r = 2\). Так как \(a_1 < a_2\), зададим \(a_2 = 1 + 2\) и удалим \(1\) из \(S\). Теперь \(S = \{2, 3, 4, 5\}\) и \(a = [1, 3, 3, 2, 1]\).
  • Выбираем \(l = 4\). Тогда \(r = 5\). Поскольку \(a_4 > a_5\), зададим \(a_4 = 2 + 1\) и удалим \(5\) из \(S\). Теперь \(S = \{2, 3, 4\}\) и \(a = [1, 3, 3, 3, 1]\).
  • Выбираем \(l = 3\). Тогда \(r = 4\). Поскольку \(a_3 = a_4\), у нас есть выбор, удалить \(3\) или \(4\). Поскольку мы хотим сохранить \(4\), удалим \(3\). Итак, зададим \(a_4 = 3 + 3\) и удалим \(3\) из \(S\). Теперь \(S = \{2, 4\}\) и \(a = [1, 3, 3, 6, 1]\).
  • Выбираем \(l = 2\). Тогда \(r = 4\). Поскольку \(a_2 < a_4\), зададим \(a_4 = 3 + 6\) и удалим \(2\) из \(S\). Наконец, \(S = \{4\}\) и \(a = [1, 3, 3, 9, 1]\).

Во втором наборе входных данных требуется вычислить \(f(7)\). Можно показать, что после \(6\) операций \(S\) может содержать \(2\), \(4\), \(6\) или \(7\).

E2. Удаление шаров с помощью слияния (сложная версия)

Бинарный поиск жадные алгоритмы Перебор разделяй и властвуй реализация Структуры данных *2500

Пейте воду.
— Сунь-Цзы, Искусство стать здоровым программистом

Это сложная версия задачи. Единственное отличие в том, что в этой версии \(x=1\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам даны два целых числа \(n\) и \(x\) (\(x=1\)). В ряд выстроены \(n\) шаров, пронумерованных от \(1\) до \(n\) слева направо. Изначально на \(i\)-м шаре записано значение \(a_i\).

Для каждого целого числа \(i\) от \(1\) до \(n\) мы определяем функцию \(f(i)\) следующим образом:

  • Предположим, что у вас есть множество \(S = \{1, 2, \ldots, i\}\).

  • В рамках одной операции вам нужно выбрать целое число \(l\) (\(1 \leq l < i\)) из \(S\) такое, что \(l\) не является наибольшим элементом \(S\). Предположим, что \(r\) — наименьший элемент \(S\), значение которого больше \(l\).

    • Если \(a_l > a_r\), то установить \(a_l = a_l + a_r\) и удалить \(r\) из \(S\).
    • Если \(a_l < a_r\), то установить \(a_r = a_l + a_r\) и удалить \(l\) из \(S\).
    • Если \(a_l = a_r\), вы выбираете целое число \(l\) или \(r\) для удаления из \(S\):
      • Если вы решили удалить \(l\) из \(S\), вы устанавливаете \(a_r = a_l + a_r\) и удаляете \(l\) из \(S\).
      • Если вы решили удалить \(r\) из \(S\), вы устанавливаете \(a_l = a_l + a_r\) и удаляете \(r\) из \(S\).

  • \(f(i)\) обозначает количество целых чисел \(j\) (\(1 \le j \le i\)) таких, что можно получить \(S = \{j\}\), выполнив вышеописанную операцию ровно \(i - 1\) раз.

Для каждого целого числа \(i\) от \(x\) до \(n\) необходимо найти \(f(i)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \leq n \leq 2 \cdot 10^5; x = 1\)) — количество шаров и наименьший индекс \(i\), для которого нужно найти \(f(i)\).

Вторая строка каждого набора входных данных содержит \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — начальное число, записанное на каждом шаре.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке \(n-x+1\) целых числа, разделенных пробелом, где \(j\)-е целое число равняется \(f(x+j-1)\).

Примечание

Для первого набора входных данных ниже приведены возможные значения \(j\) для каждого \(f(i)\) от \(1\) до \(n\).

  • Для \(f(1)\) единственным возможным значением \(j\) является \(1\).
  • Для \(f(2)\) единственным возможным значением \(j\) является \(2\).
  • Для \(f(3)\) возможные значения \(j\): \(2\) и \(3\).
  • Для \(f(4)\) возможные значения \(j\): \(2\) и \(3\).
  • Для \(f(5)\) возможные значения \(j\): \(2\), \(3\) и \(4\).

B. Карточная игра

Конструктив Перебор реализация *1000

Сунит и Славик играют в карточную игру. Правила игры следующие:

  • Каждая карта имеет целочисленное значение от \(1\) до \(10\).
  • Каждый игрок получает \(2\) карты, которые лежат лицом вниз (поэтому игрок не знает свои карты).
  • Игра состоит ровно из двух раундов. В раунде оба игрока выбирают случайную неоткрытую карту и открывают её. Игрок, который открыл карту с более высоким значением, выигрывает раунд. В случае равенства никто не выигрывает раунд.
  • Игрок выигрывает игру, если он выигрывает строго больше раундов, чем другой игрок. В случае равенства никто не выигрывает игру.

Поскольку Сунит и Славик не лучшие друзья, вам нужно вычислить количество способов, при которых игра могла бы закончиться победой Сунита.

Для лучшего понимания, пожалуйста, ознакомьтесь с разделом примечаний.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит \(4\) целых числа \(a_1\), \(a_2\), \(b_1\), \(b_2\) (\(1 \leq a_1, a_2, b_1, b_2 \leq 10\)), где \(a_1\) и \(a_2\) представляют карты Сунита, а \(b_1\) и \(b_2\) представляют карты Славика соответственно.

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество игр, которые Сунит выиграет среди всех возможных игр.

Примечание

Рассмотрим первый набор входных данных, когда Славик начинает с карт, имеющих значения \(2\) и \(6\), а Сунит начинает с карт, имеющих значения \(3\) и \(8\). Игра может пройти \(4\) различными способами:

  • Сунит открывает \(3\), а Славик открывает \(2\). Сунит выигрывает первый раунд. Затем Сунит открывает \(8\), а Славик открывает \(6\). Сунит выигрывает второй раунд. Поскольку Сунит выиграл \(2\) раунда, он выигрывает игру.

  • Сунит открывает \(3\), а Славик открывает \(6\). Славик выигрывает первый раунд. Затем Сунит открывает \(8\), а Славик открывает \(2\). Сунит выигрывает второй раунд. Никто не выигрывает, так как оба игрока выиграли равное количество раундов.

  • Сунит открывает \(8\), а Славик открывает \(6\). Сунит выигрывает первый раунд. Затем Сунит открывает \(3\), а Славик открывает \(2\). Сунит выигрывает второй раунд. Поскольку Сунит выиграл \(2\) раунда, он выигрывает игру.

  • Сунит открывает \(8\), а Славик открывает \(2\). Сунит выигрывает первый раунд. Затем Сунит открывает \(3\), а Славик открывает \(6\). Славик выигрывает раунд. Никто не выигрывает, так как оба игрока выиграли равное количество раундов.

A. Кино

Перебор Структуры данных *2400

В столице Берляндии находится единственный кинотеатр в стране, да и к тому же он состоит только из одного зала. Зал разделен на n рядов, каждый из которых состоит из m мест.

В очереди к кассе кинотеатра стоят k человек, каждый из которых хочет купить ровно один билет для себя любимого. Еще до начала продаж каждый нашел самое лучшее с его точки зрения место и запомнил его как пару координат (xi, yi), где xi — номер ряда, а yi — номер места в этом ряду.

Возможно, что несколько человек облюбовали одно и то же место, тогда те люди, места которых оказались заняты к моменту покупки билета, выберут себе другие места, руководствуясь следующими правилами. Пусть изначально посетитель хотел себе купить билет на место (x1, y1), тогда когда он подойдет к кассе, то выберет такое свободное место (x2, y2), которое удовлетворяет условиям:

  • величина |x1 - x2| + |y1 - y2| принимает наименьшее значение
  • если выбор неоднозначен, то среди мест, удовлетворяющих первому условию, выбирается то, у которого величина x2 принимает наименьшее значение
  • если выбор все еще не однозначен, то среди мест, удовлетворяющих первому и второму условям, выбирается то, у которого величина y2 принимает наименьшее значение

Ваша задача — найти для каждого человека координаты места, на которое он купит билет.

Входные данные

В первой строке входных данных содержатся три целых числа n, m, k (1 ≤ n, m ≤ 2000, 1 ≤ k ≤ min(n·m, 105) — количество рядов в кинотеатре, количество мест в каждом ряду и количество людей в очереди соответственно. Далее в k строках заданы по два целых числа xi, yi (1 ≤ xi ≤ n, 1 ≤ yi ≤ m) — координаты выбранного места для каждого из посетителей. Числа в одной строке разделяются пробелом. Пары координат расположены в порядке нахождения людей в очереди начиная с головы (первый человек в очереди перед кассой) к хвосту (последний человек в очереди).

Выходные данные

Выведите в k строках по паре чисел. В i-ой строке выведите xi, yi — координаты места, на которое i-ый в очереди посетитель купит билет.

C. Чемпионат по футболу

Перебор реализация *1800

Все совпадения с какими-либо реальными чемпионатами и видами спорта случайны.

Сборная Берляндии участвует в местном чемпионате по футболу, и сейчас в чемпионате проходит групповой этап. Опишем формальные правила местного чемпионата:

  • матч выигрывает та команда, которая забила больше голов в ворота противника;
  • за победу команде начисляется 3 очка, за ничью — 1 очко, за проигрыш — 0 очков;
  • группа состоит из 4 команд, и для ранжирования команд в группе играются 6 матчей: каждая команда с каждой играет ровно один раз;
  • в следующий этап чемпионата выходят команды, занявшие 1 и 2 место по результатам группового этапа.

В групповом этапе место команды определяется суммарным количеством набранных очков: чем больше очков, тем выше место. В случае, если у двух или более сборных совпадает количество очков, используются следующие критерии (критерии расположены в порядке приоритета, начиная с самого значимого):

  • разность общего количества забитых мячей и общего количества пропущенных мячей в чемпионате: выше место у команды, у которой этот показатель больше;
  • общее количество забитых мячей в чемпионате: выше место у команды, у которой этот показатель больше;
  • лексикографический порядок названий стран, за которые выступают команды: выше место у команды, у которой название лексикографически меньше.

В группе, где участвует команда Берляндии, уже известны результаты 5 матчей из 6, а точнее, остался последний матч, где сборная Берляндии играет с некоторой другой командой. Тренер сборной просит Вас найти такой счет X:Y (где X — количество голов, забитых Берляндией, а Y — количество голов, забитых оппонентом в этом матче), который удовлетворяет условиям:

  • X > Y, то есть Берляндия собирается выигрывать в этом матче;
  • после этого матча Берляндия попадает на 1 или 2 место в группе;
  • в случае неоднозначного выбора требуется выбрать счет X:Y, при котором величина X - Y принимает наименьшее значение;
  • если все еще невозможно однозначно определить счет, то нужно выбрать тот, в котором величина Y (количество пропущенных Берляндией голов) минимальна.
Входные данные

Входные данные состоят из пяти строк.

Каждая строка — это описание матча в формате «team1 team2 goals1:goals2» (без кавычек), которое обозначает, что команда team1 сыграла матч с командой team2, при этом команда team1 забила goals1 голов, а team2goals2 голов. Названия команд team1 и team2 — это непустые строки, состоящие из заглавных латинских букв, длиной не более 20 символов; goals1, goals2 — это целые числа от 0 до 9.

Команда Берляндии имеет название «BERLAND». Гарантируется, что команда Берляндии и еще одна из команд сыграли ровно 2 матча, а остальные — 3 матча.

Выходные данные

Выведите искомый счет в последнем матче в формате X:Y, где X — количество голов, забитых Берляндией, а Y — количество голов, забитых оппонентом. Если команда Берляндии при любом исходе не попадает на 1 или 2 место в группе, то выведите единственную строку «IMPOSSIBLE» (без кавычек).

Обратите внимание, что выводимый счет может быть сколь угодно большим, например 10:0.

Примечание

В первом примере финальный матч команда «BERLAND» проводит с командой «CERLAND». В случае выигрыша команды Берляндии со счетом 6:0 итоговая таблица примет вид:

  1. AERLAND (очков: 9, разность забитых и пропущенных: 4, забитые голы: 5)
  2. BERLAND (очков: 3, разность забитых и пропущенных: 0, забитые голы: 6)
  3. DERLAND (очков: 3, разность забитых и пропущенных: 0, забитые голы: 5)
  4. CERLAND (очков: 3, разность забитых и пропущенных: -4, забитые голы: 3)

Во втором примере команды «AERLAND» и «DERLAND» уже набрали 7 и 4 очков соответственно. Команда Берляндии наберет лишь 3 очка, что недостаточно для выхода в следующий этап соревнований.

D. Язык программирования

Бинарный поиск Перебор Разбор выражений реализация *1800

Недавно Валерий познакомился с совершенно новым языком программирования. Больше всего в этом языке его привлекли шаблонные функции и процедуры. Напомним, что шаблонами называются средства языка, предназначенные для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например, типам данных, размерам буферов, значениям по умолчанию).

Валерий решил более подробно изучить шаблонные процедуры этого языка. Описание шаблонной процедуры состоит из имени процедуры и списка типов ее параметров. В качестве параметров шаблонных процедур могут использоваться параметры обобщенного типа T.

Вызов процедуры состоит из имени процедуры и списка переменных-параметров. Назовем процедуру подходящей для данного вызова, если выполняются условия:

  • ее имя совпадает с именем вызванной процедуры;
  • количество ее параметров совпадает с количеством параметров вызванной процедуры;
  • типы ее параметров совпадают с соответствующими типами переменных в вызове процедуры. Тип параметра совпадает с типом переменной, если параметр имеет обобщенный тип T, либо типы переменной и параметра совпадают.

Вам дано описание некоторого набора шаблонных процедур. Также дан список переменных, используемых в программе, а также непосредственные вызовы процедур с использованием описанных переменных. Для каждого вызова от Вас требуется посчитать количество процедур, подходящих данному вызову.

Входные данные

В первой строке задано единственное целое число n (1 ≤ n ≤ 1000) — количество шаблонных процедур. Далее в n строках задано описание процедур, в следующем формате:

«void procedureName (type_1, type_2, ..., type_t)» (1 ≤ t ≤ 5), где void — ключевое слово, procedureName — имя процедуры, type_i — тип очередного параметра. Типами параметров языка могут являться «int», «string», «double», а также ключевое слово «T», которое обозначает обобщенный тип.

В следующей строке задано единственное целое число m (1 ≤ m ≤ 1000) — количество используемых переменных. Далее в m строках задано описание переменных, в следующем формате:

«type variableName», где type — тип переменной, который может принимать значения «int», «string», «double», variableName — имя переменной.

В следующей строке задано единственное целое число k (1 ≤ k ≤ 1000) — количество вызовов процедур. Далее в k строках заданы вызовы процедур в следующем формате:

«procedureName (var_1, var_2, ..., var_t)» (1 ≤ t ≤ 5), где procedureName — имя процедуры, var_i — имя очередной переменной.

В строках описания переменных, шаблонных процедур и их вызовов могут присутствовать пробелы в начале строки, в конце строки, перед и после скобок и запятых. Пробелы могут присутствовать до и после ключевого слова void. Длина каждой строки входных данных не превосходит 100 символов. Имена переменных и процедур являются непустыми строками из латинских строчных букв и цифр длиной не более 10 символов. Отметим, что это — единственное ограничение на имена переменных и процедур. В вызовах процедур используются только описанные переменные. Имена переменных различны. Никакие две процедуры не совпадают. Две процедуры совпадают, если они имеют одинаковые имена, а также упорядоченные наборы типов их параметров совпадают.

Выходные данные

В каждую из k строк выведите единственное число. Число в i-ой строке означает количество подходящих шаблонных процедур под i-ый вызов. Вызовы нумеруются в том порядке, в котором они заданы во входных данных.

G. Звонок во время пути

Бинарный поиск графы жадные алгоритмы кратчайшие пути Перебор *2100

Вы живёте в городе, состоящем из \(n\) перекрёстков и \(m\) улиц, соединяющих некоторые пары перекрёстков. По каждой улице можно перемещаться в любую сторону. Никакие две улицы не соединяют одну и ту же пару перекрёстков, и никакая улица не соединяет перекрёсток с самим собой. Из любого перекрёстка можно добраться до любого другого, возможно, проходя через какие-то другие перекрёстки.

Каждую минуту вы можете сесть на автобус на перекрёстке \(u_i\) и доехать за \(l_{i1}\) минут до перекрёстка \(v_i\). И наоборот доехать от перекрёстка \(v_i\) до перекрёстка \(u_i\) за \(l_{i1}\) минут. Садиться в автобус и выходить из него можно только на перекрёстках. Сесть в автобус на перекрёстке можно только находясь в нём.

Также по каждой улице можно пройти пешком за \(l_{i2} > l_{i1}\) минут.

Вы можете делать остановки на перекрёстках.

Вы живёте на перекрёстке с номером \(1\). Сегодня вы проснулись в момент времени \(0\), и у вас запланировано важное мероприятие на перекрёстке с номером \(n\), на которое вы должны добраться не позднее момента времени \(t_0\). Также у вас запланирован телефонный звонок, который продлится с \(t_1\) по \(t_2\) минуту (\(t_1 < t_2 < t_0\)).

Во время телефонного разговора нельзя ехать на автобусе, но можно идти по любым улицам пешком, сделать остановку или находиться у себя дома. Вы можете выходить из автобуса в минуту \(t_1\) и заходить в автобус в минуту \(t_2\).

Так как вы хотите выспаться, вам стало интересно — как поздно вы можете выйти из дома, чтобы успеть поговорить по телефону и при этом не опоздать на мероприятие?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(2 \le n \le 10^5, 1 \le m \le 10^5\)) — количество перекрёстков и улиц в городе.

Вторая строка описания каждого набора входных данных содержит три целых числа \(t_0\), \(t_1\), \(t_2\) (\(1 \le t_1 < t_2 < t_0 \le 10^9\)) — время начала мероприятия, время начала телефонного звонка и время его конца, соответственно.

Следующие \(m\) строк каждого набора данных содержат описания улиц.

\(i\)-я строка содержит четыре целых числа \(u_i\), \(v_i\), \(l_{i1}\), \(l_{i2}\) (\(1 \le u_i, v_i \le n\), \(u_i \neq v_i\), \(1 \le l_{i1} < l_{i2} \le 10^9\)) — номера перекрёстков, соединяемых \(i\)-й улицей, а также время пути по улице на автобусе и пешком. Гарантируется, что никакие две улицы не соединяют одну и ту же пару перекрёстков, а также что из любого перекрёстка можно добраться до любого другого.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\). Также гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальный момент времени, когда вы можете выйти из дома, чтобы успеть поговорить по телефону и не опоздать на мероприятие. Если вы не можете попасть на мероприятие вовремя, выведите -1.

H. Ксюша и загруженное множество

Бинарный поиск Перебор реализация Структуры данных *2200

Ксюша решила основать компанию по производству игр. Чтобы выделиться среди конкурентов и добиться успеха, она решила написать свой игровой движок. Движок должен поддерживать множество, изначально состоящее из \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\).

К множеству будут последовательно применяться \(m\) операций. Операции бывают следующих типов:

  • Вставить элемент \(x\) в множество;
  • Удалить элемент \(x\) из множества;
  • Сообщить \(k\)-загруженность множества.

\(k\)-загруженностью множества называется такое минимальное целое положительное число \(d\), что числа \(d, d + 1, \ldots, d + (k - 1)\) не встречаются в этом множестве. Например, \(3\)-загруженность множества \(\{3, 4, 6, 11\}\) равна \(7\), так как числа \(7, 8, 9\) отсутствуют в множестве, а никакое меньшее значение не подходит.

Ксюша занята менеджерскими делами, поэтому движок придётся писать вам. Реализуйте эффективную поддержку описанных операций.

Входные данные

В первой строке дано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов.

В первой строке дано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — начальный размер множества.

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_1 < a_2 < \ldots < a_n \le 2 \cdot 10^6\)) — начальное состояние множества.

В третьей строке дано целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество операций.

В следующих \(m\) строках даны операции. Операции даны в следующем формате:

  • + \(x\) (\(1 \le x \le 2 \cdot 10^6\)) — вставить элемент \(x\) в множество (гарантируется, что \(x\) отсутствует в множестве);
  • - \(x\) (\(1 \le x \le 2 \cdot 10^6\)) — удалить элемент \(x\) из множества (гарантируется, что \(x\) присутствует в множестве);
  • ? \(k\) (\(1 \le k \le 2 \cdot 10^6\)) — вывести значение \(k\)-загруженности множества.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), то же самое гарантируется для \(m\).

Выходные данные

Для каждого набора входных данных выведите ответы на операции типа «?».

C. Угадайте дерево

Бинарный поиск Деревья жадные алгоритмы интерактив Перебор поиск в глубину и подобное разделяй и властвуй снм *1500

Это интерактивная задача.

Мизуки выбрала секретное дерево с \(n\) вершинами, пронумерованными от \(1\) до \(n\), и попросила вас отгадать его с помощью запросов следующего типа:

  • «? a b» — Мизуки скажет вам, какая вершина \(x\) минимизирует \(|d(a,x) - d(b,x)|\), где \(d(x,y)\) — расстояние между вершинами \(x\) и \(y\). Если таких вершин несколько, Мизуки укажет вам ту, которая минимизирует \(d(a,x)\).

Выясните структуру секретного дерева Мизуки, используя не более \(15n\) запросов!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных состоит из одной строки с целым числом \(n\) (\(2 \le n \le 1000\)) — количество вершин в дереве.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Протокол взаимодействия

Взаимодействие начинается с чтения целого числа \(n\).

Затем вы можете сделать до \(15n\) запросов.

Чтобы сделать запрос, выведите строку в формате «? a b» (без кавычек) (\(1 \le a,b \le n\)). После каждого запроса считайте целое число — ответ на ваш запрос.

Чтобы сообщить ответ, выведите строку в формате «! \(a_1\) \(b_1\) \(a_2\) \(b_2\) ... \(a_{n-1}\) \(b_{n-1}\)» (без кавычек), что означает, что между вершинами \(a_i\) и \(b_i\) существует ребро для каждого \(1 \le i \le n-1\). Вы можете выводить ребра в любом порядке.

После того как будет сделано \(15n\) запросов, ответ на любой другой запрос будет равен \(-1\). Получив такой ответ, завершите программу, чтобы получить вердикт Неправильный ответ.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взломов используйте следующий формат: Первая строка содержит целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных.

Первая строка каждого набора входных данных держит целое число \(n\) — количество вершин в скрытом дереве.

Затем следует \(n-1\) строка. В \(i\)-й из них содержатся два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\)), что означает, что между \(a_i\) и \(b_i\) в скрытом дереве есть ребро.

Сумма \(n\) по всем наборам входных данных не должна превосходить \(1000\).

Примечание

Дерево — это связный неориентированный граф без циклов. Дерево с \(n\) вершинами всегда будет иметь \(n-1\) ребро.

В примере ответ на «? 1 2» равен \(1\). Это означает, что между вершинами \(1\) и \(2\) есть ребро.

Ответ на запрос «? 1 3» равен \(1\). Это означает, что между вершинами \(1\) и \(3\) есть ребро.

Ответ на запрос «? 1 4» равен \(3\). Можно доказать, что это возможно только в том случае, если вершина \(3\) соединена с вершинами \(1\) и \(4\).

Следовательно, ребра дерева — это \((1,2)\), \((1,3)\) и \((3,4)\).

D. Самая длинная подпоследовательность

жадные алгоритмы Конструктив Перебор реализация Структуры данных *1900

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\). Пусть \(S\) — множество всех непустых подпоследовательностей \(a\), в которых нет одинаковых элементов. Ваша цель — найти самую длинную последовательность в \(S\). Если таких несколько, найдите ту, которая минимизирует лексикографический порядок после умножения членов в нечетных позициях на \(-1\).

Например, при \(a = [3, 2, 3, 1]\), \(S = \{[1], [2], [3], [2, 1], [2, 3], [3, 1], [3, 2], [2, 3, 1], [3, 2, 1]\}\). Тогда \([2, 3, 1]\) и \([3, 2, 1]\) будут самыми длинными, а \([3, 2, 1]\) будет ответом, так как \([-3, 2, -1]\) лексикографически меньше, чем \([-2, 3, -1]\).

Последовательность \(c\) является подпоследовательностью последовательности \(d\), если \(c\) может быть получена из \(d\) путем удаления нескольких (возможно, нуля или всех) элементов.

Последовательность \(c\) лексикографически меньше последовательности \(d\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(c\) является префиксом \(d\), но \(c \ne d\);
  • в первой позиции, где \(c\) и \(d\) различаются, последовательность \(c\) имеет меньший элемент, чем соответствующий элемент в \(d\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длина \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — последовательность \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате:

Выведите целое число \(m\) в первой строке — длину \(b\).

Затем выведите \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) во второй строке — последовательность \(b\).

Примечание

В первом примере \(S = \{[1], [2], [3], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2], [2, 1, 3], [3, 2, 1]\}\). Среди них \([2, 1, 3]\) и \([3, 2, 1]\) — самые длинные, а \([-3, 2, -1]\) лексикографически меньше \([-2, 1, -3]\), поэтому \([3, 2, 1]\) — ответ.

Во втором примере \(S = \{[1]\}\), поэтому \([1]\) — ответ.

C. Чёрные круги

геометрия жадные алгоритмы математика Перебор *1200

На двумерной плоскости есть \(n\) кругов. Центр круга с индексом \(i\) имеет координаты \((x_i,y_i)\). Изначально радиусы всех кругов равны \(0\).

Радиусы кругов увеличиваются со скоростью \(1\) единица в секунду.

Вы находитесь в точке \((x_s,y_s)\); ваша цель — попасть в точку \((x_t,y_t)\), ни разу не коснувшись окружности какого-либо круга (включая момент, когда достигаете \((x_t,y_t)\)). Вы можете двигаться в любом направлении. Однако ваша скорость ограничена — \(1\) единица в секунду. Определите, возможно ли это.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных дано целое число \(n\) (\(1\le n\le10^5\)) — количество кругов.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\), \(y_i\) (\(1\le x_i,y_i\le10^9\)) — координаты центра каждого круга.

Последняя строка содержит четыре целых числа \(x_s\), \(y_s\), \(x_t\), \(y_t\) (\(1\le x_s,y_s,x_t,y_t\le10^9\)) — координаты начальной точки и цели, соответственно.

Гарантируется, что все \(n+2\) точки различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(\texttt{YES}\), если возможно достигнуть цели без прикосновения к окружности любого круга, иначе выведите \(\texttt{NO}\).

Вы можете выводить \(\texttt{Yes}\) и \(\texttt{No}\) в любом регистре (к примеру, строки \(\texttt{yEs}\), \(\texttt{yes}\), \(\texttt{Yes}\) и \(\texttt{YES}\) будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных возможный способ передвижения выглядит следующим образом.

D1. Проверка DFS (лёгкая версия)

графы Деревья Перебор поиск в глубину и подобное Структуры данных хэши *1900

Это лёгкая версия задачи. В этой версии заданное дерево является полным бинарным деревом, а ограничения на \(n\) и \(q\) ниже. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Вам дано полное бинарное дерево\(^\dagger\), состоящее из \(n\) вершин. Вершины пронумерованы от \(1\) до \(n\), вершина \(1\) — корень. Вам также дана перестановка \(p_1, p_2, \ldots, p_n\) чисел \([1,2,\ldots,n]\).

Вам нужно ответить на \(q\) запросов. В каждом запросе вам даются два целых числа \(x\), \(y\); вам нужно поменять местами \(p_x\) и \(p_y\) и определить, является ли \(p_1, p_2, \ldots, p_n\) возможным порядком обхода в глубину\(^\ddagger\) заданного дерева.

Обратите внимание, что перестановки элементов сохраняются между запросами.

\(^\dagger\) Полное бинарное дерево — это дерево с корнем в вершине \(1\), имеющее размер \(n=2^k-1\) для некоторого целого положительного числа \(k\), и где родитель каждой вершины \(i\) (\(1<i\le n\)) — это \(\left\lfloor\frac{i}{2}\right\rfloor\). Таким образом, все листья этого дерева находятся на расстоянии \(k - 1\) от корня.

\(^\ddagger\) Порядок обхода в глубину получается вызовом следующей функции \(\texttt{dfs}\) на заданном дереве.

dfs_order = []

function dfs(v):
добавить v в конец dfs_order
выбрать произвольную перестановку s детей v
for child in s:
dfs(child)

dfs(1)

Обратите внимание, что порядок обхода DFS определён не однозначно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(n\), \(q\) (\(3\le n\le 65\,535\), \(2\le q\le 5 \cdot 10^4\)) — количество вершин в дереве и количество запросов. Гарантируется, что \(n=2^k-1\) для некоторого целого положительного числа \(k\).

В следующей строке содержатся \(n-1\) целое число \(a_2,a_3,\ldots,a_n\) (\(1\le a_i<i\)) — родитель каждой вершины в заданном дереве. Гарантируется, что \(a_i=\left\lfloor\frac{i}{2}\right\rfloor\).

В следующей строке содержатся \(n\) целых чисел \(p_1,p_2,\ldots,p_n\) (\(1\le p_i\le n\), все \(p_i\) различны) — начальная перестановка \(p\).

В следующих \(q\) строках содержится по два целых числа \(x\), \(y\) (\(1\le x,y\le n,x\neq y\)) — позиции элементов, которые нужно поменять местами в перестановке.

Гарантируется, что сумма всех \(n\) не превышает \(65\,535\), а сумма всех \(q\) не превышает \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк, соответствующих \(q\) запросам. Для каждого запроса выведите \(\texttt{YES}\), если есть порядок обхода в глубину, который точно равен текущей перестановке, и выведите \(\texttt{NO}\) в противном случае.

Вы можете вывести \(\texttt{Yes}\) и \(\texttt{No}\) в любом регистре (например, строки \(\texttt{yEs}\), \(\texttt{yes}\), \(\texttt{Yes}\) и \(\texttt{YES}\) будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных перестановка \(p_1, p_2, \ldots, p_n\) после каждой модификации равна \([1,3,2],[1,2,3],[3,2,1]\) соответственно. Первые две перестановки — это возможные порядки обхода в глубину; третья — не порядок обхода в глубину.

Во втором наборе входных данных перестановка \(p_1, p_2, \ldots, p_n\) после каждой модификации равна \([1,2,3,4,5,6,7],[1,2,5,4,3,6,7],[1,3,5,4,2,6,7],[1,3,7,4,2,6,5],[1,3,7,6,2,4,5]\) соответственно.

E. Космические лучи

дп Перебор Структуры данных *2300

Дан массив целых чисел \(s_1, s_2, \ldots, s_l\). Каждую секунду, под действием космических лучей, все \(s_i\), такие что \(i=1\) или \(s_i\neq s_{i-1}\), будут одновременно удалены, а оставшиеся части массива будут конкатенированы вместе, чтобы образовать новый массив \(s_1, s_2, \ldots, s_{l'}\).

Определим силу массива как число секунд, которое требуется ему, чтобы стать пустым.

Вам дан массив целых чисел, сжатых в виде \(n\) пар, описывающих массив слева направо. Каждая пара \((a_i,b_i)\) представляет собой \(a_i\) копий \(b_i\), то есть \(\underbrace{b_i,b_i,\cdots,b_i}_{a_i\textrm{ раз}}\).

Для каждого \(i=1,2,\dots,n\) найдите силу последовательности, описываемой первыми \(i\) парами.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое число \(n\) (\(1\le n\le3\cdot10^5\)) — длина последовательности \(a\).

Каждая из следующих \(n\) строк содержит два целых числа \(a_i\), \(b_i\) (\(1\le a_i\le10^9,0\le b_i\le n\)) — пары, которые описывают последовательность.

Гарантируется, что сумма всех \(n\) не превышает \(3\cdot10^5\).

Гарантируется, что для всех \(1\le i<n\) выполняется \(b_i\neq b_{i+1}\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(n\) целых чисел — ответ для каждого префикса пар.

Примечание

В первом наборе входных данных, для префикса длины \(4\), изменения будут следующими: \([0,0,1,0,0,0,1,1,1,1,1]\rightarrow[0,0,0,1,1,1,1]\rightarrow[0,0,1,1,1]\rightarrow[0,1,1]\rightarrow[1]\rightarrow[]\), поэтому массив станет пустым через \(5\) секунд.

Во втором наборе входных данных, для префикса длины \(4\), изменения будут следующими:\([6,6,6,6,3,6,6,6,6,0,0,0,0]\rightarrow[6,6,6,6,6,6,0,0,0]\rightarrow[6,6,6,6,6,0,0]\rightarrow[6,6,6,6,0]\rightarrow[6,6,6]\rightarrow[6,6]\rightarrow[6]\rightarrow[]\), поэтому массив станет пустым через \(7\) секунд.

F1. Синий двор (простая версия)

дп математика Перебор поиск в глубину и подобное теория чисел *2600

Это простая версия задачи. В этой версии \(n=m\) и ограничение по времени меньше. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Во дворе Синего короля Лелль и Фламм устраивают матч. Матч состоит из нескольких раундов. В каждом раунде побеждает либо Лелль, либо Фламм.

Пусть \(W_L\) и \(W_F\) обозначают количество побед Лелли и Фламма, соответственно. Синий король считает матч успешным тогда и только тогда, когда:

  • после каждого раунда, \(\gcd(W_L,W_F)\le 1\);
  • в конце матча \(W_L\le n, W_F\le m\).

Обратите внимание, что \(\gcd(0,x)=\gcd(x,0)=x\) для каждого целого неотрицательного числа \(x\).

Лелль и Фламм могут прекратить матч, когда захотят, а итоговый счет матча будет следующим: \(l \cdot W_L + f \cdot W_F\).

Пожалуйста, помогите Лелле и Фламму скоординировать свои победы и поражения так, чтобы матч был успешным, а итоговый счет за матч был максимальным.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\leq t \leq 10^3\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит 4 целых числа \(n\), \(m\), \(l\), \(f\) (\(2\leq n\leq m \leq 2\cdot 10^7\), \(1\leq l,f \leq 10^9\), \(\bf{n=m}\)): \(n\), \(m\) обозначают верхнюю границу числа побед Лелли и Фламма соответственно, \(l\) и \(f\) определяют финальный счет матча.

Необычное дополнительное ограничение: гарантируется, что для каждого теста не существует двух наборов входных данных с одинаковой парой \(n\), \(m\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальный итоговый счет успешного матча.

Примечание

В первом наборе входных данных возможный матч выглядит так:

  • Фламм выигрывает, \(\gcd(0,1)=1\).
  • Лелль выигрывает, \(\gcd(1,1)=1\).
  • Фламм выигрывает, \(\gcd(1,2)=1\).
  • Фламм выигрывает, \(\gcd(1,3)=1\).
  • Лелль выигрывает, \(\gcd(2,3)=1\).
  • Лелль и Фламм соглашаются прекратить матч.

Итоговый счет: \(2\cdot2+3\cdot5=19\).

В четвертом наборе входных данных возможный матч выглядит так:

  • Фламм выигрывает, \(\gcd(0,1)=1\).
  • Лелль выигрывает, \(\gcd(1,1)=1\).
  • Лелль выигрывает, \(\gcd(2,1)=1\).
  • Лелль выигрывает, \(\gcd(3,1)=1\).
  • Лелль выигрывает, \(\gcd(4,1)=1\).
  • Лелль выигрывает, \(\gcd(5,1)=1\).
  • Фламм выигрывает, \(\gcd(5,2)=1\).
  • Фламм выигрывает, \(\gcd(5,3)=1\).
  • Фламм выигрывает, \(\gcd(5,4)=1\).
  • Лелль и Фламм соглашаются прекратить матч.

Итоговый счет: \(5\cdot2+4\cdot2=18\). Обратите внимание, что Лелль и Фламм могут прекратить матч, даже если ни у одного из них нет \(n\) выигрышей.

F2. Синий двор (сложная версия)

дп математика Перебор теория чисел *2800

Это сложная версия задачи. В этой версии не гарантируется, что \(n=m\), и ограничение по времени выше. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Во дворе Синего короля Лелль и Фламм устраивают матч. Матч состоит из нескольких раундов. В каждом раунде побеждает либо Лелль, либо Фламм.

Пусть \(W_L\) и \(W_F\) обозначают количество побед Лелли и Фламма, соответственно. Синий король считает матч успешным тогда и только тогда, когда:

  • после каждого раунда, \(\gcd(W_L,W_F)\le 1\);
  • в конце матча \(W_L\le n, W_F\le m\).

Обратите внимание, что \(\gcd(0,x)=\gcd(x,0)=x\) для каждого целого неотрицательного числа \(x\).

Лелль и Фламм могут прекратить матч, когда захотят, а итоговый счет матча будет следующим: \(l \cdot W_L + f \cdot W_F\).

Пожалуйста, помогите Лелле и Фламму скоординировать свои победы и поражения так, чтобы матч был успешным, а итоговый счет за матч был максимальным.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\leq t \leq 10^3\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит 4 целых числа \(n\), \(m\), \(l\), \(f\) (\(2\leq n\leq m \leq 2\cdot 10^7\), \(1\leq l,f \leq 10^9\)): \(n\), \(m\) обозначают верхнюю границу числа побед Лелли и Фламма соответственно, \(l\) и \(f\) определяют финальный счет матча.

Необычное дополнительное ограничение: гарантируется, что для каждого теста не существует двух наборов входных данных с одинаковой парой \(n\), \(m\).

Выходные данные

Для каждого набора входных данных, выведите одно целое число — максимальный итоговый счет успешного матча.

Примечание

В первом наборе входных данных возможный матч выглядит так:

  • Фламм выигрывает, \(\gcd(0,1)=1\).
  • Лелль выигрывает, \(\gcd(1,1)=1\).
  • Фламм выигрывает, \(\gcd(1,2)=1\).
  • Фламм выигрывает, \(\gcd(1,3)=1\).
  • Фламм выигрывает, \(\gcd(1,4)=1\).
  • Лелль и Фламм соглашаются прекратить матч.

Итоговый счет: \(1\cdot2+4\cdot5=22\).

G. Оптимизация решетки

meet-in-the-middle битмаски Перебор хэши *3400

Рассмотрим граф на сетке, состоящей из \(n\) строк и \(n\) столбцов. Пусть ячейка в строке \(x\) и столбце \(y\) будет обозначена как \((x,y)\). Существует направленное ребро из \((x,y)\) в \((x+1,y)\) с неотрицательным целым значением \(d_{x,y}\) для всех \(1\le x < n, 1\le y \le n\), а также существует направленное ребро из \((x,y)\) в \((x,y+1)\) с неотрицательным целым значением \(r_{x,y}\), для всех \(1\le x \le n, 1\le y < n\).

Изначально вы находитесь в точке \((1,1)\) с пустым множеством \(S\). Вам нужно пройтись по ребрам и в конце концов достичь \((n,n)\). Каждый раз, когда вы проходите ребро, его значение будет добавляться в \(S\). Найдите максимальный MEX\(^{\text{∗}}\) множества \(S\), который можно получить, достигнув точки \((n,n)\).

\(^{\text{∗}}\)Минимальное исключенное число (MEX) массива — это наименьшее неотрицательное целое число, которое не принадлежит массиву. Например:

  • MEX массива \([2,2,1]\) равен \(0\), потому что \(0\) не принадлежит массиву.
  • MEX массива \([3,1,0,1]\) равен \(2\), потому что \(0\) и \(1\) принадлежат массиву, а \(2\) — нет.
  • MEX массива \([0,3,1,2]\) равен \(4\), потому что \(0, 1, 2\) и \(3\) принадлежат массиву, а \(4\) — нет.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\le n\le20\)) — количество строк и столбцов.

Каждая из следующих \(n-1\) строк содержит \(n\) целых чисел, разделенных пробелами — матрица \(d\) (\(0\le d_{x,y}\le 2n-2\)).

Каждая из следующих \(n\) строк содержит \(n-1\) целых чисел, разделенных пробелами — матрица \(r\) (\(0\le r_{x,y}\le 2n-2\)).

Гарантируется, что сумма всех \(n^3\) не превосходит \(8000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное значение MEX для \(S\) при достижении \((n,n)\).

Примечание

В первом наборе входных данных граф решетки и один из оптимальных путей выглядят следующим образом:

Во втором наборе входных данных граф сетки и один из оптимальных путей выглядят следующим образом:

E1. Черепаха и инверсии (легкая версия)

дп жадные алгоритмы математика Перебор разделяй и властвуй *2600

Это легкая версия данной задачи. Различия между версиями заключаются в ограничении на \(m\) и в том, что \(r_i < l_{i + 1}\) выполняется для каждого \(i\) от \(1\) до \(m - 1\) в легкой версии. Вы можете взломы только в том случае, если обе версии задачи решены.

Черепаха дает вам \(m\) отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_m, r_m]\). Она считает, что перестановка \(p\) интересна, если существуют целые числа \(k_i\) для каждого отрезка (\(l_i \le k_i < r_i\)), такие что если она вычислит \(a_i = \max\limits_{j = l_i}^{k_i} p_j, b_i = \min\limits_{j = k_i + 1}^{r_i} p_j\) для каждого целого числа \(i\) от \(1\) до \(m\), то будет выполняться следующее условие:

\(\)\max\limits_{i = 1}^m a_i < \min\limits_{i = 1}^m b_i\(\)

Черепаха хочет, чтобы вы вычислили максимальное количество инверсий среди всех интересных перестановок длины \(n\), или сказали ей, если интересной перестановки не существует.

Инверсией перестановки \(p\) называется пара целых чисел \((i, j)\) (\(1 \le i < j \le n\)) такая, что \(p_i > p_j\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^3\)). Описание наборов входных данных следует далее.

Первая строка каждого набора входных данных содержит два целых числа \(n, m\) (\(2 \le n \le 5 \cdot 10^3, 0 \le m \le \frac{n}{2}\)) — длина перестановки и количество отрезков.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(l_i, r_i\) (\(1 \le l_i < r_i \le n\)) — \(i\)-й отрезок.

Дополнительное ограничение на входные данные в этой версии: \(r_i < l_{i + 1}\) выполняется для каждого \(i\) от \(1\) до \(m - 1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных, если интересной перестановки не существует, выведите единственное целое число \(-1\).

В противном случае выведите единственное целое число — максимальное количество инверсий.

Примечание

В третьем наборе входных данных интересная перестановка с максимальным количеством инверсий это \([5, 2, 4, 3, 1]\).

В четвертом наборе входных данных интересная перестановка с максимальным количеством инверсий это \([4, 8, 7, 6, 3, 2, 1, 5]\). В этом случае мы можем задать \([k_1, k_2] = [1, 7]\).

В пятом наборе входных данных интересная перестановка с максимальным количеством инверсий это \([4, 7, 6, 3, 2, 1, 5]\).

В шестом наборе входных данных интересная перестановка с максимальным количеством инверсий это \([4, 7, 3, 6, 2, 5, 1]\).

E2. Черепаха и инверсии (сложная версия)

дп жадные алгоритмы математика Перебор разделяй и властвуй Структуры данных *2700

Это сложная версия этой задачи. Различия между версиями заключаются в ограничении на \(m\) и условии \(r_i < l_{i + 1}\), которое выполняется для каждого \(i\) от \(1\) до \(m - 1\) в простой версии. Вы можете делать взломы только в том случае, если обе версии задачи решены.

Черепаха дает вам \(m\) отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_m, r_m]\). Она считает, что перестановка \(p\) интересна, если существуют целые числа \(k_i\) для каждого отрезка (\(l_i \le k_i < r_i\)), такие что если она вычислит \(a_i = \max\limits_{j = l_i}^{k_i} p_j, b_i = \min\limits_{j = k_i + 1}^{r_i} p_j\) для каждого целого числа \(i\) от \(1\) до \(m\), то будет выполняться следующее условие:

\(\)\max\limits_{i = 1}^m a_i < \min\limits_{i = 1}^m b_i\(\)

Черепаха хочет, чтобы вы вычислили максимальное количество инверсий среди всех интересных перестановок длины \(n\), или сказали ей, если интересной перестановки не существует.

Инверсией перестановки \(p\) называется пара целых чисел \((i, j)\) (\(1 \le i < j \le n\)), такая что \(p_i > p_j\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^3\)). Далее следует описание наборов.

Первая строка каждого набора содержит два целых числа \(n, m\) (\(2 \le n \le 5 \cdot 10^3, 0 \le m \le 5 \cdot 10^3\)) — длину перестановки и количество отрезков.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(l_i, r_i\) (\(1 \le l_i < r_i \le n\)) — \(i\)-й отрезок. Обратите внимание, что могут существовать пары одинаковых отрезков (т.е. могут существовать два разных индекса \(i, j\), такие что \(l_i = l_j\) и \(r_i = r_j\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(5 \cdot 10^3\), а также сумма \(m\) по всем наборам не превышает \(5 \cdot 10^3\).

Выходные данные

Для каждого набора, если интересной перестановки не существует, выведите одно целое число \(-1\).

В противном случае выведите одно целое число — максимальное количество инверсий.

Примечание

В третьем наборе интересная перестановка с максимальным количеством инверсий это \([5, 2, 4, 3, 1]\).

В четвертом наборе интересная перестановка с максимальным количеством инверсий это \([4, 3, 8, 7, 6, 2, 1, 5]\). В этом случае мы можем задать \([k_1, k_2, k_3] = [2, 2, 7]\).

В пятом и шестом наборе можно доказать, что интересной перестановки не существует.

В седьмом наборе интересная перестановка с максимальным количеством инверсий это \([4, 7, 6, 3, 2, 1, 5]\). В этом случае мы можем задать \([k_1, k_2, k_3, k_4] = [1, 6, 1, 6]\).

В восьмом наборе интересная перестановка с максимальным количеством инверсий это \([4, 7, 3, 6, 2, 5, 1]\).

F. Черепаха и три последовательности

дп жадные алгоритмы математика Перебор Структуры данных Теория вероятностей *2800

Свинка дает Черепахе три последовательности \(a_1, a_2, \ldots, a_n\), \(b_1, b_2, \ldots, b_n\) и \(c_1, c_2, \ldots, c_n\).

Черепаха выберет подпоследовательность из \(1, 2, \ldots, n\) длины \(m\), пусть это будет \(p_1, p_2, \ldots, p_m\). Подпоследовательность должна удовлетворять следующим условиям:

  • \(a_{p_1} \le a_{p_2} \le \cdots \le a_{p_m}\);
  • Все \(b_{p_i}\) для всех индексов \(i\) попарно различны, т.е. не существует двух различных индексов \(i\), \(j\), таких что \(b_{p_i} = b_{p_j}\).

Помогите ему найти максимальное значение \(\sum\limits_{i = 1}^m c_{p_i}\), или скажите ему, что невозможно выбрать подпоследовательность длины \(m\), которая удовлетворяет вышеуказанным условиям.

Напомним, что последовательность \(a\) является подпоследовательностью последовательности \(b\), если \(a\) может быть получена из \(b\) путем удаления нескольких (возможно, нуля или всех) элементов.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 3000\), \(1 \le m \le 5\)) — длины трех последовательностей и требуемая длина подпоследовательности.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы последовательности \(a\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\)) — элементы последовательности \(b\).

Четвертая строка содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 10^4\)) — элементы последовательности \(c\).

Выходные данные

Выведите единственное целое число — максимальное значение \(\sum\limits_{i = 1}^m c_{p_i}\). Если невозможно выбрать подпоследовательность длины \(m\), которая удовлетворяет вышеуказанным условиям, выведите \(-1\).

Примечание

В первом тесте мы можем выбрать \(p = [1, 2]\), тогда \(c_{p_1} + c_{p_2} = 1 + 4 = 5\). Мы не можем выбрать \(p = [2, 4]\), так как \(a_2 > a_4\), что нарушает первое условие. Мы также не можем выбрать \(p = [2, 3]\), так как \(b_2 = b_3\), что нарушает второе условие. Мы можем выбрать \(p = [1, 4]\), но \(c_1 + c_4 = 4\), что не является максимальным.

Во втором тесте мы можем выбрать \(p = [4, 6, 7]\).

В третьем тесте невозможно выбрать подпоследовательность длины \(3\), которая удовлетворяет обоим условиям.

B. Игра с дверьми

жадные алгоритмы Перебор *1000

В ряд расположено \(100\) комнат и \(99\) дверей между ними, \(i\)-я дверь соединяет комнаты \(i\) и \(i+1\). Каждая дверь может быть открыта или закрыта. Изначально все двери открыты.

Скажем, что комната \(x\) достижима из комнаты \(y\), если все двери между ними открыты.

Вы знаете, что:

  • Алиса находится в какой-то комнате из отрезка \([l, r]\);
  • Боб находится в какой-то комнате из отрезка \([L, R]\);
  • Алиса и Боб находятся в разных комнатах.

Однако вы не знаете, в каких именно комнатах они находятся.

Вы не хотите, чтобы Алиса и Боб могли добраться друг до друга, поэтому собираетесь закрыть некоторые двери, чтобы этого избежать. Какое минимальное количество дверей необходимо закрыть, чтобы Алиса и Боб не могли встретиться, независимо от их начальных позиций внутри заданных отрезков?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(l\) и \(r\) (\(1 \le l < r \le 100\)) — отрезок комнат, в которых может находиться Алиса.

Вторая строка каждого набора содержит два целых числа \(L\) и \(R\) (\(1 \le L < R \le 100\)) — отрезок комнат, в которых может находиться Боб.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество дверей, которое необходимо закрыть, чтобы Алиса и Боб не могли встретиться, независимо от их начальных позиций внутри заданных отрезков.

Примечание

В первом наборе входных данных достаточно закрыть дверь между комнатами \(2\) и \(3\).

Во втором наборе входных данных нужно закрыть следующие двери: \((2,3)\), \((3,4)\), \((4,5)\).

В третьем наборе входных данных нужно закрыть следующие двери: \((5, 6)\) и \((6,7)\).

D. Цветные порталы

Бинарный поиск графы жадные алгоритмы кратчайшие пути Перебор реализация Структуры данных *1600

На прямой расположено \(n\) городов. Города пронумерованы целыми числами от \(1\) до \(n\).

Для перемещения между городами используются порталы. Порталы бывают \(4\) цветов: синий, зеленый, красный и желтый. В каждом городе расположены порталы двух разных цветов. Из города \(i\) можно переместиться в город \(j\), если в них есть порталы одинакового цвета (например, между городом «красный-синий» и городом «синий-зеленый» можно перемещаться). Данное перемещение стоит \(|i-j|\) монет.

Ваша задача — ответить на \(q\) независимых запросов: посчитайте минимальную стоимость, чтобы переместиться из города \(x\) в город \(y\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество городов и количество запросов, соответственно.

Вторая строка содержит \(n\) строк одного из следующих типов: BG, BR, BY, GR, GY или RY; \(i\)-я из них описывает порталы, находящиеся в \(i\)-м городе; символ B обозначает, что в городе есть портал синего цвета, G — зеленого, R — красного, а Y — желтого.

\(j\)-я из следующих \(q\) строк содержит два целых числа \(x_j\) и \(y_j\) (\(1 \le x_j, y_j \le n\)) — описание \(j\)-го запроса.

Дополнительные ограничения на входные данные:

  • сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\);
  • сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).
Выходные данные

Для каждого запроса выведите одно целое число — минимальную стоимость, чтобы переместиться из города \(x\) в город \(y\) (или \(-1\), если это невозможно).

E. Это не задача про ним

игры математика Перебор теория чисел *2100

Два игрока, Алиса и Боб, играют в игру. У них есть \(n\) куч камней, в \(i\)-й куче изначально \(a_i\) камней.

За один ход игрок может выбрать любую кучу камней и забрать из нее любое положительное число камней, с одним условием:

  • пусть текущее количество камней в куче равно \(x\). Нельзя забрать из кучи такое число камней \(y\), что наибольший общий делитель \(x\) и \(y\) не равен \(1\).

Тот игрок, который не может сделать ход, проигрывает. Оба игрока играют оптимально (то есть если у игрока есть стратегия, которая позволяет ему выиграть, как бы оппонент ни сопротивлялся, он выигрывает). Алиса ходит первой.

Определите, кто выиграет.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • в первой задано одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\));
  • во второй задано \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^7\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите Alice, если выигрывает Алиса, или Bob, если выигрывает Боб.

F. Сделай палиндром

Бинарный поиск жадные алгоритмы математика Перебор Структуры данных *2600

Задан массив \(a\), состоящий из \(n\) целых чисел.

Скажем, что результат функции \(f(b)\) — минимальное количество операций, чтобы сделать массив \(b\) палиндромом. Операции, которые вы можете выполнять — следующие:

  • выбрать два соседних элемента \(b_i\) и \(b_{i+1}\), удалить их и заменить одним элементом, равным \((b_i + b_{i + 1})\);
  • или выбрать элемент \(b_i > 1\), удалить его и заменить двумя положительными целыми числами \(x\) и \(y\) (\(x > 0\) и \(y > 0\)) такими, что \(x + y = b_i\).

Например, из массива \(b=[2, 1, 3]\) за одну операцию можно получить следующие массивы: \([1, 1, 1, 3]\), \([2, 1, 1, 2]\), \([3, 3]\), \([2, 4]\) или \([2, 1, 2, 1]\).

Посчитайте \(\displaystyle \left(\sum_{1 \le l \le r \le n}{f(a[l..r])}\right)\), где \(a[l..r]\) — подотрезок массива \(a\) с \(l\)-й по \(r\)-ю позиции включительно. Другими словами — сумму значений функции \(f\) для всех подотрезков массива \(a\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^5\)).

Дополнительные ограничения на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора выведите одно целое число — сумму значений функции \(f\) для всех подотрезков массива \(a\).

D. Измените НОД

Бинарный поиск Перебор разделяй и властвуй реализация Структуры данных теория чисел *2400

Вам даны два массива \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_n\).

Вы должны выполнить следующую операцию ровно один раз:

  • выбрать любые индексы \(l\) и \(r\) такие, что \(1 \le l \le r \le n\);
  • поменять местами \(a_i\) и \(b_i\) для всех \(i\) таких, что \(l \leq i \leq r\).

Найдите максимально возможное значение \(\text{gcd}(a_1, a_2, \ldots, a_n) + \text{gcd}(b_1, b_2, \ldots, b_n)\) после выполнения операции ровно один раз. Также найдите количество различных пар \((l, r)\), для которых достигается максимальное значение.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных дается одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество чисел в массивах.

В следующей строке вам дается \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

В последней строке даны \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 10^9\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два целых числа: максимальное значение \(\text{gcd}(a_1, a_2, \ldots, a_n) + \text{gcd}(b_1, b_2, \ldots, b_n)\) после выполнения операции ровно один раз, и количество подходящих пар.

Примечание

В первом, третьем и четвертом наборах входных данных ни в одном из массивов нельзя получить НОД больше \(1\), поэтому ответ — \(1 + 1 = 2\). Любая пара \((l, r)\) достигает одинаковый результат, например, в первом примере \(36\) такиз пар.

В последнем наборе входных данных нужно выбрать \(l = 1\), \(r = 2\) для максимизации ответа. В этом случае НОД в первом массиве будет\(5\), а во втором — \(1\), поэтому ответ равен \(5 + 1 = 6\), а количество пар равно \(1\).

B. Ирис и дерево

Деревья математика Перебор поиск в глубину и подобное снм Структуры данных *1800

Дано корневое дерево с корнем в вершине \(1\). Для любой вершины \(i\) (\(1 < i \leq n\)) в дереве есть ребро, соединяющее вершины \(i\) и \(p_i\) (\(1 \leq p_i < i\)), вес которого равен \(t_i\).

Ирис не знает значений \(t_i\), но она знает, что \(\displaystyle\sum_{i=2}^n t_i = w\) и любое из \(t_i\) является неотрицательным целым числом.

Вершины дерева пронумерованы особым образом: номера вершин в каждом поддереве представляют собой последовательные целые числа. Другими словами, вершины дерева пронумерованы в порядке обхода в глубину.

Дерево на этой картинке удовлетворяет условию. Например, в поддереве вершины \(2\) номера вершин равны \(2, 3, 4, 5\), то есть являются последовательными целыми числами.
Дерево на этой картинке не удовлетворяет условию, так как в поддереве вершины \(2\) номера вершин \(2\) и \(4\) не являются последовательными целыми числами.

Определим \(\operatorname{dist}(u, v)\) как длину простого пути между вершинами \(u\) и \(v\) в дереве.

Далее произойдёт \(n - 1\) событие:

  • Ирис сообщают целые числа \(x\) и \(y\), обозначающие, что \(t_x = y\).

После каждого события Ирис хочет знать максимальное возможное значение \(\operatorname{dist}(i, i \bmod n + 1)\) независимо для всех \(i\) (\(1\le i\le n\)). Ей достаточно узнать только сумму этих \(n\) значений. Пожалуйста, помогите Ирис быстро получить ответы.

Обратите внимание, что при вычислении максимально возможных значений \(\operatorname{dist}(i, i \bmod n + 1)\) и \(\operatorname{dist}(j, j \bmod n + 1)\) для \(i \ne j\) неизвестные веса рёбер могут быть разными.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(w\) (\(2 \le n \le 2 \cdot 10^5\), \(0 \leq w \leq 10^{12}\)) — количество вершин в дереве и сумма весов рёбер.

Вторая строка каждого набора входных данных содержит \(n - 1\) целых чисел \(p_2, p_3, \ldots, p_n\) (\(1 \leq p_i < i\)) — описание рёбер дерева.

Затем следуют \(n-1\) строк, обозначающих события. Каждая строка содержит два целых числа \(x\) и \(y\) (\(2 \leq x \leq n\), \(0 \leq y \leq w\)), обозначающие, что \(t_x = y\).

Гарантируется, что все \(x\) в событиях различны. Также гарантируется, что сумма всех \(y\) равна \(w\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(n-1\) целых числа, каждое из которых представляет ответ после каждого события.

Примечание

В первом наборе входных данных \(\operatorname{dist}(1, 2) = \operatorname{dist}(2, 1) = t_2 = w = 10^{12}\), поэтому \(\operatorname{dist}(1, 2) + \operatorname{dist}(2, 1) = 2 \cdot 10^{12}\)

Во втором наборе входных данных дерево после того, как Ирис узнала все \(t_x\), показано ниже:

\(\operatorname{dist}(1, 2) = t_2\), \(\operatorname{dist}(2, 3) = t_2 + t_3\), \(\operatorname{dist}(3, 4) = t_3 + t_4\), \(\operatorname{dist}(4, 1) = t_4\). После первого события мы узнали, что \(t_2 = 2\), поэтому \(\operatorname{dist}(1, 2) = 2\). В то же время:

  • \(\operatorname{dist}(2, 3)\) максимально, если \(t_3 = 7\), \(t_4 = 0\). Тогда \(\operatorname{dist}(2, 3) = 9\).
  • \(\operatorname{dist}(3, 4)\) и \(\operatorname{dist}(4, 1)\) максимальны, если \(t_3 = 0\), \(t_4 = 7\). Тогда \(\operatorname{dist}(3, 4) = \operatorname{dist}(4, 1) = 7\).

Таким образом, ответ равен \(2 + 9 + 7 + 7 = 25\).

После второго события мы узнали, что \(t_4 = 4\), тогда \(t_3 = w - t_2 - t_4 = 4\). \(\operatorname{dist}(1, 2) = 2\), \(\operatorname{dist}(2, 3) = 2 + 3 = 5\), \(\operatorname{dist}(3, 4) = 3 + 4 = 7\), \(\operatorname{dist}(4, 1) = 4\). Таким образом, ответ равен \(2 + 5 + 7 + 4 = 18\).

E. Полное бинарное дерево Ирис

Деревья Перебор поиск в глубину и подобное Структуры данных *3100

Ирис любит полные бинарные деревья.

Определим глубину корневого дерева как максимальное количество вершин на простых путях от некоторой вершины до корня. Полное бинарное дерево глубины \(d\) — это бинарное дерево глубины \(d\) с ровно \(2^d - 1\) вершинами.

Ирис называет дерево \(d\)-бинарным, если к нему можно добавить некоторые вершины и рёбра, чтобы оно стало полным бинарным деревом глубины \(d\). Обратите внимание, что любая вершина может быть выбрана в качестве корня полного бинарного дерева.

Поскольку выполнение операций над большими деревьями затруднительно, она определяет бинарную глубину дерева как минимальное \(d\), удовлетворяющее условию, что дерево является \(d\)-бинарным. В частности, если не существует целого числа \(d \ge 1\), такого что дерево является \(d\)-бинарным, то бинарная глубина дерева равна \(-1\).

У Ирис сейчас есть дерево, состоящее только из вершины \(1\). Она хочет добавить ещё \(n - 1\) вершин, чтобы сформировать большее дерево. Она будет добавлять вершины по одной. Когда она добавляет вершину \(i\) (\(2 \leq i \leq n\)), она сообщит вам целое число \(p_i\) (\(1 \leq p_i < i\)) и добавит новое ребро, соединяющее вершины \(i\) и \(p_i\).

Ирис хочет спросить вас о бинарной глубине дерева, образованного первыми \(i\) вершинами для всех \(1 \le i \le n\). Можете ли вы сказать ей ответ?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 5 \cdot 10^5\)) — итоговый размер дерева.

Вторая строка каждого набора входных данных содержит \(n - 1\) целых числа \(p_2, p_3, \ldots, p_n\) (\(1 \leq p_i < i\)) — описания всех рёбер дерева.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел, \(i\)-е из которых представляет бинарную глубину дерева, образованного первыми \(i\) вершинами.

Примечание

В первом наборе входных данных итоговое дерево показано ниже:

  • Дерево, состоящее из вершины \(1\), имеет бинарную глубину \(1\) (само дерево является полным бинарным деревом глубины \(1\)).
  • Дерево, состоящее из вершин \(1\) и \(2\), имеет бинарную глубину \(2\) (мы можем добавить вершину \(3\), чтобы сделать его полным бинарным деревом глубины \(2\)).
  • Дерево, состоящее из вершин \(1\), \(2\) и \(3\), имеет бинарную глубину \(2\) (само дерево является полным бинарным деревом глубины \(2\)).

Во втором наборе входных данных полное бинарное дерево, образованное после добавления некоторых вершин к дереву, состоящему из \(n\) вершин, показано ниже (добавленные вершины выделены жирным):

Глубина образованного полного бинарного дерева равна \(4\).

В пятом наборе входных данных итоговое дерево показано ниже:

Можно доказать, что Ирис не может сформировать никакое полное бинарное дерево, добавляя вершины и рёбра, поэтому бинарная глубина равна \(-1\).

F. Краски Доры

графы Комбинаторика Конструктив Перебор реализация *3500

К сожалению, Дора пролила краску, когда рисовала мурал в классе. Дора рассматривает мурал как матрицу \(b\) размера \(n \times n\). Изначально \(b_{i,j} = 0\) для всех \(1 \le i, j \le n\).

У Доры есть только две кисти, которые имеют два разных цвета. За одну операцию она может покрасить матрицу одной из двух кистей:

  • Первая кисть имеет цвет \(1\) и может покрасить один столбец матрицы. То есть, Дора выбирает целое число \(1 \leq j \leq n\) и присваивает \(b_{i,j} := 1\) для всех \(1 \leq i \leq n\);
  • Вторая кисть имеет цвет \(2\) и может покрасить одну строку матрицы. То есть, Дора выбирает целое число \(1 \leq i \leq n\) и присваивает \(b_{i,j} := 2\) для всех \(1 \leq j \leq n\).

Дора раскрашивает матрицу так, чтобы полученная матрица \(b\) содержала только \(1\) и \(2\).

Для матрицы \(b\) обозначим \(f(b)\) как минимальное количество операций, необходимых, чтобы превратить начальную матрицу (содержащую только \(0\)) в \(b\). Красота матрицы \(b\) равна количеству способов раскрасить начальную матрицу за ровно \(f(b)\) операций, чтобы превратить её в \(b\). Если нет способа превратить начальную матрицу в \(b\), то красота \(b\) равна \(0\).

Однако Дора сделала случайную ошибку. В матрице \(a\), которую вы получили, ровно один элемент отличается от настоящей матрицы \(b\). То есть, существует ровно одна пара \((i, j)\) такая, что \(a_{i, j} = 3 - b_{i, j}\).

Пожалуйста, помогите Доре вычислить ожидаемую красоту настоящей матрицы \(b\) по модулю \(998\,244\,353\) (все возможные \(n^2\) ошибок имеют равную вероятность).

Поскольку размер матрицы слишком велик, Дора скажет вам только позиции \(m\) элементов цвета \(1\), а остальные \(n^2-m\) элементов имеют цвет \(2\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 2 \cdot 10^5\), \(0 \leq m \leq \min(10^6, n^2)\)) — размер матрицы и количество элементов цвета \(1\).

Затем следуют \(m\) строк, каждая из которых содержит два положительных целых числа \(x_i\) и \(y_i\) (\(1 \leq x_i, y_i \leq n\)) — обозначающие, что \(a_{x_i, y_i} = 1\).

Гарантируется, что если \(i \neq j\), то \((x_i, y_i) \neq (x_j, y_j)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(4\cdot10^5\), а сумма \(m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — ожидаемую красоту настоящей матрицы \(b\), по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных матрица \(a = \left[\begin{matrix}1&1\\2&2\end{matrix}\right]\). Рассмотрим изменение элемента \((1,1)\) для вычисления ответа.

Можно доказать, что минимальное количество операций для раскрашивания начальной матрицы в \(\left[\begin{matrix}2&1\\2&2\end{matrix}\right]\) равно \(3\). Сначала мы можем покрасить первую строку в цвет \(2\), затем покрасить второй столбец в цвет \(1\), и наконец покрасить вторую строку в цвет \(2\). Процесс выглядит следующим образом:

\(\)\left[\begin{matrix}0&0\\0&0\end{matrix}\right]\Rightarrow\left[\begin{matrix}2&2\\0&0\end{matrix}\right]\Rightarrow\left[\begin{matrix}2&1\\0&1\end{matrix}\right]\Rightarrow\left[\begin{matrix}2&1\\2&2\end{matrix}\right]\(\)

Можно доказать, что это единственный способ раскрасить матрицу за \(3\) операции. Таким образом, красота матрицы \(\left[\begin{matrix}2&1\\2&2\end{matrix}\right]\) равна \(1\). Аналогично, если изменить любой другой элемент матрицы, красота всегда равна \(1\), поэтому ожидаемая красота настоящей матрицы \(b\) равна \(1\).

Во втором наборе входных данных матрица \(a = \left[\begin{matrix}1&2\\2&2\end{matrix}\right]\). Рассмотрим изменение элемента \((2, 2)\) для вычисления ответа.

Можно доказать, что невозможно раскрасить начальную матрицу в \(\left[\begin{matrix}1&2\\2&1\end{matrix}\right]\), поэтому её красота равна \(0\). Если изменить любой другой элемент матрицы, красота всегда равна \(2\), поэтому ожидаемая красота равна \(\frac{0 + 2 + 2 + 2}{4} = \frac{6}{4} \equiv 499\,122\,178 \pmod {998\,244\,353}\).

A. Экзамен Сакурако

жадные алгоритмы Конструктив математика Перебор *800

Сегодня у Сакурако экзамен по математике. Учитель дал массив, который состоит из \(a\) единиц и \(b\) двоек.

В массиве Сакурако должна поставить перед каждым элементом либо '+', либо '-' так, чтобы сумма всех элементов массива была равна \(0\).

Сакурако не уверена, возможно ли решить эту задачу, определите, существует ли способ расставить знаки так, чтобы сумма всех элементов массива была равна \(0\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 100\))  — количество наборов входных данных.

Единственная строка каждого набора содержит два целых числа \(a\) и \(b\) (\(0\le a,b<10\))  — количество '1' и количество '2' в массиве.

Выходные данные

Для каждого набора выведите «Yes», если вы можете сделать сумму всего массива равной \(0\), и «No» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание
  1. \(a=0\), \(b=1\): это означает, что массив равен \([2]\) — невозможно добавить знаки '+' или '-' так, чтобы получить в результате \(0\);
  2. \(a=0\), \(b=3\): это означает, что массив равен \([2, 2, 2]\) — невозможно добавить знаки '+' или '-' так, чтобы получить в результате \(0\);
  3. \(a=2\), \(b=0\): это означает, что массив равен \([1, 1]\) — возможно добавить знаки '+' или '-' так, чтобы получить в результате \(0\) (\(+1-1=0\));
  4. \(a=2\), \(b=3\): это означает, что массив равен \([1, 1, 2, 2, 2]\) — возможно добавить знаки '+' или '-' так, чтобы получить в результате \(0\) (\(+1+1-2-2+2=0\));

B. Квадрат или нет

математика Перебор Строки *800

Красивая двоичная матрица — это матрица, по краям которой стоят единицы, а внутри нули.

Примеры четырёх красивых двоичных матриц.

Сегодня Сакурако играла с красивой двоичной матрицей размера \(r \times c\) и сделала из неё двоичную строку \(s\), выписав все строки матрицы, начиная с первой и заканчивая \(r\)-й. Более формально, элемент из матрицы в \(i\)-й строке и \(j\)-м столбце совпадает с \(((i-1)*c+j)\)-м элементом строки.

Необходимо проверить, могла ли красивая матрица, из которой получена строка \(s\), быть квадратной. Иными словами, вам надо проверить, могла ли строка \(s\) быть получена из квадратной красивой бинарной матрицы (то есть такой, что \(r=c\)).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных.

Первая строка каждого набора содержит одно число \(n\) (\(2 \le n \le 2 \cdot 10^5\))  — длина строки.

Вторая строка каждого набора содержит строку \(s\) длины \(n\). Строка всегда является результатом выписывания строк красивой матрицы.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите «Yes», если исходная матрица могла быть квадратной, и «No» иначе.

Примечание

Во втором примере из матрицы можно получить строку 1111:

\(1\)\(1\)
\(1\)\(1\)

В третьем примере строка 111101111 может быть получена из матрицы:

\(1\)\(1\)\(1\)
\(1\)\(0\)\(1\)
\(1\)\(1\)\(1\)

В четвёртом примере не существует квадратной матрицы, из которой можно получить строку.

C. Самый длинный хороший массив

Бинарный поиск математика Перебор *800

Сегодня Сакурако изучал массивы. Массив \(a\) длины \(n\) считается хорошим тогда и только тогда, когда:

  • массив \(a\) является возрастающим, то есть \(a_{i - 1} < a_i\) для всех \(2 \le i \le n\);
  • разности между соседними элементами возрастают, то есть \(a_i - a_{i-1} < a_{i+1} - a_i\) для всех \(2 \le i < n\).

Сакурако придумала границы \(l\) и \(r\) и хочет построить хороший массив максимальной длины, где \(l \le a_i \le r\) для всех \(a_i\).

Помогите Сакурако найти максимальную длину хорошего массива для заданных \(l\) и \(r\).

Входные данные

Первая строка содержит одно число \(t\) (\(1\le t\le 10^4\))  — количество наборов входных данных.

Единственная строка каждого набора содержит два целых числа \(l\) и \(r\) (\(1\le l\le r\le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно число  — длину самого большого хорошего массива Сакурако при заданных \(l\) и \(r\).

Примечание

Для \(l=1\) и \(r=5\) одним из возможных массивов может быть \((1,2,5)\). Можно доказать, что массива длины \(4\) для данных \(l\) и \(r\) не существует.

Для \(l=2\) и \(r=2\) единственным возможным массивом является \((2)\).

Для \(l=10\) и \(r=20\) единственным возможным массивом является \((10,11,13,16,20)\).

E. Чередующаяся строка

дп жадные алгоритмы Перебор реализация Строки Структуры данных *1500

Сакурако очень любит чередующиеся строки. Она называет строку \(s\) из строчных латинских букв чередующейся строкой, если символы на четных позициях одинаковы, если символы на нечетных позициях одинаковы и длина строки четная.

Например, строки 'abab' и 'gg' являются чередующимися, а строки 'aba' и 'ggwp' — нет.

Как хороший друг, вы решили подарить такую строку, но не смогли её найти. К счастью, вы можете выполнить два типа операций над строкой:

  1. Выберите индекс \(i\) и удалите из строки \(i\)-й символ, что уменьшит длину строки на \(1\). Такую операцию можно выполнить не более \(1\) раза;
  2. Выберите индекс \(i\) и замените \(s_i\) на любую другую букву.

Поскольку вы торопитесь, вам нужно определить минимальное количество операций, необходимых для превращения строки в чередующуюся.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных.

Первая строка каждого набора содержит одно число \(n\) (\(1 \le n\le 2\cdot 10^5\))  — длина строки.

Вторая строка каждого набора содержит строку \(s\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового случая выведите одно целое число — минимальное количество операций, необходимых для превращения строки \(s\) в чередующуюся.

Примечание

Для строки ababa можно удалить первый символ, чтобы получить baba, что является чередующейся строкой.

Для строки acdada можно изменить первые два символа, чтобы получить dadada, что является чередующейся строкой.

H. Тест Сакурако

Бинарный поиск жадные алгоритмы математика Перебор теория чисел *2100

Сакурако вскоре будет сдавать тест. Тест можно описать как массив целых чисел \(n\) и задание на нем:

Задав целое число \(x\), Сакурако может выполнить следующую операцию любое количество раз:

  • Выбрать целое число \(i\) (\(1\le i\le n\)) такое, что \(a_i\ge x\);
  • Изменить значение \(a_i\) на \(a_i-x\).

Применяя эту операцию произвольное количество раз, она хочет найти минимальную возможную медиану\(^{\text{∗}}\) массива \(a\).

Сакурако знает массив, но не знает целое число \(x\). Кто-то проболтался, что одно из \(q\) значений \(x\) будет в следующем тесте, поэтому Сакурако спрашивает вас, каков ответ для каждого такого \(x\).

\(^{\text{∗}}\)Медиана массива длины \(n\) — это элемент, который стоит в середине отсортированного массива (в \(\frac{n+2}{2}\)-й позиции для чётного \(n\), и в \(\frac{n+1}{2}\)-й для нечётного)

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\))  — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(q\) (\(1\le n,q\le 10^5\))  — количество элементов массива и количество запросов.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1\le a_i\le n\))  — элементы массива.

Следующие \(q\) строк содержат по одному целому числу \(x\) (\(1\le x\le n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превысит \(10^5\). То же самое гарантируется и для суммы \(q\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел  — ответ для каждого запроса.

A. Минимизировать!

математика Перебор *800

Даны два целых числа \(a\) и \(b\) (\(a \leq b\)). Для всех возможных целых значений \(c\) (\(a \leq c \leq b\)) найдите минимальное значение \((c - a) + (b - c)\).

Входные данные

В первой строке содержится \(t\) (\(1 \leq t \leq 55\)) — количество наборов входных данных.

Каждый набор входных данных содержит два целых числа \(a\) и \(b\) (\(1 \leq a \leq b \leq 10\)).

Выходные данные

Для каждого набора входных данных выведите минимально возможное значение \((c - a) + (b - c)\) на новой строке.

Примечание

В первом наборе входных данных вы можете выбрать \(c = 1\) и получить ответ \((1 - 1) + (2 - 1) = 1\). Можно показать, что это минимально возможное значение.

Во втором наборе входных данных вы можете выбрать \(c = 6\) и получить ответ \((6 - 3) + (10 - 6) = 7\). Можно показать, что это минимально возможное значение.

B. osu!mania

Перебор реализация *800

Вы играете в свою любимую ритм-игру, osu!mania. Макет вашей битмапы состоит из \(n\) строк и \(4\) столбцов. Поскольку ноты внизу ближе, вы будете обрабатывать самую нижнюю строку первой, а самую верхнюю строку последней. Каждая строка будет содержать ровно одну ноту, представленную как '#'.

Для каждой ноты \(1, 2, \dots, n\), в порядке обработки, выведите столбец, в котором появляется нота.

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Для каждого набора входных данных первая строка содержит \(n\) (\(1 \leq n \leq 500\)) — количество строк битмапы.

Следующие \(n\) строк содержат \(4\) символа. \(i\)-я строка представляет собой \(i\)-ю строку битмапы сверху. Гарантируется, что символы являются либо '.' либо '#', и ровно один из символов является '#'.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(500\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел в новой строке — номер столбца, в котором появляется \(i\)-я в порядке обработки нота для всех \(i\) от \(1\) до \(n\).

D. Инновационно новая задача

битмаски дп Перебор *2600

Широко известный в узких кругах белорусский олимпиадник Леша решил немного подзаработать, чтобы купить себе квартиру площадью на один квадратный метр больше. Для этого он хочет составить и провести Super Rated Match (SRM) на сайте Torcoder.com. Но вот беда — суровый торкодерский координатор Иван не принимает ни одной Лешиной задачи, называя каждую обидным словом «боян». И вот после очередной предложенной задачи дело чуть не дошло до взаимной обиды.

Вам предлагается выступить в роли справедливого судьи и определить, действительно ли задача является настолько инновационно новой, как уверен в этом Леша, или все-таки Иван прав, и похожая задача уже встречалась в прошедших SRM.

Вам даны описания Лешиной задачи и задач из архива сайта Torcoder.com. Описание каждой задачи представляет собой последовательность слов. При этом гарантируется, что слова в Лешиной задаче не повторяются, в то время как описание задачи из архива может содержать произвольное количество повторяющихся слов.

«Похожесть» Лешиной задачи на некоторую задачу из архива определим следующим образом. Среди всех перестановок слов предлагаемой задачи выберем ту, которая встречается в задаче из архива в качестве подпоследовательности. Если таких перестановок несколько, выберем ту, число инверсий в которой минимально. Тогда «похожесть» задачи можно записать в виде , где n — количество слов в задаче Леши, а x — количество инверсий в выбранной перестановке. Обратите внимание, что «похожесть» p — положительное число.

Задачу назовем инновационно новой, если среди задач из архива Ивана не найдется ни одной задачи, которая содержит в себе в качестве подпоследовательности некоторую перестановку слов Лешиной задачи.

Рассудите ребят, определив, является ли предлагаемая задача новой, либо указав задачу из архива, которая больше всего напоминает Лешину задачу.

Входные данные

Первая строка содержит число n (1 ≤ n ≤ 15) — количество слов в Лешиной задаче. Во второй строке находятся n слов, разделенных пробелом — краткое описание задачи.

Третья строка содержит число m (1 ≤ m ≤ 10) — количество задач в архиве Torcoder.com. Следующие m строк содержат описания задач в формате «k s1 s2 ... sk», где k (1 ≤ k ≤ 500000) — количество слов в задаче, а si — слово задачи.

Слова из описаний всех задач содержат не более 10 строчных латинских букв. Гарантируется, что суммарная длина слов в описаниях всех задач не превышает 500015.

Выходные данные

В случае, если Лешина задача является инновационно новой, выведите строку «Brand new problem!» (без кавычек).

В противном случае в первой строке выведите номер задачи из архива, наиболее похожей на Лешину задачу. Если таких задач несколько, выведите ту, номер которой минимальный. Во второй строке выведите строку из символов [:, символа |, повторенного p раз, и символов :], где p — «похожесть» этой задачи на Лешину. Задачи нумеруются начиная с единицы в том порядке, в котором они заданы во входных данных.

Примечание

Напомним, что количество инверсий — это количество пар слов, которые в перестановке идут не в том порядке, в котором они шли в исходной задаче. Так, например, если исходная задача была «add two numbers», то перестановка «numbers add two» содержит две инверсии — пары слов «numbers» и «add», а также «numbers» и «two».

Последовательность b1,  b2,  ...,  bk называется подпоследовательностью последовательности a1, a2,  ...,  an, если найдется такой набор индексов 1 ≤ i1 <  i2 < ...   < ik ≤ n, что aij  =  bj. Иными словами, последовательность b может быть получена из a путем вычеркивания некоторых элементов.

В первом тесте первая задача содержит в качестве подпоследовательности перестановку «find the palindrome next», в которой количество инверсий равно 1 (слова «palindrome» и «next»).

Во втором тесте ни одна из задач не содержит в себе в качестве подпоследовательности перестановку слов задачи, предлагаемой Лешей.

A. Альтернированная сумма чисел

математика Перебор реализация *800

Вам задана последовательность целых чисел. Выведите альтернированную сумму этой последовательности. Иными словами, выведите \(a_1 - a_2 + a_3 - a_4 + a_5 - \dots\). То есть знаки плюс и минус чередуются, начиная с плюса.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — длина последовательности. Вторая строка набора тестовых данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\)).

Выходные данные

Выведите \(t\) строк. Для каждого набора входных данных выведите искомую альтернированную сумму чисел.

B. Три брата

математика Перебор реализация *800

Три брата договорились о встрече. Пронумеруем братьев следующим образом: пусть старший брат имеет номер 1, средний брат имеет номер 2, а младший брат — номер 3.

Когда пришло время встречи, один из братьев опоздал. По заданным номерам двух братьев, которые пришли вовремя, вам предстоит определить номер опоздавшего брата.

Входные данные

В первой строке входных данных следуют два различных целых числа a и b (1 ≤ a, b ≤ 3, a ≠ b) — номера братьев, которые пришли на встречу вовремя. Номера даны в произвольном порядке.

Выходные данные

Выведите единственное целое число — номер брата, который опоздал на встречу.

C1. Ошибка передачи сообщения (простая версия)

Перебор Строки *1400

Это упрощенная версия задачи. Она отличается от сложной только ограничениями.

В Берляндском государственном университете локальная сеть между серверами не всегда работает без ошибок. При передаче двух одинаковых сообщений подряд возможна ошибка, в результате которой эти два сообщения сливаются в одно. При таком слиянии конец первого сообщения совмещается с началом второго. Конечно, совмещение может происходить только по одинаковым символам. Длина совмещения должна быть положительным числом, меньшим длины текста сообщения.

Например, при передаче двух сообщений «abrakadabra» подряд возможно, что оно будет передано с ошибкой описанного вида, и тогда будет получено сообщение вида «abrakadabrabrakadabra» или «abrakadabrakadabra» (в первом случае совмещение произошло по одному символу, а во втором — по четырем).

По полученному сообщению t определите, возможно ли, что это результат ошибки описанного вида работы локальной сети, и если возможно, определите возможное значение s.

Не следует считать ошибкой ситуацию полного наложения друга на друга двух сообщений. К примеру, если получено сообщение «abcd», следует считать, что в нём ошибки нет. Аналогично, простое дописывание одного сообщения вслед за другим не является признаком ошибки. Например, если получено сообщение «abcabc», следует считать, что в нём ошибки нет.

Входные данные

В единственной строке выходных данных следует непустая строка t, состоящая из строчных букв латинского алфавита. Длина строки t не превосходит 100 символов.

Выходные данные

Если сообщение t не может содержать ошибки, выведите «NO» (без кавычек) в единственную строку выходных данных.

В противном случае в первой строке выведите «YES» (без кавычек), а в следующей строке выведите строку s — возможное сообщение, которое могло привести к ошибке. Если возможных ответов несколько, разрешается вывести любой из них.

Примечание

Во втором примере подходящим ответом также является строка acacaca.

E. Префиксные НОД

дп жадные алгоритмы математика Перебор теория чисел *2200

Так как Мансур устал делать легенды, легенды на эту задачу не будет.

Дан массив натуральных чисел \(a_1, a_2, \ldots, a_n\). В нём можно переставить элементы произвольным образом. Требуется узнать минимально возможное значение выражения \(\)\gcd(a_1) + \gcd(a_1, a_2) + \ldots + \gcd(a_1, a_2, \ldots, a_n),\(\) где \(\gcd(a_1, a_2, \ldots, a_n)\) обозначает наибольший общий делитель (НОД) чисел \(a_1, a_2, \ldots, a_n\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное число \(n\) (\(1 \le n \le 10^5\)) — размер массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)) — исходный массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Гарантируется, что сумма \(\max(a_1, a_2, \ldots, a_n)\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число в отдельной строке — ответ на задачу.

Примечание

В первом наборе входных данных можно переставить элементы следующим образом: \([2, 4, 2]\), тогда ответом будет \(\gcd(2) + \gcd(2, 4) + \gcd(2, 4, 2) = 2 + 2 + 2 = 6\).

В третьем наборе входных данных можно переставить элементы следующим образом: \([6, 10, 15]\), тогда ответом будет \(\gcd(6) + \gcd(6, 10) + \gcd(6, 10, 15) = 6 + 2 + 1 = 9\).

F1. Игра на дереве (простая версия)

Бинарный поиск Деревья дп жадные алгоритмы игры Перебор реализация Структуры данных *2700

Это простая версия задачи. В этой версии \(\mathbf{u = v}\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Алиса и Боб играют в забавную игру на дереве. В эту игру играют на дереве из \(n\) вершин, пронумерованных от \(1\) до \(n\). Напомним, что дерево на \(n\) вершинах — это неориентированный связный граф с \(n - 1\) ребрами.

Алиса и Боб ходят по очереди, причём Алиса ходит первой. Каждый игрок начинает с какой-то вершины.

В свой ход игрок должен перейти из текущей вершины в соседнюю, которая ещё не была никем посещена до этого. Первый игрок, который не может сделать ход, проигрывает.

Вам даны две вершины \(u\) и \(v\). Представим простой путь из вершины \(u\) в \(v\) как массив \(p_1, p_2, p_3, \ldots, p_m\), где \(p_1 = u\), \(p_m = v\), между \(p_i\) и \(p_{i + 1}\) есть ребро для всех \(i\) (\(1 \le i < m\)).

Вы должны определить победителя игры, если Алиса начнёт в вершине \(1\), а Боб в вершине \(p_j\) для каждого \(j\) (где \(1 \le j \le m\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин дерева.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(a\), \(b\) (\(1 \le a, b \le n\)), обозначающих неориентированное ребро между вершинами \(a\) и \(b\). Гарантируется, что данные ребра образуют дерево.

Последняя строка каждого набора входных данных содержит два целых числа \(u\) и \(v\) (\(2 \le u, v \le n\), \(\mathbf{u = v}\)).

Гарантируется, что путь между \(u\) и \(v\) не проходит через вершину \(1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(m\) строк.

В \(i\)-й строке выведите победителя игры, если Алиса начинает с вершины \(1\), а Боб с вершины \(p_i\), выведите «Alice» (без кавычек), если выиграет Алиса, или «Bob» (без кавычек) в противном случае.

Примечание
Дерево из первого и второго примера.

В первом наборе входных данных путь будет иметь вид (\(2,2\)). Боб начинает в вершине \(2\), Алиса в своём первом ходу не сможет никуда пойти, и она проиграет.

Во втором наборе входных данных путь будет иметь вид (\(3,3\)). Боб начинает в вершине \(3\), Алиса переместится в вершину \(2\), и у Боба не останется вершин, которые можно посетить, и он проиграет.

D. Роберт Гуд и миссис Гуд

жадные алгоритмы Перебор сортировки Структуры данных *1400

Впечатли своего брата, но не огорчай свою мать.

Брат и мать Робина собираются в гости, и Робин должен выбрать день приезда для каждого гостя.

Все доступные дни пронумерованы от \(1\) до \(n\). У Робина и его веселой компании запланировано всего \(k\) рискованных 'работ'. \(i\)-я работа проходит между днями \(l_i\) и \(r_i\) включительно, для \(1 \le i \le k\).

Посетители остаются на \(d\) непрерывных дней, все эти \(d\) дней должны быть между днем \(1\) и \(n\) включительно. Если работа проходит в любой из \(d\) дней, визит пересекается с работой (длина пересечения не важна).

Робин хочет, чтобы визит его брата пересекался с максимальным количеством различных работ, а визит его матери — с минимальным.

Найдите подходящие дни начала визита для брата и матери Робина. Если есть несколько подходящих дней, выберите самый ранний.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(d\), \(k\) (\(1 \le n \le 10^5, 1 \le d, k \le n\)) — количество дней, продолжительность визитов и количество работ.

Затем следуют \(k\) строк, каждая содержит по два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — начальный и конечный день каждой работы.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два целых числа, лучшие дни начала визитов брата и матери Робина соответственно. Оба визита должны укладываться между днем \(1\) и \(n\) включительно.

Примечание

В первом примере единственная работа занимает все \(2\) дня, оба гостя должны приехать в день \(1\).

Во втором примере день \(2\) пересекается с \(2\) работами, а день \(1\) пересекается только с \(1\).

В третьем примере Роберт посещает дни \([1,2]\), миссис Гуд посещает дни \([4,5]\).

G. Молочные дни

жадные алгоритмы Перебор реализация Структуры данных *2200

Что сделано, то сделано, и испорченное молоко не исправить.

Маленький Джон настолько мал, насколько ночь — это день, он был известен как гигант, возможно, ростом \(2.1\) метра. Это связано с его любовью к молоку.

В его молочном дневнике \(n\) записей, показывающих, что он приобрел \(a_i\) пинт свежего молока в день \(d_i\). Молоко теряет свежесть с течением времени и остается пригодным для питья максимум \(k\) дней. Другими словами, свежее молоко, приобретенное в день \(d_i\), будет пригодно для питья с дня \(d_i\) по день \(d_i+k-1\) включительно.

Каждый день маленький Джон пьет пригодное для питья молоко, максимум \(m\) пинт. Другими словами, если молока меньше \(m\) пинт, он выпьет все и не будет насыщен; если молока \(m\) пинт или больше, он выпьет ровно \(m\) пинт и будет насыщен, и это будет день молочного насыщения.

Маленький Джон всегда сначала пьет самое свежее пригодное для питья молоко.

Определите количество дней молочного насыщения маленького Джона.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\leq t \leq 10^4\)), количество наборов входных данных.

Первая строка каждого набора входных данных состоит из трех целых чисел \(n\), \(m\), \(k\) (\(1\le n\), \(m\), \(k \le 10^5\)), количество записей в дневнике, максимальное количество пинт, необходимое для дня молочного насыщения, и продолжительность свежести молока.

Затем следуют \(n\) строк каждого набора входных данных, каждая с двумя целыми числами \(d_i\) и \(a_i\) (\(1\le d_i\), \(a_i \le 10^6\)), день, в который было приобретено молоко, и количество приобретенных пинт. Они отсортированы по возрастанию значений \(d_i\), и все значения \(d_i\) различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество дней молочного насыщения.

Примечание

В первом наборе входных данных \(5\) пинт молока хороши в течение \(3\) дней до порчи.

Во втором наборе входных данных произойдёт следующее:

  • в день \(1\) он получит \(5\) пинт молока и выпьет \(3\) из них (останется \(2\) пинты с дня \(1\));
  • в день \(2\) он получит \(7\) пинт молока и выпьет \(3\) из них (останется \(2\) пинты с дня \(1\) и \(4\) пинты с дня \(2\));
  • в день \(3\) он выпьет \(3\) пинты с дня \(2\) (останется \(2\) пинты с дня \(1\) и \(1\) пинта с дня \(2\));
  • в день \(4\) молоко приобретённое в день \(1\) испортится и он выпьет \(1\) пинту с дня \(2\) (больше молока не осталось).

A. Разбиение карт

2-sat жадные алгоритмы математика Перебор реализация *1600

У вас есть несколько карт. На каждой карте написано целое число от \(1\) до \(n\): в частности, для каждого \(i\) от \(1\) до \(n\) у вас есть \(a_i\) карт, на которых написано число \(i\).

Также существует магазин, в котором продается неограниченное количество карт каждого типа. У вас есть \(k\) монет, поэтому вы можете купить в общей сложности не более \(k\) новых карт, и карты, которые вы покупаете, могут содержать любые целые числа от \(\mathbf{1}\) до \(\mathbf{n}\), включительно.

После покупки новых карт вы должны разбить все свои карты на колоды согласно следующим правилам:

  • все колоды должны иметь одинаковый размер;
  • нет пары карт с одинаковым числом в одной колоде.

Найдите максимально возможный размер колоды после покупки карт и их оптимального разбиения.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(1 \leq n \leq 2 \cdot 10^5\), \(0 \leq k \leq 10^{16}\)) — количество различных типов карт и количество монет.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^{10}\), \(\sum a_i \geq 1\)) — количество карт типа \(i\), имеющихся у вас в начале, для каждого \(1 \leq i \leq n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможный размер колоды при оптимальных действиях.

Примечание

В первом наборе входных данных вы можете купить одну карту с числом \(1\), и ваш набор карт станет таким: \([1, 1, 1, 1, 2, 2, 3, 3]\). Вы можете разбить их на колоды \([1, 2], [1, 2], [1, 3], [1, 3]\). Они все имеют размер \(2\), и все содержат разные значения. Можно показать, что невозможно получить разбиение с колодами размером больше \(2\), поэтому ответ — \(2\).

Во втором наборе входных данных вы можете купить две карты с числом \(1\) и одну карту с числом \(3\), и ваш набор карт станет таким: \([1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 5, 5, 5, 5]\). Его можно разбить на колоды \([1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 2, 5], [2, 3, 5], [2, 4, 5]\). Можно показать, что нельзя получить разбиение с колодами размером больше \(3\), поэтому ответ — \(3\).

C. Стрижка деревьев

Деревья жадные алгоритмы Перебор поиск в глубину и подобное сортировки *1700

Вам дано дерево с \(n\) вершинами, корень которого находится в вершине \(1\). В этой задаче лист — это некорневая вершина со степенью \(1\).

За одну операцию можно удалить лист и смежное с ним ребро (возможно, появятся новые листья). Какое минимальное количество операций нужно выполнить, чтобы получилось дерево, также с корнем в вершине \(1\), в котором все листья находятся на одинаковом расстоянии от корня?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \leq n \leq 5 \cdot 10^5\)) — количество вершин.

Каждая из следующих \(n-1\) строк содержит два целых числа \(u\), \(v\) (\(1 \leq u, v \leq n\), \(u \neq v\)), описывающих ребро, соединяющее \(u\) и \(v\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальное количество операций, необходимое для достижения цели.

Примечание

В первых двух наборах входных данных деревья выглядят так:

В первом наборе входных данных, удалив ребра \((1, 3)\) и \((2, 5)\), вы получите дерево, у которого все листья (вершины \(6\) и \(7\)) находятся на одинаковом расстоянии от корня (вершины \(1\)), которое равняется \(3\). Ответ — \(2\), так как это минимальное количество ребер, которое нужно удалить для достижения цели.

Во втором наборе входных данных удаление ребер \((1, 4)\) и \((5, 7)\) приводит к дереву, в котором все листья (вершины \(4\) и \(5\)) находятся на одинаковом расстоянии от корня (вершины \(1\)), которое равняется \(2\).

A. Максимум + количество

дп жадные алгоритмы Перебор *800

Дан массив целых положительных чисел \(a_1, a_2, \ldots, a_n\).

Вы можете раскрасить некоторые элементы массива в красный цвет, но при этом в нем не должно оказаться двух соседних красных элементов (т.е. для \(1 \leq i \leq n-1\) хотя бы один из \(a_i\) и \(a_{i+1}\) должен не быть красным).

Ваш счет — это максимальное значение красного элемента плюс количество красных элементов. Найдите максимальный счет, который вы можете получить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — длина массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 1000\)) — заданный массив.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможный счет, который можно получить, раскрасив некоторые элементы в красный цвет в соответствии с условием.

Примечание

В первом наборе входных данных вы можете раскрасить массив следующим образом: \([\color{red}{5}, 4, \color{red}{5}]\). Ваш счет составит \(\max([5, 5]) + \text{size}([5, 5]) = 5+2 = 7\). Это максимальный счет, который вы можете получить.

Во втором наборе входных данных вы можете раскрасить массив следующим образом: \([\color{red}{4}, 5, \color{red}{4}]\). Ваш счет составит \(\max([4, 4]) + \text{size}([4, 4]) = 4+2 = 6\). Это максимальный счет, который вы можете получить.

В третьем наборе входных данных вы можете раскрасить массив следующим образом: \([\color{red}{3}, 3, \color{red}{3}, 3, \color{red}{4}, 1, 2, \color{red}{3}, 4, \color{red}{5}]\). Ваш счет составит \(\max([3, 3, 4, 3, 5]) + \text{size}([3, 3, 4, 3, 5]) = 5+5 = 10\). Это максимальный счет, который вы можете получить.

A. ЛНПП

Бинарный поиск битмаски жадные алгоритмы Перебор реализация Строки *800

Настоящее название этой задачи — «Лексикографически наибольшая подпоследовательность-палиндром» — слишком длинное, чтобы уместиться в заголовке страницы.

Дана строка s, состоящая только из строчных латинских букв. Найдите ее лексикографически наибольшую подпоследовательность, являющуюся палиндромом.

Непустую строку s[p1p2... pk] = sp1sp2... spk (1  ≤  p1 < p2 < ... < pk  ≤  |s|) будем называть подпоследовательностью строки s = s1s2... s|s|, где |s| — длина строки s. Например, строки «abcb», «b» и «abacaba» являются подпоследовательностями строки «abacaba».

Строка x = x1x2... x|x| лексикографически больше строки y = y1y2... y|y|, если либо |x| > |y| и x1 = y1, x2 = y2, ..., x|y| = y|y|, либо существует такое число r (r < |x|, r < |y|), что x1 = y1, x2 = y2, ..., xr = yr и xr  +  1 > yr  +  1. Символы в строках сравниваются как их ASCII-коды. Например, строка «ranger» лексикографически больше строки «racecar», а строка «poster» лексикографически больше строки «post».

Строка s = s1s2... s|s| называется палиндромом, если она в точности совпадает со строкой rev(s) = s|s|s|s| - 1... s1. Иными словами, строка называется палиндромом, если она читается одинаково как слева направо, так и справа налево. Например, строками-палиндромами являются «racecar», «refer» и «z».

Входные данные

В единственной строке записана непустая строка s, состоящая только из строчных букв латинского алфавита и имеющая длину не более 10.

Выходные данные

Выведите лексикографически наибольшую подпоследовательность строки s, являющуюся палиндромом.

Примечание

Из всех различных подпоследовательностей строки «radar» палиндромами являются «a», «d», «r», «aa», «rr», «ada», «rar», «rdr», «raar» и «radar». Лексикографически наибольшей из них является «rr».

B. Инновационно новая простая задача

Перебор *1700

Широко известный в узких кругах белорусский олимпиадник Леша решил немного подзаработать, чтобы купить себе квартиру площадью на один квадратный метр больше. Для этого он хочет составить и провести Super Rated Match (SRM) на сайте Torcoder.com. Но вот беда — суровый торкодерский координатор Иван не принимает ни одной Лешиной задачи, называя каждую обидным словом «боян». И вот после очередной предложенной задачи дело чуть не дошло до взаимной обиды.

Вам предлагается выступить в роли справедливого судьи и определить, действительно ли задача является настолько инновационно новой, как уверен в этом Леша, или все-таки Иван прав, и похожая задача уже встречалась в прошедших SRM.

Вам даны описания Лешиной задачи и задач из архива сайта Torcoder.com. Описание каждой задачи представляет собой последовательность слов. При этом гарантируется, что слова в Лешиной задаче не повторяются, в то время как описание задачи из архива может содержать произвольное количество повторяющихся слов.

«Похожесть» Лешиной задачи на некоторую задачу из архива определим следующим образом. Среди всех перестановок слов предлагаемой задачи выберем ту, которая встречается в задаче из архива в качестве подпоследовательности. Если таких перестановок несколько, выберем ту, число инверсий в которой минимально. Тогда «похожесть» задачи можно записать в виде , где n — количество слов в задаче Леши, а x — количество инверсий в выбранной перестановке. Обратите внимание, что «похожесть» p — положительное число.

Задачу назовем инновационно новой, если среди задач из архива Ивана не найдется ни одной задачи, которая содержит в себе в качестве подпоследовательности некоторую перестановку слов Лешиной задачи.

Рассудите ребят, определив, является ли предлагаемая задача новой, либо указав задачу из архива, которая больше всего напоминает Лешину задачу.

Входные данные

Первая строка содержит число n (1 ≤ n ≤ 4) — количество слов в Лешиной задаче. Во второй строке находятся n слов, разделенных пробелом — краткое описание задачи.

Третья строка содержит число m (1 ≤ m ≤ 10) — количество задач в архиве Torcoder.com. Следующие m строк содержат описания задач в формате «k s1 s2 ... sk», где k (1 ≤ k ≤ 20) — количество слов в задаче, а si — слово задачи.

Слова из описаний всех задач содержат не более 10 строчных латинских букв.

Выходные данные

В случае, если Лешина задача является инновационно новой, выведите строку «Brand new problem!» (без кавычек).

В противном случае в первой строке выведите номер задачи из архива, наиболее похожей на Лешину задачу. Если таких задач несколько, выведите ту, номер которой минимальный. Во второй строке выведите строку из символов [:, символа |, повторенного p раз, и символов :], где p — «похожесть» этой задачи на Лешину. Задачи нумеруются начиная с единицы в том порядке, в котором они заданы во входных данных.

Примечание

Напомним, что количество инверсий — это количество пар слов, которые в перестановке идут не в том порядке, в котором они шли в исходной задаче. Так, например, если исходная задача была «add two numbers», то перестановка «numbers add two» содержит две инверсии — пары слов «numbers» и «add», а также «numbers» и «two».

Последовательность b1,  b2,  ...,  bk называется подпоследовательностью последовательности a1, a2,  ...,  an, если найдется такой набор индексов 1 ≤ i1 <  i2 < ...   < ik ≤ n, что aij  =  bj. Иными словами, последовательность b может быть получена из a путем вычеркивания некоторых элементов.

В первом тесте первая задача содержит в качестве подпоследовательности перестановку «find the palindrome next», в которой количество инверсий равно 1 (слова «palindrome» и «next»).

Во втором тесте ни одна из задач не содержит в себе в качестве подпоследовательности перестановку слов задачи, предлагаемой Лешей.

A. Минимальное число операций

битмаски жадные алгоритмы математика Перебор теория чисел *800

Даны два целых числа \(n\) и \(k\).

За одну операцию вы можете вычесть из \(n\) любую степень \(k\). Формально, за одну операцию вы можете заменить \(n\) на \((n-k^x)\) для любого неотрицательного целого числа \(x\).

Найдите минимальное число операций, необходимое, чтобы сделать \(n\) равным \(0\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите минимальное число операций на отдельной строке.

Примечание

В первом наборе входных данных \(n = 5\) и \(k = 2\). Можно выполнить следующую последовательность операций:

  1. Вычесть \(2^0 = 1\) из \(5\). После этого \(n\) принимает значение \(5 - 1 = 4\).
  2. Вычесть \(2^2 = 4\) из \(4\). После этого \(n\) принимает значение \(4 - 4 = 0\).

Можно доказать, что невозможно сделать \(n\) равным \(0\) меньше чем за \(2\) операции. Значит, \(2\) и есть ответ на задачу.

Во втором наборе входных данных \(n = 3\) и \(k = 5\). Можно выполнить следующую последовательность операций:

  1. Вычесть \(5^0 = 1\) из \(3\). После этого \(n\) принимает значение \(3 - 1 = 2\).
  2. Вычесть \(5^0 = 1\) из \(2\). После этого \(n\) принимает значение \(2 - 1 = 1\).
  3. Вычесть \(5^0 = 1\) из \(1\). После этого \(n\) принимает значение \(1 - 1 = 0\).

Можно доказать, что невозможно сделать \(n\) равным \(0\) меньше чем за \(3\) операции. Значит, \(3\) и есть ответ на задачу.

D. Соедини точки

графы Деревья дп математика Перебор снм *1800

Одним уютным вечером Алиса решила сыграть в классическую игру «Соедини точки», но с подвохом.

Чтобы начать игру, Алиса рисует прямую линию и отмечает на ней \(n\) точек, проиндексированных числами от \(1\) до \(n\). Изначально между точками нет рёбер, так что все они попарно не соединены. Затем Алиса выполняет \(m\) операций следующего типа:

  • Она выбирает три целых числа \(a_i\), \(d_i\) (\(1 \le d_i \le 10\)) и \(k_i\).
  • Затем для точек \(a_i, a_i+d_i, a_i+2d_i, a_i+3d_i, \ldots, a_i+k_i\cdot d_i\) Алиса соединяет ребром каждую пару из них.

Алиса хочет узнать, сколько компонент связности\(^\dagger\) образуют эти точки после выполнения всех \(m\) операций.

\(^\dagger\) Считается, что две точки лежат в одной компоненте связности, если между ними есть путь, использующий несколько (возможно, ноль) промежуточных рёбер и вершин.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le m \le 2 \cdot 10^5\)).

В \(i\)-й из следующих \(m\) строк содержится три целых числа \(a_i\), \(d_i\) и \(k_i\) (\(1 \le a_i \le a_i + k_i\cdot d_i \le n\), \(1 \le d_i \le 10\), \(0 \le k_i \le n\)).

Гарантируется, что сумма значений \(n\), а также сумма значений \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\) каждая.

Выходные данные

Для каждого набора входных данных выведите количество компонент связности.

Примечание

В первом наборе входных данных есть \(n = 10\) точек. Первая операция соединяет точки \(1\), \(3\), \(5\), \(7\) и \(9\). Вторая операция соединяет точки \(2\), \(4\), \(6\), \(8\) и \(10\). В итоге получаем две компоненты связности: \(\{1, 3, 5, 7, 9\}\) и \(\{2, 4, 6, 8, 10\}\).

Во втором наборе входных данных есть \(n = 100\) точек. Единственная операция соединяет точки \(19\), \(21\), \(23\), \(25\) и \(27\). Теперь они образуют одну компоненту связности размера \(5\). Остальные \(95\) точек ни с кем не соединены, так что каждая из них образует отдельную компоненту связности. Значит, ответ равен \(1 + 95 = 96\).

В третьем наборе входных данных есть \(n = 100\) точек. После выполнения всех операций все точки с нечётными номерами от \(1\) до \(79\) образуют одну компоненту связности размера \(40\). Остальные \(60\) точек ни с кем не соединены, так что каждая из них образует отдельную компоненту связности. Значит, ответ равен \(1 + 60 = 61\).

B. Максимизируйте MEX

жадные алгоритмы математика Перебор теория чисел *1200

Вам дан массив \(a\) из \(n\) целых положительных чисел и целое число \(x\). Вы можете выполнить следующую двухшаговую операцию любое число раз (возможно, ноль):

  1. Выбрать индекс \(i\) (\(1 \leq i \leq n\)).
  2. Увеличить \(a_i\) на \(x\) (другими словами, \(a_i := a_i + x\)).

Найдите максимальное значение \(\operatorname{MEX}\) массива \(a\) при оптимальном выполнении операций.

\(\operatorname{MEX}\) (минимальное исключенное) массива — это наименьшее целое неотрицательное число, которого нет в массиве. Например:

  • \(\operatorname{MEX}\) массива \([2,2,1]\) равен \(0\), потому что \(0\) нет в массиве.
  • \(\operatorname{MEX}\) массива \([3,1,0,1]\) равен \(2\), потому что \(0\) и \(1\) есть в массиве, а \(2\) — нет.
  • \(\operatorname{MEX}\) массива \([0,3,1,2]\) равен \(4\), потому что \(0\), \(1\), \(2\) и \(3\) есть в массиве, а \(4\) — нет.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le x \le 10^9\)) — длина массива и число, которое будет использоваться в операции.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — заданный массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальный \(\operatorname{MEX}\) массива \(a\) при оптимальном выполнении операций.

Примечание

В первом наборе входных данных \(\operatorname{MEX}\) массива \(a\) равен \(4\) без выполнения каких-либо операций, что является максимумом.

Во втором наборе входных данных \(\operatorname{MEX}\) массива \(a\) равен \(5\) без выполнения каких-либо операций. Если мы выполним две операции, обе с \(i=1\), то получим массив \(a=[5,3,4,1,0,2]\). Тогда \(\operatorname{MEX}\) массива \(a\) станет \(6\), что является максимумом.

В третьем наборе входных данных \(\operatorname{MEX}\) массива \(a\) без выполнения каких-либо операций равен \(0\), что является максимумом.

E1. Цифровая деревня (простая версия)

бпф графы Деревья дп жадные алгоритмы математика Перебор поиск в глубину и подобное реализация снм Структуры данных *2300

Это простая версия задачи. В трех версиях отличаются ограничения на \(n\) и \(m\). Вы можете совершать взломы только в том случае, если решены все версии задачи.

Пак Чанек устанавливает интернет-связь в деревне Кхунтиен. Деревню можно представить как связный простой граф с \(n\) домами и \(m\) интернет-кабелями, соединяющими дом \(u_i\) и дом \(v_i\), каждый с задержкой \(w_i\).

Существует \(p\) домов, которым требуется интернет. Пак Чанек может установить серверы не более чем в \(k\) домов. Дома, которым нужен интернет, будут подключены к одному из серверов. Однако, поскольку каждый кабель имеет свою задержку, задержка, которую испытывает дом \(s_i\), нуждающийся в интернете, будет равна максимальной задержке кабелей между этим домом и сервером, к которому он подключен.

Для каждого \(k = 1,2,\ldots,n\), помогите Пак Чанеку определить минимальную суммарную задержку, которая может быть достигнута для всех домов, требующих интернет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), \(p\) (\(2 \le n \le 400\); \(n-1 \le m \le 400\); \(1 \le p \le n\)) — количество домов, количество кабелей и количество домов, которым нужен интернет.

Вторая строка каждого набора входных данных содержит \(p\) целых чисел \(s_1, s_2, \ldots, s_p\) (\(1 \le s_i \le n\)) — номера домов, которым нужен интернет. Гарантируется, что все элементы \(s\) различны.

В \(i\)-й из следующих \(m\) строк каждого набора входных данных содержатся три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i < v_i \le n\); \(1 \le w_i \le 10^9\)) — интернет-кабель, соединяющий дом \(u_i\) и дом \(v_i\) с задержкой \(w_i\). Гарантируется, что заданные ребра образуют простой связный граф.

Гарантируется, что сумма \(n^3\) и сумма \(m^3\) не превосходят \(10^8\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел: минимальное общее время ожидания, которое может быть достигнуто для всех домов, нуждающихся в интернете для каждого \(k = 1,2,\ldots,n\).

Примечание

В первом наборе входных данных для \(k=3\) одним из лучших решений является установка серверов в вершинах \(2\), \(6\) и \(8\) и получение следующей задержки:

  • задержка\((2) = 0\)
  • задержка\((5) = \max(3, 5) = 5\)
  • задержка\((6) = 0\)
  • задержка\((8) = 0\)
  • задержка\((9) = \max(2, 4) = 4\)

Таким образом, общая задержка составит \(9\).

D1. Ассасин (простая версия)

Бинарный поиск интерактив Конструктив Перебор реализация *1900

Это простая версия задачи. В этой версии вы можете задать не более \(n+69\) вопросов. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Это интерактивная задача.

На сборах сборной Мексики к IOI существует традиция играть в игру «Ассасин», которая похожа на «Among Us» или «Мафию».

Сегодня \(n\) игроков, пронумерованных от \(1\) до \(n\), будут играть в «Ассасин» со следующими тремя ролями:

  • Рыцарь: Рыцарь — это тот, кто всегда говорит правду.
  • Лжец: Лжец — это тот, кто всегда лжет.
  • Предатель: Предатель — это тот, кого все считают Рыцарем, а на самом деле он Лжец.

Каждому игроку будет назначена своя роль в игре. В игре будет ровно один Предатель, но может быть любое (возможно нулевое) количество Рыцарей и Лжецов.

Вы были ведущим игры, но случайно забыли роли всех игроков, поэтому вам нужно определить игрока, который является Предателем.

Чтобы определить Предателя, вы зададите несколько вопросов. В каждом вопросе вы выбираете двух игроков \(i\) и \(j\) (\(1 \leq i, j \leq n\); \(i \neq j\)) и спрашиваете, считает ли игрок \(i\), что игрок \(j\) — Рыцарь. Результаты этого вопроса приведены в таблице ниже.

РыцарьЛжецПредатель
РыцарьДаНетДа
ЛжецНетДаНет
ПредательНетДа
Значение ячейки в строке \(a\) и столбце \(b\) — это ответ на вопрос, когда \(i\) имеет роль \(a\), а \(j\) — роль \(b\). Например, «Да» в правой верхней ячейке принадлежит строке «Рыцарь» и столбцу «Предатель», поэтому это ответ на вопрос, когда \(i\) — Рыцарь, а \(j\) — Предатель.

Найдите Предателя не более чем за \(n + 69\) вопросов.

Заметьте, что итерактор адаптивен: роли игроков не фиксированы изначально и могут меняться в зависимости от ваших вопросов. Однако гарантируется, что существует такое распределение ролей, которое соответствует всем ранее заданным вопросам в ограничениях этой задачи.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 10^5\)) — количество людей, играющих в игру.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Протокол взаимодействия

Чтобы задать вопрос, выведите строку в следующем формате:

  • «? i j» (\(1 \leq i,j \leq n\); \(i \neq j\)) — спросить игрока \(i\), считает ли он игрока \(j\) Рыцарем.

Жюри выдаст «1», если игрок \(i\) считает игрока \(j\) Рыцарем, и «0» в противном случае.

Когда вы определите, какой игрок является Предателем, выведите строку в следующем формате:

  • «! i» (\(1 \leq i \leq n\)) — Предателем является игрок \(i\).

Обратите внимание, что ответы не учитываются в ограничении в \(n+69\) вопросов.

Если вы сделали некорректный вывод, использовали более \(n+69\) вопросов или неверно определили Предателя, жюри ответит «-1», и вы получите вердикт Неправильный ответ. Получив «-1», ваша программа должна немедленно завершиться. В противном случае вы можете получить произвольный вердикт, поскольку ваше решение продолжит чтение из закрытого потока.

После каждого вывода не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • sys.stdout.flush() в Python;
  • std::io::stdout().flush() в Rust;
  • смотрите документацию для других языков.

Формат взломов

Для взломов используйте следующий формат.

Первая строка должна содержать одно целое число \(t\) — количество наборов входных данных.

Первая строка каждого набора входных данных должна содержать целое число \(n\), за которым следует строка «manual».

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-1 \le a_i \le 1\)) — роли каждого игрока. \(1\) обозначает Рыцаря, \(0\) — Лжеца, а \(-1\) — Предателя. Предатель должен быть ровно один, то есть должен быть ровно один индекс \(i\) такой, что \(a_i=-1\).

В качестве примера приводим взлом, аналогичный примеру из условия:

2
7 manual
0 1 0 -1 0 1 0
4 manual
0 1 -1 0
Примечание

Обратите внимание, что примеры не представляют собой оптимальную стратегию задавания вопросов и приведены только для демонстрации формата взаимодействия. В частности, мы не можем определить, кто из игроков является Предателем, по вопросам, заданным в примерах.

В первом наборе входных данных игроки с индексами \(2\) и \(6\) — Рыцари, игроки с индексами \(1\), \(3\), \(5\) и \(7\) — Лжецы, а Предатель имеет индекс \(4\). Ниже приводится объяснение заданных вопросов:

  • В первом вопросе игрок \(i\) является Лжецом, и игрок \(j\) также Лжец. Ответ — «да», так как Лжецы всегда лгут.
  • Во втором вопросе игрок \(i\) — Лжец, а игрок \(j\) — Рыцарь. Ответ — «нет», так как Лжецы всегда лгут.
  • В третьем вопросе игрок \(i\) — Рыцарь, а игрок \(j\) — Лжец. Ответ — «нет», так как Рыцари всегда говорят правду.
  • В четвертом вопросе игрок \(i\) — Рыцарь, и игрок \(j\) также Рыцарь. Ответ — «да», так как Рыцари всегда говорят правду.
  • В пятом вопросе игрок \(i\) — Предатель, а игрок \(j\) — Лжец. Ответ — «да», так как Предатель всегда лжет.
  • В шестом вопросе игрок \(i\) — Предатель, а игрок \(j\) — Рыцарь. Ответ — «нет», так как Предатель всегда лжет.
  • В седьмом вопросе игрок \(i\) — Лжец, а игрок \(j\) — Предатель. Ответ — «нет», так как Лжецы всегда лгут, и Лжецы думают, что Предатель является Рыцарем.
  • В восьмом вопросе игрок \(i\) — Рыцарь, а игрок \(j\) — Предатель. Ответ — «да», так как Рыцари всегда говорят правду, и Рыцари думают, что Предатель является Рыцарем.

D. Много игр

дп жадные алгоритмы математика Перебор Теория вероятностей *2900

Недавно вы получили редчайший билет в единственное казино в мире, в котором и правда можно что-то заработать, и вы хотите на полную воспользоваться этой возможностью.

Условия в этом казино следующие:

  • Всего в казино есть \(n\) игр.
  • В каждую игру можно сыграть не более одного раза.
  • Каждая игра характеризуется двумя параметрами: \(p_i\) (\(1 \le p_i \le 100\)) и \(w_i\) — вероятность победы в игре в процентах и выигрыш за победу.
  • Если вы проиграете хоть в одной игре, в которую решите сыграть, то вы не получите вообще ничего (даже за выигранные игры).

Вам нужно заранее выбрать набор игр, в которые вы будете играть, таким образом, чтобы максимизировать математическое ожидание вашего выигрыша.

В данном случае, если вы выберите сыграть в игры с индексами \(i_1 < i_2 < \ldots < i_k\), то вы выиграете во все из них с вероятностью \(\prod\limits_{j=1}^k \frac{p_{i_j}}{100}\), и в таком случае ваш выигрыш будет равен \(\sum\limits_{j=1}^k w_{i_j}\).

То есть математическое ожидание вашего выигрыша будет равно \(\left(\prod\limits_{j=1}^k \frac{p_{i_j}}{100}\right) \cdot \left(\sum\limits_{j=1}^k w_{i_j}\right)\).

Чтобы не разориться, владельцы казино ограничили математическое ожидание выигрыша каждой отдельной игры. Таким образом, для всех \(i\) (\(1 \le i \le n\)) выполнено \(w_i \cdot p_i \le 2 \cdot 10^5\).

Ваша задача — найти максимальное математическое ожидание выигрыша, которое можно получить, выбрав какой-то набор игр в казино.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество игр, в которые предлагается сыграть.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(p_i\) и \(w_i\) (\(1 \leq p_i \leq 100\), \(1 \leq w_i, p_i \cdot w_i \leq 2 \cdot 10^5\)) — вероятность победы и размер выигрыша в \(i\)-й игре.

Выходные данные

Выведите одно число — максимальное математическое ожидание выигрыша в казино, которое можно получить, выбрав некоторое подмножество игр.

Ваш ответ будет засчитан, если относительная или абсолютная погрешность не будет превышать \(10^{-6}\). Формально, если \(a\) — ваш ответ, а \(b\) — ответ жюри, то он будет засчитан, если \(\frac{|a-b|}{\max(b, 1)} \le 10^{-6}\).

Примечание

В первом примере можно выбрать первую и третью игры. В таком случае математическое ожидание выигрыша будет равно \(\left(\frac{p_1}{100}\cdot \frac{p_3}{100}\right) \cdot (w_1 + w_3) = \left(\frac{80}{100}\cdot \frac{50}{100}\right) \cdot (80 + 200) = 112\).

Во втором примере можно выбрать первую и вторую игры. В таком случае математическое ожидание выигрыша будет равно \(\left(\frac{p_1}{100}\cdot \frac{p_2}{100}\right) \cdot (w_1 + w_2) = \left(\frac{100}{100}\cdot \frac{100}{100}\right) \cdot (1 + 1) = 2\).

В третьем примере можно выбрать только вторую игру. В таком случае математическое ожидание выигрыша будет равно \(\frac{p_2}{100} \cdot w_2 = \frac{2}{100} \cdot 1000 = 20\).

C. Новая игра

Бинарный поиск жадные алгоритмы Перебор реализация сортировки *1300

Монокарп решил сыграть в новую игру. Для игры используется колода из \(n\) карточек, причем на \(i\)-й карточке записано ровно одно целое число \(a_i\).

В начале игры на первом ходе Монокарп может взять себе любую карточку из колоды. В процессе каждого следующего хода Монокарп может взять себе ровно одну карточку, на которой записано либо такое же число, которое было записано на карточке, взятой на предыдущем ходе, либо число на единицу большее, чем число, которое было записано на карточке, взятой на предыдущем ходе.

Иными словами, если на предыдущем ходе Монокарп взял себе карточку, на которой записано число \(x\), то на текущем ходе он может взять себе либо карточку, на которой записано число \(x\), либо карточку, на которой записано число \(x + 1\). Монокарп может взять любую карточку, которая удовлетворяет этим условиям, независимо от того, где именно она в колоде.

После того как Монокарп взял себе карточку на очередном ходе, она удаляется из колоды.

По правилам игры количество различных чисел, записанных на карточках, которые Монокарп забрал себе, не должно превышать \(k\).

Если после очередного хода Монокарп не может взять карточку, не нарушая описанных правил, игра заканчивается.

Перед вами стоит задача определить максимальное количество карточек, которые Монокарп может забрать себе из колоды в процессе игры, если на первом ходе он может взять любую карточку из колоды.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 200\,000\)) — количество карточек в колоде и максимальное количество различных чисел, которые могут быть записаны на карточках, которые Монокарп забирает себе.

Во второй строке следует последовательность целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^{9}\)), где \(a_i\) равно числу, которое записано на \(i\)-й карточке.

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите максимальное количество карточек, которые Монокарп может забрать себе из колоды в процессе игры, если на первом ходе он может взять любую карточку из колоды.

Примечание

В первом примере Монокарпу нужно взять себе любую из карточек, на которых записано число \(3\). В процессе двух следующих ходов ему нужно взять себе две оставшиеся в колоде карточки, на которых записано число \(3\). В процессе трех следующих ходов ему нужно взять себе три карточки, на которых записано число \(4\). После этого Монокарп не сможет взять ни одной карточки из колоды, при этом у него будет \(6\) карточек.

D. Проверка характеристик

дп математика Перебор реализация Структуры данных *1800

Представьте себе игру, в которой вы играете за персонажа с двумя характеристиками: «Сила» и «Интеллект», которые изначально находятся на нулевом уровне.

В ходе игры вы получите \(m\) очков характеристик, которые позволят вам поднять их уровни — одно очко увеличивает одну из характеристик на один уровень. Но в процессе игры вы также сталкиваетесь с так называемыми «Проверками характеристик»: если ваша соответствующая характеристика достаточно высока, вы пройдете проверку; в противном случае вы провалите проверку.

Потратив некоторое время, вы наконец подготовили список, который содержит записи обо всех очках, которые вы получили, и всех проверках, с которыми столкнулись. И теперь вы задаетесь вопросом: каково максимальное количество проверок характеристик, которые вы можете пройти за одну игру, если будете разумно тратить очки?

Обратите внимание, что вы не можете изменить порядок записей.

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le m \le 5000\); \(m < n \le 2 \cdot 10^6\)) — количество записей в списке и общее количество очков, которые вы получите в ходе игры.

Во второй строке заданы \(n\) целых чисел \(r_1, r_2, \dots, r_n\) (\(-m \le r_i \le m\)), где \(r_i\) кодирует \(i\)-ю запись:

  • Если \(r_i = 0\), то \(i\)-я запись является записью о получении одного очка характеристик. Вы можете потратить его на повышение уровня либо Силы, либо Интеллекта;
  • Если \(r_i > 0\), то это проверка Интеллекта: если ваш уровень Интеллекта больше или равен \(|r_i|\), вы проходите проверку.
  • Если \(r_i < 0\), то это проверка Силы: если ваш уровень Силы больше или равен \(|r_i|\), вы проходите проверку.

Дополнительное ограничение на входные данные: в заданной последовательности \(r_1, r_2, \dots, r_n\) ровно \(m\) элементов, равных \(0\).

Выходные данные

Выведите одно целое число — максимальное количество проверок, которые вы можете пройти.

Примечание

В первом тесте оптимально вложить каждое очко в Силу, поэтому вы провалите \(2\) проверки Интеллекта, но пройдете \(3\) проверки Силы.

Во втором тесте вы провалите обе проверки, так как первое очко характеристик приходит только после проверок.

В третьем тесте одной из оптимальных стратегий является:

  1. вложить первое очко в Интеллект;
  2. вложить второе очко в Силу;
  3. вложить третье очко в Силу;
В результате вы пройдете \(2\) проверки Интеллекта \(r_3\) и \(r_9\) и \(2\) проверки Силы \(r_7\) и \(r_8\).

B. Черные клетки

Бинарный поиск жадные алгоритмы Конструктив Перебор *1300

Задана полоска, разделенная на клетки, клетки пронумерованы слева направо от \(0\) до \(10^{18}\). Изначально все клетки белые.

Вы можете выполнять следующее действие: выбрать две белые клетки \(i\) и \(j\), такие что \(i \ne j\) и \(|i - j| \le k\), и покрасить их в черный цвет.

Задан список \(a\). Все клетки из этого списка должны быть покрашены в чёрный. Также в черный цвет может быть покрашено не более одной клетки, не входящей в этот список. Ваша задача — определить, для какого минимального значения \(k\) это возможно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 < a_i < 10^{18}\); \(a_i < a_{i + 1}\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное значение \(k\), для которого возможно покрасить все заданные клетки.

Примечание

В первом наборе входных данных с параметром \(k=1\) можно покрасить клетки \((1, 2)\).

Во втором наборе входных данных с параметром \(k=1\) можно покрасить клетки \((7, 8)\).

В третьем наборе входных данных с параметром \(k=2\) можно покрасить клетки \((2, 4)\) и \((8, 9)\).

В четвертом наборе входных данных с параметром \(k=3\) можно покрасить клетки \((0, 1)\), \((5, 8)\) и \((10, 13)\).

C. Коллекционные фигурки

Бинарный поиск жадные алгоритмы Конструктив Перебор реализация Структуры данных *1500

Рядом с домом Монокарпа есть магазин, в котором продаются коллекционные фигурки. Скоро выйдет новый набор фигурок; в этом наборе содержится \(n\) фигурок, \(i\)-я фигурка стоит \(i\) монет и доступна для покупки с \(i\)-го дня по \(n\)-й день.

Для каждого из следующих \(n\) дней Монокарп знает, может ли он посетить магазин в этот день.

Каждый раз, когда Монокарп посещает магазин, он может купить любое количество фигурок, которые продаются в магазине (конечно, он не может купить фигурку, которая еще не доступна для покупки). Если Монокарп покупает хотя бы две фигурки в один день, он получает скидку, равную стоимости самой дорогой фигурки, которую он покупает (другими словами, он получает самую дорогую из фигурок, которые он покупает, бесплатно).

Монокарп хочет купить ровно одну \(1\)-ю фигурку, одну \(2\)-ю фигурку, ..., одну \(n\)-ю фигурку из набора. Он не может купить одну и ту же фигурку дважды. Какова минимальная сумма денег, которую он должен потратить?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 4 \cdot 10^5\)) — количество фигурок в наборе (и количество дней);
  • вторая строка содержит строку \(s\) (\(|s| = n\), каждый \(s_i\) равен либо 0, либо 1). Если Монокарп может посетить магазин в \(i\)-й день, то \(s_i\) равно 1; в противном случае \(s_i\) равно 0.

Дополнительные ограничения на входные данные:

  • в каждом наборе входных данных \(s_n\) равно 1, так что Монокарп всегда сможет купить все фигурки в \(n\)-й день;
  • сумма \(n\) по всем наборам входных данных не превышает \(4 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную сумму денег, которую Монокарп должен потратить.

Примечание

В первом наборе входных данных Монокарп покупает \(1\)-ю фигурку в \(1\)-й день и тратит \(1\) монету.

Во втором наборе входных данных Монокарп может купить \(1\)-ю и \(3\)-ю фигурки в \(3\)-й день, \(2\)-ю и \(4\)-ю фигурки в \(4\)-й день, а также \(5\)-ю и \(6\)-ю фигурки в \(6\)-й день. Тогда он потратит \(1+2+5=8\) монет.

В третьем наборе входных данных Монокарп может купить \(2\)-ю и \(3\)-ю фигурки в \(3\)-й день, а все остальные фигурки в \(7\)-й день. Тогда он потратит \(1+2+4+5+6 = 18\) монет.

B. Сталинская сортировка

жадные алгоритмы Перебор *1100

Сталинская сортировка — это юмористический алгоритм сортировки. Вместо траты сил на сортировку элементов должным образом, элементы на неправильных позициях просто удаляются. Сложность алгоритма — \(\mathcal{O}(n)\).

Алгоритм устроен следующим образом: начиная со второго элемента массива, если текущий элемент строго меньше предыдущего элемента (игнорируя те, которые уже были удалены), то удалите текущий элемент. Продолжайте проход по массиву до тех пор, пока он не будет отсортирован по неубыванию. Например, массив \([1, 4, 2, 3, 6, 5, 5, 7, 7]\) превращается в \([1, 4, 6, 7, 7]\) после сталинской сортировки.

Назовём массив уязвимым, если вы можете отсортировать его в невозрастающем порядке, применив сталинскую сортировку к любым его подотрезкам\(^{\text{∗}}\) столько угодно раз.

Для массива \(a\), состоящего из \(n\) целых чисел, определите минимальное количество элементов, которое нужно удалить из массива, чтобы он стал уязвимым.

\(^{\text{∗}}\)Массив \(a\) является подмассивом \(b\), если \(a\) может быть получен из \(b\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2000\)) — длина массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество элементов, которое нужно удалить из массива, чтобы он стал уязвимым.

Примечание

В первом наборе входных данных оптимально будет удалить числа \(3\) и \(9\). Тогда у нас останется \(a = [6, 4, 2, 5, 2]\). Чтобы показать, что этот массив уязвим, мы можем сначала применить сталинскую сортировку к подмассиву \([4, 2, 5]\), чтобы получить \(a = [6, 4, 5, 2]\), а затем применить сталинскую сортировку к подмассиву \([6, 4, 5]\), чтобы получить массив \(a = [6, 2]\), который является невозрастающим.

Во втором наборе входных данных массив уже является невозрастающим, поэтому нам не нужно удалять элементы.

C. Добавьте нули

графы дп жадные алгоритмы Перебор поиск в глубину и подобное Структуры данных *1500

Вам дан массив \(a\), изначально содержащий \(n\) целых чисел. За одну операцию вы можете сделать следующее:

  • Выбрать позицию \(i\) такую, что \(1 < i \le |a|\) и \(a_i = |a| + 1 - i\), где \(|a|\) — текущая длина массива.
  • Добавить \(i - 1\) нулей в конец \(a\).

Какова максимально возможная длина массива \(a\) после выполнения данной операции некоторое количество раз (возможно, нулевое)?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{12}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможную длину \(a\) после выполнения некоторой последовательности операций.

Примечание

В первом наборе входных данных мы можем сначала выбрать \(i = 4\), так как \(a_4 = 5 + 1 - 4 = 2\). После этого массив станет равен \([2, 4, 6, 2, 5, 0, 0, 0]\). Затем мы можем выбрать \(i = 3\), так как \(a_3 = 8 + 1 - 3 = 6\). После этого массив станет равен \([2, 4, 6, 2, 5, 0, 0, 0, 0, 0]\), то есть будет иметь длину \(10\). Можно показать, что нельзя получить более длинный массив.

Во втором наборе входных данных мы можем выбрать \(i=2\), затем \(i=3\), затем \(i=4\). Итоговый массив будет равен \([5, 4, 4, 5, 1, 0, 0, 0, 0, 0, 0]\), и его длина будет равняться \(11\).

E1. Битовая игра (простая версия)

битмаски игры математика Перебор *2800

Это простая версия задачи. Единственное отличие заключается в том, что в этой версии вам нужно вывести победителя игры, а количество камней в каждой кучке фиксировано. Вы можете совершать взломы только если обе версии задачи решены.

Алиса и Боб играют в знакомую игру, в которой они по очереди вынимают камни из \(n\) кучек. Изначально в \(i\)-й куче находится \(x_i\) камней, и она имеет значение \(a_i\). Игрок может забрать \(d\) камней из \(i\)-й кучи тогда и только тогда, когда выполняются оба следующих условия:

  • \(1 \le d \le a_i\), и
  • \(x \, \& \, d = d\), где \(x\) — текущее количество камней в \(i\)-й куче, а \(\&\) обозначает операцию побитового И.

Алиса ходит первой. Игрок, который не может сделать ход, проигрывает.

Вам даны значения \(a_i\) и \(x_i\) для каждой кучи. Определите, кто выиграет в данной игре, если оба игрока будут действовать оптимально.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(1 \le n \le 10^4\)) — количество кучек.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i < 2^{30}\)).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(x_1, x_2, \ldots, x_n\) (\(1 \le x_i < 2^{30}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке имя победителя. Если победила Алиса, выведите «Alice», в противном случае выведите «Bob» (без кавычек).

Примечание

В первом наборе входных данных ни один из игроков не может взять ни одного камня из первой кучки, так как не существует значения \(d\), удовлетворяющего условиям. Из второй кучи в первый ход Алиса может вынуть от \(1\) до \(6\) камней. Независимо от того, какой ход сделает Алиса, Боб сможет вынуть остальные камни в свой ход. После хода Боба Алиса больше не может сделать ни одного хода, поэтому Боб выиграет.

Для второго набора входных данных приведём один пример того, как может проходить игра. Алиса ходит первой и решает взять камни из первой кучи. Она не может взять \(17\) камней, потому что \(17 > 10\), что противоречит первому условию. Она не может взять \(10\) камней, потому что \(25 \, \& \, 10 = 8\), что противоречит второму условию. Один из вариантов — взять \(9\) камней; теперь в куче осталось \(16\) камней. В свой ход Боб решает взять камни из второй кучи; единственный вариант — взять все \(4\). Теперь ни из одной из первых двух куч больше нельзя взять ни одного камня, поэтому Алиса должна взять несколько камней из последней кучи. Она решает взять \(12\) камней, и Боб следует за ней, забирая последние \(2\) камня из этой кучи. Поскольку теперь у Алисы не осталось разрешённых ходов, Боб выигрывает. Можно показать, что независимо от того, какой стратегии придерживается Алиса, Боб всегда сможет выиграть, если будет играть оптимально.

A. Приключения Алисы в "Шахматах"

математика Перебор реализация *900

Алиса пытается встретиться с Красной Королевой за городом! Сейчас Алиса находится в позиции \((0, 0)\), а Красная Королева — в позиции \((a, b)\). Алиса может двигаться только в четырех направлениях (на север, восток, юг или запад).

Более строго, если Алиса находится в точке \((x, y)\), она сделает одно из следующих действий:

  • пойдет на север (обозначается N), перемещаясь в \((x, y+1)\);
  • пойдет на восток (обозначается E), перемещаясь в \((x+1, y)\);
  • пойдет на юг (обозначается S), перемещаясь в \((x, y-1)\); или
  • пойдет на запад (обозначается W), перемещаясь в \((x-1, y)\).

Перемещения Алисы предопределены. У нее есть строка \(s\), представляющая последовательность движений, которые она выполняет слева направо. Как только она достигает конца строки, она бесконечно повторяет ту же последовательность движений.

Можешь ли ты помочь Алисе выяснить, встретится ли она когда-нибудь с Красной Королевой?

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(a\), \(b\) (\(1 \le n\), \(a\), \(b \le 10\)) — длина строки и начальные координаты Красной Королевы.

Вторая строка содержит строку \(s\) длиной \(n\), состоящую только из символов N, E, S или W.

Выходные данные

Для каждого набора входных данных выведите одну строку «YES» или «NO» (без кавычек), обозначающую, встретится ли Алиса в конечном итоге с Красной Королевой.

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes» и «YES» будут признаны положительными ответами.

Примечание

В первом наборе входных данных Алиса следует по пути \((0,0) \xrightarrow[\texttt{N}]{} (0,1) \xrightarrow[\texttt{E}]{} (1,1) \xrightarrow[\texttt{N}]{} (1,2) \xrightarrow[\texttt{E}]{} (2,2)\).

Во втором наборе входных данных Алиса никогда не сможет достичь Красной Королевы.

F. Приключения Алисы в сложении

битмаски дп Перебор реализация *2700

Обратите внимание на необычное ограничение по памяти.

Чеширский Кот задал Алисе загадку: даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) и цель \(m\), существует ли способ вставить \(+\) и \(\times\) в круги выражения \(\)a_1 \circ a_2 \circ \cdots \circ a_n = m\(\) так, чтобы оно стало истинным? Мы следуем обычному порядку операций: \(\times\) выполняется перед \(+\).

Алиса отлично играет в шахматы, но она не сильна в математике. Пожалуйста, помогите ей найти выход из Страны Чудес!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n, m\) (\(1\le n\le 2\cdot 10^5\); \(1\le m\le 10^4\)) — количество целых чисел и цель, соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0\le a_i\le 10^4\)) — элементы массива \(a\).

Сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если возможно достичь цель, вставив \(+\) или \(\times\), и «NO» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Возможные решения для первых четырех наборов входных данных приведены ниже. \(\)\begin{align*} 2 \times 1 + 1 \times 1 \times 2 &= 4 \\ 2 \times 1 + 1 + 1 \times 2 &= 5 \\ 2 \times 1 + 1 + 1 + 2 &= 6 \\ 2 + 1 + 1 + 1 + 2 &= 7 \\ \end{align*}\(\) В пятом наборе входных данных невозможно получить \(8\).

E. Общий генератор

Конструктив математика Перебор теория чисел *2100

Для двух целых чисел \(x\) и \(y\) (\(x,y\ge 2\)) назовём \(x\) генератором \(y\), если и только если \(x\) может быть преобразован в \(y\), выполняя следующую операцию некоторое количество раз (возможно, ноль):

  • Выберите делитель \(d\) (\(d\ge 2\)) числа \(x\), затем увеличьте \(x\) на \(d\).

Например:

  • \(3\) является генератором \(8\), так как мы можем выполнить следующие операции: \(3 \xrightarrow{d = 3} 6 \xrightarrow{d = 2} 8\);
  • \(4\) является генератором \(10\), так как мы можем выполнить следующие операции: \(4 \xrightarrow{d = 4} 8 \xrightarrow{d = 2} 10\);
  • \(5\) не является генератором \(6\), так как мы не можем преобразовать \(5\) в \(6\) с помощью вышеуказанной операции.

Теперь Кевин даст вам массив \(a\), состоящий из \(n\) попарно различных целых чисел (\(a_i\ge 2\)).

Вам нужно найти целое число \(x\ge 2\) такое, что для каждого \(1\le i\le n\), \(x\) является генератором \(a_i\), или определить, что такое число не существует.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(2\le a_i\le 4\cdot 10^5\)) — элементы массива \(a\). Гарантируется, что элементы попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(x\) — найденное вами целое число. Выведите \(-1\), если не существует подходящего \(x\).

Если существует несколько ответов, вы можете вывести любой из них.

Примечание

В первом наборе входных данных, для \(x=2\):

  • \(2\) является генератором \(8\), так как мы можем выполнить следующие операции: \(2 \xrightarrow{d = 2} 4 \xrightarrow{d = 4} 8\);
  • \(2\) является генератором \(9\), так как мы можем выполнить следующие операции: \(2 \xrightarrow{d = 2} 4 \xrightarrow{d = 2} 6 \xrightarrow{d = 3} 9\).
  • \(2\) является генератором \(10\), так как мы можем выполнить следующие операции: \(2 \xrightarrow{d = 2} 4 \xrightarrow{d = 2} 6 \xrightarrow{d = 2} 8 \xrightarrow{d = 2} 10\).

Во втором наборе входных данных можно доказать, что невозможно найти общий генератор данных четырёх целых чисел.

H. Распространение сообщения

битмаски дп Комбинаторика Перебор *3500

Дан неориентированный граф с \(n\) вершинами и \(m\) рёбрами. Каждое ребро соединяет две вершины \((u, v)\) и каждый день появляется с вероятностью \(\frac{p}{q}\).

Изначально в вершине \(1\) есть сообщение. В конце дня вершина имеет сообщение тогда и только тогда, когда сама она или хотя бы одна из смежных с ней вершин имела сообщение в прошлый день. Обратите внимание, что каждый день ребро выбирает своё появление независимо.

Вычислите математическое ожидание количества дней, прежде чем все вершины получат сообщение, по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1\leq n\leq 21\), \(n-1\leq m\leq\frac{n(n-1)}{2}\)).

Затем следуют \(m\) строк, каждая из которых содержит четыре целых числа \(u\), \(v\), \(p\) и \(q\) (\(1\leq u\neq v\leq n\), \(1\leq p<q<998\,244\,353\), \(\gcd(p,q)=1\)) — существует неориентированное ребро между вершинами \(u\) и \(v\), и оно каждый день появляется с вероятностью \(\frac{p}{q}\).

Гарантируется, что в графе нет петель или кратных рёбер и что граф связен, если все рёбра появились.

Дополнительное ограничение на входные данные: Пусть \(g_{i,j}\) — вероятность появления ребра между вершинами \(i\) и \(j\) (\(g_{i,j}=0\), если между \(i\) и \(j\) нет ребра). Гарантируется, что для любого \(S\subseteq\{1,2,\ldots,n\}\) (\(|S|\ge 1\)), \(\) \prod_{i\in S}\left(\prod_{j\in\{1,2,\ldots,n\}\setminus S}(1-g_{i,j})\right)\not\equiv1\pmod{998\,244\,353}. \(\)

Выходные данные

Выведите одно целое число в единственной строке вывода — математическое ожидание количества дней, по модулю \(998\,244\,353\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что точный ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом тесте ответ равен математическому ожиданию количества дней, прежде чем появится единственное ребро в графе, и оно равно \(\frac{1}{0.1}=10\).

Во втором тесте ответ равен \(\frac{20}{9}\), прежде чем он будет взят по модулю \(998\,244\,353\).

В третьем тесте единственная вершина уже имеет сообщение, поэтому ответ равен \(0\).

A. Две задачи

Перебор реализация *1200

Мальчик Валера зарегистрировался на сайте Codeforces под ником Valera и написал свой первый Codeforces Round #300. Он похвастался другу Аркадию, что за свое первое соревнование набрал целых x баллов. Но Аркадий не поверил на слово другу и решил проверить, действительно ли Валера мог показать такой результат.

Он знает, что соревнование под номером 300 было необычным, поскольку в нем было всего две задачи. Соревнование длилось t минут, минуты нумеруются с нуля. Первая задача имела начальную стоимость a баллов, и каждую минуту эта стоимость уменьшалась на da баллов. Вторая задача имела начальную стоимость b баллов, и каждую минуту эта стоимость уменьшалась на db баллов. Таким образом, как только закончится нулевая минута соревнования, первая задача будет стоить a - da баллов, а вторая — b - db баллов. Гарантируется, что в любую минуту соревнования каждая задача имеет неотрицательную стоимость.

Аркадий просит Вас узнать, мог ли Валера получить за это соревнование ровно x баллов. При этом стоит считать, что Валера мог решить любое количество из предложенных задач. Также следует считать, что по каждой задаче Валера сделал не более одной попытки, причем обе задачи он мог отправить на проверку в одну и ту же минуту соревнования, начиная с минуты под номером 0 и заканчивая минутой под номером t - 1. Обращаем внимание, что посылать решение ровно через t минут после начала соревнование Валера не может.

Входные данные

В единственной строке входных данных заданы шесть целых чисел x, t, a, b, da, db (0 ≤ x ≤ 600; 1 ≤ t, a, b, da, db ≤ 300) — результат Валеры, длительность соревнования, начальная стоимость первой задачи, начальная стоимость второй задачи, количество баллов, на которое уменьшается стоимость первой задачи и второй задачи за одну минуту, соответственно.

Гарантируется, что в каждую минуту соревнования каждая задача имеет неотрицательную стоимость, то есть a - i·da ≥ 0 и b - i·db ≥ 0 для всех 0 ≤ i ≤ t - 1.

Выходные данные

Если Валера мог набрать за соревнование ровно x баллов выведите «YES», в противном случае выведите «NO» (без кавычек).

Примечание

В первом примере Валера мог поступить следующим способом: первую задачу сдать на минуте под номером 0, вторую задачу сдать на минуте под номером 2. Тогда за первую задачу оп получит 20 баллов, за вторую 10 баллов, что в сумме дает требуемые 30 баллов.

B. Игра на листочке

Перебор реализация *1300

В один не самый прекрасный вечер Валере было очень скучно. Чтобы немного себя развлечь, Валера нашел следующее занятие.

Он взял белый квадратный клетчатый лист бумаги, состоящий из n × n клеток. После этого он стал закрашивать белые клетки листа одну за другой в черный цвет. Всего он закрасил m различных клеток этого листа. Поскольку у Валеры была какая-то предрасположенность ко всему квадратному, его заинтересовал следующий вопрос — после какого хода впервые на листке можно найти черный квадрат со стороной 3. Однако Валера не знает ответ на этот вопрос и поэтому просит Вашей помощи.

От Вас требуется найти минимальный номер хода, после которого на клетчатом листке образовался хотя бы один квадрат черного цвета со стороной 3 или определить, что такого хода нет.

Входные данные

В первой строке задано два целых числа n и m (1 ≤ n ≤ 1000, 1 ≤ m ≤ min(n·n, 105)) — размер клетчатого листа и количество ходов соответственно.

Далее в m строках задано описание ходов. В i-ой строке находятся два числа xi, yi (1 ≤ xi, yi ≤ n) — номер строки и номер столбца, в котором находится клетка, закрашиваемая на i-ом ходе.

Все числа в строках разделены единичными пробелами. Гарантируется, что все ходы различны. Ходы нумеруются, начиная с 1, в том порядке, в котором они заданы во входных данных. Столбцы клетчатого листа бумаги нумеруются, начиная с 1, слева направо. Строки клетчатого листа бумаги нумеруются, начиная с 1, сверху вниз.

Выходные данные

В единственной строке выведите ответ на задачу — минимальный номер хода, после которого на листе образуется черный квадрат со стороной 3. Если такого хода не существует, выведите -1.

C. ИСТИННАЯ битва

жадные алгоритмы игры Перебор *1100

Алиса и Боб играют в игру. Имеется список из \(n\) булевых значений, каждое из которых равняется либо true, либо false, заданный в виде бинарной строки\(^{\text{∗}}\) длины \(n\) (где \(\texttt{1}\) представляет true, а \(\texttt{0}\) представляет false). Изначально между булевыми значениями нет никаких операторов.

Алиса и Боб будут поочерёдно ставить между булевыми значениями операторы and (обозначающие логическое «И») и операторы or (обозначающие логическое «ИЛИ»), причём Алиса будет ходить первой. Таким образом, игра будет состоять из \(n-1\) ходов, поскольку в списке \(n\) булевых значений. Алиса стремится к тому, чтобы итоговое значение было равно true, а Боб — к тому, чтобы оно было равно false. По данному списку булевых значений определите, выиграет ли Алиса, если оба игрока будут играть оптимально.

Чтобы вычислить итоговое значение выражения, выполняйте следующие шаги, пока выражение не будет состоять только из одного true или false:

  • Если условие содержит операторы and, выберите любой из них и замените окружающее его подвыражение его значением.
  • В противном случае условие содержит операторы or. Выберите любой из них и замените подвыражение, окружающее оператор or, его значением.
Например, выражение true or false and false имеет значение true or (false and false) \(=\) true or false \(=\) true. Можно показать, что значение любого составного выражения определено однозначно.

\(^{\text{∗}}\)Бинарная строка — это строка, состоящая только из символов \(\texttt{0}\) и \(\texttt{1}\)

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — длина строки.

Вторая строка содержит бинарную строку длины \(n\), состоящую из символов \(\texttt{0}\) и \(\texttt{1}\) — список булевых значений.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES« (без кавычек), если Алиса выиграет, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных Алиса может поместить and между двумя булевыми значениями. Игра закончится, так как других мест для размещения операторов нет, и Алиса выиграет, потому что true and true равняется true.

Во втором наборе входных данных Алиса может поместить or между левым false и средним true. Боб может поместить and между средним true и правым false. Выражение false or true and false равняется false.

Обратите внимание, что эти примеры могут не быть оптимальными стратегиями для Алисы или Боба.

B. Пенчик и палочки для сатэ

жадные алгоритмы Перебор сортировки *900

Пенчик и его друг Кохане путешествуют по Индонезии, и следующая их остановка — Сурабая!

В шумных продуктовых лавках Сурабайи Коханэ купил \(n\) палочек для сатэ и выложил их в линию, причем \(i\)-я палочка для сатэ имеет длину \(p_i\). Известно, что \(p\) — перестановка\(^{\text{∗}}\) длины \(n\).

Пенчик хочет отсортировать палочки для сатэ в порядке возрастания их длины, так, чтобы выполнялось \(p_i=i\) для всех \(1\le i\le n\). Для развлечения они придумали правило: они могут менять местами только соседние палочки для сатэ, длина которых отличается ровно на \(1\). Формально, они могут выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выбрать индекс \(i\) (\(1\le i\le n-1\)) такой, что \(|p_{i+1}-p_i|=1\);
  • Поменять местами \(p_i\) и \(p_{i+1}\).

Определите, можно ли отсортировать перестановку \(p\), а значит и палочки для сатэ, выполнив вышеописанную операцию некоторое количество раз.

\(^{\text{∗}}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2\cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2\cdot 10^5\)) — количество палочек для сатэ.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — перестановка \(p\), представляющая длины палочек для сатэ.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если можно отсортировать перестановку \(p\) с помощью данных операций. В противном случае выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных мы можем отсортировать перестановку \(p = [2, 1, 3, 4]\), выполнив операцию над индексом \(1\) (\(|p_2 - p_1| = |1 - 2| = 1\)), в результате чего получим \(p = [1, 2, 3, 4]\).

Для второго набора входных данных можно доказать, что перестановку \(p = [4, 2, 3, 1]\) невозможно отсортировать данными операциями. Для примера приведём последовательности операций, которые можно выполнить над перестановкой:

  • Выбрать \(i = 2\) (\(|p_3 - p_2| = |3 - 2| = 1\)). В результате получится \(p = [4, 3, 2, 1]\).
  • Выбрать \(i = 1\) (\(|p_2 - p_1| = |3 - 4| = 1\)). В результате получится \(p = [3, 4, 2, 1]\).
  • Выбрать \(i = 3\) (\(|p_4 - p_3| = |1 - 2| = 1\)). В результате получится \(p = [3, 4, 1, 2]\).

К сожалению, после выполнения этих операций перестановка \(p\) останется неотсортированной.

B. Сакурако и вода

жадные алгоритмы Конструктив Перебор *900

Во время своего похода с Косукэ, Сакурако и Косукэ нашли долину, которую можно представить в виде матрицы \(n \times n\), где на пересечении \(i\)-й строки и \(j\)-го столбца находится гора высотой \(a_{i,j}\). Если \(a_{i,j} < 0\), то там находится озеро.

Косукэ очень боится воды, поэтому Сакурако нужно помочь ему:

  • С помощью своей магии она может выбрать квадратный участок гор и увеличить высоту каждой горы на главной диагонали этого участка ровно на один.

Более формально, она может выбрать подматрицу с верхним левым углом, расположенным в \((i, j)\), и нижним правым углом в \((p, q)\), так что \(p-i=q-j\). И добавить один к каждому элементу на пересечении \((i + k)\)-й строки и \((j + k)\)-го столбца, для всех \(k\), где \(0 \le k \le p-i\).

Определите минимальное количество раз, которое Сакурако должна использовать свою магию, чтобы все озера исчезли.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных.

Каждый набор входных данных описывается следующим образом:

  • первая строка каждого набора входных данных состоит из одного числа \(n\) (\(1 \le n \le 500\))
  • каждая из следующих \(n\) строк состоит из \(n\) целых чисел, разделенных пробелами, которые соответствуют высоте гор в матрице \(a\) (\(-10^5 \le a_{i,j} \le 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Выходные данные

Для каждого теста выведите минимальное количество раз, которое Сакурако придется использовать свою магию, чтобы все озера исчезли.

E. Сакурако, Косукэ и перестановка

графы жадные алгоритмы математика Перебор поиск в глубину и подобное снм Структуры данных *1400

Экзамены Сакурако закончились, она справилась на отлично. В награду она получила перестановку \(p\). Косукэ был не совсем доволен, потому что он провалил один экзамен и не получил подарок. Он решил пробраться в её комнату (спасибо за код от её замка) и испортить перестановку так, чтобы она стала простой.

Перестановка \(p\) считается простой, если для каждого \(i\) \((1\le i \le n)\) выполняется одно из условий:

  • \(p_i=i\)
  • \(p_{p_i}=i\)

Например, перестановки \([1, 2, 3, 4]\), \([5, 2, 4, 3, 1]\) и \([2, 1]\) являются простыми, а \([2, 3, 1]\) и \([5, 2, 1, 4, 3]\) — нет.

За одну операцию Косукэ может выбрать индексы \(i,j\) \((1\le i,j\le n)\) и поменять местами элементы \(p_i\) и \(p_j\).

Сакурако вот-вот вернется домой. Ваша задача — вычислить минимальное количество операций, которые необходимо выполнить Косукэ, чтобы сделать перестановку простой.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных описывается двумя строками.

  • Первая строка содержит одно целое число \(n\) (\(1\le n \le 10^6\)) — длину перестановки \(p\).
  • Вторая строка содержит \(n\) целых чисел \(p_i\) (\(1\le p_i\le n\)) — элементы перестановки \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Гарантируется, что \(p\) является перестановкой.

Выходные данные

Для каждого набора входных данных выведите минимальное количество операций, которые необходимо выполнить Косукэ, чтобы перестановка стала простой.

Примечание

В первом и втором примерах перестановки уже простые.

В четвёртом примере достаточно поменять местами \(p_2\) и \(p_4\). Таким образом перестановка станет равна \([2, 1, 4, 3]\) за \(1\) операцию.

F. Лень Косукэ

математика Перебор теория чисел *1800

Косукэ слишком ленив. Он не даст вам никакой легенды, только задачу:

Числа Фибоначчи определяются следующим образом:

  • \(f(1)=f(2)=1\).
  • \(f(n)=f(n-1)+f(n-2)\) \((3\le n)\)
Мы обозначаем \(G(n,k)\) как индекс \(n\)-го числа Фибоначчи, которое делится на \(k\). Для заданных \(n\) и \(k\) вычислите \(G(n,k)\).

Поскольку это число может быть слишком большим, выведите его по модулю \(10^9+7\).

Например: \(G(3,2)=9\), потому что \(3\)-е число Фибоначчи, которое делится на \(2\), равно \(34\). \([1,1,\textbf{2},3,5,\textbf{8},13,21,\textbf{34}]\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая и единственная строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 10^{18}\), \(1 \le k \le 10^5\)).

Гарантируется, что сумма \(k\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите единственное число: значение \(G(n,k)\), взятое по модулю \(10^9+7\).

A. Тайна короля Кей-Хосрова

китайская теорема об остатках математика Перебор теория чисел *800

Ходит легенда о мудром царе Кей-Хосрове, который владел огромной сокровищницей, наполненной сокровищами со всей Персидской империи. Однако, чтобы предотвратить кражу и обеспечить сохранность его богатств, хранилище короля Кей-Хосрова было запечатано магическим замком, который можно было открыть, только разгадав загадку.

Загадка состоит из двух чисел \(a\) и \(b\). Чтобы открыть хранилище, претендент должен определить наименьший ключ \(m\), удовлетворяющий двум условиям:

  • \(m\) должно быть больше или равно, по крайней мере, одному из чисел \(a\) и \(b\).
  • Остаток от деления \(m\) на \(a\) должен быть равен остатку от деления \(m\) на \(b\).

Только найдя наименьшее подходящее значение \(m\), можно открыть хранилище и получить доступ к легендарным сокровищам!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(a\) и \(b\) (\(1 \leq a, b \leq 1000\)).

Выходные данные

Для каждого набора входных данных выведите наименьшее целое число \(m\), удовлетворяющее приведенным выше условиям.

Примечание

В первом наборе входных данных вы можете видеть, что:

  • \(4 \bmod 4 = 0\), но \(4 \bmod 6 = 4\)
  • \(5 \bmod 4 = 1\), но \(5 \bmod 6 = 5\)
  • \(6 \bmod 4 = 2\), но \(6 \bmod 6 = 0\)
  • \(7 \bmod 4 = 3\), но \(7 \bmod 6 = 1\)
  • \(8 \bmod 4 = 0\), но \(8 \bmod 6 = 2\)
  • \(9 \bmod 4 = 1\), но \(9 \bmod 6 = 3\)
  • \(10 \bmod 4 = 2\), но \(10 \bmod 6 = 4\)
  • \(11 \bmod 4 = 3\), но \(11 \bmod 6 = 5\)

Таким образом, ни одно целое число меньше \(12\) не удовлетворяет условиям.

H. Райан против Райанех

дп Перебор поиск в глубину и подобное теория чисел *3300

Райан прилагает последние усилия, чтобы завоевать сердце Рейхане, утверждая, что он сильнее Райанех (то есть компьютера на персидском). Чтобы проверить это, Рейхане обращается за помощью к Хорезми. Хорезми объясняет, что множество является целочисленно линейно независимым, если ни один элемент в наборе не может быть получен как целочисленная линейная комбинация остальных. Райану задается набор целых чисел, и он должен найти одно из максимально возможных целочисленных линейно независимых подмножеств.

Обратите внимание, что один элемент всегда является целочисленным линейно независимым подмножеством.

Целочисленная линейная комбинация чисел \(a_1, \ldots, a_k\) — это любая сумма вида \(c_1 \cdot a_1 + c_2 \cdot a_2 + \ldots + c_k \cdot a_k\) где \(c_1, c_2, \ldots, c_k\) — целые числа (которые могут быть нулевыми, положительными или отрицательными).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 10^5\)) — размер множества. Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^5\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^6\).

Выходные данные

В первой строке каждого набора входных данных выведите размер наибольшего целочисленного линейно независимого подмножества.

В следующей строке выведите одно такое подмножество. Если существует несколько ответов, выведите любой из них.

Примечание

В 1 наборе входных данных: \(\{4, 6\}\) — это целочисленное линейно независимое подмножество. Можно доказать, что не существует целочисленного линейно независимого подмножества, состоящего по крайней мере \(3\) из элементов.

Во 2 наборе входных данных: \(\{35, 21, 30\}\) — это целочисленное линейно независимое подмножество, поскольку никакая целочисленная линейная комбинация любых двух элементов не может создать третий. Не существует целочисленного линейно независимого подмножества, содержащего по крайней мере \(4\) элемента.

В 3 наборе входных данных: \(\{2, 3, 6\}\) не является целочисленным линейно независимым подмножеством, поскольку \(6\) может быть записано как \(6 \cdot 2 + (-2) \cdot 3\), что является целочисленной линейной комбинацией из \(\{2, 3\}\).

E. Монстр

Бинарный поиск жадные алгоритмы Конструктив математика Перебор реализация Тернарный поиск *2300

Мужик, этот босс в Genshin такой сложный. Хорошо, что у них есть пополнение на \(6\) монет всего за \( \$4.99\). Мне следует быть осторожнее и не тратить больше, чем нужно, иначе мама меня поймает...

Вы сражаетесь с монстром со здоровьем \(z\), используя оружие с уроном \(d\). Изначально \(d=0\). Вы можете выполнять следующие действия.

  • Увеличить \(d\) — урон вашего оружия на \(1\), потратив \(x\) монет.
  • Атаковать монстра, нанеся ему \(d\) урона, потратив \(y\) монет.

Вы не можете выполнять первую операцию более \(k\) раз подряд.

Найдите минимальное количество монет, необходимое для того, чтобы победить монстра, нанеся ему хотя бы \(z\) урона.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит 4 целых числа \(x\), \(y\), \(z\) и \(k\) (\(1\leq x, y, z, k\leq 10^8\)) — стоимость первой операции, стоимость второй операции, здоровье монстра и ограничение на первую операцию.

Выходные данные

Для каждого набора входных данных выведите минимальное количество монет, необходимое для победы над монстром.

Примечание

В первом наборе входных данных \(x = 2\), \(y = 3\), \(z = 5\) и \(k = 5\). Вот стратегия, которая обеспечивает наименьшую возможную стоимость в \(12\) монет:

  • Увеличить урон на \(1\), потратив \(2\) монеты.
  • Увеличить урон на \(1\), потратив \(2\) монеты.
  • Увеличить урон на \(1\), потратив \(2\) монеты.
  • Атаковать монстра, нанеся ему \(3\) урона, потратив \(3\) монеты.
  • Атаковать монстра, нанеся ему \(3\) урона, потратив \(3\) монеты.

Вы наносите в общей сложности \(3 + 3 = 6\) урона, побеждая монстра, который имеет \(5\) здоровья. Суммарное количество монет, которое вы потратите, составляет \(2 + 2 + 2 + 3 + 3 = 12\) монет.

Во втором наборе входных данных \(x = 10\), \(y = 20\), \(z = 40\) и \(k = 5\). Вот стратегия, которая позволяет достичь наименьшей возможной стоимости в \(190\) монет:

  • Увеличить урон на \(5\), что стоит \(5\cdot x\) = \(50\) монет.
  • Атаковать монстра один раз, нанеся ему \(5\) урона, потратив \(20\) монет.
  • Увеличить урон на \(2\), потратив \(2\cdot x\) = \(20\) монет.
  • Атаковать монстра \(5\) раз, нанеся \(5\cdot 7 = 35\) урона, потратив \(5\cdot y\) = \(100\) монет.

Всего вы нанесли \(5 + 35 = 40\) урона, победив монстра, у которого ровно \(40\) здоровья. Вы потратили \(50 + 20 + 20 + 100 = 190\) монет.

F. Операции с деревом

Бинарный поиск Деревья дп Перебор поиск в глубину и подобное *2500

Это многое говорит об обществе.

Однажды черепаха подарила вам дерево с \(n\) вершинами и корнем в вершине \(x\). Вершина \(i\) имеет начальное целое неотрицательное значение \(a_i\).

Вы хотите сделать так, чтобы значения всех вершин стали равны \(0\). Для этого вы выполните ряд операций над деревом, где каждая операция будет выполняться над определенной вершиной. Определим операцию над вершиной \(u\) как выбор одной вершины в поддереве\(^{\text{∗}}\) \(u\), и увеличение или уменьшение ее значения на \(1\). Порядок выполнения операций над вершинами следующий:

  • Для \(1 \le i \le n\), \(i\)-я операция будет выполнена над вершиной \(i\).
  • Для \(i > n\), \(i\)-я операция будет выполнена над той же вершиной, что и операция \(i - n\).

Более формально, \(i\)-я операция будет выполнена над \((((i - 1) \bmod n) + 1)\)-й вершиной.\(^{\text{†}}\)

Обратите внимание, что нельзя пропускать операции; то есть нельзя выполнить \(i\)-ю операцию, не выполнив сначала операции \(1, 2, \ldots, i - 1\).

Найдите минимальное количество операций, которое необходимо выполнить, чтобы значения всех вершин стали равны \(0\), при условии, что вы выполняете операции оптимально. Если после конечного числа операций невозможно сделать значения всех вершин равными \(0\), выведите \(-1\).

\(^{\text{∗}}\)Поддерево вершины \(u\) — это множество вершин, для которых \(u\) лежит на кратчайшем пути от этой вершины до корня, включая саму \(u\)

\(^{\text{†}}\)Здесь \(a \bmod b\) обозначает остаток от деления \(a\) на \(b\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 2000\), \(1 \le x \le n\)) — количество вершин и корень дерева.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — начальное значение каждой вершины.

В следующих \(n - 1\) строках каждого набора входных данных содержится по два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)), представляющих собой ненаправленное ребро из \(u\) в \(v\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число, обозначающее минимальное количество операций, необходимое для того, чтобы сделать значения всех вершин равными \(0\). Если невозможно сделать значения всех вершин равными \(0\), выведите \(-1\).

Примечание

В первом наборе входных данных вы можете выполнить следующую последовательность операций:

  • На \(1\) операции уменьшите значение вершины \(1\). Эта операция корректна, потому что \((((1 - 1) \bmod n) + 1) = 1\), и вершина \(1\) находится в поддереве вершины \(1\).
  • На \(2\) операции уменьшите значение вершины \(2\). Эта операция корректна, потому что \((((2 - 1) \bmod n) + 1) = 2\), и вершина \(2\) находится в поддереве вершины \(2\).
  • На \(3\) операции уменьшите значение вершины \(2\). Эта операция корректна, потому что \((((3 - 1) \bmod n) + 1) = 1\), а вершина \(2\) находится в поддереве вершины \(1\).

C. Аня и 1100

Перебор реализация *1100

Перебирая вещи в дальнем ящике, Аня нашла красивую строку \(s\), состоящую только из нулей и единиц.

Теперь она хочет сделать её ещё красивее, выполнив над ней \(q\) операций.

Каждая операция характеризуется двумя целыми числами \(i\) (\(1 \le i \le |s|\)) и \(v\) (\(v \in \{0, 1\}\)) и означает, что \(i\)-му символу строки присваивается значение \(v\) (то есть осуществляется присваивание \(s_i = v\)).

Но Аня любит число \(1100\), поэтому после каждого запроса просит вас сообщить ей, присутствует ли в её строке подстрока «1100» (то есть существует такое \(1 \le i \le |s| - 3\), что \(s_{i}s_{i + 1}s_{i + 2}s_{i + 3} = \texttt{1100}\)).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка набора тестовых данных содержит строку \(s\) (\(1 \leq |s| \leq 2 \cdot 10^5\)), состоящую только из символов «0» и «1». Здесь \(|s|\) обозначает длину строки \(s\).

Следующая строка содержит целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество запросов.

Следующие \(q\) строк содержат по два целых числа \(i\) (\(1 \leq i \leq |s|\)) и \(v\) (\(v \in \{0, 1\}\)), характеризующих запрос.

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превышает \(2 \cdot 10^5\). Также гарантируется, что сумма \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите «YES», если «1100» присутствует в строке Ани, иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

D. Я люблю 1543

матрицы Перебор реализация *1300

Однажды утром Поликарп проснулся и понял: \(1543\) — самое любимое число в его жизни.

Первым же, что Поликарп в этот день увидел, как только открыл глаза, был большой настенный ковёр из \(n\) на \(m\) клеток, \(n\) и \(m\) — чётные. Каждая клетка содержит одну из цифр от \(0\) до \(9\).

Поликарпу стало интересно, сколько всего раз встретится запись числа \(1543\) во всех слоях\(^{\text{∗}}\) ковра при его обходе по часовой стрелке.

\(^{\text{∗}}\)Первым слоем ковра размеров \(n \times m\) называют замкнутую ленту длиной \(2 \cdot (n+m-2)\) и толщиной в \(1\) элемент, ограничивающую его внешнюю часть. Каждый следующий слой определяется как первый слой ковра, полученного путём удаления всех предыдущих слоёв из исходного ковра.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит пару чисел \(n\) и \(m\) (\(2 \leq n, m \leq 10^3\), \(n, m\) — чётные).

После этого следует \(n\) строк длины \(m\), состоящих из цифр от \(0\) до \(9\) — описание ковра.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора выведите единственное число — суммарное количество раз, которое \(1543\) встречается во всех слоях ковра в порядке обхода по часовой стрелке.

Примечание
Вхождения \(1543\) в седьмом примере. Разные слои раскрашены в разные цвета.

B. Перехваченные входные данные

Перебор реализация *800

Чтобы помочь вам подготовиться к предстоящему контесту на Codeforces, Ситлали задала задачу на матрицу и пытается передать вам матрицу размером \(n\) на \(m\) через ваш поток ввода. В частности, ваш поток ввода должен содержать следующее:

  • Первая строка содержит два целых числа \(n\) и \(m\) — размеры сетки.
  • Следующие \(n\) строк содержат по \(m\) целых чисел — значения сетки.

Однако кто-то перехватил ваш поток ввода, перемешал все данные и поместил их в одну строку! Теперь есть \(k\) целых чисел, все в одной строке, и вы не знаете, что означало каждое целое число. Вместо того чтобы просить Ситлали повторно отправить ввод, вы решаете самостоятельно определить значения \(n\) и \(m\).

Выведите любое возможное значение \(n\) и \(m\), которые могла предоставить Ситлали.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(k\) (\(3 \leq k \leq 2 \cdot 10^5\)) — общее количество входных данных в вашем потоке ввода.

Следующая строка каждого набора входных данных содержит \(k\) целых чисел \(a_1, a_2, \ldots, a_k\) (\(1 \leq a_i \leq k\)) — перемешанные входные данные вашего потока ввода. Гарантируется, что \(n\) и \(m\) содержатся среди \(k\) целых чисел.

Гарантируется, что сумма \(k\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два целых числа, одно возможное значение \(n\) и \(m\). Если существует несколько возможных ответов, выведите любой.

Примечание

В первом наборе входных данных первоначальный ввод мог быть следующим:

1 1

2

Во втором наборе входных данных первоначальный ввод мог быть следующим:

3 3

4 5 6

7 8 9

9 10 11

B. Make It Equal

Бинарный поиск жадные алгоритмы математика Перебор *2100

You are given an integer array \(a\) of size \(n\). The elements of the array are numbered from \(1\) to \(n\).

You can perform the following operation any number of times (possibly, zero): choose an index \(i\) from \(1\) to \(n\); decrease \(a_i\) by \(2\) and increase \(a_{(i \bmod n) + 1}\) by \(1\).

After you perform the operations, all elements of the array should be non-negative equal integers.

Your task is to calculate the minimum number of operations you have to perform.

Input

The first line contains a single integer \(t\) (\(1 \le t \le 10^4\)) — the number of test cases.

The first line of each test case contains a single integer \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

The second line of each test case contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Additional constraint on the input: the sum of \(n\) over all test cases doesn't exceed \(2 \cdot 10^5\).

Output

For each test case, print a single integer — the minimum number of operations you have to perform. If it is impossible to make all elements of the array equal, print -1.

K. Grid Walk

дп жадные алгоритмы математика Перебор теория чисел *2100

You have an \(n \times n\) grid and two integers \(a\) and \(b\). Both the rows and the columns are numbered from \(1\) to \(n\). Let's denote the cell at the intersection of the \(i\)-th row and the \(j\)-th column as \((i, j)\).

You are standing in the cell \((1, 1)\) and want to move into the cell \((n, n)\).

Suppose you are in the cell \((i, j)\); in one step, you can move either into the cell \((i, j + 1)\) or into the cell \((i + 1, j)\) if the corresponding cells exist.

Let's define the cost of the cell \((i, j)\) as \(c(i, j) = \gcd(i, a) + \gcd(j, b)\) (here, \(\gcd(x,y)\) denotes the greatest common divisor of \(x\) and \(y\)). The cost of the route from \((1, 1)\) to \((n, n)\) is the sum of costs of the visited cells (including the starting cell and the finishing cell).

Find the route with minimum possible cost and print its cost.

Input

The only line contains three integers \(n\), \(a\), and \(b\) (\(2 \le n \le 10^6\); \(1 \le a, b \le 10^6\)).

Output

Print one integer — the cost of the cheapest route from \((1, 1)\) to \((n, n)\).

Note

The first example is described in the picture above.

L. Bridge Renovation

дп жадные алгоритмы математика Перебор *1400

Recently, Monocarp started working as a director of a park located near his house. The park is quite large, so it even has a small river splitting it into several zones. Several bridges are built across this river. Three of these bridges are especially old and need to be repaired.

All three bridges have the same length but differ in width. Their widths are \(18\), \(21\) and \(25\) units, respectively.

During the park renovation process, Monocarp has to replace the old planks that served as the surface of the bridges with the new ones.

Planks are sold with a standard length of \(60\) units. Monocarp already knows that he needs \(n\) planks for each bridge. But since the bridges have different widths, he needs \(n\) planks of length \(18\) for the first bridge, \(n\) planks of length \(21\) for the second one, and \(n\) planks of length \(25\) for the last one.

Workers in charge of renovation have no problem with cutting planks into parts but refuse to join planks, since it creates weak spots and looks ugly.

Monocarp wants to buy as few planks as possible but struggles to calculate the required number of planks. Can you help him?

Input

The first and only line contains a single integer \(n\) (\(1 \le n \le 1000\)) — the number of planks required for each of the three bridges.

Output

Print a single integer — the minimum number of planks of standard length (\(60\) units) Monocarp needs to cover all three bridges if the planks can be cut into parts.

Note

In the first example, it is possible to cut one plank of length \(60\) into three planks with lengths \(25\), \(18\) and \(17\), and cut another plank of length \(60\) into two planks with lengths \(39\) and \(21\). That way, Monocarp will have all the required planks.

C1. Shohag любит XOR (простая версия)

битмаски математика Перебор теория чисел *1200

Это простая версия задачи. Различия между двумя версиями выделены жирным шрифтом. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

У Shohag есть два целых числа \(x\) и \(m\). Помогите ему подсчитать количество целых чисел \(1 \le y \le m\) таких, что \(\mathbf{x \neq y}\) и \(x \oplus y\) является делителем\(^{\text{∗}}\) либо \(x\), либо \(y\), либо сразу обоих чисел. Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

\(^{\text{∗}}\)Число \(b\) является делителем числа \(a\), если существует целое число \(c\) такое, что \(a = b \cdot c\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(x\) и \(m\) (\(1 \le x \le 10^6\), \(1 \le m \le 10^{18}\)).

Гарантируется, что сумма \(x\) по всем наборам входных данных не превосходит \(10^7\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество подходящих \(y\).

Примечание

В первом наборе входных данных, для \(x = 6\) существует \(3\) допустимых значения для \(y\) среди целых чисел от \(1\) до \(m = 9\) — числа \(4\), \(5\) и \(7\).

  • \(y = 4\) подходит, потому что \(x \oplus y = 6 \oplus 4 = 2\) и \(2\) является делителем как \(x = 6\), так и \(y = 4\).
  • \(y = 5\) подходит, потому что \(x \oplus y = 6 \oplus 5 = 3\) и \(3\) является делителем \(x = 6\).
  • \(y = 7\) подходит, потому что \(x \oplus y = 6 \oplus 7 = 1\) и \(1\) является делителем как \(x = 6\), так и \(y = 7\).

Во втором наборе входных данных для \(x = 5\) существует \(2\) допустимых значения для \(y\) среди целых чисел от \(1\) до \(m = 7\) — числа \(4\) и \(6\).

  • \(y = 4\) подходит, потому что \(x \oplus y = 5 \oplus 4 = 1\) и \(1\) является делителем как \(x = 5\), так и \(y = 4\).
  • \(y = 6\) подходит, потому что \(x \oplus y = 5 \oplus 6 = 3\) и \(3\) является делителем \(y = 6\).

C2. Shohag любит XOR (сложная версия)

битмаски математика Перебор теория чисел *1800

Это сложная версия задачи. Различия между двумя версиями выделены жирным шрифтом. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

У Shohag есть два целых числа \(x\) и \(m\). Помогите ему подсчитать количество целых чисел \(1 \le y \le m\) таких, что \(x \oplus y\) делится\(^{\text{∗}}\) либо на \(x\), либо на \(y\), либо сразу на оба числа. Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

\(^{\text{∗}}\)Число \(a\) делится на число \(b\), если существует целое число \(c\) такое, что \(a = b \cdot c\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(x\) и \(m\) (\(1 \le x \le 10^6\), \(1 \le m \le 10^{18}\)).

Гарантируется, что сумма \(x\) по всем наборам входных данных не превосходит \(10^7\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество подходящих \(y\).

Примечание

В первом наборе входных данных для \(x = 7\) существует \(3\) допустимых значения \(y\) среди целых чисел от \(1\) до \(m = 10\) — числа \(1\), \(7\) и \(9\).

  • \(y = 1\) подходит, потому что \(x \oplus y = 7 \oplus 1 = 6\) и \(6\) делится на \(y = 1\).
  • \(y = 7\) подходит, потому что \(x \oplus y = 7 \oplus 7 = 0\) и \(0\) делится как на \(x = 7\), так и на \(y = 7\).
  • \(y = 9\) подходит, потому что \(x \oplus y = 7 \oplus 9 = 14\) и \(14\) делится на \(x = 7\).

D. Непростое дерево

Деревья жадные алгоритмы Конструктив Перебор поиск в глубину и подобное теория чисел *1900

Дано дерево с \(n\) вершинами.

Вам необходимо создать массив \(a_1, a_2, \ldots, a_n\) длины \(n\), состоящий из различных целых чисел от \(1\) до \(2 \cdot n\). При этом для каждого ребра \(u_i \leftrightarrow v_i\) дерева значение \(|a_{u_i} - a_{v_i}|\) не должно быть простым числом.

Найдите любой массив, удовлетворяющий этим условиям, либо сообщите, что такого массива нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

В следующих \(n - 1\) строках каждого набора входных данных заданы ребра дерева: по одному в строке. В \(i\)-й строке заданы два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \neq v_i\)), обозначающих ребро между вершинами \(u_i\) и \(v_i\).

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных, если массив, удовлетворяющий условиям, существует, выведите его элементы \(a_1, a_2, \ldots, a_n\). Иначе, выведите единственное число \(-1\).

Примечание

Ниже представлены возможные ответы. Вместо номеров вершин в них записаны соответствующие элементы массива \(a\).

Изображение дерева в первом наборе
Изображение дерева во втором наборе

B. Bowling Frame

Бинарный поиск математика Перебор *1200

Bowling is a national sport in Taiwan; everyone in the country plays the sport on a daily basis since their youth. Naturally, there are a lot of bowling alleys all over the country, and the competition between them is as intense as you can imagine.

Maw-Shang owns one such bowling alley. To stand out from other competitors in the industry and draw attention from customers, he decided to hold a special event every month that features various unorthodox bowling rules. For the event this month, he came up with a new version of the game called X-pin bowling. In the traditional \(10\)-pin bowling game, a frame is built out of ten bowling pins forming a triangular shape of side length four. The pin closest to the player forms the first row, and the two pins behind it form the second row, and so on. Unlike the standard version, the game of \(X\)-pin bowling Maw-Shang designed allows a much larger number of pins that form a larger frame. The following figure shows a standard \(10\)-pin frame on the left, and on the right it shows a \(21\)-pin frame that forms a triangular shape of side length six which is allowed in the game of \(X\)-pin bowling.

Being the national sport, the government of Taiwan strictly regulates and standardizes the manufacturing of bowling pins. There are two types of bowling pins allowed, one in black and the other in white, and the bowling alley Maw-Shang owns has \(w\) white pins and \(b\) black pins. To make this new game exciting for the customers, Maw-Shang wants to build the largest possible frame from these \(w+b\) pins. However, even though he is okay with using both colors in building the frame, for aesthetic reasons, Maw-Shang still wants the colors of the pins on the same row to be identical. For example, the following figure shows two possible frames of side length six, but only the left one is acceptable to Maw-Shang since the other one has white and black pins mixed in the third row.

The monthly special event is happening in just a few hours. Please help Maw-Shang calculate the side length of the largest frame that he can build from his \(w+b\) pins!

Input

The first line of the input contains a single integer \(t\), the number of test cases. Each of the following \(t\) lines contains two integers \(w\) and \(b\), the number of white and black pins, respectively.

  • \(1 \leq t \leq 100\)
  • \(0 \leq w, b \leq 10^9\)
Output

For each test case, output in a single line the side length \(k\) of the largest pin satisfying Maw-Shang's requirement you can build with the given pins.

D. Drunken Maze

графы кратчайшие пути Перебор поиск в глубину и подобное *1700

Image generated by ChatGPT 4o.

You are given a two-dimensional maze with a start and end position. Your task is to find the fastest way to get from the start to the end position. The fastest way is to make the minimum number of steps where one step is going left, right, up, or down. Of course, you cannot walk through walls.

There is, however, a catch: If you make more than three steps in the same direction, you lose balance and fall down. Therefore, it is forbidden to make more than three consecutive steps in the same direction. It is okay to walk three times to the right, then one step to the left, and then again three steps to the right. This has the same effect as taking five steps to the right, but is slower.

Input

The first line contains two numbers \(n\) and \(m\), which are the height and width of the maze. This is followed by an ASCII-representation of the maze where \(\tt{\#}\) is a wall, \(\tt{.}\) is an empty space, and \(\tt S\) and \(\tt T\) are the start and end positions.

  • \(12 \leq n\times m \leq 200000\).
  • \(3\leq n,m \leq 10000\).
  • Characters are only \(\tt{.\#ST}\) and there is exactly one \(\tt{S}\) and one \(\tt{T}\).
  • The outer borders are only \(\tt{\#}\) (walls).
Output

The minimum number of steps to reach the end position from the start position or -1 if that is impossible.

F. Segmentation Folds

Перебор поиск в глубину и подобное теория чисел *2400

Peter loves folding segments. There is a segment on a number line occupying the interval \([\ell, r]\). Since it is the prime time for folding the segments, Peter decides to fold the segment carefully. In each step, he chooses one of the two following operations whenever possible:

  1. Operation \(\tt{LTR}\): he folds the segment from left to right, where \(\ell\) coincides with a point \(x\) (\(\ell < x \le r\)) such that \(\ell+x\) is a prime number\(^{\text{∗}}\). When Peter chooses this operation, he always chooses the largest possible value \(x\). Note that the segment occupies the interval \([\frac{1}{2}(\ell+x), r]\) afterwards.
  2. Operation \(\tt{RTL}\): he folds the segment from right to left, where \(r\) coincides with a point \(x\) (\(\ell \le x < r\)) such that \(r+x\) is a prime number. When Peter chooses this operation, he always chooses the smallest possible value \(x\). Note that the segment occupies the interval \([\ell, \frac{1}{2}(r+x)]\) afterwards.

A folding sequence refers to a sequence of operations specified above. Peter wants to fold the segment several times, resulting in the shortest possible interval whose length that cannot be further reduced. The length of an interval \([\ell, r]\) is defined naturally to be \(r-\ell\). Let's consider the following example. Suppose that we are folding a segment initially occupying the interval \([1, 30]\). There are three folding sequences that lead to the shortest possible resulting interval, as shown in the following figure.

Please help Peter determine the number of folding sequences such that the resulting interval has a shortest possible length. Output the number modulo \(998244353\).

\(^{\text{∗}}\)Recall that an integer \(p>1\) is a prime number if there do not exist integers \(a, b>1\) such that \(p=ab\).

Input

The first line contains an integer \(t\), denoting the number of test cases. In each of the following \(t\) lines, there are two integers \(\ell\) and \(r\).

  • \(1 \le t \le 10\)
  • \(1 \le \ell < r \le 10^{12}\)
  • \(r - \ell \le 10^5\)
Output

For each test case, please output a line denoting the number of ways to fold the given segment such that the resulting segment has the shortest possible length, modulo \(998244353\).

K. Trophic Balance Species

Бинарный поиск графы Перебор поиск в глубину и подобное *3100

Image generated by ChatGPT 4o.

In an interdisciplinary collaboration, an ecosystem scientist and a computer scientist join forces to analyze the structure of a complex ecosystem using computational methods. The ecosystem scientist models the ecosystem as a directed graph \(D = (V, A)\), where each species is represented by a node \(v \in V\), and each feeding relationship is represented as a directed edge \((x, y) \in A\) from prey \(x\) to predator \(y\). This graph structure allows them to simulate the flow of energy throughout the ecosystem from one species to another.

Two essential features of the ecosystem are defined:

  • Independent Trophic Group: A set \(S\) of animal species is classified as an independent trophic group if no species \(x \in S\) can reach another species \(y \in S\) (for some \(y \ne x\)) through a series of directed feeding relationships, meaning there is no directed path in \(D\) from \(x\) to \(y\).

  • Trophic Balance Species: A species is termed a trophic balance species if it has a nearly equal number of species that affect it as directly or indirectly predators (species it can reach via a directed path in \(D\), excluding itself) and species that affect it as directly or indirectly prey (species that can reach it via a directed path in \(D\), excluding itself). Specifically, trophic balance species are those for which the absolute difference between the above two numbers is minimum among all species in the ecosystem.

Consider an ecosystem with \(n = 4\) species and \(m = 3\) feeding relationships:

  • Species 1: Grass (Node 1)
  • Species 2: Rabbits (Node 2)
  • Species 3: Foxes (Node 3)
  • Species 4: Hawks (Node 4)

The directed edges representing the feeding relationships are as follows:

  • \((1, 2)\): Grass is eaten by Rabbits.
  • \((2, 3)\): Rabbits are eaten by Foxes.
  • \((2, 4)\): Rabbits are also eaten by Hawks.

Now, consider the set \(S=\{3,4\}\) (Foxes and Hawks). There are no directed paths between Foxes (Node 3) and Hawks (Node 4); Foxes cannot reach Hawks, and Hawks cannot reach Foxes through any directed paths. Therefore, this set qualifies as an independent trophic group.

Examination of Species

  • Species 1 (Grass):
    • Can reach: 3 (Rabbits, Foxes, and Hawks)
    • Can be reached by: 0 (None)
    • Absolute difference: \(|3 - 0| = 3\)

  • Species 2 (Rabbits):

    • Can reach: 2 (Foxes and Hawks)
    • Can be reached by: 1 (Grass)
    • Absolute difference: \(|2 - 1| = 1\)
  • Species 3 (Foxes):

    • Can reach: 0 (None)
    • Can be reached by: 2 (Grass and Rabbits)
    • Absolute difference: \(|0-2| = 2\)
  • Species 4 (Hawks):

    • Can reach: 0 (None)
    • Can be reached by: 2 (Grass and Rabbits)
    • Absolute difference: \(|0-2| = 2\)

Among these species, Rabbits have the smallest absolute difference of \(1\), indicating that they are a trophic balance species within the ecosystem.

It is known that any independent trophic group in the ecosystem has a size of at most \(k\). The task is to find the set of all trophic balance species in the ecosystem.

Input

The first line contains exactly two integers \(n\) and \(m\), where \(n\) (resp. \(m\)) denotes the number of nodes (resp. edges) in the directed graph \(D\) induced by the investigated ecosystem. The nodes are numbered as \(1, 2, \ldots, n\). Then, \(m\) lines follow. The \(i\)-th line contains two integers \(x_i\) and \(y_i\) indicating a directed edge from node \(x_i\) to node \(y_i\).

  • \(1 \le n \le 2 \times 10^5\)
  • \(0 \le m \le \min\{ n(n-1), 4 \times 10^5\}\)
  • \(k\) is not an input value, and it is guaranteed that \(1 \le k \le 16\) for each investigated ecosystem.
  • For all \(i\) (\(1\le i\le m\)), \(1\le x_i, y_i\le n\) and \(x_i\neq y_i\).
  • Each ordered pair \((x_i, y_i)\) appears at most once in the input.
Output

Output on a single line the node identidiers of all trophic balance species in ascending order. For any two consecutive node identifiers, separate them by a space.

E. Пары вершин

Бинарный поиск Деревья жадные алгоритмы Перебор поиск в глубину и подобное разделяй и властвуй реализация Структуры данных *2900

Дано дерево, состоящее из \(2n\) вершин. Напомним, что деревом называется связный неориентированный граф, в котором нет циклов. На каждой вершине написано одно целое число от \(1\) до \(n\). Каждое число от \(1\) до \(n\) написано ровно на двух различных вершинах. У каждой вершины также есть стоимость — вершина \(i\) стоит \(2^i\).

Требуется выбрать в дереве такое подмножество вершин, что:

  • подмножество связно; то есть, из каждой вершины подмножества можно добраться до любой другой вершины подмножества, проходя только через вершины подмножества;
  • каждое число от \(1\) до \(n\) написано хотя бы на одной вершине подмножества.

Среди всех таких подмножеств требуется найти такое, что суммарная стоимость вершин в нем минимальна. Обратите внимание, что не требуется минимизировать количество вершин в подмножестве.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке записаны \(2n\) целых чисел \(a_1, a_2, \dots, a_{2n}\) (\(1 \le a_i \le n\)). Каждое число от \(1\) до \(n\) встречается ровно два раза.

В каждой из следующих \(2n-1\) строк записаны два целых числа \(v\) и \(u\) (\(1 \le v, u \le 2n\)) — ребра дерева. Данные ребра образуют валидное дерево.

Выходные данные

В первой строке выведите одно целое число \(k\) — количество вершин в подмножестве.

Во второй строке выведите \(k\) различных целых чисел от \(1\) до \(2n\) — номера вершин в выбранном подмножестве. Вершины можно выводить в произвольном порядке.

Примечание

На данных изображениях нарисованы ответы на первые два примера. В скобках около номеров вершин подписаны числа, написанные на них.

В первом примере есть такие валидные подмножества: \([2, 4, 5]\) (стоимость равна \(2^2 + 2^4 + 2^5 = 52\)), \([2, 4, 5, 6]\) (стоимость равна \(116\)), \([1, 6, 3]\) (стоимость равна \(74\)), \([2, 6, 3]\) (стоимость равна \(76\)) и многие другие.

Во втором примере стоимость подмножества \([4, 6, 3, 1]\) равна \(90\).

A. Преобразование монет

математика Перебор *800

Изначально у вас есть монета номиналом \(n\). Вы можете выполнять следующую операцию любое количество раз (возможно, ноль):

  • преобразовать одну монету номиналом \(x\), где \(x\) больше \(3\) (\(x>3\)), в две монеты номиналом \(\lfloor \frac{x}{4} \rfloor\).

Какое максимальное количество монет вы можете иметь после того, как выполните эту операцию любое количество раз?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей одно целое число \(n\) (\(1 \le n \le 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество монет, которые вы можете иметь после выполнения операции любое количество раз.

Примечание

В первом примере у вас есть монета номиналом \(1\), и вы ничего не можете с ней сделать. Таким образом, ответ равен \(1\).

Во втором примере вы можете преобразовать монету номиналом \(5\) в две монеты номиналом \(1\).

В третьем примере вы можете преобразовать монету номиналом \(16\) в две монеты номиналом \(4\). Каждую из получившихся монет можно преобразовать в две монеты номиналом \(1\).

C. Суммы на отрезках

Бинарный поиск дп жадные алгоритмы математика Перебор Структуры данных *1600

Дан массив \(a\) из \(n\) чисел, где все элементы, кроме, возможно, одного, равны \(-1\) или \(1\). Оставшийся элемент \(x\) удовлетворяет условию \(-10^9 \le x \le 10^9\).

Найдите все возможные суммы подмассивов массива \(a\), включая пустой подмассив, сумма которого равна \(0\). Другими словами, найдите все такие числа \(x\), что у массива \(a\) есть хотя бы один подмассив (возможно, пустой) с суммой \(x\). Подмассивом называется непрерывный подотрезок массива.

Выведите эти суммы в порядке возрастания. Каждая сумма должна быть выведена только один раз, даже если достигается на нескольких подмассивах.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер массива;
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\). В массиве \(a\) существует не более одного элемента, не равного ни \(1\), ни \(-1\).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки:

  • в первой строке выведите одно целое число — количество различных сумм на подмассивах;
  • во второй строке выведите сами суммы в порядке возрастания.

Каждую сумму следует выводить только один раз, даже если она достигается на нескольких подмассивах.

Примечание

Обозначим за \(a[i,j]\) подмассив массива \(a\) с \(i\)-й позиции по \(j\)-ю позицию.

В первом наборе входных данных примера из условия:

  • \(-1\) достигается на подмассиве \(a[2,2]\);
  • \(0\) достигается на пустом подмассиве;
  • \(1\) достигается на подмассиве \(a[4,4]\);
  • \(2\) достигается на подмассиве \(a[4,5]\);
  • \(9\) достигается на подмассиве \(a[2,3]\);
  • \(10\) достигается на подмассиве \(a[1,3]\);
  • \(11\) достигается на подмассиве \(a[3,4]\);
  • \(12\) достигается на подмассиве \(a[3,5]\).

D. Задача про НОД

математика Перебор Потоки теория чисел *1800

Даны три числа \(l\), \(r\) и \(G\). Найдите два числа \(A\) и \(B\) (\(l \le A \le B \le r\)), такие, что их наибольший общий делитель равен \(G\), а расстояние \(|A - B|\) максимально.

Если существует несколько таких пар, выберите ту, где \(A\) минимально. Если подходящих пар нет, выведите «-1 -1».

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки, строка содержит три целых числа \(l, r, G\) (\(1 \le l \le r \le 10^{18}\); \(1 \le G \le 10^{18}\)) — границы отрезка и искомый НОД.

Выходные данные

Для каждого набора входных данных выведите два целых числа \(A\) и \(B\) — ответ на задачу, либо «-1 -1», если подходящей пары чисел не существует.

E. Преобразование матриц

битмаски графы жадные алгоритмы Перебор поиск в глубину и подобное реализация Структуры данных *2300

Даны две матрицы \(A\) и \(B\) размером \(n \times m\), заполненные целыми числами от \(0\) до \(10^9\). Вы можете выполнять следующие операции над матрицей \(A\) в любом порядке любое количество раз:

  • &=: выбрать два целых числа \(i\) и \(x\) (\(1 \le i \le n\), \(x \ge 0\)) и заменить каждый элемент в строке \(i\) на результат побитового И между числом \(x\) и этим элементом. Формально, для каждого \(j \in [1, m]\) элемент \(A_{i,j}\) заменяется на \(A_{i,j} \text{ & } x\);
  • |=: выбрать два целых числа \(j\) и \(x\) (\(1 \le j \le m\), \(x \ge 0\)) и заменить каждый элемент в столбце \(j\) на результат побитового ИЛИ между числом \(x\) и этим элементом. Формально, для каждого \(i \in [1, n]\) элемент \(A_{i,j}\) заменяется на \(A_{i,j} \text{ | } x\);

В разных операциях можно выбирать разные значения \(x\).

Определите, возможно ли преобразовать матрицу \(A\) в матрицу \(B\) с помощью нескольких (возможно, нуля) указанных операций.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных задается следующим образом:

  • первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^3\); \(n \cdot m \le 10^3\)) — размеры матриц \(A\) и \(B\);
  • в следующих \(n\) строках содержится описание матрицы \(A\), где \(i\)-я строка содержит \(m\) целых чисел \(A_{i,1}, A_{i,2}, \dots, A_{i,m}\) (\(0 \le A_{i,j} \le 10^9\));
  • в следующих \(n\) строках содержится описание матрицы \(B\), где \(i\)-я строка содержит \(m\) целых чисел \(B_{i,1}, B_{i,2}, \dots, B_{i,m}\) (\(0 \le B_{i,j} \le 10^9\)).
Выходные данные

Для каждого набора входных данных выведите Yes, если можно преобразовать \(A\) в \(B\), или No в противном случае. Каждую букву можно выводить в любом регистре.

Примечание

Рассмотрим второй набор входных данных и приведем последовательность операций, позволяющих получить из матрицы \(A\) матрицу \(B\):

Изначально матрица выглядит так:

\(\begin{bmatrix} 10&10\\ 42&42\\ \end{bmatrix}\)

Применим операцию первого типа с параметрами \(i = 1\) и \(x = 0\). В результате получим матрицу:

\(\begin{bmatrix} 0&0\\ 42&42\\ \end{bmatrix}\)

Применим операцию первого типа с параметрами \(i = 2\) и \(x = 0\). В результате получим матрицу:

\(\begin{bmatrix} 0&0\\ 0&0\\ \end{bmatrix}\)

Применим операцию второго типа с параметрами \(j = 1\) и \(x = 21\). В результате получим матрицу:

\(\begin{bmatrix} 21&0\\ 21&0\\ \end{bmatrix}\)

Применим операцию второго типа с параметрами \(j = 2\) и \(x = 21\). В результате получим матрицу:

\(\begin{bmatrix} 21&21\\ 21&21\\ \end{bmatrix}\)

Таким образом, мы преобразовали матрицу \(A\) в матрицу \(B\).

F. Ним

битмаски дп жадные алгоритмы игры Комбинаторика кратчайшие пути Перебор реализация *2700

Кратко напомним правила игры «Ним». Имеется \(n\) кучек камней, при этом в кучке \(i\) изначально лежит какое-то число камней. Два игрока по очереди выбирают непустую кучку и берут из нее произвольное положительное (строго больше \(0\)) количество камней. Проигрывает тот, кто не может сделать ход.

Дан массив \(a\), состоящий из \(n\) целых чисел. Артем и Руслан решили играть в Ним на подотрезках массива. Каждый из \(q\) раундов определяется отрезком \((l_i, r_i)\), где элементы массива \(a_{l_i}, a_{l_i+1}, \dots, a_{r_i}\) рассматриваются как размеры кучек камней.

До начала игры Руслан может удалить любое количество кучек из выбранного подотрезка. Однако хотя бы одна кучка должна остаться, поэтому в рамках одного раунда он может удалить не более \((r_i - l_i)\) кучек. Разрешается удалить \(0\) кучек. После удаления ребята играют в Ним на всех оставшихся кучках из этого отрезка.

Все раунды независимы: удаления, произведенные в одном раунде, не влияют на исходный массив или другие раунды.

Руслану нужно удалить как можно больше кучек так, чтобы Артем, который будет ходить первым, проиграл.

Для каждого раунда определите:

  1. максимальное количество кучек, которые Руслан может удалить;
  2. количество способов выбрать максимальное количество кучек для удаления.

Два способа считаются различными, если существует такая позиция \(i\), что в одном из способов кучка на позиции \(i\) удаляется, а во втором — нет. Поскольку количество способов может быть большим, выведите его по модулю \(998\,244\,353\).

Если в каком-то раунде Руслан не может сделать так, чтобы Артем проиграл, выведите для этого раунда одно число -1.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^5\)) — размер массива и количество раундов.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 50\)) — элементы исходного массива.

Далее следуют \(q\) строк, \(i\)-я из которых содержит два целых числа \(l_i, r_i\) (\(1 \le l_i \le r_i \le n\)) — границы отрезка, на котором ребята хотят сыграть в игру в \(i\)-м раунде.

Выходные данные

Для каждого раунда:

  • если Руслан может победить, выведите два целых числа — максимальное количество кучек, которые можно удалить, и количество способов удалить максимальное количество кучек, взятое по модулю \(998\,244\,353\);
  • иначе выведите -1.

G. Задача на запросы

Перебор реализация Структуры данных *3000

Дан массив \(a\), состоящий из \(n\) целых чисел. Вам нужно обработать \(q\) запросов двух типов:

  • \(1~p~x\) — присвоить элементу массива на позиции \(p\) значение \(x\);
  • \(2~l~r\) — подсчитать количество пар позиций \((i, j)\), где \(l \le i < j \le r\) и \(a_i \ne a_j\).

Обратите внимание, что запросы в этой задаче закодированы; каждый следующий запрос вы сможете раскодировать, вычислив ответ на предшествующий ему запрос второго типа.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)).

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк описывает запрос в одном из следующих форматов:

  • \(1~p'~x'\) (\(0 \le p', x' \le n-1\));
  • \(2~l'~r'\) (\(0 \le l', r' \le n-1\)).

Запросы закодированы следующим образом: пусть \(\mathit{last}\) будет ответом на последний уже обработанный запрос второго типа (изначально \(\mathit{last} = 0\)).

  • если тип запроса — \(1\), то \(p = ((p' + \mathit{last}) \bmod n) + 1\), \(x = ((x' + \mathit{last}) \bmod n) + 1\);
  • если тип запроса — \(2\), то \(l = ((l' + \mathit{last}) \bmod n) + 1\), \(r = ((r' + \mathit{last}) \bmod n) + 1\). Если получилось так, что \(l > r\), поменяйте их значения местами.

Не забудьте обновить значение \(\mathit{last}\) после ответа на каждый запрос второго типа.

Дополнительное ограничение на входные данные: есть хотя бы один запрос второго типа.

Выходные данные

На каждый запрос второго типа выведите ответ — количество пар позиций \((i, j)\), где \(l \le i < j \le r\) и \(a_i \ne a_j\).

Примечание

В первом примере реальные запросы (после декодирования) такие:

  • 2 1 3
  • 1 1 3
  • 2 1 3
  • 1 2 3
  • 2 1 3

A. Легкая задача

математика Перебор *800

Дано целое число \(n\). Cube хочет знать, сколько существует упорядоченных пар положительных целых чисел \((a,b)\) таких, что \(a=n-b\). Поскольку Cube не очень хороша в математике, пожалуйста, помогите ей!

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 99\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит целое число \(n\) (\(2 \leq n \leq 100\)).

Выходные данные

Для каждого набора входных данных выведите количество упорядоченных пар \((a, b)\) на новой строке.

Примечание

В первом наборе входных данных единственная упорядоченная пара, которая подходит, это \((a,b)=(1,1)\).

Во втором наборе входных данных три упорядоченные пары \((a,b)\), которые подходят: \((3,1), (2,2), (1,3)\).

F. Легкая демоническая задача

Бинарный поиск математика Перебор Структуры данных теория чисел *1900

Для произвольной матрицы Robot определяет её красоту как сумму элементов в матрице.

Robot дает вам массив \(a\) длиной \(n\) и массив \(b\) длиной \(m\). Вы строите матрицу \(n\) на \(m\) \(M\), такую что \(M_{i,j}=a_i\cdot b_j\) для всех \(1 \leq i \leq n\) и \(1 \leq j \leq m\).

Затем Robot дает вам \(q\) запросов, каждый из которых состоит из одного целого числа \(x\). Для каждого запроса определите, возможно ли выполнить следующую операцию ровно один раз так, чтобы \(M\) имела красоту \(x\):

  1. Выберите целые числа \(r\) и \(c\) такие, что \(1 \leq r \leq n\) и \(1 \leq c \leq m\).
  2. Установите \(M_{i,j}\) в \(0\) для всех упорядоченных пар \((i,j)\) таких, что \(i=r\), \(j=c\) или оба.

Обратите внимание, что запросы не являются постоянными, что означает, что вы на самом деле не устанавливаете никакие элементы в \(0\) в процессе — вам только нужно вывести, возможно ли найти \(r\) и \(c\) так, чтобы, если вышеуказанная операция будет выполнена, красота матрицы будет равна \(x\). Также обратите внимание, что вы должны выполнять операцию для каждого запроса, даже если красота исходной матрицыуже равна \(x\).

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(1 \leq n,m \leq 2\cdot 10^5, 1 \leq q \leq 5\cdot 10^4\)) — длина \(a\), длина \(b\) и количество запросов соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq |a_i| \leq n\)).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(0 \leq |b_i| \leq m\)).

Следующие \(q\) строк каждая содержит одно целое число \(x\) (\(1 \leq |x| \leq 2\cdot 10^5\)), красота матрицы, которую вы хотите достичь, установив все элементы в строке и столбце в \(0\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если существует способ выполнить вышеупомянутую операцию так, чтобы красота была равна \(x\), и «NO» (без кавычек) в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yES», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

Во втором примере матрица выглядит следующим образом:

0 -2 5 0 -3

0 4 -10 0 6

0 -6 15 0 -9

0 0 0 0 0

0 0 0 0 0

Выполнив операцию с \(r=4\) и \(c=2\), получим матрицу:

0 0 5 0 -3

0 0 -10 0 6

0 0 15 0 -9

0 0 0 0 0

0 0 0 0 0

которая имеет красоту \(4\). Таким образом, мы выводим YES.

В втором запросе, выбирая \(r=3\) и \(c=5\), получается матрица с красотой \(-3\).

В третьем запросе, выбирая \(r=3\) и \(c=3\), получается матрица с красотой \(5\).

A. Scrambled Scrabble

жадные алгоритмы Перебор *1700

You are playing a word game using a standard set of \(26\) uppercase English letters: AZ. In this game, you can form vowels and consonants as follows.

  • The letters A, E, I, O, and U can only form a vowel.
  • The letter Y can form either a vowel or a consonant.
  • Each of the remaining letters other than A, E, I, O, U, and Y can only form a consonant.
  • The string NG can form a single consonant when concatenated together.

Denote a syllable as a concatenation of a consonant, a vowel, and a consonant in that order. A word is a concatenation of one or more syllables.

You are given a string \(S\) and you want to create a word from it. You are allowed to delete zero or more letters from \(S\) and rearrange the remaining letters to form the word. Find the length of the longest word that can be created, or determine if no words can be created.

Input

A single line consisting of a string \(S\) (\(1 \leq |S| \leq 5000\)). The string \(S\) consists of only uppercase English letters.

Output

If a word cannot be created, output 0. Otherwise, output a single integer representing the length of longest word that can be created.

Note

Explanation for the sample input/output #1

A possible longest word is JAKCARTAP, consisting of the syllables JAK, CAR, and TAP.

Explanation for the sample input/output #2

The whole string \(S\) is a word consisting of one syllable which is the concatenation of the consonant NG, the vowel E, and the consonant NG.

Explanation for the sample input/output #3

The whole string \(S\) is a word consisting of one syllable which is the concatenation of the consonant Y, the vowel Y, and the consonant Y.

Explanation for the sample input/output #4

The whole string \(S\) is a word consisting of two syllables: DAN and GAN.

M. Mirror Maze

графы Перебор поиск в глубину и подобное реализация *1800

You are given a grid of \(R\) rows (numbered from \(1\) to \(R\) from north to south) and \(C\) columns (numbered from \(1\) to \(C\) from west to east). Every cell in this grid is a square of the same size. The cell located at row \(r\) and column \(c\) is denoted as \((r, c)\). Each cell can either be empty or have a mirror in one of the cell's diagonals. Each mirror is represented by a line segment. The mirror is type \(1\) if it is positioned diagonally from the southwest corner to the northeast corner of the cell, or type \(2\) for the other diagonal.

These mirrors follow the law of reflection, that is, the angle of reflection equals the angle of incidence. Formally, for type \(1\) mirror, if a beam of light comes from the north, south, west, or east of the cell, then it will be reflected to the west, east, north, and south of the cell, respectively. Similarly, for type \(2\) mirror, if a beam of light comes from the north, south, west, or east of the cell, then it will be reflected to the east, west, south, and north of the cell, respectively.

You want to put a laser from outside the grid such that all mirrors are hit by the laser beam. There are \(2 \cdot (R+C)\) possible locations to put the laser:

  • from the north side of the grid at column \(c\), for \(1 \leq c \leq C\), shooting a laser beam to the south;
  • from the south side of the grid at column \(c\), for \(1 \leq c \leq C\), shooting a laser beam to the north;
  • from the east side of the grid at row \(r\), for \(1 \leq r \leq R\), shooting a laser beam to the west; and
  • from the west side of the grid at row \(r\), for \(1 \leq r \leq R\), shooting a laser beam to the east.

Determine all possible locations for the laser such that all mirrors are hit by the laser beam.

Input

The first line consists of two integers \(R\) \(C\) (\(1 \leq R, C \leq 200\)).

Each of the next \(R\) lines consists of a string \(S_r\) of length \(C\). The \(c\)-th character of string \(S_r\) represents cell \((r, c)\). Each character can either be . if the cell is empty, / if the cell has type \(1\) mirror, or \ if the cell has type \(2\) mirror. There is at least one mirror in the grid.

Output

Output a single integer representing the number of possible locations for the laser such that all mirrors are hit by the laser beam. Denote this number as \(k\).

If \(k > 0\), then output \(k\) space-separated strings representing the location of the laser. Each string consists of a character followed without any space by an integer. The character represents the side of the grid, which could be N, S, E, or W if you put the laser on the north, south, east, or west side of the grid, respectively. The integer represents the row/column number. You can output the strings in any order.

Note

Explanation for the sample input/output #1

The following illustration shows one of the solutions of this sample.

Explanation for the sample input/output #2

The following illustration shows one of the solutions of this sample.

B. Замените символ

жадные алгоритмы Комбинаторика Перебор Строки *900

Вам дана строка \(s\) длиной \(n\), состоящая только из строчных латинских букв.

Вы должны сделать ровно одну операцию следующего вида:

  • Выбрать любые два индекса \(i\) и \(j\) (\(1 \le i, j \le n\)). Вы можете выбрать \(i = j\).
  • Установить \(s_i := s_j\).

Вам нужно минимизировать количество различных перестановок\(^\dagger\) строки \(s\). Выведите любую строку с наименьшим количеством различных перестановок после выполнения ровно одной операции.

\(^\dagger\) Перестановка строки — это расположение её символов в любом порядке. Например, «bac» является перестановкой «abc», но «bcc» — нет.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 500\)). Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 10\)) — длину строки \(s\).

Вторая строка каждого набора содержит строку \(s\) длиной \(n\). Строка состоит только из строчных латинских букв.

Выходные данные

Для каждого набора входных данных выведите требуемую строку \(s\) после выполнения ровно одной операции. Если есть несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных мы можем получить следующие строки за одну операцию: «abc», «bbc», «cbc», «aac», «acc», «aba» и «abb».

Строка «abc» имеет \(6\) различных перестановок: «abc», «acb», «bac», «bca», «cab», и «cba».

Строка «cbc» имеет \(3\) различных перестановки: «bcc», «cbc», и «ccb», что является наименьшим из всех получаемых строк. На самом деле, все получаемые строки, кроме «abc», имеют \(3\) перестановки, так что любая из них будет принята.

A. Кевин и кодовый замок

жадные алгоритмы математика Перебор реализация теория чисел *800

Кевин попал из-за Грейс в ловушку в Прибрежной деревне. На выходе из деревни находится кодовый замок, который можно открыть только в том случае, если Кевин его разгадает.

В начале на кодовом замке написано целое число \( x \), и Кевин может ноль или больше раз выполнить любую из следующих двух операций:

  1. Если \( x \neq 33 \), он может выбрать две последовательные цифры \( 3 \) из \( x \) и удалить их одновременно. Например, если \( x = 13\,323 \), он может удалить вторую и третью \( 3 \), изменив \( x \) на \( 123 \).
  2. Если \( x \geq 33 \), он может изменить \( x \) на \( x - 33 \). Например, если \( x = 99 \), он может выбрать эту операцию, чтобы изменить \( x \) на \( 99 - 33 = 66 \).

Когда значение \( x \) на кодовом замке становится \( 0 \), Кевин может открыть замок и сбежать из деревни. Пожалуйста, определите, возможно ли Кевин открыть кодовый замок и сбежать.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов \(t\) (\(1 \le t \le 10^4\)).

Единственная строка каждого набора содержит положительное целое число \(x\) (\(1\leq x\leq 10^9\)).

Выходные данные

Для каждого набора входных данных выведите «YES», если Кевин может открыть кодовый замок и сбежать, и «NO» в противном случае.

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительные ответы.

Примечание

Решение в первом примере: \(165\xrightarrow{-33}132\xrightarrow{-33}99\xrightarrow{-33}66\xrightarrow{-33}33\xrightarrow{-33}0\).

Решение во втором примере: \(6369\xrightarrow{-33}6{\color{red}{33}}6\xrightarrow{\text{удалить «33»}}66\xrightarrow{-33}33\xrightarrow{-33}0\).

Для третьего набора можно доказать, что, независимо от выполняемых операций, \(666\) не может быть преобразовано в \(0\).

C. Кевин и бинарные строки

битмаски жадные алгоритмы Перебор реализация Строки *1200

Кевин обнаружил бинарную строку \(s\), которая начинается с 1 и передал её вам. Ваша задача — выбрать две непустые подстроки\(^{\text{∗}}\) строки \(s\) (которые могут пересекаться), чтобы максимизировать значение XOR этих двух подстрок.

XOR двух бинарных строк \(a\) и \(b\) определяется как результат операции \(\oplus\), примененной к двум числам, полученным путем представления \(a\) и \(b\) как бинарных чисел, где самый левый бит является старшим. Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ (XOR).

Выбранные вами строки могут содержать ведущие нули.

\(^{\text{∗}}\)Строка \(a\) является подстрокой строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов с начала и нескольких (возможно, ни одного или всех) символов с конца.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов \(t\) (\(1 \le t \le 10^3\)).

Единственная строка каждого набора содержит бинарную строку \(s\), которая начинается с 1 (\(1\le\lvert s\rvert\le 5000\)).

Гарантируется, что сумма \(\lvert s\rvert\) по всем наборам не превышает \(5000\).

Выходные данные

Для каждого тестового случая выведите четыре целых числа \(l_1, r_1, l_2, r_2\) (\(1 \le l_1 \le r_1 \le |s|\), \(1 \le l_2 \le r_2 \le |s|\)) — в случае если две подстроки, которые вы выбрали, это \(s_{l_1} s_{l_1 + 1} \ldots s_{r_1}\) и \(s_{l_2} s_{l_2 + 1} \ldots s_{r_2}\).

Если есть несколько решений, выведите любое из них.

Примечание

В первом наборе мы можем выбрать \( s_2=\texttt{1} \) и \( s_1 s_2 s_3=\texttt{111} \), и \( \texttt{1}\oplus\texttt{111}=\texttt{110} \). Можно доказать, что невозможно получить больший результат. Кроме того, \( l_1=3\), \(r_1=3\), \(l_2=1\), \(r_2=3 \) также является допустимым решением.

Во втором наборе, \( s_1 s_2 s_3=\texttt{100} \), \( s_1 s_2 s_3 s_4=\texttt{1000} \), результат \( \texttt{100}\oplus\texttt{1000}=\texttt{1100} \), что является максимумом.

D. Кевин и воспоминания о соревнованиях

Бинарный поиск жадные алгоритмы Перебор сортировки Структуры данных *1600

Кевин раньше попадал в воспоминания Рио, и в воспоминаниях Рио когда-то проводились серии соревнований. Кевин помнит всех участников и все задачи соревнований того времени, но он забыл конкретные раунды, распределение задач и точные рейтинги.

Всего есть \( m \) задач, при этом \( i \)-я задача имеет сложность \( b_i \). Пусть каждое соревнование состоит из \( k \) задач, в результате чего получается \( \lfloor \frac{m}{k} \rfloor \) соревнований. Это означает, что вы выбираете \( \lfloor \frac{m}{k} \rfloor \cdot k \) задач для соревнований в любом сочетании, при этом каждая задача выбирается не более одного раза, а оставшиеся \(m\bmod k\) задач остаются неиспользованными. Например, если \(m = 17\) и \(k = 3\), вы должны создать ровно \(5\) соревнований, состоящих из \(3\) задач каждое, и ровно \(2\) задачи останутся неиспользованными.

В соревнованиях участвовало всего \( n \) участников, причем Кевин был \(1\)-м участником. У \( i \)-го участника рейтинг \( a_i \). Во время соревнований участник решает все задачи, сложность которых не превышает его рейтинг, то есть \( i \)-й участник решает \( j \)-ю задачу тогда и только тогда, когда \( a_i \geq b_j \). В каждом соревновании ранг Кевина равен одному плюс количеству участников, которые решают больше задач, чем он.

Для каждого \( k = 1, 2, \ldots, m \) Кевин хочет знать минимальную сумму его рангов по всем \( \lfloor \frac{m}{k} \rfloor \) соревнованиям. Другими словами, для некоторого значения \(k\), после выбора задач для каждого соревнования, вы вычисляете ранг Кевина в каждом соревновании и суммируете эти ранги по всем \( \lfloor \frac{m}{k} \rfloor \) соревнованиям. Ваша цель — минимизировать это значение.

Обратите внимание, что соревнования для разных значений \(k\) независимы. Это означает, что для разных значений \(k\) вы можете независимо выбирать распределение задач в соревнованиях.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов \( t \) (\( 1 \le t \le 5\cdot 10^4 \)).

Первая строка каждого набора содержит два целых числа \( n \) и \( m \) (\( 1 \le n, m \leq 3\cdot 10^5 \)) — количество участников и количество задач.

Вторая строка каждого набора содержит \( n \) целых чисел \( a_1, a_2, \ldots, a_n \) (\( 0 \le a_i \le 10^9 \)) — рейтинг каждого участника.

Третья строка каждого набора содержит \( m \) целых чисел \( b_1, b_2, \ldots, b_m \) (\( 0 \le b_i \le 10^9 \)) — сложность каждой задачи.

Гарантируется, что сумма \( n \) и сумма \( m \) по всем тестам не превышают \( 3 \cdot 10^5 \).

Выходные данные

Для каждого набора выведите \(m\) целых чисел — минимальную сумму рангов Кевина для каждого \( k = 1, 2, \ldots, m\).

Примечание

Для первого набора:

Когда \(k=1\), поскольку каждое соревнование содержит только одну задачу, распределение на самом деле уникально. Например, в соревновании, которое включает только третью задачу (которая имеет сложность \(4\)), все участники, кроме \(2\)-го, могут ее решить. Поскольку никто не решает строго больше задач, чем Кевин, его ранг в этом соревновании равен \(1\). Аналогично, в всех \(4\) соревнованиях ранги Кевина равны \(1,3,1,2\), и сумма равна \(7\).

Когда \(k=2\), один из оптимальных способов — выбрать \(1\)-ю и \(3\)-ю задачи для формирования одного соревнования, а \(2\)-ю и \(4\)-ю — для другого. В первом соревновании \(4\) участника соответственно решают \(2,1,2,2\) задачи, поэтому ранг Кевина равен \(1\); во втором они соответственно решают \(0,0,2,1\), поскольку \(2\) участника (\(3\)-й и \(4\)-й) решают больше задач, чем Кевин, его ранг равен \(1+2=3\). Таким образом, ответ равен \(1+3=4\). Можно доказать, что нет способа достичь меньшей суммы.

Когда \(k=3\), мы можем просто выбрать \(1\)-ю, \(3\)-ю и \(4\)-ю задачи, чтобы сделать соревнование, и ранг Кевина равен \(2\), что является оптимальным.

Когда \(k=4\), поскольку есть только одно соревнование, распределение также уникально, и ранг Кевина равен \(3\).

F. Кевин и математический класс

Деревья дп математика Перебор разделяй и властвуй реализация Структуры данных *2500

Кевин — студент из Вечно Спящего Города, который в настоящее время посещает математический класс, где учитель задает ему упражнения на деление.

На доске написаны две строки положительных целых чисел, каждая из которых содержит \( n \) чисел. Первая строка — это \( a_1, a_2, \ldots, a_n \), а вторая строка — \( b_1, b_2, \ldots, b_n \).

Для каждого упражнения на деление Кевин может выбрать любой отрезок \( [l, r] \) и найти минимальное значение \( x \) среди \( b_l, b_{l+1}, \ldots, b_r \). Затем он изменит каждое \( a_i \) для \( l \leq i \leq r \) на округление вверх от \( a_i \), деленного на \( x \).

Формально, он выбирает два целых числа \( 1 \leq l \leq r \leq n \), устанавливает \( x = \min_{l \leq i \leq r} b_i \), и изменяет все \( a_i \) для \( l \leq i \leq r \) на \( \lceil \frac{a_i}{x} \rceil \).

Кевин может покинуть класс и вернуться домой, когда все \( a_i \) станут равны \( 1 \). Он стремится уйти и хочет узнать минимальное количество упражнений на деление, необходимых для достижения этого.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \( t \) (\( 1 \le t \le 10^4 \)).

Первая строка каждого набора входных данных содержит целое число \( n \) (\( 1 \le n \leq 2 \cdot 10^5 \)) — длина последовательностей \( a \) и \( b \).

Вторая строка каждого набора входных данных содержит \( n \) целых чисел \( a_1, a_2, \ldots, a_n \) (\( 1 \le a_i \le 10^{18} \)) — первая строка целых чисел на доске.

Третья строка каждого набора входных данных содержит \( n \) целых чисел \( b_1, b_2, \ldots, b_n \) (\( 2 \le b_i \le 10^{18} \)) — вторая строка целых чисел на доске.

Гарантируется, что сумма \( n \) по всем наборам входных данных не превышает \( 2 \cdot 10^5 \).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество упражнений на деление, необходимых для выхода из класса.

Примечание

Для первого примера: \( [{\color{red}{5,4}},2]\xrightarrow[\min(b_1,b_2)=3]{\text{операция на отрезке }[1,2]}[{\color{red}{2,2,2}}]\xrightarrow[\min(b_1,b_2,b_3)=2]{\text{операция на отрезке }[1,3]}[1,1,1] \).

Для второго примера: \( [{\color{red}{3,6,1}},3,2]\xrightarrow[\min(b_1,b_2,b_3)=3]{\text{операция на отрезке }[1,3]}[1,{\color{red}{2,1,3}},2]\xrightarrow[\min(b_2,b_3,b_4)=2]{\text{операция на отрезке }[2,4]}[1,1,1,{\color{red}{2,2}}]\xrightarrow[\min(b_4,b_5)=2]{\text{операция на отрезке }[4,5]}[1,1,1,1,1] \).

G. Кевин и матрицы

дп Комбинаторика математика Перебор *2800

Кевин был доставлен в больницу Святого Cердца, которая содержит все матрицы размером \( n \times m \) с целочисленными значениями из отрезка \( [1,v] \).

Теперь Кевин хочет подружиться с некоторыми матрицами, но он готов подружиться с матрицей \( a \) только в том случае, если выполняется следующее условие:

\(\) \min_{1\le i\le n}\left(\max_{1\le j\le m}a_{i,j}\right)\le\max_{1\le j\le m}\left(\min_{1\le i\le n}a_{i,j}\right). \(\)

Пожалуйста, посчитайте, сколько матриц в больнице могут подружиться с Кевином.

Поскольку Кевин очень дружелюбен, может быть много матриц, которые удовлетворяют этому условию. Поэтому вам нужно вывести результат по модулю \(998\,244\,353\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов \( t \) (\( 1 \le t \le 8\cdot 10^3 \)).

Единственная строка каждого набора содержит три целых числа \(n\), \(m\) и \(v\) (\( 1 \le n, v, n \cdot v \leq 10^6\), \(1 \le m \le 10^9 \)).

Гарантируется, что сумма \( n \cdot v \) по всем наборам не превышает \( 10^6 \).

Выходные данные

Для каждого набора выведите одно целое число — количество матриц, которые могут подружиться с Кевином по модулю \(998\,244\,353\).

Примечание

В первом наборе, кроме матриц \( a=\begin{bmatrix}1&2\\2&1\end{bmatrix} \) и \( a=\begin{bmatrix}2&1\\1&2\end{bmatrix} \), которые не удовлетворяют условию, оставшиеся \( 2^{2 \cdot 2} - 2 = 14 \) матриц могут подружиться с Кевином.

B. Кис-кис-кис

Конструктив Паросочетания Перебор реализация *1300

Кошек привлекает «кис-кис-кис», но Эвирир, будучи достойным англоговорящим драконом, отзывается только на «pspspsp» с особыми условиями...

Дана строка \(s = s_1s_2\ldots s_n\) длины \(n\), состоящая из символов p, s и . (точка). Определите, существует ли перестановка\(^{\text{∗}}\) \(p\) длины \(n\), такая, что для каждого целого \(i\) (\(1 \le i \le n\)):

  • Если \(s_i\) равно p, то \([p_1, p_2, \ldots, p_i]\) образует перестановку (длины \(i\));
  • Если \(s_i\) равно s, то \([p_i, p_{i+1}, \ldots, p_{n}]\) образует перестановку (длины \(n-i+1\));
  • Если \(s_i\) равно ., то дополнительных ограничений нет.

\(^{\text{∗}}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 500\)) — длина \(s\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из символов p, s и ..

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных в первой строке выведите YES или NO. Выведите YES, если искомая перестановка существует, и NO в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Для первого набора входных данных одна подходящая перестановка такова: \(p = [3, 4, 1, 2]\). Для неё выполняются все условия:

  • \(s_1 =\) s : \([p_1, p_2, p_3, p_4] = [3, 4, 1, 2]\) образует перестановку.
  • \(s_2 =\) . : Никаких дополнительных ограничений.
  • \(s_3 =\) s : \([p_3, p_4] = [1, 2]\) образует перестановку.
  • \(s_4 =\) p : \([p_1, p_2, p_3, p_4] = [3, 4, 1, 2]\) образует перестановку.

Для второго набора входных данных можно доказать, что не существует перестановки, удовлетворяющей всем ограничениям.

Для третьего набора входных данных одной перестановкой, удовлетворяющей условиям, является \(p = [1, 2, 3, 4, 5]\).

C. MEX-цикл

жадные алгоритмы Конструктив Перебор реализация *1500

У дракона Эвирира много друзей. У него есть целых 3 друга! Это на одного больше, чем у среднестатистического дракона.

Вам даны целые числа \(n\), \(x\), и \(y\). В кругу сидят \(n\) драконов, пронумерованных целыми числами \(1, 2, \ldots, n\). Для каждого \(i\) (\(1 \le i \le n\)) дракон номер \(i\) дружит с драконами \(i - 1\) и \(i + 1\) (здесь под номером \(0\) подразумевается дракон \(n\), а под номером \(n + 1\) подразумевается дракон \(1\)). Кроме того, драконы \(x\) и \(y\) дружат друг с другом (если они уже друзья, то ничего не меняется). Обратите внимание, что любая дружба является взаимной.

Выведите \(n\) целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\) таких, чтобы для каждого дракона \(i\) (\(1 \le i \le n\)) выполнялось следующее:

  • Пусть \(f_1, f_2, \ldots, f_k\) — друзья дракона \(i\). Тогда \(a_i = \operatorname{mex}(a_{f_1}, a_{f_2}, \ldots, a_{f_k})\).\(^{\text{∗}}\)

\(^{\text{∗}}\)Наименьшее исключенное (MEX) набора чисел \(c_1, c_2, \ldots, c_m\) определяется как наименьшее неотрицательное целое число \(t\), которое не встречается в наборе чисел \(c\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(x\), \(y\) (\(3 \le n \le 2 \cdot 10^5\), \(1 \le x < y \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке \(n\) целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)), которые удовлетворяют условию. Если существует несколько решений, выведите любое из них. Можно доказать, что при ограничениях задачи решение с \(0 \le a_i \le 10^9\) всегда существует.

Примечание

Для первого набора входных данных:

  • \(i = 1\): Друзья дракона \(1\) — драконы \(2, 3, 5\). \(\operatorname{mex}(a_2, a_3, a_5) = \operatorname{mex}(2, 1, 1) = 0 = a_1\), так что условие для дракона \(1\) выполнено.
  • \(i = 2\): Друзья дракона \(2\) — это драконы \(1, 3\). \(\operatorname{mex}(a_1, a_3) = \operatorname{mex}(0, 1) = 2 = a_2\).
  • \(i = 3\): Друзья дракона \(3\) — это драконы \(1, 2, 4\). \(\operatorname{mex}(a_1, a_2, a_4) = \operatorname{mex}(0, 2, 0) = 1 = a_3\).
  • \(i = 4\): Друзья дракона \(4\) — это драконы \(3, 5\). \(\operatorname{mex}(a_3, a_5) = \operatorname{mex}(1, 1) = 0 = a_4\).
  • \(i = 5\): Друзья дракона \(5\) — это драконы \(1, 4\). \(\operatorname{mex}(a_1, a_4) = \operatorname{mex}(0, 0) = 1 = a_5\).

D. Shift + Esc

дп Перебор *1900

Во время игры с таинственной установкой дракона Эвирира поймали. Он решил найти хорошее применение своим магическим навыкам — исказить реальность, чтобы быстро сбежать!

Дана клетчатая сетка с \(n\) строками и \(m\) столбцами, в которых записаны целые неотрицательные числа. Также вам дано целое число \(k\). Пусть \((i, j)\) обозначает ячейку в \(i\)-й сверху строке и \(j\)-м слева столбце (\(1 \le i \le n\), \(1 \le j \le m\)). Для каждой пары \((i, j)\) в ячейку \((i, j)\) записывается целое число \(a_{i, j}\).

Изначально вы находитесь в ячейке \((1, 1)\) и хотите попасть в ячейку \((n, m)\). Вы можете двигаться только вниз или вправо. То есть, если вы находитесь в \((i, j)\), вы можете перейти только в \((i+1, j)\) или \((i, j+1)\) (если соответствующая ячейка существует).

Прежде чем начать движение, вы можете выполнить следующую операцию любое количество раз:

  • Выберите целое число \(i\) от \(1\) до \(n\) и циклически сдвиньте строку \(i\) влево на \(1\). Формально, клеткам \(a_{i,j}\) для всех целых \(j\) (\(1 \le j \le m\)) одновременно устанавливается значение \(a_{i,(j \bmod m) + 1}\).
Обратите внимание, что вы не можете выполнять никаких операций после того, как начнете двигаться.

После перемещения из \((1, 1)\) в \((n, m)\), пусть \(x\) — количество операций, которые вы выполнили перед перемещением, а \(y\) — сумма чисел, записанных в посещенных ячейках (включая \((1, 1)\) и \((n, m)\)). Тогда стоимость перемещения определяется как \(kx + y\).

Найдите минимальную стоимость перемещения из клетки \((1, 1)\) в клетку \((n, m)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \leq n, m \leq 200\), \(0 \leq k \leq 10^9\)).

Затем следуют \(n\) строк. \(i\)-я строка содержит \(m\) целых чисел, разделенных пробелом — \(a_{i,1},\,a_{i,2},\,\ldots,\,a_{i,m}\) (\(0 \leq a_{i,j} \leq 10^9\)).

Гарантируется, что сумма значений \(n \cdot m\) по всем наборам входных данных не превосходит \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную стоимость перемещения из \((1, 1)\) в \((n, m)\).

Примечание

В первом наборе входных данных минимальная стоимость \(113\) может быть достигнута следующим образом:

  1. Циклически сдвиньте строку 3 один раз. Сетка станет равна \(\)\begin{bmatrix}3 & 4 & 9\\5 & 2 & 4\\101 & 101 & 0\end{bmatrix}.\(\)
  2. Перемещайтесь следующим образом: \((1, 1) \to (1, 2) \to (2, 2) \to (2, 3) \to (3, 3)\).

\(x = 1\) операция выполняется перед перемещением. Сумма целых чисел в посещенных ячейках равна \(y = 3 + 4 + 2 + 4 + 0 = 13\). Следовательно, стоимость равна \(kx + y = 100 \cdot 1 + 13 = 113\).

Во втором наборе входных данных можно сдвинуть строку 1 один раз, строку 2 дважды и строку 3 трижды. Тогда сетка станет \(\)\begin{bmatrix}0 & 0 & 10 & 10\\10 & 0 & 0 & 0\\10 & 10 & 10 & 0\end{bmatrix}.\(\)

\(x = 6\) операций были выполнены до перемещений, а сумма чисел в посещённых клетках \(y = 0\). Следовательно, стоимость равна \(6 \cdot 1 + 0 = 6\).

E. Сломанные запросы

Бинарный поиск битмаски интерактив Конструктив Перебор реализация *2400

Вы — волшебник, чье творение было уничтожено драконом. Вы полны решимости выследить его с помощью волшебного AOE-трекера. Но с ним, похоже, кто-то играет...

Это интерактивная задача

Есть скрытый бинарный массив \(a\) длины \(n\) (\(\mathbf{n}\) является степенью 2) и скрытое целое число \(k\ (2 \le k \le n - 1)\). Массив \(a\) содержит ровно одну 1 (а все остальные элементы равны 0). Для двух целых \(l\) и \(r\) (\(1 \le l \le r \le n\)) определим сумму диапазона \(s(l, r) = a_l + a_{l+1} + \cdots + a_r\).

У вас есть волшебное устройство, которое принимает диапазоны и возвращает суммы диапазонов, но оно возвращает противоположный результат, когда диапазон имеет длину хотя бы \(k\). Формально, в одном запросе вы можете задать ему пару целых \([l, r]\), где \(1 \le l \le r \le n\), и он вернёт либо \(0\), либо \(1\), в соответствии со следующими правилами:

  • Если \(r - l + 1 < k\), то он вернёт \(s(l, r)\).
  • Если \(r - l + 1 \ge k\), то он вернёт \(1 - s(l, r)\).

Найдите \(k\), используя не более \(33\) запросов.

Устройство является неадаптивным. Это означает, что скрытые \(a\) и \(k\) фиксируются перед взаимодействием и не изменяются во время взаимодействия.

Протокол взаимодействия

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое положительное число \(n\) (\(4 \le n \le 2^{30}\)) — длину скрытого массива. Гарантируется, что \(\mathbf{n}\) — это степень 2; то есть \(n = 2^m\) для некоторого целого неотрицательного числа \(m\).

Вы можете делать запросы следующим образом — выведите одну строку вида «\(\mathtt{?}\,l\,r\)», где \(1 \le l \le r \le n\). После этого считайте одно целое число: \(0\) или \(1\), как описано в условии.

Если вы хотите дать ответ \(k\), выведите «\(\mathtt{!}\,k\)». Затем взаимодействие продолжается со следующим набором входных данных.

Вывод ответа не учитывается при подсчете количества выполненных запросов.

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода\(^{\text{∗}}\). В противном случае вы получите вердикт Решение «зависло».

На любом шаге взаимодействия, если вы считали \(-1\) вместо корректных данных, ваше решение должно немедленно завершиться. Это означает, что ваше решение получит вердикт Неправильный ответ из-за некорректного запроса или любой другой ошибки. Если программа не завершится, вы можете получить любой вердикт, так как ваша программа продолжит чтение из закрытого потока.

Взломы

Формат взломов должен быть следующим: первая строка должна содержать одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее должно следовать описание наборов входных данных.

Первая и единственная строка каждого набора входных данных должна содержать три целых числа \(n\), \(p\), и \(k\) (\(4 \le n \le 2^{30}\), \(1 \le p \le n\), \(2 \le k \le n - 1\)) — длина скрытого массива \(a\), позиция единственной 1 в \(a\) и скрытое \(k\). \(n\) должно быть степенью \(2\).

\(^{\text{∗}}\)Чтобы сбросить буфер вывода, используйте:

  • fflush(stdout) или cout.flush() в C++;
  • sys.stdout.flush() в Python;
  • смотрите документацию для других языков.
Примечание

В первом наборе входных данных \(k = 6\), а 1 в скрытом массиве находится на позиции 6, так что \(a = [0, 0, 0, 0, 0, 1, 0, 0]\).

  • Для запроса 3 5, поскольку \(5-3+1 = 3 < k\), устройство отвечает правильно. Поскольку значение 6 не входит в диапазон \([3, 5]\), устройство отвечает \(0\).
  • Для запроса 1 8, поскольку \(8 - 1 + 1 = 8 \ge k\), устройство неправильно отвечает \(0\).
  • Для запроса 4 8, поскольку \(8 - 4 + 1 = 5 < k\), устройство правильно отвечает \(1\).
  • Для запроса 3 8, поскольку \(8 - 3 + 1 = 6 \ge k\), устройство неправильно отвечает \(0\).
Затем решение в примере выводит \(6\), что является правильным ответом.

Во втором наборе входных данных \(k = 2\), а 1 в скрытом массиве находится на позиции 3, так что \(a = [0, 0, 1, 0]\).

Обратите внимание, что в примере решению может не хватать информации для определения \(k\).

F. MEX-ИЛИ-мания

битмаски Перебор реализация снм Структуры данных *2700

Последовательность чисел \(b_1, b_2, \ldots, b_n\) является хорошей, если \(\operatorname{mex}(b_1, b_2, \ldots, b_n) - (b_1 | b_2 | \ldots | b_n) = 1\). Здесь \(\operatorname{mex(c)}\) обозначает MEX\(^{\text{∗}}\) набора чисел \(c\), а \(|\) обозначает операцию побитового ИЛИ.

У Шохага есть целочисленная последовательность \(a_1, a_2, \ldots, a_n\). Он выполнит следующие \(q\) обновлений последовательности \(a\):

  • \(i\) \(x\) — увеличить \(a_i\) на \(x\).

После каждого обновления помогите Шохагу найти длину самого длинного хорошего подмассива\(^{\text{†}}\) массива \(a\).

\(^{\text{∗}}\)Наименьшее исключенное (MEX) набора чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее неотрицательное целое число \(y\), которое не встречается в наборе чисел \(c\).

\(^{\text{†}}\)Массив \(d\) является подмассивом массива \(f\), если \(d\) может быть получен из \(f\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n\)).

Следующие \(q\) строк каждого набора входных данных имеют следующий вид:

  • \(i\) \(x\) (\(1 \le i, x \le n\)) — это означает, что вы должны увеличить \(a_i\) на \(x\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\) и сумма \(q\) не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк — в \(i\)-й строке выведите длину самого длинного хорошего подмассива \(a\) после \(i\)-го обновления.

Примечание

В первом наборе входных данных после первого обновления массив становится \([0, 0, 1, 0, 1, 1]\). Весь массив является хорошим, так как \(\operatorname{mex}([0, 0, 1, 0, 1, 1]) - (0 | 0 | 1 | 0 | 1 | 1) = 2 - 1 = 1\).

После второго обновления массив становится равен \([0, 0, 3, 0, 1, 1]\), и его подмассив \([0, 1, 1]\) имеет максимальную длину среди всех хороших подмассивов.

Наконец, после третьего обновления массив становится равен \([0, 0, 3, 0, 1, 4]\), и два его подмассива \([0, 0]\) и \([0, 1]\) имеют максимальную длину среди всех хороших подмассивов.

A. Маленький Слоник и Роздол

Перебор реализация *900

Маленький Слоник очень любит Украину. Особенно сильно он любит город Роздол.

Но постоянно находиться в Роздоле очень вредно, поэтому Маленький Слоник хочет съездить в какой-нибудь другой город. Маленький Слоник не любит тратить много времени на переезды, поэтому для своего путешествия он выберет город, проезд до которого занимает минимальное время. Если же таких городов несколько, то Маленький Слоник никуда не поедет.

Для каждого города кроме Роздола вам известно время, требуемое для путешествия в этот город. Определите в какой город поедет Маленький Слоник или выведите «Still Rozdil», если он останется в Роздоле.

Входные данные

В первой строке задано единственное целое число n (1 ≤ n ≤ 105) — количество городов. В следующей строке задано n целых чисел, разделенных единичными пробелами: i-ое число обозначает время, требуемое на проезд от города Роздол до i-го города. Времена — целые положительные числа, не превосходящие 109.

Можете считать, что все города пронумерованы от 1 до n включительно. Роздол в число пронумерованных городов не входит.

Выходные данные

В единственной строке выведите ответ — номер города, в который поедет Маленький Слоник. Если городов с минимальным временем проезда несколько, выведите «Still Rozdil» (без кавычек).

Примечание

В первом примере есть только два города, куда может съездить Маленький Слоник. Время путешествия до первого из них равно 7, до второго — 4. Ближайший к Роздолу город (он единственный) — второй, поэтому ответ 2.

Во втором примере ближайшими городами являются второй и пятый, время путешествия до них обоих равно 4, поэтому ответ — «Still Rozdil».

B. Маленький Слоник и сортировка

жадные алгоритмы Перебор *1400

Маленький Слоник любит сортировки.

У него есть массив a из n целых чисел. Пусть элементы массива пронумерованы от 1 до n, тогда элемент номер i обозначим ai. За один шаг Маленький Слоник может выбрать произвольную пару целых чисел l и r (1 ≤ l ≤ r ≤ n) и увеличить ai на 1 для всех i таких, что l ≤ i ≤ r.

Помогите Маленькому Слонику найти минимальное количество шагов, за которое он может преобразовать массив a в произвольный отсортированный по неубыванию массив. Массив a, состоящий из n элементов, отсортирован по неубыванию, если для любого i (1 ≤ i < n) выполняется ai ≤ ai + 1.

Входные данные

В первой строке задано единственное целое число n (1 ≤ n ≤ 105) — размер массива a. В следующей строке задано n целых чисел, разделенных единичными пробелами, — массив a (1 ≤ ai ≤ 109). Элементы массива в строке перечислены в порядке увеличения их номера.

Выходные данные

В единственной строке выведите единственное целое число — ответ на задачу.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере массив уже отсортирован по неубыванию, поэтому ответ 0.

Во втором примере нужно использовать две операции: первый раз увеличить числа от второго до третьего (после этого массив станет следующим: [3, 3, 2]), а второй раз увеличить только последний элемент (массив станет: [3, 3, 3]).

В третьем примере нужно использовать как минимум 6 шагов. Возможная последовательность операций: (2; 3), (2; 3), (2; 3), (3; 3), (3; 3), (3; 3). После этого массив преобразуется в [7, 7, 7, 47].

B. Переливайка

жадные алгоритмы математика Перебор *1100

Дан массив \(a\) длины \(n\). За одну операцию можно выбрать индекс \(i\) от \(2\) до \(n-1\) и сделать одно из следующих действий:

  • Вычесть \(1\) из \(a_{i-1}\), затем прибавить \(1\) к \(a_{i+1}\).

  • Вычесть \(1\) из \(a_{i+1}\), затем прибавить \(1\) к \(a_{i-1}\).

При этом все полученные после каждой операции числа должны оставаться неотрицательными. Можно ли сделать все элементы массива равными за какое-то количество таких операций?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора данных содержит число \(n\) (\(3 \le n \le 2\cdot 10^5\)).

Вторая строка каждого набора данных содержит \(n\) чисел \(a_i\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора данных выведите «YES» без кавычек, если можно сделать все элементы равными после некоторого числа данных операций, иначе выведите «NO» без кавычек.

Ответ можно выводить в любом регистре: «yes», «YeS», «nO»  — также являются корректными выводами.

C. Неинтересное число

дп математика Перебор *1200

Вам дано число \(n\) длины не больше \(10^5\).

Вы можете любое количество раз сделать с ним следующее: выбрать одну из его цифр, возвести её в квадрат и заменить получившейся исходную цифру. При этом результат должен быть цифрой (то есть, если вы выбрали цифру \(x\), то значение \(x^2\) должно быть меньше \(10\)).

Можно ли такими действиями получить из исходного числа такое, которое будет делиться нацело на \(9\)?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит число \(n\), без ведущих нулей. Длина числа не превосходит \(10^5\).

Гарантируется, что сумма длин чисел по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если с помощью описанных операций можно получить число, делящееся на \(9\), и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом примере из числа \(123\) возможно получить только \(123\), \(143\), \(129\) и \(149\), ни одно из них не делится на \(9\).

Во втором примере нужно заменить вторую цифру на её квадрат, тогда \(n\) станет равно \(342 = 38 \cdot 9\).

В третьем примере число уже делится на \(9\).

D. Максимизация цифровой строки

жадные алгоритмы математика Перебор Строки *1300

Дана строка \(s\), состоящая из цифр от \(0\) до \(9\). За одно действие можно выбрать любую цифру, кроме \(0\) или самой левой цифры, уменьшить её на \(1\) и поменять с цифрой слева от неё местами.

Например, за одну операцию из строки \(1023\) можно получить строки \(1103\), \(1022\).

Найдите, какую лексикографически максимальную строку можно получить с помощью этой операции.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждая строка набора данных содержит строку \(s\) из цифр (\(1 \le |s| \le 2\cdot 10^5\)), где \(|s|\)  — это длина строки \(s\). Строка не содержит ведущих нулей.

Гарантируется, что сумма \(|s|\) по всем наборам данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ в единственной строке.

Примечание

В первом примере подойдёт следующая последовательность операций: \(19 \rightarrow 81\).

Во втором примере подойдёт следующая последовательность операций: \(1709 \rightarrow 1780 \rightarrow 6180 \rightarrow 6710\).

В четвёртом примере подойдёт следующая последовательность операций: \(51476 \rightarrow 53176 \rightarrow 53616 \rightarrow 53651 \rightarrow 55351 \rightarrow 55431\).

E. Лучшая цена

Бинарный поиск жадные алгоритмы Перебор сортировки Структуры данных *1600

В самый крупный магазин Берляндии поступила партия елей. В магазин уже пришли \(n\) клиентов, которые хотят их купить.

Перед началом продаж магазину осталось определиться с ценой за одну елку (цена одинакова для всех покупателей). Для этого у магазина есть некоторая информация о каждом клиенте.

Для \(i\)-го клиента известно два целых числа \(a_i\) и \(b_i\), которые определяют его поведение:

  • если цена товара не более \(a_i\), то клиент купит елку и оставит положительный отзыв;
  • иначе, если цена товара не более \(b_i\), то клиент купит елку, но оставит отрицательный отзыв;
  • иначе клиент не будет покупать елку вообще.

Ваша задача — посчитать максимально возможный заработок магазина, если можно получить не более \(k\) отрицательных отзывов.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(0 \le k \le n\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^9\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 2 \cdot 10^9\); \(a_i < b_i\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможный заработок магазина, если можно получить не более \(k\) отрицательных отзывов.

Примечание

Рассмотрим пример из условия:

  • в первом наборе входных данных надо поставить цену, равную \(1\). Тогда оба клиента купят по одной елке и не оставят ни одного отрицательного отзыва;
  • во втором наборе входных данных надо поставить цену, равную \(5\). Тогда единственный клиент купит елку и оставит отрицательный отзыв;
  • в третьем наборе входных данных надо поставить цену, равную \(3\). Тогда все клиенты купят по одной елке, и магазин получит два отрицательных отзыва.
  • в четвертом наборе входных данных надо поставить цену, равную \(7\). Тогда два клиента купят по одной елке, и магазин получит один отрицательный отзыв.

F. Джокер

жадные алгоритмы математика Перебор реализация *2000

Рассмотрим колоду из \(n\) карт. Позиции в колоде пронумерованы от \(1\) до \(n\) сверху вниз. На \(m\)-й позиции расположен джокер.

К колоде последовательно применяются \(q\) операций. Во время \(i\)-й операции необходимо взять карту на \(a_i\)-й позиции и переместить её либо в начало, либо в конец колоды. Например, если колода имеет вид \([2, 1, 3, 5, 4]\), и \(a_i=2\), то после операции колода будет \([1, 2, 3, 5, 4]\) (карту со второй позиции перенесли в начало) или \([2, 3, 5, 4, 1]\) (карту со второй позиции перенесли в конец).

Ваша задача — посчитать количество различных позиций, в которых может находиться джокер после каждой из операций.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(q\) (\(2 \le n \le 10^9\); \(1 \le m \le n\); \(1 \le q \le 2 \cdot 10^5\)).

Вторая строка содержит \(q\) целых чисел \(a_1, a_2, \dots, a_q\) (\(1 \le a_i \le n\)).

Дополнительное ограничение на входные данные: сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел — количество различных позиций, в которых может находиться джокер после каждой из операций.

B. Выдающийся импрессионист

Бинарный поиск жадные алгоритмы Перебор Структуры данных *1200

If it was so, then let's make it a deal...
— MayDay, Gentleness

К сожалению, даже после десяти лет копирования картин известных художников, Эрик все еще не смог стать искусным художником-импрессионистом. Он хочет что-то забыть, но феномен белого медведя продолжает нависать над ним.

Эрик до сих пор помнит \(n\) впечатлений в виде целочисленного массива. Он записал их как \(w_1, w_2, \ldots, w_n\). Однако у него плохая память на впечатления. Для каждого \(1 \leq i \leq n\) он только запомнил, что выполнялось условие \(l_i \leq w_i \leq r_i\).

Эрик считает, что впечатление \(i\) является уникальным тогда и только тогда, когда существует массив \(w_1, w_2, \ldots, w_n\), в котором \(w_i \neq w_j\) выполняется для всех \(1 \leq j \leq n\), где \(j \neq i\).

Пожалуйста, помогите Эрику определить, является ли впечатление \(i\) уникальным для каждого \(1 \leq i \leq n\), независимо для каждого \(i\). Возможно, ваше суждение поможет переписать финальную историю.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2\cdot 10^5\)) — количество впечатлений.

Далее следует \(n\) строк, \(i\)-я из которых содержит два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq 2\cdot n\)) — минимально возможное значение и максимально возможное значение для \(w_i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите бинарную строку \(s\) длины \(n\): для каждого \(1 \leq i \leq n\), если впечатление \(i\) уникально, то \(s_i=\texttt{1}\); в противном случае, \(s_i=\texttt{0}\). Выводите строку без пробелов.

Примечание

В первом наборе входных данных единственным возможным массивом \(w\) является \([1, 1]\), в котором ни \(1\), ни \(2\) впечатления не являются уникальными (поскольку \(w_1 = w_2\)).

Во втором наборе входных данных все впечатления могут быть уникальными:

  • Для \(i = 1\) мы можем сделать \(w\) равным \([1, 3, 2, 3]\), и в нём \(w_1 \neq w_2\), \(w_1 \neq w_3\) и \(w_1 \neq w_4\);
  • Для \(i = 2\) мы можем сделать \(w\) равным \([2, 3, 1, 2]\), и в нём \(w_2 \neq w_1\), \(w_2 \neq w_3\) и \(w_2 \neq w_4\);
  • Для \(i = 3\) мы можем сделать \(w\) равным \([1, 1, 3, 1]\);
  • Для \(i = 4\) мы можем сделать \(w\) равным \([2, 3, 3, 1]\).

В третьем наборе входных данных, для \(i = 4\) мы можем сделать \(w\) равным \([3, 2, 2, 1, 3, 2]\). Таким образом, впечатление \(4\) — уникально.

F. Искренний матричный комплемент

дп жадные алгоритмы математика Перебор реализация Структуры данных *2600

3, 2, 1, ... We are the — RiOI Team!
— Felix & All, Special Thanks 3
  • Питер: Хорошие новости! Моя задача T311013 была одобрена!
  • \(\delta\): Я рад, что у моего компьютера разрядилась батарея, иначе я бы поучаствовал в раунде wyrqwq и получил бы отрицательную дельту.
  • Феликс: [thumbs_up] Условие задачи про удалённую песню!
  • Аквавейв: Нужно ли мне оплакивать свою химию?
  • Е.Космос: что?
  • Трайн: Хлеб.
  • Ирис: И почему же я всегда только тестирую задачи?

Пройдет время, и мы, возможно, встретимся снова. Оглядываясь назад на прошлое, можно сказать, что каждый прожил ту жизнь, которую хотел.

У Аквавейва есть матрица \(A\) размера \(n\times m\), элементы которой могут быть только целыми числами в диапазоне \([1, k]\) включительно. В матрице некоторые ячейки уже заполнены целым числом, в то время как остальные в данный момент не заполнены и обозначаются числом \(-1\).

Вы собираетесь заполнить все незаполненные ячейки в \(A\). После этого пусть \(c_{u,i}\) будет обозначать количество вхождений элемента \(u\) в \(i\)-ю строку. Аквавейв определяет красоту матрицы следующим образом:

\(\)\sum_{u=1}^k \sum_{i=1}^{n-1} c_{u,i} \cdot c_{u,i+1}.\(\)

Вы должны найти максимально возможную красоту \(A\) после оптимального заполнения пробелов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2\cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \leq n \leq 2\cdot 10^5\), \(2 \leq m \leq 2\cdot 10^5\), \(n \cdot m \leq 6\cdot 10^5\), \(1 \leq k \leq n\cdot m\)) — количество строк и столбцов матрицы \(A\) и диапазон целых чисел в матрице соответственно.

Затем следуют \(n\) строк, \(i\)-я строка содержит \(m\) целых числа \(A_{i,1},A_{i,2},\ldots,A_{i,m}\) (\(1 \leq A_{i,j} \leq k\) или \(A_{i,j} = -1\)) — элементы в \(A\).

Гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превосходит \(6\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможную красоту.

Примечание

В первом наборе входных данных матрица \(A\) уже определена. Её красота равняется

\(\)\sum_{u=1}^k \sum_{i=1}^{n-1} c_{u,i} \cdot c_{u,i+1} = c_{1,1}\cdot c_{1,2} + c_{1,2}\cdot c_{1,3} + c_{2,1}\cdot c_{2,2} + c_{2,2}\cdot c_{2,3} + c_{3,1}\cdot c_{3,2} + c_{3,2}\cdot c_{3,3} = 1\cdot 1 + 1\cdot 1 + 2\cdot 0 + 0\cdot 1 + 0\cdot 2 + 2\cdot 1 = 4.\(\)

Во втором наборе входных данных можно заполнить матрицу следующим образом:

\(\) \begin{bmatrix} 2 &3 &3 \\ 2 &2 &3 \end{bmatrix}, \(\)

и получить значение \(4\). Можно доказать, что это максимально возможный ответ, который можно получить.

В третьем наборе входных данных одной из возможных оптимальных конфигураций является:

\(\) \begin{bmatrix} 1 &1 &1 \\ 1 &2 &1 \\ 1 &1 &4 \end{bmatrix}. \(\)

В четвертом наборе входных данных одной из возможных оптимальных конфигураций является:

\(\) \begin{bmatrix} 1 &3 &2 &3 \\ 1 &3 &2 &1 \\ 3 &1 &5 &1 \end{bmatrix}. \(\)

В пятом наборе входных данных одной из возможных оптимальных конфигураций является:

\(\) \begin{bmatrix} 5 &5 &2 \\ 1 &8 &5 \\ 7 &5 &6 \\ 7 &7 &4 \\ 4 &4 &4 \end{bmatrix}. \(\)

G. Наивные разбиения строк

Бинарный поиск жадные алгоритмы математика Перебор Строки теория чисел хэши *3400

And I will: love the world that you've adored; wish the smile that you've longed for. Your hand in mine as we explore, please take me to tomorrow's shore.
— Faye Wong, As Wished

У Коколи есть строка \(t\) длины \(m\), состоящая из строчных латинских букв, и он хотел бы разделить её на части. Он называет пару строк \((x, y)\) прекрасной тогда и только тогда, когда существует последовательность строк \(a_1, a_2, \ldots, a_k\), такая, что:

  • \(t = a_1 + a_2 + \ldots + a_k\), где \(+\) обозначает конкатенацию строк.
  • Для каждого \(1 \leq i \leq k\) выполняется по крайней мере одно из следующих условий: \(a_i = x\), или \(a_i = y\).

У Коколи есть другая строка \(s\) длины \(n\), состоящая из строчных латинских букв. Теперь, для каждого \(1 \leq i < n\), Коколи хочет, чтобы вы определили, является ли пара строк \((s_1s_2 \ldots s_i, \, s_{i+1}s_{i+2} \ldots s_n)\) прекрасной.

Обратите внимание: поскольку входные и выходные данные большие, вам, возможно, потребуется оптимизировать их для решения этой задачи.

Например, в C++ достаточно использовать следующие строки в начале функции main():

int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr); std::cout.tie(nullptr);
}
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(T\) (\(1 \leq T \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq m \leq 5 \cdot 10^6\)) — длины строк \(s\) и \(t\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую только из строчных латинских букв.

Третья строка каждого набора входных данных содержит строку \(t\) длины \(m\), состоящую только из строчных латинских букв.

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(10^7\).

Выходные данные

Для каждого набора входных данных выведите бинарную строку \(r\) длины \(n - 1\): для каждого \(1 \leq i < n\), если \(i\)-я пара красива, \(r_i=\texttt{1}\); в противном случае, \(r_i=\texttt{0}\). Не выводите пробелы.

Примечание

В первом наборе входных данных, \(s = \tt aba\), \(t = \tt ababa\).

  • Для \(i = 1\): Коколи может разделить так: \(t = \texttt{a} + \texttt{ba} + \texttt{ba}\), поэтому пара строк \((\texttt{a}, \texttt{ba})\) прекрасна.
  • Для \(i = 2\): Коколи может разделить так: \(t = \texttt{ab} + \texttt{ab} + \texttt{a}\), поэтому пара строк \((\texttt{ab}, \texttt{a})\) прекрасна.

Во втором наборе входных данных, \(s = \tt czzz\), \(t = \tt czzzzzczzz\).

  • Для \(i = 1\): Можно доказать, что не существует разбиения \(t\) с использованием строк \(\texttt{c}\) и \(\texttt{zzz}\).
  • Для \(i = 2\): Коколи может разделить \(t\) на \(\texttt{cz} + \texttt{zz} + \texttt{zz} + \texttt{cz} + \texttt{zz}\).
  • Для \(i = 3\): Коколи может разделить \(t\) на \(\texttt{czz} + \texttt{z} + \texttt{z} + \texttt{z} + \texttt{czz} + \texttt{z}\).

C. Тропа

жадные алгоритмы Конструктив математика Перебор *1400

Во Флориде нет гор, и мужчина из Флориды не может осознать их существование. Ему действительно нужна ваша помощь в этом деле.

Среди дикой природы находится горная местность, представленная в виде прямоугольной сетки с \(n\) строками и \(m\) столбцами. Каждая ячейка в сетке в соответствии с её положением обозначается \((i, j)\), где \(i\) — индекс строки, а \(j\) — индекс столбца. Высота ячейки \((i, j)\) обозначается \(a_{i,j}\).

Однако в этом регионе произошли некоторые изменения. Путь, состоящий из \(n + m - 1\) ячеек, начинающийся в левом верхнем углу \((1, 1)\) и заканчивающийся в правом нижнем углу \((n, m)\), был очищен. Иными словами, для каждой ячейки \((i, j)\) вдоль этого пути высота \(a_{i,j}\) была установлена равной \(0\). Каждая ячейка пути находится либо на одну ячейку ниже предыдущей (\(\mathtt{D}\)), либо на одну ячейку правее (\(\mathtt{R}\)).

Известно, что до того, как в регион были внесены изменения, он обладал магическим свойством: все строки и все столбцы имели одинаковую сумму высот. Более формально, существует целое число \(x\) такое, что \(\sum_{j=1}^m a_{i, j} = x\) для всех \(1\le i\le n\), и \(\sum_{i=1}^n a_{i, j} = x\) для всех \(1\le j\le m\).

Ваша задача состоит в том, чтобы назначить новые высоты ячейкам на пути таким образом, чтобы вышеупомянутое магическое свойство было восстановлено. Можно доказать, что решение всегда существует. Если существует несколько решений, удовлетворяющих данному свойству, выведите любое из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n, m \leq 1000\)) — количество строк и столбцов в таблице.

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n+m-2\) (\(s_i = \mathtt{D}\) или \(s_i = \mathtt{R}\)) — шаги, которые путь выполняет от \((1, 1)\) до \((n, m)\). Символ \(\mathtt{D}\) представляет собой шаг вниз, а \(\mathtt{R}\) представляет шаг вправо.

В \(i\)-й из следующих \(n\) строк содержится по \(m\) целых чисел \(a_{i,1}, a_{i, 2}, \ldots, a_{i,m}\) (\(-10^6 \leq a_{i,j} \leq 10^6\)) — высота ячеек сетки. Гарантируется, что если ячейка \((i, j)\) лежит на пути, то \(a_{i,j} = 0\).

Гарантируется, что сумма значений \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк по \(m\) целых чисел, представляющих восстановленную сетку высот \(b_{i, j}\). Высоты должны удовлетворять \(-10^{15} \leq b_{i,j} \leq 10^{15}\), и дополнительно \(a_{i,j} = b_{i,j}\), если \((i, j)\) не находится на пути. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных сетка была заполнена таким образом, чтобы каждая строка и каждый столбец содержали числа \(1, 2, 3\) в некотором порядке, что приводит к общей сумме \(6\).

Во втором наборе входных данных сетка была заполнена таким образом, что сумма в каждой строке и в каждом столбце равнялась \(0\).

E. Стога сена

жадные алгоритмы Конструктив Перебор сортировки Структуры данных *2800

В следующее новолуние вселенная сбросится, начиная с Флориды. Мужчина из Флориды должен остановить это, но сначала ему нужно найти важный артефакт.

Есть \(n\) стогов сена, пронумерованных от \(1\) до \(n\), где стог сена \(i\) содержит \(a_i\) тюков сена. Под одним из стогов сена возможно спрятана иголка, но вы не знаете, под каким именно. Ваша задача состоит в том, чтобы переместить тюки сена так, чтобы каждый стог сена был пустым хотя бы один раз, что позволит вам проверить, спрятана ли иголка под этим конкретным стогом сена.

Однако этот процесс не так прост. Как только стог сена \(i\) будет опустошен в первый раз, ему будет присвоено ограничение по высоте, и он больше не сможет содержать более \(b_i\) тюков сена. Более формально ход описывается следующим образом:

  • Выберите два стога сена \(i\) и \(j\). Если стог сена \(i\) не был опустошен ранее или в стоге сена \(i\) содержится строго меньше, чем \(b_i\) тюков сена, вы можете переместить ровно \(1\) тюк сена из стога \(j\) в стог \(i\).

Обратите внимание: Перед опустошением стога его высота не ограничена, и вы можете переместить в этот стог столько тюков, сколько захотите.

Найдите минимальное количество ходов, необходимых для того, чтобы каждый стог сена был опустошен хотя бы один раз, или сообщите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2\le n\le 5\cdot 10^5\)) — количество стогов сена.

В \(i\)-й из следующих \(n\) строк содержится по два целых числа \(a_i\) и \(b_i\) (\(1\le a_i, b_i\le 10^9\)) — начальное количество тюков сена в \(i\)-м стоге сена и предел высоты, который ему присваивается после того, как он опустошается в первый раз.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество ходов, необходимое для обеспечения того, чтобы каждый стог сена был опустошен хотя бы один раз. Если невозможно опустошить каждый стог сена хотя бы один раз, выведите -1.

Примечание

В первом наборе входных данных мы можем выполнить следующую последовательность действий:

  • Переместите \(3\) тюка из стога \(1\) в стог \(2\). Стог \(1\) теперь пуст, и ему присвоено ограничение по высоте, равное \(5\).
  • Переместите \(5\) тюков из стога \(2\) в стог \(1\). Стог \(2\) теперь пуст, и ему присвоено ограничение по высоте, равное \(4\).

Приведенная выше последовательность требует \(3 + 5 = 8\) ходов. Невозможно использовать менее \(8\) ходов, так как следующая последовательность ходов недопустима:

  • Переместите \(2\) тюка из стога \(2\) в стог \(1\). Стог \(2\) теперь пуст, и ему присвоено ограничение по высоте, равное \(4\).
  • Переместите \(4\) тюка из стога \(1\) в стог \(2\). В стоге \(1\) теперь \(1\) тюк, в то время как в стоге \(2\) находится \(4\) тюка.
  • Стог \(1\) нельзя очистить, так как высота стога \(2\) уже равна \(4\), поэтому больше нельзя перемещать тюки из стога \(1\) в стог \(2\).

Во втором наборе входных данных задача невыполнима. Это связано с тем, что ограничения по высоте обоих стогов слишком малы, и как только один из стогов опустошается, другой стог не может стать пустым из-за небольших ограничений по высоте.

В третьем наборе входных данных можно показать, что следующая последовательность ходов является оптимальной:

  • Переместите \(1\) тюк из стога \(1\) в стог \(3\). Стог \(1\) теперь пуст, и ему присвоено ограничение по высоте, равное \(3\).
  • Переместите \(3\) тюка из стога \(2\) в стог \(1\).
  • Переместите \(1\) тюк из стога \(2\) в стог \(3\). Стог \(2\) теперь пуст, и ему присвоено ограничение по высоте, равное \(3\).
  • Переместите \(3\) тюка из стога \(3\) в стог \(2\). Стог \(3\) теперь пуст, и ему присвоено ограничение по высоте, равное \(1\).

Приведенная выше последовательность требует \(1 + 3 + 1 + 3 = 8\) ходов.

F. Космическое разбиение

геометрия математика Перебор Строки хэши *3200

Когда артефакт находится у тебя в руках, ткань реальности уступает место своему истинному хозяину — мужчине из Флориды.

Полимино является связной\(^{\text{∗}}\) фигурой, построенной путем присоединения одного или нескольких равных квадратов \(1 \times 1\) сторона к стороне. Полимино является выпуклым, если для любых двух квадратов в полимино, которые находятся в одной строке или одном столбце, все квадраты между ними также являются частью полимино. Ниже приведены четыре полимино, только первое и второе из которых выпуклые.

Вам дано выпуклое полимино с \(n\) строками и четной площадью. Для каждой строки \(i\) от \(1\) до \(n\) единичные квадраты от столбца \(l_i\) до столбца \(r_i\) являются частью полимино. Другими словами, в \(i\)-й строке находится \(r_i - l_i + 1\) единичных квадратов, которые являются частью полимино: \((i, l_i), (i, l_i + 1), \ldots, (i, r_i-1), (i, r_i)\).

Два полимино являются конгруэнтными тогда и только тогда, когда вы можете точно совместить их друг с другом в результате перемещений. Обратите внимание, что вам не разрешается поворачивать или отражать полимино. Определите, возможно ли разбить данное выпуклое полимино на два непересекающихся связных полимино, конгруэнтных друг другу. Следующие примеры иллюстрируют допустимое разбиение каждого из двух выпуклых полимино, показанных выше:

Полученные части полимино не обязательно должны быть выпуклыми. Каждый единичный квадрат должен принадлежать ровно одной из двух частей разбиения.

\(^{\text{∗}}\)Полимино является связным тогда и только тогда, когда для любых двух единичных квадратов \(u \neq v\), которые являются частью полимино, существует последовательность различных квадратов \(s_1, s_2, \ldots, s_k\), такая, что \(s_1 = u\), \(s_k = v\), все \(s_i\) являются частью полимино, и \(s_i, s_{i+1}\) имеют общую сторону для каждого \(1 \le i \le k - 1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество строк полимино.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1\le l_i\le r_i\le 10^9\)) — диапазон столбцов, которые являются частью полимино в \(i\)-й строке.

Гарантируется что площадь полимино является чётной. Другими словами, \(\sum_{i=1}^n r_i - l_i + 1\equiv 0\pmod{2}\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую либо «YES» или «NO» — может ли полимино быть разбито на части, как описано в задаче.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes», и «YES» будут приняты как положительный ответ.

Примечание

Первый и второй наборы входных данных являются полимино, показанными в условиях задачи, и могут быть разбиты, как показано на рисунке из условия.

Можно показать, что полимино в третьем наборе входных данных, показанное ниже, невозможно разбить. Ни одно из следующих разбиений не является корректным:

В разбиении слева полимино нельзя совместить только перемещениями, а в разбиении справа полимино не являются связными.

Можно показать, что полимино в четвертом наборе входных данных, показанное ниже, не поддается разбиению.

Обратите внимание, что хотя вы можете разбить его на два прямоугольника размера \(1 \times 2\), эти прямоугольники нельзя совместить перемещениями.

B. Найдите перестановку

графы Перебор поиск в глубину и подобное реализация сортировки *1300

Вам дан неориентированный граф с \(n\) вершинами, пронумерованными от \(1\) до \(n\). Этот граф кодирует секретную перестановку\(^{\text{∗}}\) \(p\) длины \(n\). Граф строится следующим образом:

  • Для каждой пары целых чисел \(1 \le i < j \le n\), между вершиной \(p_i\) и вершиной \(p_j\) добавляется неориентированное ребро тогда и только тогда, когда \(p_i < p_j\). Обратите внимание, что ребро добавляется не между вершинами \(i\) и \(j\), а между вершинами соответствующих им элементов. Обратитесь к примечаниям для лучшего понимания.

Ваша задача состоит в том, чтобы восстановить и вывести перестановку \(p\). Можно доказать, что перестановка \(p\) может быть определена однозначно.

\(^{\text{∗}}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 1000\)).

В \(i\)-й из следующих \(n\) строк содержится \(n\) символов \(g_{i, 1}g_{i, 2}\ldots g_{i, n}\) (\(g_{i, j} = \mathtt{0}\) или \(g_{i, j} = \mathtt{1}\)) — матрица смежности. \(g_{i, j} = \mathtt{1}\) тогда и только тогда, когда существует ребро между вершинами \(i\) и \(j\).

Гарантируется, что существует перестановка \(p\), которая генерирует данный граф. Также гарантируется, что граф неориентирован и не имеет петель, то есть выполняется \(g_{i, j} = g_{j, i}\) и \(g_{i, i} = \mathtt{0}\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) — восстановленную перестановку.

Примечание

В первом наборе входных данных \(p = [1]\). Поскольку нет пар \(1 \le i < j \le n\), в графе нет рёбер.

Граф для второго набора входных данных показан ниже. Например, когда мы выбираем \(i = 3\) и \(j = 4\), мы добавляем ребро между вершинами \(p_i = 1\) и \(p_j = 3\), потому что \(p_i < p_j\). Однако, когда мы выбираем \(i = 2\) и \(j = 3\), то \(p_i = 2\) и \(p_j = 1\), так что \(p_i < p_j\) не выполняется. Поэтому мы не добавляем ребро между \(2\) и \(1\).

В третьем наборе входных данных в графе нет рёбер, поэтому нет пар целых чисел \(1 \le i < j \le n\) таких, что \(p_i < p_j\). Следовательно, \(p = [6, 5, 4, 3, 2, 1]\).

C. Палиндромные подпоследовательности

Конструктив математика Перебор *1200

Для целочисленной последовательности \(a = [a_1, a_2, \ldots, a_n]\) определим \(f(a)\) как длину самой длинной подпоследовательности\(^{\text{∗}}\) из \(a\), которая является палиндромом\(^{\text{†}}\).

Пусть \(g(a)\) обозначает число подпоследовательностей длины \(f(a)\), которые являются палиндромами. Иными словами, \(g(a)\) подсчитывает количество палиндромных подпоследовательностей в \(a\), которые имеют максимальную длину.

Для данного числа \(n\), ваша задача состоит в том, чтобы найти любую последовательность \(a\) из \(n\) целых чисел, которая удовлетворяет следующим условиям:

  • \(1 \le a_i \le n\) для всех \(1 \le i \le n\).
  • \(g(a) > n\)

Можно доказать, что такая последовательность всегда существует при заданных ограничениях.

\(^{\text{∗}}\)Последовательность \(x\) является подпоследовательностью \(y\), если \(x\) может быть получена из \(y\) удалением нескольких (возможно, ни одного или всех) элементов на произвольных позициях.

\(^{\text{†}}\)Палиндром — это последовательность, которая читается одинаково слева направо и справа налево. Например, \([1, 2, 1, 3, 1, 2, 1]\), \([5, 5, 5, 5]\), и \([4, 3, 3, 4]\) являются палиндромами, в то время как \([1, 2]\) и \([2, 3, 3, 3, 3]\) — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(\color{red}{6} \le n \le 100\)) — длина последовательности.

Обратите внимание, что нет дополнительного ограничения на сумму \(n\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) — массив, удовлетворяющий условиям.

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом примере одним из возможных решений является \(a = [1, 1, 2, 3, 1, 2]\). В этом наборе входных данных \(f(a) = 3\), поскольку самая длинная палиндромная подпоследовательность имеет длину \(3\). Существует \(7\) способов выбрать подпоследовательность длины \(3\), которая является палиндромом, как показано ниже:

  1. \([a_1, a_2, a_5] = [1, 1, 1]\)
  2. \([a_1, a_3, a_5] = [1, 2, 1]\)
  3. \([a_1, a_4, a_5] = [1, 3, 1]\)
  4. \([a_2, a_3, a_5] = [1, 2, 1]\)
  5. \([a_2, a_4, a_5] = [1, 3, 1]\)
  6. \([a_3, a_4, a_6] = [2, 3, 2]\)
  7. \([a_3, a_5, a_6] = [2, 1, 2]\)

\(g(a) = 7\), что больше, чем \(n = 6\). Следовательно, \(a = [1, 1, 2, 3, 1, 2]\) — это верное решение.

Во втором примере одним из возможных решений является \(a = [7, 3, 3, 7, 5, 3, 7, 7, 3]\). В этом наборе входных данных \(f(a) = 5\). Существует \(24\) способа выбрать подпоследовательность длины \(5\), которая является палиндромом. Некоторыми примерами являются \([a_2, a_4, a_5, a_8, a_9] = [3, 7, 5, 7, 3]\) и \([a_1, a_4, a_6, a_7, a_8] = [7, 7, 3, 7, 7]\). Следовательно, \(g(a) = 24\), что больше, чем \(n = 9\). Следовательно, \(a = [7, 3, 3, 7, 5, 3, 7, 7, 3]\) — это верное решение.

В третьем примере \(f(a) = 7\) и \(g(a) = 190\), что больше, чем \(n = 15\).

D. Равные медианы

Бинарный поиск дп Комбинаторика Перебор разделяй и властвуй Структуры данных *2200

Массив \(b\) из \(m\) целых чисел называется хорошим, если после его сортировки выполняется \(b_{\left\lfloor \frac{m + 1}{2} \right\rfloor} = b_{\left\lceil \frac{m + 1}{2} \right\rceil}\). Другими словами, \(b\) является хорошим, если обе его медианы равны. В частности, если \(m\) нечетно, то \(\left\lfloor \frac{m + 1}{2} \right\rfloor = \left\lceil \frac{m + 1}{2} \right\rceil\), поэтому \(b\) гарантированно будет хорошим, если он имеет нечетную длину.

Вам дан массив \(a\) из \(n\) целых чисел. Вычислите количество хороших подмассивов\(^{\text{∗}}\) в \(a\).

\(^{\text{∗}}\)Массив \(x\) является подмассивом массива \(y\), если \(x\) может быть получен из \(y\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le \color{red}{\textbf{10}}\)) — заданный массив.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество хороших подмассивов в \(a\).

Примечание

В первом наборе входных данных каждый подмассив является хорошим, поскольку все его элементы равны \(1\).

Во втором наборе входных данных примером хорошего подмассива является \(b = [10, 2, 3, 3]\). Если его отсортировать, то \(b = [2, 3, 3, 10]\), значит, \(b_{\left\lfloor \frac{4 + 1}{2} \right\rfloor} = b_{\left\lceil \frac{4 + 1}{2} \right\rceil} = b_2 = b_3 = 3\). Другим примером может быть \(b = [1, 10, 2]\). С другой стороны, \(b = [1, 10]\) не подходит, поскольку его две медианы равны \(1\) и \(10\), и они не равны.

F1. Xor медиан (простая версия)

битмаски дп Комбинаторика математика Перебор *2700

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии ограничения на \(t\), \(k\) и \(m\) ниже. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Последовательность \(a\) из \(n\) целых чисел называется хорошей, если выполняется следующее условие:

  • Пусть \(\text{cnt}_x\) — количество вхождений \(x\) в последовательность \(a\). Для всех пар \(0 \le i < j < m\), по крайней мере одно из следующих условий должно быть истинным: \(\text{cnt}_i = 0\), \(\text{cnt}_j = 0\) или \(\text{cnt}_i \le \text{cnt}_j\). Другими словами, если и \(i\), и \(j\) присутствуют в последовательности \(a\), то число вхождений \(i\) в \(a\) меньше или равно числу вхождений \(j\) в \(a\).

Вам даны целые числа \(n\) и \(m\). Вычислите значение побитового XOR медиан\(^{\text{∗}}\) всех хороших последовательностей \(a\) длины \(n\), таких, что \(0\le a_i < m\).

Обратите внимание, что значение \(n\) может быть очень большим, поэтому вместо него вам даётся его двоичное представление.

\(^{\text{∗}}\)Медиана последовательности \(a\) длины \(n\) определяется как \(\left\lfloor\frac{n + 1}{2}\right\rfloor\)-е наименьшее значение в последовательности.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(k\) и \(m\) (\(1 \le k \le 200\), \(1 \le m \le 500\)) — количество битов в \(n\) и верхнюю границу элементов в последовательности \(a\).

Вторая строка каждого набора входных данных содержит бинарную строку длины \(k\) — двоичное представление \(n\) без ведущих нулей.

Гарантируется, что сумма значений \(k\) по всем наборам входных данных не превосходит \(200\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — побитовый XOR медиан всех хороших последовательностей \(a\) длины \(n\), где \(0\le a_i < m\)

Примечание

В первом наборе входных данных, \(n = 10_2 = 2\) и \(m = 3\). Существуют такие последовательности с элементами меньше \(m\): \([0, 0]\), \([0, 1]\), \([0, 2]\), \([1, 0]\), \([1, 1]\), \([1, 2]\), \([2, 0]\), \([2, 1]\), \([2, 2]\). Все они являются хорошими, поэтому ответ равен \(0 \oplus 0 \oplus 0 \oplus 0 \oplus 1 \oplus 1 \oplus 0 \oplus 1 \oplus 2 = 3\).

Во втором наборе входных данных, \(n = 11_2 = 3\) и \(m = 3\). Некоторыми хорошими последовательностями являются \([2, 2, 2]\), \([1, 0, 1]\), и \([2, 0, 1]\). Однако последовательность \([2, 0, 0]\) не является хорошей, потому что \(\text{cnt}_0 = 2\), \(\text{cnt}_2 = 1\). Следовательно, если мы выберем \(i = 0\) и \(j = 2\), то \(i < j\) выполняется, а \(\text{cnt}_i \le \text{cnt}_j\) неверно.

F2. Xor медиан (сложная версия)

битмаски дп Комбинаторика математика Перебор *3000

Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии ограничения на \(t\), \(k\) и \(m\) выше. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Последовательность \(a\) из \(n\) целых чисел называется хорошей, если выполняется следующее условие:

  • Пусть \(\text{cnt}_x\) — количество вхождений \(x\) в последовательность \(a\). Для всех пар \(0 \le i < j < m\), по крайней мере одно из следующих условий должно быть истинным: \(\text{cnt}_i = 0\), \(\text{cnt}_j = 0\) или \(\text{cnt}_i \le \text{cnt}_j\). Другими словами, если и \(i\), и \(j\) присутствуют в последовательности \(a\), то число вхождений \(i\) в \(a\) меньше или равно числу вхождений \(j\) в \(a\).

Вам даны целые числа \(n\) и \(m\). Вычислите значение побитового XOR медиан\(^{\text{∗}}\) всех хороших последовательностей \(a\) длины \(n\), таких, что \(0\le a_i < m\).

Обратите внимание, что значение \(n\) может быть очень большим, поэтому вместо него вам даётся его двоичное представление.

\(^{\text{∗}}\)Медиана последовательности \(a\) длины \(n\) определяется как \(\left\lfloor\frac{n + 1}{2}\right\rfloor\)-е наименьшее значение в последовательности.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(k\) и \(m\) (\(1 \le k \le 2 \cdot 10^5\), \(1 \le m \le 10^9\)) — количество битов в \(n\) и верхнюю границу элементов в последовательности \(a\).

Вторая строка каждого набора входных данных содержит бинарную строку длины \(k\) — двоичное представление \(n\) без ведущих нулей.

Гарантируется, что сумма значений \(k\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — побитовый XOR медиан всех хороших последовательностей \(a\) длины \(n\), где \(0\le a_i < m\)

Примечание

В первом наборе входных данных, \(n = 10_2 = 2\) и \(m = 3\). Существуют такие последовательности с элементами меньше \(m\): \([0, 0]\), \([0, 1]\), \([0, 2]\), \([1, 0]\), \([1, 1]\), \([1, 2]\), \([2, 0]\), \([2, 1]\), \([2, 2]\). Все они являются хорошими, поэтому ответ равен \(0 \oplus 0 \oplus 0 \oplus 0 \oplus 1 \oplus 1 \oplus 0 \oplus 1 \oplus 2 = 3\).

Во втором наборе входных данных, \(n = 11_2 = 3\) и \(m = 3\). Некоторыми хорошими последовательностями являются \([2, 2, 2]\), \([1, 0, 1]\), и \([2, 0, 1]\). Однако последовательность \([2, 0, 0]\) не является хорошей, потому что \(\text{cnt}_0 = 2\), \(\text{cnt}_2 = 1\). Следовательно, если мы выберем \(i = 0\) и \(j = 2\), то \(i < j\) выполняется, а \(\text{cnt}_i \le \text{cnt}_j\) неверно.

E1. Очередное упражнение на графы (простая версия)

Бинарный поиск графы дп кратчайшие пути Перебор снм сортировки *2300

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии есть дополнительное ограничение на \(m\). Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Недавно преподавателям «Т-поколения» нужно было сделать учебный контест. Им не хватает одной задачи, и в контесте как раз нет ни одной задачи на графы, поэтому они придумали следующую задачу.

Вам дан связный взвешенный неориентированный граф из \(n\) вершин и \(m\) ребер, который не содержит петель и кратных ребер.

Есть \(q\) вопросов вида \((a, b, k)\): среди всех путей от вершины \(a\) до вершины \(b\) найти наименьший \(k\)-й максимум весов ребер на пути\(^{\dagger}\).

Преподавателям показалось, что задача звучит очень интересно, но есть одно но... они не умеют ее решать. Помогите им и решите задачу, ведь до начала контеста осталось всего пару часов.

\(^{\dagger}\) Пусть \(w_1 \ge w_2 \ge \ldots \ge w_{h}\) — веса всех ребер на пути в порядке невозрастания. Тогда \(k\)-й максимум весов ребер на этом пути равен \(w_{k}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, m\) и \(q\) (\(2 \le n \le 400\), \(n - 1 \le m \le \operatorname{min}(\mathbf{400}, \frac{n \cdot (n - 1)}{2})\), \(1 \le q \le 3 \cdot 10^5\)) — количество вершин, количество ребер и количество вопросов соответственно.

Каждая из следующих \(m\) строк каждого набора входных данных содержит три целых числа \(v, u\) и \(w\) (\(1 \le v, u \le n\), \(1 \le w \le 10^9\)) — концы очередного ребра графа и его вес соответственно. Гарантируется, что граф не содержит петель и кратных ребер.

Каждая из следующих \(q\) строк каждого набора входных данных содержит три целых числа \(a, b\) и \(k\) (\(1 \le a, b \le n\), \(k \ge 1\)) — очередной вопрос. Гарантируется, что любой путь из вершины \(a\) в вершину \(b\) содержит не менее \(k\) ребер.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(400\).

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(400\).

Гарантируется, что сумма значений \(q\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответы на все вопросы.

Примечание

В первом наборе входных данных одним из оптимальных путей в первом запросе является путь \(1 \rightarrow 3 \rightarrow 4\), \(2\)-й максимум весов ребер на этом пути это \(1\). Во втором запросе одними из оптимальных путей являются путь \(2 \rightarrow 4 \rightarrow 3\), \(1\)-й максимум весов ребер это \(2\).

Во втором наборе входных данных одним из оптимальных путей в первом запросе является путь \(1 \rightarrow 2 \rightarrow 4 \rightarrow 5 \rightarrow 6\), \(3\)-й максимум весов ребер на этом пути это \(2\).

B. Стоимость массива

жадные алгоритмы Конструктив математика Перебор *1300

Вам дан массив \(a\) длины \(n\) и чётное число \(k\) (\(2 \le k \le n\)). Вам требуется разбить массив \(a\) на ровно \(k\) непустых подмассивов\(^{\dagger}\) так, чтобы каждый элемент массива \(a\) принадлежал ровно одному подмассиву.

Далее все подмассивы с чётными номерами (второй, четвёртый, \(\ldots\), \(k\)-й) склеивают в один массив \(b\). После этого в конец массива \(b\) добавляют \(0\).

Стоимостью массива \(b\) называется минимальный индекс \(i\), такой что \(b_i \neq i\). Например, стоимость массива \(b = [1, 2, 4, 5, 0]\) равна \(3\), т.к. \(b_1 = 1\), \(b_2 = 2\), \(b_3 \neq 3\). Определите минимальную стоимость массива \(b\), которую можно получить при оптимальном разбиении массива \(a\) на подмассивы.

\(^{\dagger}\)Массив \(x\) является подмассивом массива \(y\), если \(x\) может быть получен из \(y\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 2 \cdot 10^5\), \(k\) — чётное) — длина массива \(a\) и количество подмассивов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальную стоимость массива \(b\), которую можно получить при оптимальном разбиении.

Примечание

В первом наборе входных данных существует всего два возможных разбиения: \([[1], [1, 1]]\) и \([[1, 1], [1]]\). В любом случае \(b_1 = 1\), а \(b_2 \ne 2\), поэтому стоимость равна \(2\).

Во втором наборе входных данных существует единственное возможное разбиение, при котором \(b = [1, 2, 3, 4, 0]\), поэтому стоимость равна \(5\) (\(b_5 = 0 \ne 5\)).

В третьем наборе входных данных подходит следующее разбиение: \([[1], [1, 1], [2], [2]]\). Тогда \(b = [1, 1, 2, 0]\), и стоимость равна \(2\).

C. Обслуживание клиентов

жадные алгоритмы Конструктив математика Паросочетания Перебор сортировки *1600

Никир устроился работать регулировщиком очередей в компанию «Чёрный Контур». Ему нужно будет выбирать порядок обслуживания клиентов. Всего есть \(n\) очередей, в каждой из которых изначально стоит \(0\) человек. В каждый из следующих \(n\) моментов времени происходит два последовательных события:

  1. Во все очереди приходят новые клиенты. Более формально, в \(j\)-й момент времени количество людей в \(i\)-й очереди увеличивается на положительное целое число \(a_{i,j}\).
  2. Никир выбирает ровно одну из \(n\) очередей, которую будут обслуживать в этот момент времени. Количество клиентов в этой очереди становится равным \(0\).

Пусть количество людей в \(i\)-й очереди после всех событий равно \(x_i\). Никир хочет, чтобы MEX\(^{\dagger}\) набора чисел \(x_1, x_2, \ldots, x_n\) был как можно больше. Помогите ему определить максимальное значение, которое он сможет получить при оптимальном порядке обслуживания очередей.

\(^{\dagger}\)Наименьшее исключенное (MEX) набора чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее неотрицательное целое число \(y\), которое не встречается в наборе чисел \(c\).

Например:

  • \(\operatorname{MEX}([2,2,1])= 0\), так как \(0\) не принадлежит массиву.
  • \(\operatorname{MEX}([3,1,0,1]) = 2\), так как \(0\) и \(1\) принадлежат массиву, а \(2\) нет.
  • \(\operatorname{MEX}([0,3,1,2]) = 4\), так как \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, а \(4\) нет.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 300\)) — количество очередей и моментов времени.

\(i\)-я из следующих \(n\) строк содержит \(n\) целых чисел \(a_{i,1}, a_{i,2}, \ldots, a_{i,n}\) (\(1 \le a_{i,j} \le 10^9\)) — количество новых клиентов в \(i\)-й очереди в каждый из моментов времени.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальное значение \(\operatorname{MEX}([x_1, x_2, \ldots, x_n])\), которое можно получить.

Примечание

В первом наборе входных данных можно обслужить вторую очередь в момент времени \(1\) и первую очередь в момент времени \(2\). В первой очереди останется \(x_1 = 0\) человек, во второй очереди останется \(x_2 = 1\) человек. Тогда ответ равен \(\operatorname{MEX}([0, 1]) = 2\).

Во втором наборе входных данных можно оба раза обслужить первую очередь. В первой очереди останется \(x_1 = 0\) человек, во второй очереди останется \(x_2 = 20\) человек. Тогда ответ равен \(\operatorname{MEX}([0, 20]) = 1\).

В третьем наборе входных данных можно обслужить третью очередь в момент времени \(1\), вторую очередь в момент времени \(2\) и первую очередь в момент времени \(3\). В первой очереди останется \(x_1 = 0\) человек, во второй очереди останется \(x_2 = 1\) человек, в третьей очереди останется \(x_3 = 2\) человека. Тогда ответ равен \(\operatorname{MEX}([0, 1, 2]) = 3\).

E1. Хватит гамать (простая версия)

жадные алгоритмы Конструктив Перебор Строки хэши *2500

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии вам нужно найти только минимальное количество операций. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Вам даны \(n\) массивов, каждый из которых имеет длину \(m\). Обозначим \(j\)-й элемент \(i\)-го массива как \(a_{i, j}\). Гарантируется, что все \(a_{i, j}\) попарно различны. За одну операцию вы можете сделать следующее:

  • Выбрать какое-то целое число \(i\) (\(1 \le i \le n\)) и целое число \(x\) (\(1 \le x \le 2 \cdot n \cdot m\)).
  • Для всех целых чисел \(k\) от \(i\) до \(n\) в порядке возрастания сделать следующее:
    1. Добавить элемент \(x\) в начало \(k\)-го массива.

    2. Присвоить \(x\) значение, равное последнему элементу в \(k\)-м массиве.

    3. Удалить последний элемент из \(k\)-го массива.

Другими словами, вы можете вставить элемент в начало любого массива, после чего все элементы в этом и всех следующих массивах сдвигаются на один вправо. При этом последний элемент последнего массива удаляется.

Также вам дано описание массивов, которые необходимо получить после всех операций. То есть после выполнения операций \(j\)-й элемент в \(i\)-м массиве должен быть равен \(b_{i, j}\). Гарантируется, что все \(b_{i, j}\) попарно различны.

Определите минимальное количество операций, которое необходимо выполнить, чтобы получить нужные массивы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3 \cdot 10^5\)) — количество массивов и количество элементов в каждом массиве.

\(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, m}\) (\(1 \le a_{i, j} \le 2 \cdot n \cdot m\)) — элементы в \(i\)-м изначальном массиве. Гарантируется, что все \(a_{i, j}\) попарно различны.

\(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел \(b_{i, 1}, b_{i, 2}, \ldots, b_{i, m}\) (\(1 \le b_{i, j} \le 2 \cdot n \cdot m\)) — элементы в \(i\)-м конечном массиве. Гарантируется, что все \(b_{i, j}\) попарно различны.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество операций, которые необходимо выполнить.

Примечание

В первом наборе входных данных подходит следующая последовательность из \(3\) операций:

  • Применим операцию к первому массиву с \(x = 1\). Тогда в начало первого массива добавится элемент \(1\), а значение \(x\) станет равным \(6\). Последний элемент удалится, и первый массив будет иметь вид \([1, 2]\). Далее, элемент \(x\) добавляется в начало второго массива, и значение \(x\) становится равным \(4\). Последний элемент второго массива удаляется, и оба массива имеют вид \([1, 2]\) и \([6, 3]\) соответственно после первой операции.
  • Применим операцию ко второму массиву с \(x = 8\). Тогда первый массив не изменится, и оба массива будут иметь вид \([1, 2]\) и \([8, 6]\) соответственно.
  • Применим операцию ко второму массиву при \(x = 7\), тогда оба массива будут иметь необходимый вид \([1, 2]\) и \([7, 8]\) соответственно.

Во втором наборе входных данных получить нужный массив можно только за \(5\) операций.

В третьем наборе входных данных подходит следующая последовательность из \(3\) операций:

  • Применим операцию с \(x = 11\) к первому массиву.
  • Применим операцию с \(x = 12\) ко второму массиву.
  • Применим операцию с \(x = 13\) к третьему массиву.

E2. Хватит гамать (сложная версия)

Конструктив Перебор Строки Структуры данных хэши *2900

Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии вам нужно вывести все операции, которые нужно сделать. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Вам даны \(n\) массивов, каждый из которых имеет длину \(m\). Обозначим \(j\)-й элемент \(i\)-го массива как \(a_{i, j}\). Гарантируется, что все \(a_{i, j}\) попарно различны. За одну операцию вы можете сделать следующее:

  • Выбрать какое-то целое число \(i\) (\(1 \le i \le n\)) и целое число \(x\) (\(1 \le x \le 2 \cdot n \cdot m\)).
  • Для всех целых чисел \(k\) от \(i\) до \(n\) в порядке возрастания сделать следующее:
    1. Добавить элемент \(x\) в начало \(k\)-го массива.

    2. Присвоить \(x\) значение, равное последнему элементу в \(k\)-м массиве.

    3. Удалить последний элемент из \(k\)-го массива.

Другими словами, вы можете вставить элемент в начало любого массива, после чего все элементы в этом и всех следующих массивах сдвигаются на один вправо. При этом последний элемент последнего массива удаляется.

Также вам дано описание массивов, которые необходимо получить после всех операций. То есть после выполнения операций \(j\)-й элемент в \(i\)-м массиве должен быть равен \(b_{i, j}\). Гарантируется, что все \(b_{i, j}\) попарно различны.

Определите минимальное количество операций, которое необходимо выполнить, чтобы получить нужные массивы, а также выведите саму последовательность всех операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3 \cdot 10^5\)) — количество массивов и количество элементов в каждом массиве.

\(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, m}\) (\(1 \le a_{i, j} \le 2 \cdot n \cdot m\)) — элементы в \(i\)-м изначальном массиве. Гарантируется, что все \(a_{i, j}\) попарно различны.

\(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел \(b_{i, 1}, b_{i, 2}, \ldots, b_{i, m}\) (\(1 \le b_{i, j} \le 2 \cdot n \cdot m\)) — элементы в \(i\)-м конечном массиве. Гарантируется, что все \(b_{i, j}\) попарно различны.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в первой строке единственное целое число — минимальное количество операций, которые необходимо выполнить.

Далее, для каждой операции выведите два целых числа \(i\) и \(x\) (\(1 \le i \le n\), \(1 \le x \le 2 \cdot n \cdot m\)) — номер массива, куда вставляется элемент, и значение элемента, соответственно.

Если существует несколько возможных последовательностей с минимальным количеством операций, выведите любую из них.

Примечание

В первом наборе входных данных подходит следующая последовательность из \(3\) операций:

  • Применим операцию к первому массиву с \(x = 1\). Тогда в начало первого массива добавится элемент \(1\), а значение \(x\) станет равным \(6\). Последний элемент удалится, и первый массив будет иметь вид \([1, 2]\). Далее, элемент \(x\) добавляется в начало второго массива, и значение \(x\) становится равным \(4\). Последний элемент второго массива удаляется, и оба массива имеют вид \([1, 2]\) и \([6, 3]\) соответственно после первой операции.
  • Применим операцию ко второму массиву с \(x = 8\). Тогда первый массив не изменится, и оба массива будут иметь вид \([1, 2]\) и \([8, 6]\) соответственно.
  • Применим операцию ко второму массиву при \(x = 7\), тогда оба массива будут иметь необходимый вид \([1, 2]\) и \([7, 8]\) соответственно.

Во втором наборе входных данных получить нужный массив можно только за \(5\) операций.

В третьем наборе входных данных подходит следующая последовательность из \(3\) операций:

  • Применим операцию с \(x = 11\) к первому массиву.
  • Применим операцию с \(x = 12\) ко второму массиву.
  • Применим операцию с \(x = 13\) к третьему массиву.

A. Фибоначчиевость

Перебор *800

Дан массив из \(5\) целых чисел. Изначально вам известны только \(a_1,a_2,a_4,a_5\). Вы можете присвоить элементу \(a_3\) любое целое значение (в том числе отрицательное или нулевое). Фибоначчиевость массива — это количество целых чисел \(i\) (\(1 \leq i \leq 3\)) таких, что \(a_{i+2}=a_i+a_{i+1}\). Найдите максимальную Фибоначчиевость среди всех целых значений \(a_3\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит четыре целых числа \(a_1, a_2, a_4, a_5\) (\(1 \leq a_i \leq 100\)).

Выходные данные

Для каждого набора входных данных выведите максимальную Фибоначчиевость на новой строке.

Примечание

В первом наборе входных данных мы можем установить \(a_3\) равным \(2\), чтобы достичь максимальной Фибоначчиевости равной \(3\).

В третьем наборе входных данных можно показать, что \(2\) — это максимальная Фибоначчиевость, которую можно достичь. Это можно сделать, установив \(a_3\) равным \(18\).

A. Фибоначчиевость

Перебор *800

Дан массив из \(5\) целых чисел. Изначально вам известны только \(a_1,a_2,a_4,a_5\). Вы можете присвоить элементу \(a_3\) любое целое значение (в том числе отрицательное или нулевое). Фибоначчиевость массива — это количество целых чисел \(i\) (\(1 \leq i \leq 3\)) таких, что \(a_{i+2}=a_i+a_{i+1}\). Найдите максимальную Фибоначчиевость среди всех целых значений \(a_3\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит четыре целых числа \(a_1, a_2, a_4, a_5\) (\(1 \leq a_i \leq 100\)).

Выходные данные

Для каждого набора входных данных выведите максимальную Фибоначчиевость на новой строке.

Примечание

В первом наборе входных данных мы можем установить \(a_3\) равным \(2\), чтобы достичь максимальной Фибоначчиевости равной \(3\).

В третьем наборе входных данных можно показать, что \(2\) — это максимальная Фибоначчиевость, которую можно достичь. Это можно сделать, установив \(a_3\) равным \(18\).

A. Фибоначчиевость

Перебор *800

Дан массив из \(5\) целых чисел. Изначально вам известны только \(a_1,a_2,a_4,a_5\). Вы можете присвоить элементу \(a_3\) любое целое значение (в том числе отрицательное или нулевое). Фибоначчиевость массива — это количество целых чисел \(i\) (\(1 \leq i \leq 3\)) таких, что \(a_{i+2}=a_i+a_{i+1}\). Найдите максимальную Фибоначчиевость среди всех целых значений \(a_3\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит четыре целых числа \(a_1, a_2, a_4, a_5\) (\(1 \leq a_i \leq 100\)).

Выходные данные

Для каждого набора входных данных выведите максимальную Фибоначчиевость на новой строке.

Примечание

В первом наборе входных данных мы можем установить \(a_3\) равным \(2\), чтобы достичь максимальной Фибоначчиевости равной \(3\).

В третьем наборе входных данных можно показать, что \(2\) — это максимальная Фибоначчиевость, которую можно достичь. Это можно сделать, установив \(a_3\) равным \(18\).

A. Фибоначчиевость

Перебор *800

Дан массив из \(5\) целых чисел. Изначально вам известны только \(a_1,a_2,a_4,a_5\). Вы можете присвоить элементу \(a_3\) любое целое значение (в том числе отрицательное или нулевое). Фибоначчиевость массива — это количество целых чисел \(i\) (\(1 \leq i \leq 3\)) таких, что \(a_{i+2}=a_i+a_{i+1}\). Найдите максимальную Фибоначчиевость среди всех целых значений \(a_3\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит четыре целых числа \(a_1, a_2, a_4, a_5\) (\(1 \leq a_i \leq 100\)).

Выходные данные

Для каждого набора входных данных выведите максимальную Фибоначчиевость на новой строке.

Примечание

В первом наборе входных данных мы можем установить \(a_3\) равным \(2\), чтобы достичь максимальной Фибоначчиевости равной \(3\).

В третьем наборе входных данных можно показать, что \(2\) — это максимальная Фибоначчиевость, которую можно достичь. Это можно сделать, установив \(a_3\) равным \(18\).

A. Фибоначчиевость

Перебор *800

Дан массив из \(5\) целых чисел. Изначально вам известны только \(a_1,a_2,a_4,a_5\). Вы можете присвоить элементу \(a_3\) любое целое значение (в том числе отрицательное или нулевое). Фибоначчиевость массива — это количество целых чисел \(i\) (\(1 \leq i \leq 3\)) таких, что \(a_{i+2}=a_i+a_{i+1}\). Найдите максимальную Фибоначчиевость среди всех целых значений \(a_3\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит четыре целых числа \(a_1, a_2, a_4, a_5\) (\(1 \leq a_i \leq 100\)).

Выходные данные

Для каждого набора входных данных выведите максимальную Фибоначчиевость на новой строке.

Примечание

В первом наборе входных данных мы можем установить \(a_3\) равным \(2\), чтобы достичь максимальной Фибоначчиевости равной \(3\).

В третьем наборе входных данных можно показать, что \(2\) — это максимальная Фибоначчиевость, которую можно достичь. Это можно сделать, установив \(a_3\) равным \(18\).

E. Кевин и И

битмаски дп жадные алгоритмы математика Перебор сортировки *2000

У Кевина есть целочисленная последовательность \(a\) длины \(n\). Также у Кевина есть \(m\) типов магии, где \(i\)-й тип магии может быть представлен целым числом \(b_i\).

Кевин может выполнить не более \(k\) (возможно, ноль) магических операций:

  • Выбрать два индекса \(i\) (\(1\leq i\leq n\)) и \(j\) (\(1\leq j\leq m\)), а затем сделать \(a_i\) равным \(a_i\ \&\ b_j\). Здесь \(\&\) обозначает операцию побитового И.

Найдите минимально возможную сумму последовательности \(a\) после выполнения не более \(k\) операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, m, k\) (\(1\leq n \leq 10^5\), \(1\leq m \leq 10\), \(0\leq k\leq nm\)) — длина \(a\), количество типов магии и максимальное количество операций.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0\leq a_i < 2^{30}\)).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(0\leq b_i < 2^{30}\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможную сумму последовательности \(a\) после выполнения не более \(k\) операций.

Примечание

В первом наборе входных данных возможна такая последовательность операций:

  • Сделать \(a_1\) равным \(a_1\ \&\ b_1\). Последовательность станет равна \([5]\).
  • Сделать \(a_1\) равным \(a_1\ \&\ b_3\). Последовательность станет равна \([1]\).

Во втором наборе входных данных возможна такая последовательность операций:

  • Сделать \(a_1\) равным \(a_1\ \&\ b_3\). Последовательность станет равна \([1, 6]\).
  • Сделать \(a_2\) равным \(a_2\ \&\ b_3\). Последовательность станет равна \([1, 2]\).

C. Чирно и операции

математика Перебор *1200

У Чирно есть последовательность \(a\) длины \(n\). Она может выполнять каждую из следующих операций любое количество раз (возможно, ноль). Есть дополнительное условие — перед операцией текущая длина \(a\) не должна быть равна \(1\):

  • Развернуть последовательность. Формально, \([a_1,a_2,\ldots,a_n]\) становится \([a_n,a_{n-1},\ldots,a_1]\) после операции.
  • Заменить последовательность на её разностную последовательность. Формально, \([a_1,a_2,\ldots,a_n]\) становится \([a_2-a_1,a_3-a_2,\ldots,a_n-a_{n-1}]\) после операции.

Найдите максимальную возможную сумму элементов \(a\) после операций.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 50\)) — длина последовательности \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(|a_i|\le 1000\)) — последовательность \(a\).

Выходные данные

Для каждого набора входных данных выведите целое число, представляющее максимальную возможную сумму.

Примечание

В первом наборе входных данных Чирно не может выполнить ни одной операции, поэтому ответ равен \(-1000\).

Во втором наборе входных данных Чирно сначала разворачивает последовательность, затем заменяет последовательность на её разностную последовательность: \([5,-3]\to[-3,5]\to[8]\). Можно доказать, что это максимизирует сумму, поэтому ответ равен \(8\).

В третьем наборе входных данных Чирно может не выполнять операции, поэтому ответ равен \(1001\).

C. Удалить ровно две

графы Деревья дп жадные алгоритмы Перебор поиск в глубину и подобное сортировки Структуры данных *1600

Недавно Маленький Джон получил дерево от своей тёти, чтобы украсить свой дом. Но, как кажется, одного дерева недостаточно, чтобы украсить весь дом. У Маленького Джона появилась идея. Может быть, он сможет удалить несколько вершин из дерева. Это превратит его в большее количество деревьев! Верно?

Вам дано дерево\(^{\text{∗}}\), состоящее из \(n\) вершин. Вы должны выполнить следующую операцию ровно дважды.

  • Выберите вершину \(v\);
  • Удалите все рёбра, соединённые с вершиной \(v\), а также саму вершину \(v\).

Вам необходимо найти максимальное количество компонент связности после выполнения операции ровно дважды.

Две вершины \(x\) и \(y\) находятся в одной компоненте связности тогда и только тогда, когда существует путь от \(x\) до \(y\). Граф с \(0\) вершинами имеет \(0\) компонент связности по определению.\(^{\text{†}}\)

\(^{\text{∗}}\)Деревом называется связный граф без циклов.

\(^{\text{†}}\)Но считается ли такой граф связным?..

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Каждая из следующих \(n-1\) строк содержит два целых числа \(u_i\) и \(v_i\), обозначающие две вершины, соединённые ребром (\(1 \le u_i,v_i \le n\), \(u_i \neq v_i\)). Гарантируется, что данные рёбра образуют дерево.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите максимальное количество компонент связности в отдельной строке.

Примечание

В первом примере удаление вершины дважды сделает граф пустым. По определению количество компонент связности в графе с \(0\) вершинами равно \(0\). Поэтому ответ равен \(0\).

Во втором примере удаление двух вершин \(1\) и \(2\) оставляет \(2\) компоненты связности. Поскольку невозможно создать \(3\) компоненты связности с \(2\) вершинами, ответ равен \(2\).

В третьем примере удаление двух вершин \(1\) и \(5\) оставляет \(4\) компоненты связности, которые являются \(\left\{ 2,4\right\}\), \(\left\{ 3\right\}\), \(\left\{ 6\right\}\) и \(\left\{ 7\right\}\). Можно показать, что невозможно получить \(5\) компонент связности. Поэтому ответ равен \(4\).

D. Игра с треугольниками

Бинарный поиск геометрия жадные алгоритмы математика Перебор реализация Структуры данных Тернарный поиск *2000

Даже маленькому Джону нужны деньги, чтобы купить дом. Но он недавно потерял работу; как же он теперь заработает деньги? Конечно, играя в игру, которая дает ему деньги в качестве награды! Ну, может быть, не в те игры, о которых вы думаете.

На плоскости есть \(n+m\) различных точек \((a_1,0), (a_2,0), \ldots, (a_{n},0), (b_1,2), (b_2,2), \ldots, (b_{m},2)\). Изначально ваш счет равен \(0\). Чтобы увеличить свой счет, вы можете выполнить следующую операцию:

  • Выберите три различные точки, которые не лежат на одной прямой.
  • Увеличьте свой счет на площадь треугольника, образованного этими тремя точками.
  • Затем удалите три точки с плоскости.
Пример игры, где операция выполняется дважды.

Пусть \(k_{\max}\) — максимальное количество операций, которое можно выполнить. Например, если нельзя выполнить эту операцию ни разу, то \(k_\max\) равно \(0\). Кроме того, определим \(f(k)\) как максимальный возможный счет, который можно получить, выполнив операцию ровно \(k\) раз. Здесь \(f(k)\) определено для всех целых чисел \(k\), таких что \(0 \le k \le k_{\max}\).

Найдите значение \(k_{\max}\) и найдите значения \(f(x)\) для всех целых чисел \(x=1,2,\ldots,k_{\max}\) независимо.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le {3 \cdot 10^4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n,m \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) попарно различных целых чисел \(a_1,a_2,\ldots,a_{n}\) — точки на \(y=0\) (\(-10^9 \le a_i \le 10^9\)).

Третья строка каждого набора входных данных содержит \(m\) попарно различных целых чисел \(b_1,b_2,\ldots,b_{m}\) — точки на \(y=2\) (\(-10^9 \le b_i \le 10^9\)).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, учитывая, что максимальное количество операций равно \(k_{\max}\), вы должны вывести не более двух строк:

  • Первая строка содержит значение \(k_{\max}\);
  • Вторая строка содержит \(k_{\max}\) целых числа, обозначающих \(f(1),f(2),\ldots,f(k_{\max})\). Вы можете опустить эту строку, если \(k_{\max}\) равно \(0\).

Обратите внимание, что в условиях этой задачи можно показать, что все значения \(f(x)\) являются целыми числами, не превышающими \(10^{16}\).

Примечание

В первом наборе входных данных есть \(1+3=4\) точки \((0,0),(0,2),(1,2),(-1,2)\).

Можно показать, что вы не можете выполнить две или более операций. Значение \(k_{\max}\) равно \(1\), и вас просят только о значении \(f(1)\).

Вы можете выбрать \((0,0)\), \((-1,2)\) и \((1,2)\) в качестве трех вершин треугольника. После этого ваш счет увеличивается на площадь треугольника, которая равна \(2\). Затем три точки удаляются с плоскости. Можно показать, что максимальное значение вашего счета после выполнения одной операции равно \(2\). Следовательно, значение \(f(1)\) равно \(2\).

В пятом наборе входных данных есть \(8+2=10\) точек.

Можно показать, что вы не можете выполнить три или более операций. Значение \(k_{\max}\) равно \(2\), и вас просят о значениях \(f(1)\) и \(f(2)\).

Чтобы максимизировать счет с помощью только одной операции, вы можете выбрать три точки \((198\,872\,582,0)\), \((-1\,000\,000\,000,2)\) и \((1\,000\,000\,000,2)\). Затем три точки удаляются с плоскости. Можно показать, что максимальное значение вашего счета после выполнения одной операции равно \(2\,000\,000\,000\). Следовательно, значение \(f(1)\) равно \(2\,000\,000\,000\).

Чтобы максимизировать счет с помощью ровно двух операций, вы можете выбрать следующую последовательность операций.

  • Выберите три точки \((-509\,489\,796,0)\), \((553\,177\,666,0)\) и \((-1\,000\,000\,000,2)\). Три точки удаляются.
  • Выберите три точки \((-400\,714\,529,0)\), \((564\,040\,265,0)\) и \((1\,000\,000\,000,2)\). Три точки удаляются.

Тогда счет после двух операций становится \(2\,027\,422\,256\). Можно показать, что максимальное значение вашего счета после выполнения ровно двух операций равно \(2\,027\,422\,256\). Следовательно, значение \(f(2)\) равно \(2\,027\,422\,256\).

A. Скибидус и Амог'у

жадные алгоритмы Конструктив Перебор реализация Строки *800

Скибидус приземляется на чужой планете, где местное племя Амог говорит на языке Амог'у. В Амог'у существуют две формы существительных: единственное и множественное.

Учитывая, что корень существительного записывается как \(S\), две формы записываются следующим образом:

  • Единственное: \(S\) \(+\) «us»
  • Множественное: \(S\) \(+\) «i»

Здесь \(+\) обозначает конкатенацию строк. Например, abc \(+\) def \(=\) abcdef.

Например, когда \(S\) записывается как «amog», то форма единственного числа записывается как «amogus», а форма множественного числа записывается как «amogi». Обратите внимание, что существительные Амог'у могут иметь пустой корень — в частности, «us» является формой единственного числа для «i».

Дано существительное Амог'у в форме единственного числа, пожалуйста, преобразуйте его в соответствующее существительное во множественном числе.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит строку \(W\), которая является существительным Амог'у в единственном числе. Гарантируется, что \(W\) состоит только из строчных английских букв, имеет длину не более \(10\) и заканчивается на «us».

Выходные данные

Для каждого набора входных данных выведите соответствующее существительное во множественном числе на отдельной строке.

A. Соседние суммы цифр

Конструктив математика Перебор *800

Дано два числа \(x, y\). Вам нужно определить, существует ли такое положительное число \(n\), что \(S(n) = x\), \(S(n + 1) = y\). Здесь \(S(a)\) обозначает сумму цифр числа \(a\) в десятичной системе счисления.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(x, y\) (\(1 \le x \le 1000, 1 \le y \le 1000\)).

Выходные данные

Для каждого набора входных данных выведите «NO», если подходящее \(n\) не существует. Иначе выведите «YES».

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

В первом тестовом примере подойдёт, например, \(n = 100\). \(S(100) = 1\), \(S(101) = 2\).

Во втором тестовом примере можно показать, что \(S(n) \neq S(n+1)\) для всех \(n\), поэтому ответ No.

В четвёртом тестовом примере подойдёт \(n = 10^{111}-1\), число, состоящее из \(111\) цифр \(9\).

B. Два больших мешка

дп жадные алгоритмы Перебор сортировки *1200

У вас есть два больших мешка с числами. Изначально первый мешок содержит \(n\) чисел: \(a_1, a_2, \ldots, a_n\), а второй мешок пуст. Вам разрешено применять следующие операции:

  • Выбрать любое число из первого мешка и переместить его во второй мешок.
  • Выбрать число из первого мешка, такое что равное ему обязательно присутствует во втором мешке, и увеличить его на единицу.

Вы можете применять неограниченное количество операций обоих типов в любом порядке. Возможно ли сделать содержимое первого и второго мешка одинаковым?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \le n \le 1000\)) — длина массива \(a\). Гарантируется, что \(n\) — чётное число.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите «YES», если возможно уравнять содержимое мешков. Иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

Разберём шестой тестовый пример: покажем последовательность операций, приводящую к равенству мешков. Изначально первый мешок состоит из чисел \((3, 3, 4, 5, 3, 3)\), а второй мешок пуст.

  1. В первую операцию перемещаем число \(3\) из первого мешка во второй. Состояние: \((3, 4, 5, 3, 3)\) и \((3)\).
  2. Во вторую операцию увеличиваем число \(3\) из первого мешка на единицу. Эта операция возможна, так как второй мешок содержит число \(3\). Состояние: \((4, 4, 5, 3, 3)\) и \((3)\).
  3. В третью операцию перемещаем число \(4\) из первого мешка во второй. Состояние: \((4, 5, 3, 3)\) и \((3, 4)\).
  4. В четвёртую операцию увеличиваем число \(4\) из первого мешка на единицу. Состояние: \((5, 5, 3, 3)\) и \((3, 4)\).
  5. В пятую операцию перемещаем число \(5\) из первого мешка во второй. Состояние: \((5, 3, 3)\) и \((3, 4, 5)\).
  6. В шестую операцию увеличиваем число \(3\) из первого мешка на единицу. Состояние: \((5, 3, 4)\) и \((3, 4, 5)\).

Как видим, в результате таких операций возможно сделать содержимое мешков равным, поэтому ответ существует.

C. Девяткино

жадные алгоритмы математика Перебор поиск в глубину и подобное *1500

Вам дано положительное целое число \(n\). За одну операцию можно прибавить к \(n\) любое целое положительное число, десятичная запись которого содержит только цифру \(9\), возможно, повторённую несколько раз.

Какое минимальное количество операций необходимо проделать, чтобы число \(n\) содержало хотя бы одну цифру \(7\) в своей десятичной записи?

Например, если \(n = 80\), достаточно одной операции: можно прибавить \(99\) к \(n\), после операции \(n = 179\), содержит цифру \(7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит целое число \(n\) (\(10 \leq n \leq 10^9\)).

Выходные данные

Для каждого набора входных данных выведите минимальное количество операций, необходимое, чтобы число \(n\) содержало цифру \(7\).

Примечание

В первом наборе входных данных достаточно трёх операций: \(51 + 9 + 9 + 9 = 78\), содержит цифру \(7\). Можно показать, что за одну или две операции невозможно добиться цели.

Во втором наборе входных данных достаточно двух операций: \(60 + 9 + 9 = 78\).

В третьем наборе входных данных достаточно одной операции: \(61 + 9 = 70\).

В четвёртом наборе входных данных \(n\) уже содержит цифру \(7\), поэтому никаких операций проводить не требуется.

В пятом наборе входных данных можно прибавить \(99\) к \(n\) и получить число, содержащее цифру \(7\).

A. Система уравнений

Перебор *800

Фурик очень любит уроки математики, поэтому, в отличие от Рубика, он их не посещает. Но теперь Фурик хочет получить хорошую оценку по математике. Для этого Лариса Ивановна, учительница математики, дала ему новое задание. Фурик сразу же решил эту задачу, а вы сможете?

Задана система уравнений:

Нужно посчитать количество пар целых чисел (a, b) (0 ≤ a, b), которые удовлетворяют системе.

Входные данные

В единственной строке заданы два целых числа n, m (1 ≤ n, m ≤ 1000) — параметры системы. Числа в строке разделены пробелом.

Выходные данные

В единственную строку выведите ответ на задачу.

Примечание

В первом примере подходит пара чисел (3, 0). Во втором примере подходит пара чисел (3, 5). В третьем примере не существует подходящей пары.

B. Домашнее задание

жадные алгоритмы Конструктив математика Перебор *1600

Фурик очень любит уроки математики, поэтому, в отличии от Рубика, он их не посещает. Но теперь Фурик хочет получить хорошую оценку по математике. Для этого Лариса Ивановна, учительница математики, дала ему новое задание. Фурик сразу же решил эту задачу, а вы сможете?

Задан набор из цифр, вам нужно найти максимальное целое число, которое можно составить из этих цифр. Составленное число должно делиться на 2, 3, 5 без остатка. Можно использовать не все цифры из набора, запрещено использовать лидирующие нули.

Каждую цифру разрешено использовать в числе столько раз, сколько она встречается в наборе.

Входные данные

В первой строке содержится единственное целое число n (1 ≤ n ≤ 100000) — количество цифр в наборе. Во второй строке находится n цифр, цифры разделены единичным пробелом.

Выходные данные

В единственной строке выведите ответ на задачу. Если такого числа не существует, тогда вы должны вывести -1.

Примечание

В первом примере существует только 1 число, которое можно составить — 0. Во втором примере искомое число 5554443330. В третьем примере невозможно составить нужного числа.

A. Цепная передача

Перебор реализация *900

Цепная передача Васиного велосипеда состоит из двух частей: n звездочек закреплены на оси педалей, а m звездочек — на оси заднего колеса. С помощью цепи вращение педалей передается на заднее колесо.

Известно, что i-ая звездочка на оси педалей имеет ai (0 < a1 < a2 < ... < an) зубьев, а j-ая звездочка на оси заднего колеса имеет bj (0 < b1 < b2 < ... < bm) зубьев. Любая пара (i, j) (1 ≤ i ≤ n1 ≤ j ≤ m) называется передачей и задает номера звездочек, на которых в данный момент закреплена цепь. Для передачи (i, j) передаточное число равно величине .

Так как Васе нравятся целые числа, он хочет найти такие передачи (i, j), что их передаточные числа целые. С другой стороны, Васе нравится быстрая езда, поэтому среди всех «целочисленных» передач (i, j), он хочет выбрать передачи с максимальным передаточным числом. Помогите ему найти количество таких передач.

В задаче дробь обозначает деление в вещественных числах, то есть округление не производится.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 50) — количество звездочек на оси педалей велосипеда. Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 104) в порядке строгого возрастания.

В третьей строке входных данных записано целое число m (1 ≤ m ≤ 50) — количество звездочек на оси заднего колеса. В четвертой строке записаны m целых чисел b1, b2, ..., bm (1 ≤ bi ≤ 104) в порядке строгого возрастания.

Гарантируется, что существует хотя бы одна передача (i, j), что ее передаточное число — целое. Числа в строках разделяются пробелами.

Выходные данные

Выведите количество «целочисленных» передач, которые имеют максимальное значение передаточного числа среди всех «целочисленных» передач.

Примечание

В первом примере максимальное целое передаточное число равно 3. Существуют две передачи, которые имеют такое передаточное число. Для одной из них a1 = 4, b1 = 12, а для другой a2 = 5, b3 = 15.

C. Крестики

Перебор реализация *2100

На доске нарисовано клетчатое поле из n строк и m столбцов, строки пронумерованы с 1 сверху вниз, а столбцы — с 1 слева направо. Клетку поля на пересечении строки номер i и столбца номер j будем обозначать (i, j).

Шестерку чисел (a, b, c, d, x0, y0) в которой 0 ≤ a, b, c, d назовем крестиком и сопоставим ему множество клеток (x, y) таких, что выполняется хотя бы одно из двух условий:

  • |x0 - x| ≤ a и |y0 - y| ≤ b
  • |x0 - x| ≤ c и |y0 - y| ≤ d
На рисунке изображен крестик (0, 1, 1, 0, 2, 3) на поле 3 × 4.

Ваша задача — найти количество различных шестерок чисел (a, b, c, d, x0, y0), задающих крестики площадью равной s, которые полностью помещаются на заданном поле n × m. Крестик полностью помещается на поле, если любая его клетка находится в пределах поля (то есть для любой принадлежащей крестику клетки (x, y) выполняется 1 ≤ x ≤ n; 1 ≤ y ≤ m). Площадью крестика называется количество принадлежащих ему клеток.

Обратите внимание, что два крестика считаются различными, если упорядоченные шестерки, описывающие их, различаются, даже если эти крестики совпадают как множества клеток.

Входные данные

Входные данные состоят из единственной строки, в которой записаны три целых числа n, m и s (1 ≤ n, m ≤ 500, 1 ≤ s ≤ n·m). Числа разделены пробелом.

Выходные данные

Выведите единственное целое число — количество различных шестерок, задающих крестики площадью s и полностью помещающихся на поле размером n × m.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере искомые шестерки: (0, 0, 0, 0, 1, 1), (0, 0, 0, 0, 1, 2), (0, 0, 0, 0, 2, 1), (0, 0, 0, 0, 2, 2).

Во втором примере искомые шестерки: (0, 1, 1, 0, 2, 2), (0, 1, 1, 0, 2, 3), (1, 0, 0, 1, 2, 2), (1, 0, 0, 1, 2, 3).

A. Катание на Коньках

графы Перебор поиск в глубину и подобное снм *1200

Байтек учится кататься на льду. Он новичок, и поэтому он передвигается следующим образом: сначала отталкивается от сугроба на север, восток, юг или запад — и катится до тех пор, пока не повстречает очередной сугроб. Байтек заметил, что таким образом он не сможет добраться от некоторых сугробов до некоторых других, какой бы ни была последовательность его движений. Теперь он хочет соорудить несколько дополнительных сугробов так, чтобы он мог добраться от любого сугроба до любого другого. Байтек попросил Вас найти наименьшее количество сугробов, которые ему потребуется соорудить.

Мы предполагаем, что Байтек может сооружать сугробы только в точках с целочисленными координатами.

Входные данные

В первой строке входного файла записано единственное целое число n (1 ≤ n ≤ 100) — количество сугробов. Каждая из следующих n строк содержит по два целых числа xi и yi (1 ≤ xi, yi ≤ 1000) — координаты i-ого сугроба.

Обратите внимание, что направление на север совпадает с направлением оси Oy, таким образом, направление на восток совпадает с направлением оси Ox. Все сугробы расположены в различных точках.

Выходные данные

Выведите наименьшее количество сугробов, которые надо соорудить Байтеку для того, чтобы он мог добраться от любого сугроба до любого другого.

B. Фибоначчи на Доске

математика Перебор *2100

Числа Фибоначчи представляют собой последовательность: f0 = 0, f1 = 1, f2 = 1, f3 = 2, f4 = 3, f5 = 5, ..., fn = fn - 2 + fn - 1. Таким образом, каждое следующее число является суммой двух предыдущих.

Байтек разработал изящный способ вычислять числа Фибоначчи на доске. Сначала он пишет 0. Затем под ним он пишет 1. Затем он выполняет две следующих операции:

  • операция «T»: заменяет верхнее число суммой обоих чисел;
  • операция «B»: заменяет нижнее число суммой обоих чисел.

Если он выполнит n операций, начиная с операции «T», чередуя операции «T» и «B» (так, чтобы последовательность операций имела вид «TBTBTBTB...»), то последнее записанное число будет равно fn + 1.

К сожалению, Байтек иногда ошибается и повторяет операцию два или более раз подряд. Например, если Байтек хочет посчитать f7, то ему надо выполнить n = 6 операций: «TBTBTB». Если вместо этого Байтек выполнит последовательность операций «TTTBBT», то он сделает 3 ошибки и получит неверный результат, что седьмое число Фибоначчи равно 10. Количество ошибок в последовательности операций — это количество соседних равных операций («TT» или «BB»).

Вам дано число n — количество операций, выполненных Байтеком в попытке посчитать fn + 1 и число r, результат его вычислений (то есть, последнее написанное на доске число). Найдите наименьшее возможное количество ошибок, сделанных Байтеком, и любую возможную последовательность из n операций с найденным минимальным количеством ошибок, результатом которых было бы число r.

Предположим, что Байтек всегда правильно начинает последовательность операций, с операции «T».

Входные данные

Первая строка содержит два целых числа n и r (1 ≤ n, r ≤ 106).

Выходные данные

Первая строка выходного файла должна содержать единственное число — наименьшее возможное количество ошибок, допущенное Байтеком. Вторая строка должна содержать n символов, начинающихся с «T», описывающих одну из возможных последовательностей операций с таким количеством ошибок. Каждый символ должен быть либо «T», либо «B».

Если искомой последовательности не существует, выведите «IMPOSSIBLE» (без кавычек).

D. Патруль Битоникса

битмаски Комбинаторика математика Перебор поиск в глубину и подобное *2900

Байтляндия пытается отправить космическую миссию на планету Bit-X. Их задачу усложняет то, что орбита планеты регулярно патрулируется Капитаном Битониксом, возглавляющим космические подразделения планеты Bit-X.

Вокруг Bit-X есть n станций пронумерованных по часовой стрелке от 1 до n. Станции равномерно расположены по круговой орбите, то есть станции с номерами i и i + 1 (1 ≤ i < n), а также станции с номерами 1 и n, являются соседними. Расстояние между любой парой соседних станций равняется m космическим милям. Патрулирование Капитана Битоникса заключается в том, что от запрыгивает в свою ракету на одной из станций и летает по кругу, пролетая по меньшей мере одну космическую милю перед тем, как приземлится на некоторой станции (возможно, той, с которой он взлетал).

Ракета Битоникса движется на энергии, получаемой от сжигания баков с топливом. После того, как Битоникс использует x-литровый бак с топливом и выбирает направление (по или против часовой стрелки), ракета пролетает ровно x космических миль по круговой орбите в выбранном направлении. Обратите внимание, что у ракеты нет тормозов; ракета не может остановиться, пока не опустошится бак с топливом.

Например, предположим, что n = 3, m = 60, а у Битоникса есть баки с топливом на 10, 60, 90 и 100 литров. Если Битоникс стартует со станции номер 1 и использует 100-литровый бак, чтобы лететь по часовой стрелке, затем использует 90-литровый бак, чтобы лететь по часовой стрелке, а затем использует 10-литровый бак, чтобы лететь против часовой стрелки, то он приземлится на станции номер 1, совершив корректный патруль. Обратите внимание, что Битоникс не обязан использовать все доступные баки с топливом. В данном примере Битоникс также может просто использовать 60-литровый бак, чтобы долететь до станции 2 или 3.

Однако, если бы n равнялось 3, m равнялось бы 60, а Битониксу были доступны только один бак на 10 литров и один бак на 100 литров, то он никак не смог бы совершить корректный патруль (он бы не смог приземлиться ровно на странции).

Космическое агентство Байтляндии хочет уничтожить некоторые топливные баки Капитана Битоникса таким образом, чтобы он не мог совершить ни одного корректного патруля. Сколькими способами можно уничтожить некоторое подмножество топливных баков Капитана Битоникса таким образом, чтобы он не мог совершить ни одного корректного патруля? Найдите описанное количество способов и выведите остаток от его деления на 1000000007 (109 + 7).

Входные данные

В первой строке записано три целых числа n (2 ≤ n ≤ 1000) — количество станций, m (1 ≤ m ≤ 120) — расстояние между соседними станциями и t (1 ≤ t ≤ 10000) — количество баков с топливом Капитана Битоникса.

Во второй строке записано через пробел t целых чисел от 1 до 109, включительно, — объемы баков с топливом Битоникса.

Выходные данные

Выведите единственное число — количество различных подмножеств топливных баков Капитана Битоникса таких, что их уничтожение не позвонит ему совершать корректные патрули, по модулю 1000000007 (109 + 7).

Примечание

Все топливные баки различны, даже если объемы некоторых из них совпадают.

A. Горный пейзаж

Конструктив Перебор реализация *1100

Маленький Болек нашел картину, на которой изображены n горных вершин. Изображение n горных вершин представляет собой незамкнутую ломаную, состоящую из 2n отрезков. Отрезки проходят через 2n + 1 точек с координатами (1, y1), (2, y2), ..., (2n + 1, y2n + 1), i-й отрезок соединяет точку (i, yi) и точку (i + 1, yi + 1). Для любого четного i (2 ≤ i ≤ 2n) выполняется yi - 1 < yi и yi > yi + 1.

Назовем вершину ломаной с четной x координатой горным пиком.

На рисунке слева изображена изначальная картина, на рисунке справа изображена картина после действий Болека. Затронутые пики помечены красным, k = 2.

Болек решил похулиганить. Он выбрал ровно k горных пиков, стер отрезки проходящие через эти пики, увеличил высоту каждого выбранного пика на единицу (то есть увеличил координату y соответствующих точек), а затем дорисовал недостающие отрезки так, чтобы получился новый рисунок горных вершин. Обозначим точки, через которые проходит новая ломаная на рисунке, который изменил Болек, через (1, r1), (2, r2), ..., (2n + 1, r2n + 1).

Вам задан полученный Болеком рисунок. Восстановите исходный рисунок.

Входные данные

В первой строке записаны два целых числа через пробел n и k (1 ≤ k ≤ n ≤ 100). В следующей строке записаны 2n + 1 целых чисел через пробел r1, r2, ..., r2n + 1 (0 ≤ ri ≤ 100)y-координаты вершин ломаной на рисунке Болека.

Гарантируется, что данный рисунок можно получить описанными действиями из некоторого рисунка горных вершин.

Выходные данные

Выведите 2n + 1 целых чисел y1, y2, ..., y2n + 1y-координаты вершин ломаной на первоначальном рисунке. Если ответов несколько выведите любой.

C. Цветная полоска

дп жадные алгоритмы Перебор *1600

Цветная полоска представляет собой n расположенных в ряд клеточек, каждая из которых покрашена в один из k цветов. Требуется перекрасить наименьшее количество клеточек так, чтобы никакие две соседние клетки не были одинакового цвета. Перекрашивать клетки можно в любые цвета от 1 до k.

Входные данные

В первой строке входных данных записано два целых числа n и k (1 ≤ n ≤ 5·105; 2 ≤ k ≤ 26). Вторая строка состоит из n прописных букв латинского алфавита. Буква «A» обозначает первый цвет, «B» — второй и так далее. В строке используются только первые k букв латинского алфавита. Каждая буква обозначает цвет соответствующей клетки полоски.

Выходные данные

Выведите единственное число — искомое минимальное количество перекрашиваний. Во вторую строку выведите любой из возможных вариантов полоски после перекрашиваний.

A. Вторая порядковая статистика

Перебор *800

Однажды Васе понадобилось найти вторую порядковую статистику последовательности целых чисел, то есть такое значение, которое попадет на второе место после сортировки всех различных элементов данной последовательности. Другими словами, надо найти наименьший элемент строго больший минимума. Помогите Васе справиться с этой задачей.

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 100) — количество чисел в последовательности. Во второй строке через пробел записаны n целых чисел — элементы последовательности. Эти числа не превосходят по модулю 100.

Выходные данные

Если в заданной последовательности вторая порядковая статистика существует, выведите ее, иначе выведите NO.

B. Стол для переговоров

дп Перебор *1500

Вася хочет поставить в офис новый стол для переговоров. Для этого он тщательно все измерил и составил план своего офиса: офис Васи представляет собой прямоугольную комнату n × m метров. Каждый квадратный метр офиса может быть либо занят чем-то, либо свободен. Стол для переговоров имеет прямоугольную форму, и должен стоять так, чтобы его стороны были параллельны стенам офиса. Вася не хочет ничего менять или передвигать, поэтому все клетки, занимаемые столом, должны быть свободны. Чтобы за столом поместилось как можно больше людей, его периметр должен быть как можно больше. Помогите Васе определить наибольший возможный периметр стола, помещающегося в офисе.

Входные данные

В первой строке через пробел записано 2 целых числа n и m (1 ≤ n, m ≤ 25) — размеры офиса. Далее следует n строк по m символов 0 или 1. 0 обозначает, что соответствующий квадратный метр офиса свободен. 1 обозначает, что соответствующий квадратный метр офиса чем-то занят. Гарантируется, что хотя бы один квадратный метр Васиного офиса свободен.

Выходные данные

Выведите одно число — наибольший возможный периметр стола, помещающегося в Васином офисе.

A. Шушанчики и последовательность

Перебор реализация *1200

Однажды шушанчики нашли последовательность из n целых чисел, записанную на доске. Шушанчики умеют выполнять с ней одну операцию, которая состоит из двух шагов:

  1. Дописать в конец последовательности число, равное k-му от начала числу в текущей последовательности;
  2. Стереть первое число текущей последовательности.

Шушанчиков очень заинтересовал вопрос: через сколько операций все числа на доске станут одинаковыми, и станут ли они одинаковыми когда-нибудь вообще.

Входные данные

В первой строке записаны два целых числа через пробел n и k (1 ≤ k ≤ n ≤ 105).

Во второй строке записаны n целых чисел через пробел: a1, a2, ..., an (1 ≤ ai ≤ 105) — найденная последовательность.

Выходные данные

Выведите минимальное число операций, требуемых, чтобы все числа на доске стали одинаковыми, или -1, если этого невозможно добиться.

Примечание

В первом тестовом примере после первой операции на доске будет записана последовательность [1, 1, 1]. Значит одной операции достаточно, чтобы все числа стали одинаковые. Таким образом ответ равен единице.

Во втором тестовом примере последовательность никогда не будет состоять из одинаковых чисел. В ней всегда будут содержаться как минимум два различных числа 3 и 1. Таким образом ответ равен -1.

A. Параллелепипед

геометрия математика Перебор *1100

Задан прямоугольный параллелепипед с целочисленными длинами ребер. Известны площади трех его граней, имеющих общую вершину. Требуется найти сумму длин всех 12 ребер этого параллелепипеда.

Входные данные

В первой и единственной строке через пробел записаны три целых числа — площади граней параллелепипеда. Величины площадей положительны ( > 0) и не превосходят 104. Гарантируется, что существует хотя бы один параллелепипед, удовлетворяющий условию задачи.

Выходные данные

Выведите единственное число — сумму длин всех ребер параллелепипеда.

Примечание

В первом примере параллелепипед имеет размеры 1 × 1 × 1, во втором — 2 × 2 × 3.

B. Две таблицы

Перебор реализация *1400

Вам заданы две прямоугольные таблицы размерами na × ma и nb × mb клеток, состоящие из нулей и единиц. Будем считать, что строки и столбцы обеих таблиц нумеруются, начиная с 1. Тогда элемент первой таблицы, стоящий на пересечении i-ой строки и j-ого столбца, обозначим за ai, j; элемент второй таблицы, стоящий на пересечении i-ой строки и j-ого столбца, обозначим за bi, j.

Пару целых чисел (x, y) назовем сдвигом второй таблицы, относительно первой. Коэффициентом совпадения сдвига (x, y) назовем величину:

где переменные i, j принимают только такие значения, при которых выражение ai, j·bi + x, j + y имеет смысл. Более формально, должны выполняться неравенства 1 ≤ i ≤ na, 1 ≤ j ≤ ma, 1 ≤ i + x ≤ nb, 1 ≤ j + y ≤ mb. Если не существует значений переменных i, j, удовлетворяющих заданным неравенствам, значение суммы считается равным 0.

Ваша задача — среди всех возможных сдвигов найти сдвиг с максимальным коэффициентом совпадения.

Входные данные

В первой строке через пробел записаны два целых числа na, ma (1 ≤ na, ma ≤ 50) — количество строк и столбцов в первой таблице. Далее в na строках записано по ma символов — элементы первой таблицы. Каждый символ является либо «0», либо «1».

В следующей строке через пробел записаны два целых числа nb, mb (1 ≤ nb, mb ≤ 50) — количество строк и столбцов во второй таблице. Далее записаны элементы второй таблицы в формате аналогичном первой таблице.

Гарантируется, что в первой таблице есть хотя бы одна единица. Гарантируется, что во второй таблице есть хотя бы одна единица.

Выходные данные

Выведите через пробел два целых числа x, y (|x|, |y| ≤ 109) — сдвиг с максимальным коэффициентом совпадения. Если существует несколько решений, выведите любое.

A. Сдвиги

Перебор *1500

Вам дана таблица размером n строк на m столбцов. В каждой ячейке таблицы записано число 0 или 1. За один ход можно выбрать какую-то из строк таблицы и циклически сдвинуть значения в ней на одну ячейку либо влево, либо вправо.

Циклически сдвинуть строку таблицы на одну ячейку вправо означает переместить значение каждой ячейки этой строки, кроме последней, в соседнюю ячейку справа, а значение последней ячейки переместить в первую ячейку. Аналогичным образом, но в обратную сторону выполняется циклический сдвиг строки таблицы влево. Например, если циклически сдвинуть строку «00110» на одну ячейку вправо — получится строка «00011», если же сдвинуть строку «00110» на одну ячейку влево — получится строка «01100».

Определите, за какое наименьшее количество ходов можно добиться того, что в каком-то из столбцов таблицы будут только единицы.

Входные данные

Первая строка содержит два целых числа, разделенные пробелом: n (1 ≤ n ≤ 100) — количество строк в таблице и m (1 ≤ m ≤ 104) — количество столбцов в таблице. Далее следуют n строк, каждая из которых содержит по m символов «0» или «1»: j-тый символ i-той строки описывает содержимое ячейки в i-той строке и j-ом столбце таблицы.

Гарантируется, что в описании таблицы не встречается никаких символов кроме «0» и «1».

Выходные данные

Выведите единственное число: наименьшее количество ходов, за которое можно в каком-то из столбцов таблицы получить только единицы. Если этого сделать нельзя, выведите -1.

Примечание

В первом примере один из способов достижения цели с наименьшим количеством шагов таков: циклически сдвинем вторую строку один раз вправо, а третью — два раза влево. Тогда предпоследний столбец таблицы будет содержать только единицы.

Во втором примере строки нельзя сдвинуть так, чтобы образовался столбец, содержащий только единицы.

A. Дана строка...

жадные алгоритмы Перебор *1200

Дана строка, состоящая из маленьких латинских букв. Ваша задача — найти длину ее самой длинной подстроки, встречающейся в строке хотя бы 2 раза. Вхождения подстрок могут перекрываться (см. пример 2).

Входные данные

В первой строке входных данных записана строка. Гарантируется, что строка не пуста, состоит из маленьких латинских букв, и ее длина не превосходит 100.

Выходные данные

Выведите одно число — длину самой длинной подстроки, встречающейся в строке хотя бы 2 раза.

A. Команда

жадные алгоритмы Перебор *800

Однажды трое лучших друзей Петя, Вася и Тоня решили создать команду и участвовать в соревновании по программированию. Обычно на соревнованиях по программированию участникам предлагается несколько задач. Еще перед началом друзья договорились, что они будут реализовывать задачу, если как минимум двое из них придумали и уверены в решении, в противном случае ребята не будут писать решение этой задачи.

На этом соревновании организаторы предложили n задач. Для каждой задачи известно, кто из друзей придумал и уверен в ее решении. Помогите друзьям найти количество задач, по которым они будут писать решение.

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 1000) — количество задач на соревновании. Далее в n строках записано по три целых числа, каждое из которых равно 0 или 1. Если первое число в строке равно 1, то Петя уверен в решении этой задачи, в противном случае он не уверен в решении. Второе число обозначает мнение Васи, а третье — мнение Тони. Числа в строках разделены пробелами.

Выходные данные

Выведите единственное целое число — количество задач, которые друзья будут реализовывать на соревновании.

Примечание

В первом примере решение первой задачи знают Петя и Вася, а решение второй знают все трое. Значит, они будут писать решения по этим задачам. Решение третьей задачи знает только Петя, но этого недостаточно, и друзья не будут ее писать.

Во втором примере друзья будут реализовывать только вторую задачу, так как ее решение знают Вася и Тоня.

D. Волшебный ящик

геометрия Перебор *1600

Однажды Вася шел домой и увидел лежащий на дороге ящик, представляющий собой прямоугольный параллелепипед. Вася сразу понял, что это необычный ящик, так как все его ребра параллельны осям координат, один из его углов расположен в точке (0, 0, 0), а противоположный ему — в точке (x1, y1, z1). На шести гранях этого ящика были написаны некоторые числа a1, a2, ..., a6 ровно по одному точно в центре каждой из граней.

Числа на ящике располагаются следующим образом:

  • число a1 написано на грани, которая принадлежит плоскости ZOX;
  • a2 — на грани, параллельной плоскости из предыдущего пункта;
  • a3 — на грани, которая принадлежит плоскости XOY;
  • a4 — на грани, параллельной плоскости из предыдущего пункта;
  • a5 — на грани, которая принадлежит плоскости YOZ;
  • a6 — на грани, параллельной плоскости из предыдущего пункта.

Вася на данный момент смотрит на ящик из точки (x, y, z). Найдите сумму чисел, которые видит Вася. Обратите внимание, что все грани ящика непрозрачны, и Вася не может увидеть числа сквозь ящик. На рисунке грани изображены прозрачными исключительно для удобства восприятия. Считайте, что если Вася смотрит из точки, которая лежит в плоскости некоторой грани, то он не видит число, записанное на этой грани. Для того, чтобы Вася видел число достаточно, чтобы он видел центр соответствующей грани. Также обратите внимание, что Вася всегда правильно читает числа ai, которые видит, независимо от поворота, угла и других факторов (то есть, например, если Вася видит некоторое ai = 6, то он никак не сможет принять это число за 9 и тому подобное).

Входные данные

В первой строке входных данных через пробел записаны три целых числа x, y и z (|x|, |y|, |z| ≤ 106) — координаты положения Васи в пространстве. Во второй строке через пробел записаны три целых числа x1, y1, z1 (1 ≤ x1, y1, z1 ≤ 106) — координаты угла ящика, противоположного углу в точке (0, 0, 0). В третьей строке через пробел записаны шесть целых чисел a1, a2, ..., a6 (1 ≤ ai ≤ 106) — числа, записанные на гранях ящика.

Гарантируется, что точка (x, y, z) расположена строго вне ящика.

Выходные данные

Выведите единственное целое число — сумму всех чисел на гранях ящика, которые видит Вася.

Примечание

Первый пример соответствует изображенной на рисунке точке зрения. Вася видит числа a2 (на верхней грани самого темного цвета), a6 (на правой грани самого светлого цвета) и a4 (на левой из видимых граней).

Во втором примере Вася видит только число a4.

B. Неквадратное уравнение

Бинарный поиск математика Перебор *1400

Рассмотрим уравнение:

x2 + s(xx - n = 0, 

где x, n — целые положительные числа, s(x) — функция, равная сумме цифр числа x в десятичной системе счисления.

Вам дано целое число n, найдите наименьший целый положительный корень уравнения x, или определите, что таких корней нет.

Входные данные

В единственной строке записано целое число n (1 ≤ n ≤ 1018) — параметр уравнения.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите -1, если уравнение не имеет целых положительных корней. Иначе выведите такое наименьшее целое x (x > 0), что описанное в условии равенство выполняется.

Примечание

В первом тестовом примере x = 1 является наименьшим корнем. Так как s(1) = 1 и 12 + 1·1 - 2 = 0.

Во втором тестовом примере x = 10 является наименьшим корнем. Так как s(10) = 1 + 0 = 1 и 102 + 1·10 - 110 = 0.

В третьем тестовом примере корней у уравнения нет.

A. Девушка или Юноша

Перебор реализация Строки *800

В наши дни очень много парней ставят себе фотографии красивых девушек на аватарки на форумах. Из-за этого очень часто сложно определить пол пользователя на форуме. В прошлом году наш герой пообщался в чате на форуме с одной красоткой (как он думал). После этого наш герой и предполагаемая красотка стали общаться еще чаще и в конце концов стали парой в сети.

Но вчера наш герой захотел увидеть свою красотку в реальной жизни и, каково же было его удивление, когда красоткой оказался здоровенный мужчина! Наш герой очень расстроился и теперь он, наверное, никогда больше не сможет полюбить. Сейчас к нему пришла в голову идея, как по имени пользователя определить его пол.

Вот его метод: если количество различных символов в имени пользователя нечетное, тогда пользователь мужского пола, иначе — женского. Вам дана строка, обозначающая имя пользователя, помогите нашему герою определить по ней пол пользователя по описанному методу.

Входные данные

В первой строке записана непустая строка, состоящая только из строчных букв латинского алфавита — имя пользователя. Эта строка состоит из не более чем 100 букв.

Выходные данные

Если пользователь оказался женского пола по методу нашего героя, выведите «CHAT WITH HER!» (без кавычек), иначе, выведите «IGNORE HIM!» (без кавычек).

Примечание

Рассмотрим первый тестовый пример. В этом примере в имени пользователя «wjmzbmr» 6 различных символов. Это символы: «w», «j», «m», «z», «b», «r». Таким образом по методу нашего героя «wjmzbmr» женского пола, то есть надо вывести «CHAT WITH HER!».

B. Простое Ленточное Программирование

Перебор реализация *1500

Существует язык программирования, в котором каждая программа представлена непустой последовательностью символов «<» и «>» и цифр. Объясним, как работает интерпретатор этого языка программирования. Программа интерпретируется посредством движения указателя команды (IP), который состоит из двух частей.

  • Указатель текущего символа (CP);
  • Указатель направления (DP), который может указывать налево или направо;

Изначально CP указывает на крайний левый символ в последовательности, а DP указывает направо.

Мы повторяем следующие шаги до тех пор, пока CP впервые укажет куда-то за пределы последовательности.

  • Если CP указывает на цифру, то интерпретатор выводит эту цифру. Затем CP перемещается на один шаг согласно направлению DP. После этого значение написанной в последовательности цифры уменьшается на один. Если выведенная цифра была 0, значит, ее нельзя уменьшить. Поэтому она удаляется из последовательности, и длина последовательности уменьшается на один.
  • Если CP указывает на «<» или «>», то направление DP меняется на «влево» или «вправо», соответственно. Затем CP двигается на один шаг согласно DP. Если новый символ, на который указывает CP — это «<» или «>», то предыдущий символ будет удален из последовательности.

Если в какой-то момент выполнения программы CP выходит за пределы последовательности, то выполнение программы завершается.

Очевидно, что любая программа на этом языке завершается после некоторого количества шагов.

У Вас есть последовательность s1, s2, ..., sn, состоящая из символов «<», «>» и чисел. Вы должны ответить на q запросов. Каждый запрос характеризуется двумя целыми числами l и r и спрашивает, сколько раз будет выведена каждая цифра, если мы запустим последовательность sl, sl + 1, ..., sr как независимую программу на описанном языке.

Входные данные

В первой строке входных данных содержатся два целых числа n и q (1 ≤ n, q ≤ 100) — длина последовательности s и количество запросов.

Вторая строка содержит s, последовательность из «<», «>» и цифр (0..9), записанных слева направо. Заметьте, что символы s не разделяются пробелами.

Каждая из следующих q строк содержит по два целых числа li и ri (1 ≤ li ≤ ri ≤ n)i-ый запрос.

Выходные данные

Для каждого запроса выведите 10 целых чисел, записанных через пробел: x0, x1, ..., x9, где xi равняется количеству выведенных цифр i при выполнении соответствующей программы из запроса. Выводите ответы на запросы в том порядке, в каком запросы даны во входных данных.

F. Race

Перебор реализация *2300

The Old City is a rectangular city represented as an m × n grid of blocks. This city contains many buildings, straight two-way streets and junctions. Each junction and each building is exactly one block. All the streets have width of one block and are either vertical or horizontal. There is a junction on both sides of each street. We call two blocks adjacent if and only if they share a common side. No two blocks of different streets are adjacent and no two junctions are adjacent.

There is an annual festival and as a part of it, The Old Peykan follows a special path in the city. This path starts from a block in a street, continues with many junctions and ends in a block of some street. For each street block, we know how much time it takes for the Old Peykan to go from this block to an adjacent block. Also the Old Peykan can go from each junction to its adjacent street blocks in one minute. Of course Old Peykan can't go to building blocks.

We know the initial position of the Old Peykan and the sequence of junctions that it passes to reach its destination. After passing all the junctions and reaching the destination, it will stay there forever. Your task is to find out where will the Old Peykan be k minutes after it starts moving. Consider that The Old Peykan always follows the shortest path that passes through the given sequence of junctions and reaches the destination.

Note that the Old Peykan may visit some blocks more than once.

Input

The first line of input contains three integers m, n and k (3 ≤ m, n ≤ 100, 1 ≤ k ≤ 100000). Next m lines are representing the city's map. Each of them containts n characters, each character is a block:

  • Character "#" represents a building.
  • Digits "1", "2", ..., "9" represent a block of an street and this digit means the number of minutes it takes for the Old Peykan to pass this block.
  • Characters "a", "b", ..., "z" means that this block is a junction and this character is it's name. All the junction names are unique.

Consider that all blocks have the coordinates: the j-th in the i-th line have coordinates (i, j) (1 ≤ i ≤ m, 1 ≤ j ≤ n).

The (m + 2)th line contains two integers rs and cs (1 ≤ rs ≤ m, 1 ≤ cs ≤ n), string s and another two integers re and ce (1 ≤ re ≤ m, 1 ≤ ce ≤ n). The path starts from block (rs, cs), continues through junctions in the order that is specified by s and will end in block (re, ce). Length of s is between 1 and 1000.

It's guaranteed that string s denotes a correct path from the start position to the end position and string s doesn't contain two consecutive equal letters. Also start position (rs, cs) and the end position (re, ce) are street blocks.

Output

In a single line print two integers rf and cf — (rf, cf) being the position of the Old Peykan after exactly k minutes.

A. Игра в монетку

Перебор реализация *1100

Петя и Вася играют в монетку. Их друг Валера назначен судьей. Смысл игры очень простой. Сначала Вася x раз подкидывает монетку, затем Петя y раз подкидывает монетку. Если выпадает орел, то игрок, подкинувший монетку, получает одно очко. Если выпадает решка, никто очков не получает. Выигрывает игрок, у которого в конце игры будет больше очков. При равенстве очков объявляется ничья.

В какой-то момент Валера сбился со счета, и поэтому не может точно сказать, какой счет был в конце игры. Однако кое-что он запомнил наверняка. Он помнит, что за всю игру у Васи орел выпал не менее a раз, а у Пети не менее b раз. Более того, он знает, что победителем игры был объявлен Вася. По этой информации Валера хочет узнать всевозможные исходы игры, которые не противоречат его воспоминаниям.

Входные данные

В единственной строке заданы четыре целых числа x, y, a, b (1 ≤ a ≤ x ≤ 100, 1 ≤ b ≤ y ≤ 100). Числа в строке разделены пробелом.

Выходные данные

В первой строке выведите целое число n — количество возможных исходов игры. Далее в n строках выведите сами исходы. В i-ую строку через пробел выведите пару чисел ci, di — количество выпавших орлов у Васи и Пети соответственно в i-ом исходе игры. Пары чисел (ci, di) выводите в строго возрастающем порядке.

Напоминаем, что пара чисел (p1, q1) меньше пары чисел (p2, q2) если p1 < p2, либо p1 = p2 и при этом q1 < q2.

B. Безусловно счастливые числа

битмаски Перебор поиск в глубину и подобное *1600

Поликарп любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи (без лидирующих нулей) которых содержатся только счастливые цифры x и y. Например, если x = 4, а y = 7, то числа 47, 744, 4 являются счастливыми.

Назовем целое положительное число a безусловно счастливым, если существуют такие цифры x и y (0 ≤ x, y ≤ 9), что в десятичной записи числа a (без лидирующих нулей) содержатся только цифры x и y.

У Поликарпа есть целое число n. Он хочет узнать, сколько целых положительных чисел не превышающих n являются безусловно счастливыми. Помогите ему, посчитайте это количество.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 109) — число Поликарпа.

Выходные данные

Выведите единственное целое число — сколько целых положительных чисел не превышающих n являются безусловно счастливыми.

Примечание

В первом тестовом примере все числа не превышающие 10 являются безусловно счастливыми.

Во втором примере числа 102, 103, 104, 105, 106, 107, 108, 109, 120, 123 не являются безусловно счастливыми.

F. Анализ потока логов

Бинарный поиск Перебор реализация Строки *2000

Вам задан поток логов о предупреждениях в программе. Каждая запись потока логов представляет собой строку в формате:

«2012-MM-DD HH:MM:SS:MESSAGE» (без кавычек).

Строка «MESSAGE» состоит из пробелов, заглавных и строчных букв латинского алфавита, а также символов «!», «.», «,», «?». Строка «2012-MM-DD» определяет корректную дату в 2012 году. Строка «HH:MM:SS» определяет корректное время в 24 часовом формате.

Описанная запись потока логов обозначает, что в определенное в записи время произошло некоторое предупреждение в программе (описание предупреждения содержит строка «MESSAGE»).

Ваша задача вывести первый момент времени, когда количество предупреждений за последние n секунд стало не менее m.

Входные данные

В первой строке входных данных записаны два целых числа через пробел n и m (1 ≤ n, m ≤ 10000).

Вторая и остальные строки входных данных представляют собой поток логов. Во второй строке входных данных записана первая запись потока логов, в третьей строке — вторая запись потока логов и так далее. Каждая запись потока логов имеет формат описанный выше. Все записи заданы в хронологическом порядке, то есть записи о предупреждениях заданы в порядке их появления в программе.

Гарантируется, что в логе есть хотя бы одна запись. Гарантируется, что суммарная длина всех строк потока логов не превышает 5·106 (в частности, это означает, что длина одной строки не превышает 5·106 символов). Гарантируется, что все заданные даты и времена корректны, а строка «MESSAGE» во всех записях не пустая.

Выходные данные

Если не существует искомого момента времени выведите -1. Иначе выведите строку в формате «2012-MM-DD HH:MM:SS» (без кавычек) — первый момент времени, когда количество предупреждений за последние n секунд стало не менее m.

G. Возможные друзья

графы Перебор *2200

Поликарп работает программистом в одной развивающейся социальной сети. Начальство поставило перед ним задачу разработать механизм определения возможных друзей. Поликарп долго думал над поставленной задачей и пришел к следующему выводу.

Пусть заданы все отношения дружбы в социальной сети в виде m пар имен пользователей ai, bi (ai ≠ bi). Каждая пара ai, bi обозначает, что пользователи ai и bi являются друзьями. Отношение дружбы симметричное, то есть если ai друг bi, то и bi друг ai. Пользователь y является возможным другом пользователя x, если выполняются условия:

  1. x ≠ y;
  2. x и y не являются друзьями;
  3. среди всех пользователей социальной сети, которые удовлетворяют первым двум условиям, пользователь y имеет наибольшее количество общих друзей с пользователем x. Пользователь z является общим другом пользователя x и пользователя y (z ≠ x, z ≠ y), если x и z друзья, а также y и z друзья.

Ваша задача, помочь Поликарпу реализовать механизм определения возможных друзей.

Входные данные

В первой строке записано единственное целое число m (1 ≤ m ≤ 5000) — количество пар друзей в социальной сети. В следующих m строках заданы пары имен пользователей-друзей. В i-той строке через пробел записаны два имени ai и bi (ai ≠ bi). Имена пользователей непустые и состоят из не более 20 заглавных и строчных латинских букв.

Гарантируется, что каждая пара друзей встречается во входных данных только один раз, например, во входных данных одновременно не могут встречаться пары x, y и y, x. Гарантируется, что различные пользователи имеют различные имена. Гарантируется, что каждый пользователь социальной сети имеет хотя бы одного друга. Последнее гарантирует, что имя каждого пользователя социальной сети встречается во входных данных хотя бы один раз.

Выходные данные

В первой строке выведите единственное целое число n — количество пользователей социальной сети. В следующих n строках выведите для каждого пользователя, количество возможных друзей. В i-той строке выведите имя пользователя ci и количество его возможных друзей di через пробел.

Информацию про пользователей можно выводить в любом порядке.

Примечание

В первом тестовом примере рассмотрим пользователя David. Пользователи Mike и Tank имеют одного общего друга (Gerald) с David. Пользователь Kate не имеет ни одного общего друга с David. Поэтому возможные друзья David: пользователи Mike и Tank.

C. Конкурс красоты

жадные алгоритмы Конструктив Перебор *1600

У генерала Генералова в батальоне n солдат. Совсем скоро будет проходить солдатский конкурс красоты, который будет длиться k дней. Генералов принял решение, что его батальон будет участвовать в конкурсе. Теперь ему нужно определиться с составом участников.

Все солдаты батальона обладают различной красотой, которая выражается целым положительным числом. Величина ai обозначает красоту i-го солдата.

В каждый день из k дней Генералов должен отправлять на конкурс отряд солдатов. Красота отряда солдатов вычисляется как сумма красот солдатов, которые входят в этот отряд. Генералов хочет удивить жюри конкурса красоты, поэтому в каждый из k дней красота посланного отряда должна быть уникальной. Другими словами все k красот посланных отрядов должны быть различными числами.

Помогите Генералову выбрать k различных по красоте составов для конкурса. Обратите внимание, что Генералов не может не посылать солдат в какой-то из дней, то есть отряд посланных на конкурс солдат никогда не должен быть пустым.

Входные данные

В первой строке заданы два целых числа n, k (1 ≤ n ≤ 50; 1 ≤ k ≤  ) — количество солдат и количество дней в конкурсе соответственно. Во второй строке через пробел заданы целые числа a1, a2, ..., an (1 ≤ ai ≤ 107) — красоты солдат батальона.

Гарантируется, что в батальоне Генералова нет двух солдат с одинаковой красотой.

Выходные данные

Выведите k строк: в i строке выведите описание состава, который будет участвовать в конкурсе в i-ый день. Описание состоит из целого числа ci (1 ≤ ci ≤ n) — количество солдат в отряде в i-ый день конкурса и ci различных целых чисел p1, i, p2, i, ..., pci, i — красоты солдат в отряде в i-ый день конкурса. Красоты солдат разрешается выводить в любом порядке.

Числа в строках разделяйте пробелами. Гарантируется, что существует решение, удовлетворяющее условиям задачи. Если существует несколько ответов, выведите любой из них.

D. Цветной граф

графы Перебор поиск в глубину и подобное *1600

Вам задан неориентированный граф, состоящий из n вершин и m ребер. Будем считать, что вершины графа пронумерованы целыми числами от 1 до n. Каждая вершина графа имеет цвет. Цветом i-ой вершины назовем целое число ci.

Рассмотрим все вершины графа, которые покрашены в некоторый цвет k. Обозначим множество таких вершин через V(k). Определим величину разноцветность соседей для цвета k как мощность множества Q(k) = {cu :  cu ≠ k и существует вершина v принадлежащая множеству V(k) такая, что вершины v и u соединены ребром графа}.

От Вас требуется найти такой цвет k, для которого мощность множества Q(k) максимальна. Другими словами, вы хотите найти такой цвет, у которого соседи наиболее разноцветны. Обратите внимание, что вы хотите найти такой цвет k, что в графе существует хотя бы одна вершина с таким цветом.

Входные данные

В первой строке через пробел заданы два целых числа n, m (1 ≤ n, m ≤ 105) — количество вершин и ребер графа соответственно. Во второй строке задана последовательность целых чисел c1, c2, ..., cn (1 ≤ ci ≤ 105) — цвета вершин графа. Числа в строке разделяются пробелами.

В следующих m строках содержится описание ребер: в i-ой строке заданы два целых числа через пробел ai, bi (1 ≤ ai, bi ≤ nai ≠ bi) — номера вершин, которые соединяет i-ое ребро.

Гарантируется, что в заданном графе нет петель и кратных ребер.

Выходные данные

Выведите номер цвета, множество цветов соседей которого имеет максимальную мощность. Если оптимальных цветов несколько, выведите цвет с минимальным номером. Обратите внимание, что вы хотите найти такой цвет, что в графе существует хотя бы одна вершина с таким цветом.

A. IQ тест

Перебор *1300

Вася готовится проходить IQ тест. В этом тесте часто встречаются задания, в которых нужно найти лишнее из n чисел. Вася заметил, что это лишнее число обычно отличается от остальных по четности. Помогите Васе — для проверки своих ответов, ему требуется программа, которая среди заданных n чисел находит отличающееся по четности.

Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 100) — количество чисел в задании. Во второй строке через пробел записано n натуральных чисел, не превосходящих 100. Гарантируется, что среди этих чисел ровно одно отличается по четности от остальных.

Выходные данные

Выведите номер числа, которое отличается по четности от остальных. Числа нумеруются начиная с 1 в том порядке, в котором они заданы во входных данных.

A. Маленький xor

Перебор реализация *1100

Маленький Петя очень любит массивы, состоящие из целых неотрицательных чисел. Недавно мама подарила ему один такой массив, состоящий из n элементов. Петя сразу решил найти в нем отрезок из подряд идущих элементов, такой что xor всех чисел из этого отрезка максимален. Помогите ему в этом.

Под операцией xor подразумевается побитовое исключающее «ИЛИ», которое обозначается как «xor» в языке Pascal и «^» в C/C++/Java.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100) — количество элементов в массиве. Во второй строке записаны сами числа из массива, через пробел. Все числа целые, неотрицательные и строго меньше 230.

Выходные данные

Выведите единственное целое число — искомый максимальный xor отрезка последовательных элементов.

Примечание

В первом примере одним из оптимальных отрезков является отрезок, состоящий из первого и второго элемента массива, если считать что элементы массива нумеруются начиная с единицы.

Во втором примере оптимальный отрезок всего один, в нем содержится ровно один элемента массива (элемент номер три).

B. Разупорядочивание массива

Перебор сортировки *1800

Маленький Петя очень любит массивы, состоящие из целых чисел. Недавно мама подарила ему один такой массив, состоящий из n элементов. Сейчас Пете интересно, сможет ли он поменять какие-либо два различных числа в массиве таким образом, чтобы после этого массив не был отсортированным. Обратите внимание, что Петя не может менять местами одинаковые числа, даже если те стоят на разных позициях в массиве. Также обратите внимание на то, что Петя обязан поменять местами какие-то два числа, даже если изначальный массив удовлетворяет всем требованиям.

Массив a (элементы массива индексируются, начиная с 1), состоящий из n элементов, называется отсортированным, если выполняется хотя бы одно из следующих двух условий:

  1. a1 ≤ a2 ≤ ... ≤ an;
  2. a1 ≥ a2 ≥ ... ≥ an.

Помогите Пете найти требуемые две позиции, числа на которых необходимо поменять местами или скажите, что их не существует.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 105). Во второй строке записаны n целых неотрицательных чисел через пробел a1, a2, ..., an — элементы массива, который Петя получил в подарок от мамы. Все числа во входных данных не превосходят 109.

Выходные данные

Если существует пара позиций, такая что после обмена чисел, стоящих на этих позициях, массив станет не отсортированным, то выведите номера этих позиций через пробел. Если существует несколько искомых пар позиций — выведите любую. Если такой пары не существует, выведите -1. Позиции в массиве нумеруются целыми числами от 1 до n.

Примечание

В первых двух примерах, очевидно, требуемой пары позиций не существует.

В третьем примере можно поменять первые два элемента местами, после чего массив будет выглядеть следующим образом: 2 1 3 4. Этот массив не является отсортированным.

D. Таблица с буквами - 2

Перебор *2000

Вася недавно начал изучать английский язык. Сейчас ему нужно выучить, как пишутся буквы латинского алфавита. Поскольку он еще не до конца запомнил некоторые из них, он решил немного потренироваться.

Он нашел клетчатый лист бумаги и начал писать на нем произвольные буквы латинского алфавита. В конце концов Вася написал n строк по m символов в каждой. Таким образом, он получил прямоугольную таблицу размера n × m, в каждой клетке которой была написана некоторая буква латинского алфавита. Пронумеруем строки этой таблицы сверху вниз целыми числами от 1 до n, а столбцы слева направо целыми числами от 1 до m.

После этого, взглянув на полученную прямоугольную таблицу, Вася заинтересовался следующим вопросом: сколько существует подтаблиц, для которых выполняются следующие два условия:

  • в подтаблице содержится не более k клеток с символом «a»;
  • символы, находящиеся во всех четырех угловых клетках подтаблицы, совпадают.

Формально, подтаблица определяется следующим образом. Она задается четырьмя целыми числами x1, y1, x2, y2 такими, что 1 ≤ x1 < x2 ≤ n, 1 ≤ y1 < y2 ≤ m. Тогда в подтаблице содержатся все такие клетки (x, y) (x — номер строки, y — номер столбца), для которых выполняются неравенства x1 ≤ x ≤ x2, y1 ≤ y ≤ y2. Угловыми клетками таблицы считаются клетки (x1, y1), (x1, y2), (x2, y1), (x2, y2).

Вася уже слишком устал, выписывая буквы на лист бумаги. Поэтому он просит Вас посчитать интересующую его величину.

Входные данные

В первой строке заданы три целых числа n, m, k (2 ≤ n, m ≤ 400; 0 ≤ k ≤ n·m).

Далее в n строках записано по m символов — заданная таблица. Каждый символ таблицы является строчной буквой латинского алфавита.

Выходные данные

Выведите единственное число — требуемое количество подтаблиц.

Примечание

В первом примере имеется две искомые подтаблицы: первая имеет верхний левый угол в клетке (2, 2) и правый нижний угол в клетке (3, 3), вторая имеет верхний левый угол в клетке (2, 1) и правый нижний угол в клетке (3, 4).

B. Размер жюри

Перебор реализация *1500

В 2013-м году авторский коллектив Берляндского государственного университета должен подготовить задачи к n олимпиадам. Будем считать, что олимпиады пронумерованы последовательными целыми числами от 1 до n. Про каждую олимпиаду известно, сколько членов жюри должно участвовать в ее подготовке, а также время, требуемое на подготовку задач для нее. А именно, олимпиаду с номером i должны готовить pi человек в течение ti дней, причем подготовка олимпиады должна вестись непрерывный промежуток времени и закончиться ровно за день до олимпиады. Непосредственно в день олимпиады члены жюри, которые ее готовили, уже над ней не работают.

К примеру, если олимпиада состоится 9 декабря, и на ее подготовку требуется 7 человек и 6 дней, то все эти 7 членов жюри будут работать над задачами этой олимпиады с 3-го декабря по 8-е декабря (9-го декабря эти члены жюри уже не будут работать над задачами этой олимпиады, то есть некоторые из них могут начать готовить задачи какой-то другой олимпиады). А если олимпиада проводится 3 ноября и требует 5 дней подготовки, то члены жюри будут работать с 29-го октября по 2-е ноября.

Чтобы не перегружать членов жюри, было введено такое правило: один член жюри не может в один и тот же день работать над задачами для разных олимпиад. Напишите программу, которая определяет, какое наименьшее количество человек должно входить в состав жюри, чтобы все олимпиады могли быть подготовлены в срок.

Входные данные

В первой строке записано целое число n — количество олимпиад в 2013-м году (1 ≤ n ≤ 100). Каждая из следующих n строк содержит по четыре целых числа mi, di, pi и ti — месяц и день олимпиады (заданы без лидирующих нулей), требуемое количество членов жюри и время, требуемое на подготовку i-й олимпиады (1 ≤ mi ≤ 12, di ≥ 1, 1 ≤ pi, ti ≤ 100), di не превосходит количества дней в месяце mi. Олимпиады заданы в произвольном порядке. В один день может проводиться несколько олимпиад.

Для решения задачи используйте современный (Григорианский) календарь. Обратите внимание, все даты заданы в 2013 году. Этот год не является високосным, следовательно, в феврале 28 дней. Обратите внимание, подготовка некоторой олимпиады может начаться в 2012 году.

Выходные данные

Выведите единственное число — минимальный размер жюри.

D. Крысы

графы кратчайшие пути Перебор поиск в глубину и подобное реализация *2300

В подвале магазина, которым владеет Василий Петрович, расплодились крысы. Василий Петрович, возможно, и не замечал бы их присутствия, но они повадились пробираться на склад и красть оттуда продукты. Василий Петрович не может с этим больше мириться: он должен уничтожить крыс в подвале. Поскольку мышеловки уже изжили себя и совсем не помогают, а крысиным ядом потом можно отравиться и самому, он избрал радикальный способ: взорвать в подвале две гранаты (больше у него нет).

В данной задаче мы будем представлять подвал магазина в виде прямоугольной таблицы из n × m клеток. Некоторые клетки заняты стенами, а остальные — свободны. Василий Петрович понаблюдал за крысами и выяснил, что в определенный момент времени они ложатся спать, причем все время в одни и те же места. В этот удобный момент он и хочет взорвать гранаты. На плане своего подвала он отметил те клетки, в которых спят крысы. Эти клетки, разумеется, не заняты стенами.

Гранату можно взорвать только в клетке, не занятой стеной. Взрывная волна от гранаты распространяется следующим образом. Будем считать, что подрыв гранаты происходит в момент времени 0. В этот начальный момент времени взорвана только клетка, где подорвали гранату. Если в момент времени t взорвана некоторая клетка, то в момент времени t + 1 будут взорваны те соседние по стороне клетки, которые не заняты стенами (некоторые из них могли быть взорваны и до этого). Взрывная волна распространяется ровно d секунд, после чего мгновенно угасает.

Пример распространения взрывной волны: на первой картинке ситуация до взрыва, а на последующих картинках показаны взорванные клетки на моменты времени 0,1,2,3 и 4. Таким образом взрывная волна на картинке распространяется d = 4 секунды.

Василий Петрович интересуется, можно ли выбрать две клетки для подрыва гранат таким образом, чтобы все клетки, в которых спят крысы, оказались взорваны. Напишите программу, которая это выясняет.

Входные данные

В первой строке записаны три целых числа n, m и d, разделенных одиночными пробелами (4 ≤ n, m ≤ 1000, 1 ≤ d ≤ 8). В следующих n строках записана таблица, задающая план подвала. Каждая строка таблицы состоит из m символов. Символ «X» означает, что соответствующая клетка занята стеной, символ «.» означает свободную клетку, символ «R» — свободную клетку, в которой спят крысы.

Гарантируется, что первая и последняя строки, а также первый и последний столбцы состоят из символов «X». На плане есть хотя бы две клетки, не занятые стенами. Имеется хотя бы одна клетка, в которой спят крысы.

Выходные данные

Если невозможно взорвать все клетки, в которых спят крысы, выведите единственное целое число -1. Иначе выведите через пробел четыре целых числа r1, c1, r2, c2, означающих, что одну из гранат следует взорвать в клетке (r1, c1), а другую — в клетке (r2, c2).

Считайте, что строки таблицы пронумерованы сверху вниз от 1 до n, а столбцы слева направо от 1 до m. Поскольку r1 и r2 задают номера строк, а c1 и c2 — номера столбцов в таблице, то должны выполняться ограничения: 1 ≤ r1, r2 ≤ n, 1 ≤ c1, c2 ≤ m. В одной и той же клетке дважды взрывать гранату нельзя. Взрывные волны гранат могут пересекаться. Возможно, взрыв одной из гранат не уничтожит ни одной крысы, а взрыв другой уничтожит всех.

C. Почти арифметическая прогрессия

дп Перебор *1500

Гена любит последовательности чисел. Недавно он открыл для себя новый тип последовательностей, который он назвал — почти арифметическая прогрессия. Назовем последовательность почти арифметической прогрессией, если ее элементы можно представить в виде:

  • a1 = p, где p — некоторое целое число;
  • ai = ai - 1 + ( - 1)i + 1·q (i > 1), где q — некоторое целое число.

Сейчас у Гены на листке записана последовательность b, состоящая из n целых чисел. Помогите Гене, найдите в ней самую длинную подпоследовательность чисел, которая является почти арифметической прогрессией.

Последовательность s1,  s2,  ...,  sk называется подпоследовательностью последовательности b1,  b2,  ...,  bn, если найдется такая возрастающая последовательность индексов i1, i2, ..., ik (1  ≤  i1  <  i2  < ...   <  ik  ≤  n), что bij  =  sj. Иными словами, последовательность s может быть получена из b путем вычеркивания некоторых элементов.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 4000). В следующей строке задано n целых чисел b1, b2, ..., bn (1 ≤ bi ≤ 106).

Выходные данные

Выведите единственное целое число — длину максимальной по длине, искомой подпоследовательности.

Примечание

В первом тесте подходящей подпоследовательностью будет сама последовательность.

Во втором тесте подходит подпоследовательность: 10, 20, 10.

C. Угол обзора

геометрия математика Перебор *1800

Недавно во Флатландии ввели новый вид проверки зрения для получения водительских прав. Экзамен состоит в том, что на плоскость помещаются манекены, и экзаменуемый должен назвать величину минимального угла, вершина которого находится в начале координат, такого, что все манекены располагаются внутри или на границе этого угла.

Из-за того, что Вы проводите много времени «за монитором», у Вас не очень хорошее зрение. Поэтому Вам необходимо написать программу, которая будет проходить этот тест.

Входные данные

В первой строке задано единственное целое число n (1 ≤ n ≤ 105) — количество манекенов.

В следующих n строках находятся по два целых числа, разделенных пробелом: xi, yi (|xi|, |yi| ≤ 1000) — координаты i-того манекена. Гарантируется, что в начале координат нет манекена. Гарантируется, что никакие два манекена не находятся в одной точке плоскости.

Выходные данные

Выведите единственное вещественное число — величину искомого угла в градусах. Ответ будет считаться правильным, если относительная или абсолютная погрешность не будет превышать 10 - 6.

Примечание

Решение для первого примера показано ниже:

Решение для второго примера показано ниже:

Решение для третьего примера показано ниже:

Решение для четвертого примера показано ниже:

B. Маленький Слоник и выборы

дп Комбинаторика Перебор *1900

Недавно в Зоопарке прошли выборы. Всего в выборах участвовало 7 основных политических партий: одна из них Политическая партия Маленького Слоника, остальные 6 партий имеют менее запоминающиеся названия.

Для политических партий очень важен их номер в избирательном бюллетене. Всего возможных номеров m: 1, 2, ..., m. Каждой из этих 7 партий будет каким-то образом присвоен ровно один номер, причем две разные партии не могут получить один и тот же номер.

Члены Политической партии Маленького Слоника верят в счастливые цифры 4 и 7. Они хотят оценить свои шансы на выборах, для этого надо выяснить, сколько существует таких корректных присвоений номеров партиям, что количество счастливых цифр номера в бюллетене партии Маленького Слоника строго больше общего количества счастливых цифр в номерах остальных 6 партий.

Помогите Политической партии Маленького Слоника, посчитайте это количество. Так как ответ может быть довольно большим, выведите остаток от его деления на 1000000007 (109 + 7).

Входные данные

В единственной строке задано единственное целое положительное число m (7 ≤ m ≤ 109) — количество возможных номеров в бюллетене.

Выходные данные

В единственной строке выведите целое число — ответ на задачу по модулю 1000000007 (109 + 7).

A. Маленький Слоник и шахматы

Перебор Строки *1000

Маленький Слоник очень любит шахматы.

Однажды, Маленький Слоник и его друг захотели сыграть в шахматы. Фигуры у них есть, а вот с доской проблематично. У них есть клетчатая доска размером 8 × 8, каждая клетка которой покрашена либо в черный, либо в белый цвет. Маленький Слоник и его друг знают, что в правильной шахматной доске нету соседних по сторонам клеток с одинаковым цветом, а левая верхняя клетка — белого цвета. Чтобы поиграть в шахматы, они хотят превратить имеющуюся у них доску в правильную шахматную доску. Для этого друзья могут выбрать любую строку имеющейся доски и циклически сдвинуть клетки выбранной строки, то есть последнюю клетку (самую правую) поставить на первое место в строке, а остальные сдвинуть на одну позицию вправо. Описанную операцию можно выполнять несколько раз (можно вообще не выполнять).

Например, если первая строка доски имела вид «BBBBBBWW» (белые клетки строки обозначены символом «W», черные символом — «B»), то после одного циклического сдвига она будет иметь вид «WBBBBBBW».

Помогите Маленькому Слонику и его другу выяснить, смогут ли они с помощью любого количества описанных операций превратить имеющуюся доску в правильную шахматную доску.

Входные данные

Входные данные состоят из ровно восьми строк. Каждая из строк содержит ровно восемь символов «W» или «B» без пробелов: j-тый символ в i-той строке обозначает цвет j-той клетки i-той строки имеющейся доски. Символ «W» обозначает белый цвет, символ «B» — черный.

Считайте, что строки доски пронумерованы от 1 до 8 сверху вниз, а столбцы от 1 до 8 слева направо. Заданная доска изначально может быть правильной шахматной доской.

Выходные данные

В единственной строке выведите «YES» (без кавычек), если доску можно превратить в правильную шахматную и «NO» (без кавычек) иначе.

Примечание

В первом примере нужно сдвинуть на одну позицию следующие строки — 3-ю, 6-ю, 7-ю и 8-ю.

Во втором примере достичь цели никак не получится.

B. Маленький Слоник и магический квадрат

Перебор реализация *1100

Маленький Слоник очень любит магические квадраты.

Магическим квадратом называется таблица размера 3 × 3, в каждой ячейке которой записано некоторое целое положительное число. При этом суммы чисел во всех строках, столбцах и диагоналях таблицы равны между собой. На картинке ниже показан магический квадрат, во всех строках, столбцах и диагоналях которого сумма чисел равна 15.

Маленький Слоник запомнил один магический квадрат. Он стал выписывать на листок бумаги этот квадрат, но пока выписывал забыл все три элемента главной диагонали магического квадрата. К счастью, Маленький Слоник точно запомнил, что все элементы магического квадрата не превосходили 105.

Помогите Маленькому Слонику, восстановите исходный магический квадрат по его записям.

Входные данные

В первых трех строках входных данных заданы записи Маленького Слоника. В первой строке записаны элементы первой строки магического квадрата, во второй — второй строки, в третьей — третьей строки. Вместо элементов главной диагонали, которые забыл Маленький Слоник, записаны нули.

Гарантируется, что в записях ровно три нуля и все они располагаются на главной диагонали. Гарантируется, что все положительные числа в таблице не превосходят 105.

Выходные данные

Выведите три строки, в каждой строке выведите по три целых числа — магический квадрат Маленького Слоника. Если существует несколько магических квадратов, разрешается вывести любой. Обратите внимание, все выведенные числа должны быть положительными и не должны превосходить 105.

Гарантируется, что хотя бы один магический квадрат, удовлетворяющий условиям, существует.

B. Древнее пророчество

Перебор реализация Строки *1600

Древнее Пророчество, найденное недавно, по мнению ученых содержит в себе точную дату Конца Света. Пророчество представляет собой строку, состоящую только из цифр и символов «-».

Будем говорить, что какая-либо дата упоминается в Пророчестве, если существует подстрока Пророчества, представляющая собой запись этой даты в формате «dd-mm-yyyy». Количеством упоминаний даты будем называть количество таких подстрок в Пророчестве. Например, в Пророчестве «0012-10-2012-10-2012» дата 12-10-2012 упоминается два раза (первый раз — «0012-10-2012-10-2012», второй — «0012-10-2012-10-2012»).

Дата Конца Света — это такая корректная дата, что количество ее упоминаний в Пророчестве строго больше, чем у любой другой корректной даты.

Дата называется корректной, если год лежит в диапазоне от 2013 до 2015, месяц — от 1 до 12, а номер дня строго больше нуля и не превышает количество дней в текущем месяце. Обратите внимание, что дата записывается в формате «dd-mm-yyyy», это значит, что, при необходимости, к числу месяцев или дней дописываются лидирующие нули. Другими словами дата «1-1-2013» не записана в формате «dd-mm-yyyy», а дата «01-01-2013» — записана в нем.

Обратите внимание, что между 2013 и 2015 годами нет ни одного високосного года.

Входные данные

В первой строке содержится Пророчество: непустая строка, состоящая только из цифр и символов «-». Длина Пророчества не превышает 105 символов.

Выходные данные

В единственной строке выведите дату Конца Света. Гарантируется, что такая дата существует и единственна.

E. Разделение королевства

Бинарный поиск Перебор Структуры данных *2500

Государство Флатландия представляет собой бесконечную двумерную плоскость. Во Флатландии есть n городов, каждый из которых является точкой на плоскости.

Правит Флатландией Король Круг IV. У Круга IV есть 9 сыновей. Каждому из своих сыновей Круг хочет отдать во владение часть Флатландии. Для этого он хочет провести четыре различные прямые, так, что две из них параллельны оси Ox, а другие две параллельны оси Oy. При этом ни одна прямая не должна проходить через какой-либо город. Таким образом Флатландия будет разделена на 9 частей, а каждому сыну будет отдана ровно одна из этих частей. Немного подумав и оценив послушность сыновей, Круг IV решил, что i-тому сыну должна достаться часть Флатландии, на которой находится ровно ai городов.

Помогите Кругу найти такие четыре прямые, что если разделить этими прямыми Флатландию на 9 частей, то получившиеся части можно будет раздать сыновьям так, чтобы сыну с номером i досталась часть Флатландии, на которой находится ai городов.

Входные данные

В первой строке находится целое число n (9 ≤ n ≤ 105) — количество городов во Флатландии. В следующих n строках находятся по два целых числа, разделенных пробелом: xi, yi ( - 109 ≤ xi, yi ≤ 109) — координаты i-того города. Никакие два города не находятся в одной точке. В последней строке находится девять чисел, разделенных пробелами: .

Выходные данные

Если решения не существует, то выведите единственное целое число -1.

Иначе, в первой строке выведите два различных вещественных числа, разделенных пробелом: x1, x2 — абсциссы прямых, параллельных оси Oy, а во второй строке выведите два различных вещественных числа, разделенных пробелом: y1, y2 — ординаты прямых, параллельных оси Ox. Если решений несколько выведите любое.

При проверке ответа, считается, что город лежит на прямой, если расстояние от города до прямой не превышает 10 - 6. Две прямые считаются одинаковыми, если расстояние между ними не превышает 10 - 6.

Примечание

Решение для первого теста показано ниже:

Решение для второго теста показано ниже:

Для третьего теста решения не существует.

E. Максим и калькулятор

дп Перебор *2800

У Максима есть калькулятор. В калькуляторе есть две целочисленные ячейки. Сначала в первой ячейке записано число 1, а во второй 0. За одно действие можно выполнить одну из описанных ниже операций:

  1. Пусть в текущий момент времени в первой ячейке записано число a, а во второй число b. Записать во вторую ячейку число b + 1;
  2. Пусть в текущий момент времени в первой ячейке записано число a, а во второй число b. Записать в первую ячейку число a·b.

Сейчас Максим интересуется следующей задачей: сколько существует целых чисел x (l ≤ x ≤ r) таких, что число x можно записать в первую ячейку калькулятора выполнив не более p действий.

Входные данные

В первой строке заданы три целых числа: l, r, p (2 ≤ l ≤ r ≤ 109, 1 ≤ p ≤ 100).

Числа в строке разделяются одиночными пробелами.

Выходные данные

В единственную строку выведите целое число — ответ на задачу.

C. Круг чисел

Перебор поиск в глубину и подобное реализация *2000

Вася написал на доске по кругу в некотором порядке n различных целых чисел от 1 до n. Затем он соединил дугами пары чисел (a, b) (a ≠ b), которые либо являются непосредственными соседями друг друга в круге, либо существует число c, такое что a и с являются непосредственными соседями, а также b и c являются непосредственными соседями. Нетрудно догадаться, что в итоге Вася нарисовал n дуг.

Например, если числа по кругу написаны в порядке 1, 2, 3, 4, 5 (по часовой стрелке), то дугами будут соединены пары чисел (1, 2), (2, 3), (3, 4), (4, 5), (5, 1), (1, 3), (2, 4), (3, 5), (4, 1) и (5, 2).

С тех пор прошло немало времени, числа с доски были давно стерты, но не так давно Вася нашел у себя листочек с выписанными n парами чисел, которые были соединены дугами на доске. Вася просит вас найти порядок чисел в круге по этим парам.

Входные данные

В первой строке входных данных записано единственное целое число n (5 ≤ n ≤ 105) — количество чисел в круге. Далее в n строках даны пары целых чисел ai, bi (1 ≤ ai, bi ≤ n, ai ≠ bi) — числа, соединенные дугами.

Гарантируется, что никакая пара чисел, соединенных дугой, не задана во входных данных более одного раза. Пары и числа в парах заданы в произвольном порядке.

Выходные данные

Если Вася где-то ошибся, и не существует ни одного способа расположить числа от 1 до n на круге согласно условию, то выведите единственное число «-1» (без кавычек). Иначе выведите любую подходящую последовательность из n различных целых чисел от 1 до n.

Если существует несколько решений, то разрешается вывести любое. В частности, не имеет значения от какого числа начинать последовательность, описывающую порядок, также неважно по часовой стрелке выписывать числа или против.

E. Ромб

дп Перебор Структуры данных *2500

Вам дана таблица размера n × m. На пересечении i-ой строки (1 ≤ i ≤ n) и j-ого столбца (1 ≤ j ≤ m) стоит целое неотрицательное число ai, j. Кроме того, Вам дано целое неотрицательное число k.

Вам необходимо найти такую пару целых чисел (a, b), которая удовлетворяет условиям:

  • k ≤ a ≤ n - k + 1;
  • k ≤ b ≤ m - k + 1;
  • обозначим максимум функции среди всех целых x и y, которые удовлетворяют неравенствам k ≤ x ≤ n - k + 1 и k ≤ y ≤ m - k + 1, через mval; для искомой пары чисел должно выполняться равенство f(a, b) = mval.
Входные данные

В первой строке даны три разделенных пробелами целых числа n, m и k (1 ≤ n, m ≤ 1000, ). Далее в n строках находятся по m целых чисел: j-ое число в i-ой строке равно ai, j (0 ≤ ai, j ≤ 106).

Числа в строках разделяются пробелами.

Выходные данные

Выведите искомую пару целых чисел a и b. Числа разделяйте пробелом.

Если существует несколько правильных ответов, разрешается вывести любой из них.

A. Матчи

Перебор *800

Манао работает на спортивном телевидении. Он долгое время наблюдал за футбольными матчами чемпионата одной страны и начал замечать разные закономерности. Например, у каждой команды есть две формы: домашняя и выездная. Когда команда проводит матч на своем стадионе, футболисты надевают домашнюю форму, а когда на чужом — выездную. Единственное исключение из этого правила — когда цвет домашней формы принимающей команды совпадает с цветом формы гостей. В таком случае домашняя команда облачается в свою выездную форму. Цвета домашней и выездной формы для каждой команды различны.

В чемпионате страны участвует n команд и он состоит из n·(n - 1) матчей: каждая из команд принимает каждую другую команду на своем стадионе. Манао задумался, а сколько раз в течение одного чемпионата случится, что команда, играющая на своем стадионе, оденет выездную форму? Обратите внимание, что для подсчета этого количества порядок матчей не играет никакого значения.

Вам даны цвета домашней и выездной формы каждой команды. Для удобства эти цвета пронумерованы целыми числами таким образом, что никакие два разных цвета не имеют одинаковый номер. Помогите Манао найти ответ на его вопрос.

Входные данные

В первой строке содержится целое число n (2 ≤ n ≤ 30). В каждой из следующих n строк записана пара разделенных одним пробелом различных целых чисел hi, ai (1 ≤ hi, ai ≤ 100) — номер цвета домашней и выездной форм i-ой команды соответственно.

Выходные данные

В единственной строке выведите количество матчей, в которых домашняя команда выступит в выездной форме.

Примечание

В первом тестовом примере чемпионат состоит из 6 матчей. Единственный поединок, в котором произойдет интересное нам событие — матч между командами 2 и 1 на стадионе команды 2.

Во втором тестовом примере домашней команде придется сменить форму в матчах между командами: 1 и 2, 2 и 1, 2 и 3, 3 и 4, 4 и 2 (первой написана принимающая команда).

B. Турнир

битмаски жадные алгоритмы Перебор поиск в глубину и подобное *1300

Совсем недавно в Берляндии завершился турнир по скоростному засыпанию «Соня-2010». В турнире приняло участие n сильнейших участников со всей страны. Турнир состоит из игр, каждая из которых является противостоянием двух участников. Таким образом, в процессе турнира было проведено n·(n - 1) / 2 игр, то есть каждый из участников встретился с каждым.

Правила игры очень просты — кто первый засыпает, тот и победил. Ответственный секретарь должен был записать каждую игру в виде пары чисел «xi yi», где xi и yi — это порядковые номера участников игры, причем тот, кто записан первым является победителем игры (т.е. xi — победитель, а yi — проигравший). Ничьих в этой игре не бывает.

Совсем недавно «Институт Изучения Сна» выяснил, что на самом деле каждый человек характеризуется величиной pj — скоростью засыпания в экстремальных условиях. Таким образом, при игре двух игроков побеждает тот, у кого эта величина меньше. Величина pj у каждого человека своя и не изменяется в течении жизни.

Известно, что у всех участников турнира их pj различны. Также известно, что секретарь сделал записи результатов всех игр, кроме одной.

Ваша задача написать программу, которая по заданным записям результатов игр определяет недостающую.

Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 50) — количество участников. Следующие n·(n - 1) / 2 - 1 строк содержат результаты всех игр. Каждая игра записана в отдельной строке в виде пары чисел xi, yi (1 ≤ xi, yi ≤ n, xi ≠ yi), где xi и yi — номера участников встречи. Известно, что в процессе турнира каждый из n участников принял участие в n - 1 игре, встретившись со всеми соперниками.

Выходные данные

Выведите пару чисел x y — недостающую запись. Если решений несколько, то выведите любое.

E. Число с заданным количеством делителей

дп Перебор теория чисел *2000

Найдите наименьшее натуральное число, имеющее заданное количество делителей. Гарантируется, что ответ не превосходит 1018.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 1000).

Выходные данные

Выведите наименьшее число, имеющее ровно n делителей.

A. Красивый год

Перебор *800

Кажется, еще совсем недавно наступил новый 2013 год. А знали ли Вы забавный факт о том, что 2013 год является первым годом после далекого 1987 года, в котором все цифры различны?

Теперь же Вам предлагается решить следующую задачу: задан номер года, найдите наименьший номер года, который строго больше заданного и в котором все цифры различны.

Входные данные

В единственной строке задано целое число y (1000 ≤ y ≤ 9000) — номер года.

Выходные данные

Выведите единственное целое число — минимальный номер года, который строго больше y, в котором все цифры различны. Гарантируется, что ответ существует.

B. Простая матрица

Бинарный поиск математика Перебор теория чисел *1300

Перед Вами матрица размера n × m, состоящая из целых чисел. За один ход разрешается применить к матрице единственное преобразование: выбрать произвольный элемент матрицы и увеличить его на 1. Каждый элемент можно увеличивать произвольное количество раз.

Вас очень интересуют простые числа. Напомним, что простым числом называется целое положительное число, которое имеет ровно два различных целых положительных делителя: единицу и само себя. Например, числа 2, 3, 5 — простые, а числа 1, 4, 6 — нет.

Вы считаете матрицу простой, если выполняется хотя бы одно из следующих двух условий:

  • существует строка матрицы, в которой все числа простые;
  • существует столбец матрицы, в котором все числа простые;

Ваша задача — посчитайте, за какое минимальное количество ходов можно получить из имеющейся матрицы простую матрицу.

Входные данные

В первой строке заданы два целых числа n, m (1 ≤ n, m ≤ 500) — количество строк и столбцов в матрице соответственно.

В каждой из следующих n строк записано по m целых чисел — исходная матрица. Все элементы матрицы являются целыми положительными числами. Все числа в исходной матрице не превосходят 105.

Числа в строках разделяются одиночными пробелами.

Выходные данные

Выведите единственное целое число — минимальное количество ходов, которое потребуется, чтобы из заданной матрицы получить простую матрицу. Если заданная матрица — простая, выведите 0.

Примечание

В первом примере нужно один раз увеличить число 1 в клетке (1, 1). Таким образом, первая строка будет состоять из простых чисел: 2, 2, 3.

Во втором примере нужно три раза увеличить число 8 в клетке (1, 2). Таким образом, второй столбец будет состоять из простых чисел: 11, 2.

В третьем примере ничего делать не нужно, поскольку второй столбец уже состоит из простых чисел: 3, 2.

C. Последняя Дыра!

геометрия Перебор *2600

У Луи есть n кругов на плоскости. Центр круга номер i находится в точке (xi, yi). В момент времени ноль круги начинают одновременно расти. Иными словами, радиус каждого круга в момент времени t (t > 0) равняется t. Круги изображаются в виде черных дисков на бесконечной белой плоскости. Итак, в каждый момент плоскость состоит из нескольких черных и белых регионов. Заметьте, что круги, разрастаясь, могут накладываться друг на друга.

Будем называть дырой замкнутую, связную белую область. Например, на рисунке изображены две дыры, обозначенные красной границей. Пока круги растут, они могут создать новые дыры и легко видеть, что каждая созданная дыра в конце концов исчезнет. Луи просит Вас найти момент времени, когда исчезает последняя дыра. Другими словами, первый момент времени, после которого никогда не будет ни одной дыры на плоскости.

Входные данные

Первая строка входных данных содержит целое число n (1 ≤ n ≤ 100). Каждая из следующих n строк содержит по два целых числа xi и yi ( - 104 ≤ xi, yi ≤ 104), обозначающих расположение i-того круга.

Гарантируется, что никакие два круга не имеют центра в одной и той же точке.

Выходные данные

Выведите момент времени, когда исчезает последняя дыра. Если ни в один момент времени не существует ни одной дыры, выведите -1.

Ответ будет считаться правильным, если абсолютная или относительная погрешность не превышают 10 - 4.

B. Новая задача

Перебор Строки *1500

Придумать новую задачу не так просто, как многие думают. Иногда даже придумать название задачи бывает трудно. Будем считать название оригинальным, если оно не встречается в качестве подстроки ни в одном из названий недавних задач на Codeforces.

Вам даны названия n последних задач — строки, состоящие из строчных букв латинского алфавита. Ваша задача — найти кратчайшее оригинальное название для новой задачи. Если таких несколько, требуется выбрать лексикографически минимальное. Обратите внимание, название задачи не может быть пустой строкой.

Подстрокой s[l... r] (1 ≤ l ≤ r ≤ |s|) строки s = s1s2... s|s| (где |s| — длина строки s) называется строка slsl + 1... sr.

Строка x = x1x2... xp лексикографически меньше строки y = y1y2... yq, если либо p < q и x1 = y1, x2 = y2, ... , xp = yp, либо существует такое число r (r < p, r < q), что x1 = y1, x2 = y2, ... , xr = yr и xr + 1 < yr + 1. Символы строк сравниваются как их ASCII коды.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 30) — количество названий, которые необходимо учесть. Далее следует n названий задач, по одному в строке. Каждое название состоит только из строчных букв латинского алфавита (в частности, оно не содержит пробелов) и имеет длину от 1 до 20, включительно.

Выходные данные

Выведите строку, состоящую из строчных букв латинского алфавита — лексикографически минимальное кратчайшее оригинальное название.

Примечание

В первом примере первые 9 букв латинского алфавита (a, b, c, d, e, f, g, h, i) встречаются в названиях задач, поэтому ответ — буква j.

Во втором примере в названиях содержатся все 26 букв латинского алфавита, поэтому кратчайшее оригинальное название не может иметь длину 1. Название aa содержится в качестве подстроки в первом названии.

A. Точка на спирали

геометрия Перебор реализация *1400

Конь Валера живет на плоскости. На его плоскости задана декартова система координат. Также на его плоскости нарисована бесконечная спираль. Спираль состоит из отрезков: [(0, 0), (1, 0)], [(1, 0), (1, 1)], [(1, 1), ( - 1, 1)], [( - 1, 1), ( - 1,  - 1)], [( - 1,  - 1), (2,  - 1)], [(2,  - 1), (2, 2)] и так далее. Таким образом, эта бесконечная спираль проходит через каждую точку плоскости с целыми координатами.

Конь Валера живет на плоскости в точке с координатами (0, 0). Он хочет прогуляться вдоль спирали до точки с координатами (x, y). У Коня Валеры четыре ноги, поэтому ему очень сложно поворачивать. Посчитайте, сколько раз ему придется повернуть, если он будет идти по спирали от точки (0, 0) до точки (x, y).

Входные данные

В первой строке заданы два целых числа x и y (|x|, |y| ≤ 100).

Выходные данные

Выведите единственное целое число — сколько раз придется повернуть Валере.

B. Книги

Бинарный поиск Перебор реализация *1400

Когда у Валеры появляется свободное время, он идет в библиотеку и читает книги. Вот и сегодня у него появилось t свободных минут для чтения. Поэтому Валера взял n книг в библиотеке и для каждой книги оценил: какое время потребуется, чтобы ее прочитать. Пронумеруем книги целыми числами от 1 до n. Для прочтения i-той книги Валере требуется ai минут.

Валера решил, что он выберет произвольную книгу с номером i и будет читать книги друг за другом, начиная с этой книги. Другими словами, сначала он прочитает книгу c номером i, затем книгу с номером i + 1, затем книгу с номером i + 2 и так далее. Он продолжает этот процесс до тех пор, пока либо не закончится его свободное время, либо не прочитает книгу с номером n. Каждую книгу Валера читает целиком, то есть он не читает книгу, которую не успеет дочитать до конца из-за нехватки свободного времени.

Посчитайте максимальное количество книг, которое Валера сможет прочитать.

Входные данные

В первой строке заданы два целых числа n и t (1 ≤ n ≤ 105; 1 ≤ t ≤ 109) — количество книг и количество свободных минут у Валеры соответственно. Во второй строке задана последовательность из n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 104), в которой число ai обозначает количество минут, которое требуется для прочтения i-ой книги.

Выходные данные

Выведите единственное целое число — максимальное количество книг, которое Валера сможет прочитать.

E. Трансформация последовательности

дп математика Перебор реализация Структуры данных *3000

Вам задана неубывающая последовательность x1, x2, ..., xn (1 ≤ x1 ≤ x2 ≤ ... ≤ xn ≤ q). Также Вам заданы два целых числа a и b (a ≤ ba·(n - 1) < q).

Ваша задача преобразовать последовательность x1, x2, ..., xn в некоторую последовательность y1, y2, ..., yn (1 ≤ yi ≤ qa ≤ yi + 1 - yi ≤ b). Определим стоимость преобразования как сумму: . Требуется выбрать такую последовательность y, что описанная стоимость преобразования минимальна.

Входные данные

В первой строке заданы четыре целых числа n, q, a, b (2 ≤ n ≤ 6000; 1 ≤ q, a, b ≤ 109a·(n - 1) < qa ≤ b).

Во второй строке задана неубывающая последовательность целых чисел x1, x2, ..., xn (1 ≤ x1 ≤ x2 ≤ ... ≤ xn ≤ q).

Выходные данные

В первой строке выведите n вещественных чисел — искомую последовательность y1, y2, ..., yn (1 ≤ yi ≤ qa ≤ yi + 1 - yi ≤ b). Во второй строке выведите минимальную стоимость преобразования, то есть .

Если существует несколько оптимальных ответов, можно вывести любой из них.

Ответ будет считаться правильным, если относительная или абсолютная погрешность не будет превышать 10 - 6.

B. Ближайшая дробь

Перебор реализация *1700

Даны три положительных целых числа x, y, n. Надо найти ближайшую дробь к дроби , имеющую знаменатель, не превышающий n.

Формально, надо найти такую пару целых чисел a, b (1 ≤ b ≤ n; 0 ≤ a), чтобы значение было минимально возможным.

Если есть несколько «ближайших» дробей, выберите дробь с наименьшим знаменателем. Если есть несколько «ближайших» дробей с наименьшим знаменателем, выберите дробь с наименьшим числителем.

Входные данные

В единственной строке содержатся три целых числа x, y, n (1 ≤ x, y, n ≤ 105).

Выходные данные

Выведите необходимую дробь в формате «a/b» (без кавычек).

B. Коровки и игра в покер

Перебор реализация *1000

За столом сидят n коровок и играют в покер. Сейчас на кону у каждого игрока статус — либо «ALLIN», либо «IN», либо «FOLDED», статус не меняется весь кон. Игрок, статус которого не «FOLDED», может накалить атмосферу, раскрыв карты. Но на ставки влиять нельзя, так что раскрыть карты можно только если у всех остальных игроков статус — либо «ALLIN», либо «FOLDED». Статус данного игрока может быть либо «ALLIN», либо «IN».

Найдите количество коровок, которые могут сейчас раскрыть карты, не повлияв на ставки.

Входные данные

В первой строке записано единственное целое число n (2 ≤ n ≤ 2·105). Во второй строке записано n символов, каждый за них — «A», «I», или «F»: i-ый символ равен «A», если статус i-го игрока равен «ALLIN», «I» — если статус i-го игрока равен «IN», или «F» — если статус i-го игрока равен «FOLDED».

Выходные данные

Первая строка должна содержать единственное целое число, обозначающее количество игроков, которые могут раскрыть карты в данный момент.

Примечание

В первом примере коровки номер 1, 4, 5 и 6 могут раскрыть карты. Во втором примере только коровка номер 3 может раскрыть карты.

A. IQ-тест

Перебор реализация *1100

В городе Крайняя Туле при приеме на работу часто требуют пройти IQ-тест.

Тест заключается в следующем: испытуемому выдают листок бумаги, на котором нарисован клетчатый квадрат 4 × 4, часть клеток которого окрашено в черный цвет, а часть — в белый. Нужно перекрасить не более одной клетки в другой цвет так, чтобы на рисунке появился квадрат 2 × 2, полностью состоящий из клеток одного цвета. Если такой квадрат уже есть, испытуемый должен просто сказать об этом и тест будет пройден.

Вам требуется написать программу, которая определяет, можно ли пройти тест. Тест пройти нельзя, если при перекрашивании любой клетки или при бездействии не найдется квадратов 2 × 2, состоящих из клеток одного цвета.

Входные данные

В четырех строках записаны по четыре символа: j-й символ i-й строки равен «.», если клетка в i-й строке и j-м столбце квадрата покрашена в белый цвет, и «#», если в черный.

Выходные данные

Выведите «YES» (без кавычек), если тест можно пройти, и «NO» (без кавычек) в противном случае.

Примечание

В первом тестовом примере достаточно перекрасить первую клетку второй строки. После этого перекрашивания требуемый квадрат 2 × 2 будет находиться на пересечении 1-й и 2-й строки с 1-м и 2-м столбцом.

A. Пингвин Поло и отрезки

Перебор реализация *1100

Маленький пингвин Поло очень любит целочисленные отрезки, то есть пары целых чисел [lr] (l ≤ r).

У него есть множество, состоящее из n целочисленных отрезков: [l1r1], [l2r2], ..., [lnrn]. Известно, что никакие два отрезка этого множества не пересекаются. За один шаг Поло может расширить любой отрезок множества на 1 влево или на 1 вправо, то есть из отрезка [lr] получить либо отрезок [l - 1; r], либо — [lr + 1].

Величиной множества отрезков, состоящего из n отрезков [l1r1], [l2r2], ..., [lnrn], назовем количество целых чисел x таких, что существует целое число j, для которого выполняется неравенство, lj ≤ x ≤ rj.

Найдите минимальное количество шагов, которое требуется, чтобы величина множества отрезков Поло делилась на k.

Входные данные

В первой строке заданы два целых числа n и k (1 ≤ n, k ≤ 105). В каждой из следующих n строк задан отрезок в виде пары целых чисел li и ri ( - 105 ≤ li ≤ ri ≤ 105), записанных через пробел.

Гарантируется, что никакие два отрезка не пересекаются. Другими словами, для любых двух целых чисел i, j (1 ≤ i < j ≤ n) выполняется неравенство, min(ri, rj) < max(li, lj).

Выходные данные

В единственной строке выведите целое число — ответ на задачу.

B. Пингвин Поло и матрица

дп Перебор реализация сортировки Тернарный поиск *1400

У маленького пингвина Поло есть матрица n × m, состоящая из целых чисел. Пронумеруем строки матрицы от 1 до n сверху вниз, а столбцы от 1 до m слева направо. Обозначим через aij элемент матрицы, стоящий на пересечении i-ой строки и j-го столбца.

За один шаг пингвин может добавить к любому элементу матрицы или отнять от любого элемента матрицы число d. Найдите минимальное количество шагов, которое требуется для того, чтобы все элементы матрицы были равны между собой. Если описанное невозможно, сообщите об этом.

Входные данные

В первой строке заданы три целых числа n, m и d (1 ≤ n, m ≤ 100, 1 ≤ d ≤ 104) — размеры матрицы и параметр d. В следующих n строках записана матрица: j-тое целое число в i-той строке — элемент матрицы aij (1 ≤ aij ≤ 104).

Выходные данные

В единственной строке выведите целое число — минимальное количество шагов, которое требуется для того, чтобы все элементы матрицы были равны между собой. Если описанное невозможно, выведите «-1» (без кавычек).

A. Плевая задача

Перебор *1000

В берляндском зоопарке есть вольер с верблюдами. Как известно, верблюды любят плевать. Вася целый день наблюдал за этими интересными животными и записывал в блокнот, какой верблюд куда плевал. Теперь он хочет выяснить, есть ли в зоопарке два верблюда, которые плюнули друг в друга. Помогите ему справиться с этой задачей.

Верблюды плюют по дуге, т. е. если верблюд в точке x плюнул на d метров вправо, то он может попасть только в верблюда, стоящего в точке x + d, если такой есть.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100) — число верблюдов в зоопарке. Далее следует n строк по два целых числа xi и di ( - 104 ≤ xi ≤ 104, 1 ≤ |di| ≤ 2·104) — записи в блокноте Васи. xi — координата точки, в которой стоит i-ый верблюд, в метрах. di — на сколько метров плюнул i-ый верблюд. Положительные значения di означают, что i-ый верблюд плевал вправо, отрицательные — что i-ый верблюд плевал влево. В одной точке не может стоять больше одного верблюда.

Выходные данные

Если в зоопарке есть два верблюда, которые плюнули друг в друга, выведите YES. Иначе выведите NO.

C. Маска подсети

*особая задача битмаски Перебор реализация *1600

В задаче используется упрощенная модель адресов в TCP/IP, внимательно прочтите условие.

Поликарп устроился на работу системным администратором. Как-то раз к нему в руки попали n IP-адресов. Каждый IP-адрес — это 32-битное число, представленное в виде четверки десятичных 8-битных чисел (без лидирующих нулей), записанных через точку. Например, запись 0.255.1.123 обозначает корректный IP-адрес, а записи 0.256.1.123 и 0.255.1.01 — нет. В данной задаче произвольная четверка 8-битных чисел является корректным IP-адресом.

Поработав администратором, Поликарп узнал, что, зная IP-адрес, можно, используя маску подсети, получить адрес сети, которой принадлежит этот IP-адрес.

Маска подсети — это IP-адрес, обладающий следующим свойством: если записать этот IP-адрес, как 32-битную строку, то он представим в виде «11...11000..000». Другими словами, в маске подсети сначала идет один или более единичный бит, а затем один или более нулевой бит (всего битов 32). Например, IP-адрес 2.0.0.0 не является корректной маской подсети, так как его 32-битная запись имеет вид 00000010000000000000000000000000.

Для получения адреса сети IP-адреса нужно выполнить операцию побитового «и» («and») IP-адреса и маски подсети. Например, если маска подсети 255.192.0.0, а IP-адрес 192.168.1.2, то адрес сети равен 192.128.0.0. При побитовом «и» в записи результата бит равен 1 тогда и только тогда, когда у обоих операндов соответствующие биты единичные.

Теперь Поликарп хочет найти все сети, которым принадлежат его IP-адреса. К сожалению, Поликарп потерял маску подсети. К счастью, Поликарп запомнил, что его IP-адреса принадлежали ровно k различным сетям. Помогите Поликарпу найти маску подсети, такую, что его IP-адреса будут принадлежать ровно k различным сетям. Если таких масок несколько, найдите ту, в битовой записи которой наименьшее количество единиц. Если таких масок не существует, сообщите об этом.

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ k ≤ n ≤ 105) — количество IP-адресов и сетей. В следующих n строках записаны сами IP-адреса. Гарантируется, что все IP-адреса различны.

Выходные данные

В единственной строке выведите IP-адрес маски подсети, в формате описанном в условии, если требуемая маска подсети существует. Иначе выведите -1.

C. Красивые IP-адреса

Перебор *2000

В задаче используется упрощенная модель адресов в TCP/IP, внимательно прочтите условие.

IP-адрес — это 32-битное число, представленное в виде четверки десятичных 8-битных чисел (без лидирующих нулей), записанных через точку. Например, запись 0.255.1.123 обозначает корректный IP-адрес, а записи 0.256.1.123 и 0.255.1.01 — нет. В данной задаче произвольная четверка 8-битных чисел является корректным IP-адресом.

Наш герой Поликарп до сих пор работает системным администратором в некоторой большой корпорации. Ему нравятся красивые IP-адреса. Чтобы проверить, является ли некоторый IP-адрес красивым, нужно сделать следующее:

  1. выписать в строку четверку 8-битных чисел IP-адреса, пропуская точки;
  2. проверить, является ли получившаяся строка палиндромом.

Напомним, что палиндромом называется строка, которая одинаково читается справа налево и слева направо.

Например IP-адреса 12.102.20.121 и 0.3.14.130 являются красивыми (поскольку строки «1210220121» и «0314130» являются палиндромами), а IP-адреса 1.20.20.1 и 100.4.4.1 — нет.

Поликарп хочет найти все красивые IP-адреса, в которых встречается заданный набор цифр. Каждая цифра из набора должна встречаться в IP-адресе не менее одного раза, никакие другие цифры не должны встречаться в IP-адресе. Помогите ему справиться с этой нелегкой задачей.

Входные данные

В первой строке задано единственное целое число n (1 ≤ n ≤ 10) — количество цифр в наборе. Во второй строке задан набор цифр a1, a2, ..., an (0 ≤ ai ≤ 9). Гарантируется, что все цифры в наборе различны.

Выходные данные

В первую строку выведите единственное число k — количество красивых IP-адресов, которые содержат заданный набор цифр. Далее в k строк выведите сами IP-адреса по одному в строке в произвольном порядке.

B. Различные пути

Комбинаторика Перебор *2700

Дана прямоугольная доска, состоящая из n × m клеток. Некоторые из клеток уже покрашены в какой-то из k цветов. Требуется покрасить каждую непокрашенную клетку в один из k цветов таким образом, чтобы любой путь из верхней левой клетки в правую нижнюю (переходы возможны только по клеткам соседним по стороне и только вниз или вправо) не содержал в себе двух клеток одинакового цвета.

Выведите остаток от деления количества возможных раскрасок на 1000000007 (109 + 7).

Входные данные

В первой строке записаны три целых числа n, m, k (1 ≤ n, m ≤ 1000, 1 ≤ k ≤ 10). В следующих n строках записано по m целых чисел — доска. В первой из них заданы m самых верхних клеток доски слева направо, во второй m вторых сверху и так далее. Если число в строке равно 0, то соответствующая клетка не покрашена, иначе это число задает изначальный цвет клетки доски — целое число от 1 до k.

Считайте, что цвета пронумерованы от 1 до k некоторым образом.

Выходные данные

Выведите остаток от деления количества возможных раскрасок на 1000000007 (109 + 7).

C. Кубическая задача

математика Перебор теория чисел *2400

Ярослав, Андрей и Роман любят играть в кубики. Иногда они собираются вместе и могут играть часами напролет!

Сегодня они снова вместе и снова играют. Ярослав собрал из единичных кубиков куб размера a × a × a, Андрей — b × b × b, Роман — c × c × c. После этого игра закончилась, и ребята разошлись. Теперь в комнату зашел Виталий, увидел кубы, и ему тоже захотелось собрать какой-то куб. Но какого размера должен быть этот куб? Конечно, это должен быть большой куб со стороной длины a + b + c. При этом Виталий хотел разобрать уже имеющиеся кубы Ярослава, Андрея и Романа и собрать из них свой. Однако, кубиков, из которых были построены имеющиеся кубы, было недостаточно, чтобы собрать большой куб. Известно, что Виталию не хватило ровно n кубиков. Виталий расстроился, разобрал все и ушел. Выходя из комнаты, он встретил Петю и сообщил ему, что в комнате было три куба, и что Виталию не хватило n кубиков, чтобы собрать свой.

Зайдя в комнату, Петя увидел разбросанные кубики. Ему захотелось восстановить порядок, но ведь все, что он знает о порядке — это то, что здесь было три куба из маленьких кубиков и то, что на большой куб не хватило ровно n маленьких кубиков! Помогите Пете понять, сколько существует вариантов размеров a, b, c кубов Ярослава, Андрея и Романа.

Входные данные

В единственной строке входных данных записано целое число n (1 ≤ n ≤ 1014). Известно, что все числа a, b, c являются целыми и положительными.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

В единственную строку выходных данных выведите искомое количество вариантов. Если вдруг окажется, что не существует ни одного варианта подходящих размеров a, b, c — выводите 0.

D. Шаасс и робот-маляр

Перебор реализация теория чисел *2500

Шаассу кажется, что на кухне скучно, когда там вся плитка на полу белая. Пол на его кухне вымощен n·m квадратными плитками в форме прямоугольника размера n × m. И вот юноша решил покрасить некоторые плитки черным, так чтобы получилась «шахматная раскраска». То есть, никакие две соседние плитки не должны быть одного цвета.

Для покраски Шаасс хочет задействовать робота-маляра. Вначале робот стоит на плитке (xs, ys) на границе кухни и направлен диагонально (то есть, смотрит влево-вверх, влево-вниз, вправо-вверх или вправо-вниз). Гуляя по кухне, робот закрашивает любую плитку, на которую он ступает, даже если эта плитка уже была закрашена. На покраску плитки требуется одна единица черной краски. Если в любой момент робот натолкнется на кухонную стену, он оттолкнется от нее по законам отражения. Обратите внимание, плитка закрашивается в тот момент, когда робот наступает на нее, шагая из другой плитки, то есть при изменении направления на одной и той же плитке закрашивания этой плитки не происходит. Плитка, на которой стоит робот в самом начале тоже закрашивается.

Робот прекращает покраску, как только пол становится стилизован под шахматную доску. Вам даны размеры кухни и позиция робота. Посчитайте, сколько краски потребит робот, пока не закрасит пол.

Рассмотрим изображенный ниже пример.

Если робот начинает движение с плитки номер 1 (плитки с координатами (1, 1)) таблицы слева, направляясь вниз-вправо, то он пройдет по плиткам 1354236 и потратит на этом пути 7 единиц черной краски, пока не остановится на плитке номер 6. Но если он начнет с плитки номер 1, как в таблице справа, направляясь вниз-вправо, то он застрянет в цикле плиток 1, 2, и 3.

Входные данные

В первой строке содержатся два целых числа n и m, (2 ≤ n, m ≤ 105). Во второй строке содержатся два целых числа xs и ys (1 ≤ xs ≤ n, 1 ≤ ys ≤ m) и исходное направление робота. Направление представлено одной из следующих строк: «UL» (направление вверх-влево), «UR» (вверх-вправо), «DL» (вниз-влево) or «DR» (вниз-вправо).

Заметьте, что запись (xs, ys) означает, что плитка находится в xs-ом ряду сверху и в ys-ом столбце слева на кухне.

Гарантируется, что изначально робот стоит на границе кухни (то есть в клетке, у которой менее четырех соседей по стороне).

Выходные данные

Выведите количество краски, которое затратит робот на окраску кухонного пола на манер шахматной доски. Или, если эта цель не будет достигнута, выведите -1.

Пожалуйста, не используйте спецификатор %lld для чтения и записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

B. На рыбалку

жадные алгоритмы Перебор реализация *1200

Белые мишки отправились на рыбалку. Они собираются сесть в лодку и доплыть от (sx, sy) до (ex, ey). Однако лодка поддается управлению только силы ветра. Каждую секунду ветер дует в одном из следующих направлений: на восток, на юг, на запад или на север. Предположим, что на данный момент лодка находится в (x, y).

  • Если ветер дует на восток, то лодка поплывет на (x + 1, y).
  • Если ветер дует на юг, то лодка поплывет на (x, y - 1).
  • Если ветер дует на запад, то лодка поплывет на (x - 1, y).
  • Если ветер дует на север, то лодка поплывет на (x, y + 1).

Мишки могут остановить лодку, бросив якорь. Тогда лодка остается на (x, y), независимо от того куда дует ветер. Зная направление ветра в следующие t секунд, определите самый ранний момент, когда они смогут приплыть к (ex, ey).

Входные данные

В первой строке записаны пять целых чисел t, sx, sy, ex, ey (1 ≤ t ≤ 105,  - 109 ≤ sx, sy, ex, ey ≤ 109). Начальная и конечная позиции будут различаться.

Во второй строке записано t символов, i-ый символ описывает направление ветра в секунду номер i. В соответствии с ветром символ может быть равен: «E» (восток), «S» (юг), «W» (запад) или «N» (север).

Выходные данные

Если можно доплыть до (ex, ey) в течение t секунд, выведите самое раннее время, когда мишкам это удастся. В противном случае выведите «-1» (без кавычек).

Примечание

В первом примере можно бросить якорь в секунды 1, 3 и двигаться в секунды 2, 4.

Во втором примере мишкам не удастся доплыть до пункта назначения.

A. Ксюша и массив

Перебор сортировки теория чисел *1000

Ксюша — начинающий программист. Сегодня она знакомится с массивами. У нее есть массив a1, a2, ..., an, состоящий из n целых положительных чисел.

Преподаватель в университете задал ей задачу. Найти такое число в массиве, на которое делятся все элементы массива. Помогите ей, найдите это число!

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество чисел в массиве. В следующей строке записаны целые числа a1, a2, ..., an (1 ≤ ai ≤ 109) — элементы массива.

Выходные данные

Выведите единственное целое число — число из массива, на которое делятся все числа из массива. Если такого числа нет, выведите -1.

Если существует несколько ответов, разрешается вывести любой.

B. Белочка Ксюша

Перебор реализация *900

Белочка Ксюша стоит в начале прямой дороги, которая разделена на n секторов. Сектора пронумерованы от 1 до n слева направо. Изначально, Ксюша стоит в секторе 1.

Ксюша хочет пройти всю дорогу, то есть попасть в сектор n. К сожалению, на дороге есть камни. Как известно, Ксюша терпеть не может камни, поэтому на своем пути она не хочет наступать на сектора, в которых есть камни.

Белочка Ксюша — спортсменка. С сектора i она может перепрыгнуть на любой из секторов i + 1, i + 2, ..., i + k.

Помогите Ксюше! По заданному описанию дороги сообщите, сможет ли она дойти до конца дороги, ни разу не наступив на камень?

Входные данные

В первой строке записаны два целых числа n и k (2 ≤ n ≤ 3·105, 1 ≤ k ≤ 3·105). В следующей строке записано n символов — описание дороги: i-ый символ равен «.», если i-ый сектор не содержит камней, иначе он равен «#».

Гарантируется, что первый и последний символы равны «.».

Выходные данные

Выведите «YES» (без кавычек) — если Ксюша сможет пройти дорогу, иначе выведите «NO» (без кавычек).

C. Крестики-нолики

игры Перебор реализация *1800

Все, наверное, знакомы с игрой крестики-нолики. Правила в самом деле очень просты. Игроки по очереди ставят на свободные клетки поля 3 × 3 знаки (один всегда крестики, другой всегда нолики). Первый, выстроивший в ряд три своих фигур по вертикали, горизонтали или диагонали, выигрывает и игра заканчивается. Первый ход делает игрок, ставящий крестики. В том случае, если все поле заполнено, но никакие три фигуры в ряд не стоят, то объявляется ничья.

Вам задано поле 3 × 3, на котором каждая клетка свободна или занята крестиком или ноликом. Ваша задача указать игрока (first или second), ход которого ожидается или вывести один из четырех вердиктов:

  • illegal — если заданная игровая позиция не может появиться в ходе игры, т.е. является некорректной;
  • the first player won — если в заданной игровой позиции первый игрок только что победил;
  • the second player won — если в заданной игровой позиции второй игрок только что победил;
  • draw — если в заданной игровой позиции только что наступила ничья.
Входные данные

Входные данные состоят из трех строк, каждая из которых содержит по три символа: «.», «X» или «0» (точку, заглавную букву X или ноль).

Выходные данные

Выведите один из шести вердиктов: first, second, illegal, the first player won, the second player won или draw.

A. Бухгалтерский учёт

математика Перебор *1400

Жил-был в одной стране Царь по имени Цопа. После очередной царской реформы полномочия Царя стали настолько широкими, что, в частности, он стал собственноручно заниматься финансовой отчётностью.

Известен суммарный доход A его Царства по итогам 0-го года, и суммарный доход B по итогам n-го года (оба числа могут быть отрицательными, что означает — в этот год экономика Царства была убыточной).

Царь хочет продемонстрировать финансовую стабильность, для этого ему надо подобрать единый коэффициент X — коэффициент роста дохода Царства за один год. Этот коэффициент должен удовлетворять уравнению:

A·Xn = B.

Разумеется, Царь не собирается делать такую работу вручную, и требует от вас написать программу, ищущую этот коэффициент X.

Следует отметить, что дробные числа крайне не любят в экономических структурах Царства, поэтому как входные данные, так и искомый коэффициент должны быть целыми. Искомый коэффициент X может оказаться равным нулю или даже быть отрицательным.

Входные данные

В единственной строке записаны три целых числа A, B, n, удовлетворяющих условиям: |A|, |B| ≤ 1000, 1 ≤ n ≤ 10.

Выходные данные

Выведите единственное целое число — искомый целый коэффициент X, или фразу «No solution», если такого коэффициента не существует, или он не целый. Если ответов несколько, выведите любой.

A. Массив

Конструктив Перебор реализация *1100

У Виталия есть массив из n различных целых чисел. Виталий хочет разделить этот массив на три непустых множества так, чтобы были выполнены условия:

  1. Значение произведения всех чисел в первом множестве было меньше нуля ( < 0).
  2. Значение произведения всех чисел во втором множестве было больше нуля ( > 0).
  3. Произведение всех чисел в третьем множестве было равно нулю.
  4. Каждое число из исходного массива должно находиться ровно в одном из множеств.

Помогите Виталию. Разделите заданный массив.

Входные данные

В первой строке входных данных записано целое число n (3 ≤ n ≤ 100). Во второй строке через пробел записаны n различных целых чисел a1, a2, ..., an (|ai| ≤ 103) — элементы массива.

Выходные данные

В первой строке выведите целое число n1 (n1 > 0) — количество чисел в первом множестве. Далее выведите n1 чисел — числа, которые попали в первое множество.

В следующей строке выведите целое число n2 (n2 > 0) — количество чисел во втором множестве. Далее выведите n2 чисел — числа, которые попали во второе множество.

В следующей строке выведите целое число n3 (n3 > 0) — количество чисел в третьем множестве. Далее выведите n3 чисел — числа, которые попали в третье множество.

Выведенные множества должны удовлетворять описанным условиям. Гарантируется, что решение существует. Если существует несколько решений, разрешается вывести любое.

B. Тренер

графы Перебор поиск в глубину и подобное *1500

У тренера по программированию есть n обучающихся у него студентов, причем известно, что n делится на 3. Пускай все студенты пронумерованы от 1 до n, включительно.

Тренер хочет перед чемпионатом университета по программированию разделить всех студентов на команды из трех человек. Для некоторых пар студентов известно, что они хотят быть в одной команде. Причем, если i-ый студент хочет быть в команде с j-ым, то и j-ый хочет быть в команде с i-ым. Тренер заинтересован в том, чтобы команды показали хороший результат, поэтому он хочет, чтобы было выполнено условие: если i-ый студент хочет быть в одной команде с j-ым, то i-ый и j-ый студенты должны быть в одной команде. Также, очевидно, каждый студент должен быть ровно в одной команде.

Помогите тренеру, разделите команды так, как он хочет.

Входные данные

В первой строке входных данных записаны целые числа n и m (3 ≤ n ≤ 48, . Далее следует m строк, в каждой из них записана пара целых чисел ai, bi (1 ≤ ai < bi ≤ n) — пара ai, bi означает, что студенты с номерами ai и bi хотят быть в одной команде.

Гарантируется, что n делится на 3. Гарантируется, что каждая пара ai, bi упоминается во входных данных не более одного раза.

Выходные данные

Если искомого разбиения на команды не существует, выведите число -1. Иначе выведите строки. В каждой строке выведите три целых числа xi, yi, zi (1 ≤ xi, yi, zi ≤ n) — i-ая команда.

Если существует несколько ответов, разрешается вывести любой.

C. Прекрасные числа

Комбинаторика Перебор *1800

Виталий очень странный человек. У него есть две любимые цифры a и b. Виталий называет целое положительное число хорошим, если в десятичной записи этого числа используются только цифры a и b. Виталий называет хорошее число замечательным, если сумма его цифр является хорошим числом.

Например, пусть у Виталия любимые цифры 1 и 3, тогда число 12 — не является хорошим, а числа 13 или 311 являются. Также число 111 — замечательное, а число 11 — нет.

Теперь Виталий интересуется, сколько существует замечательных чисел длины ровно n. Так как количество таких чисел может быть довольно большим, он просит Вас посчитать остаток от деления этого количества на 1000000007 (109 + 7).

Под длиной числа подразумевается количество цифр в его десятичной записи без лидирующих нулей.

Входные данные

В первой строке записаны три целых числа: a, b, n (1 ≤ a < b ≤ 9, 1 ≤ n ≤ 106).

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю 1000000007 (109 + 7).

C. Наименьший модуль

графы математика Перебор теория чисел *2400

Дано n различных целых чисел a1, a2, ..., an. Из них Вы можете удалить не более k. Найдите минимальный модуль m (m > 0), такой, что для каждой пары оставшихся чисел (ai, aj) выполняется следующее неравенство: .

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n ≤ 5000, 0 ≤ k ≤ 4), упомянутые выше.

Во второй строке записано n различных целых чисел a1, a2, ..., an (0 ≤ ai ≤ 106).

Выходные данные

Выведите единственное целое положительное число — минимальный модуль m.

A. Теорема Пифагора II

математика Перебор *1200

В математике теорема Пифагора — это отношение в Евклидовой геометрии между тремя сторонами прямоугольного треугольника. Теорема говорит следующее (формулировка в площадях):

 Для любого прямоугольного треугольника площадь квадрата, построенного на гипотенузе (стороне, противоположной прямому углу), равняется сумме площадей квадратов, построенных на катетах (двух сторонах, которые сходятся в прямом угле).

Теорему можно записать как равенство, относящееся к длинам сторон a, b и c, часто называемое уравнением Пифагора:

a2 + b2 = c2

где c — длина гипотенузы, а a и b — длины катетов.

Вам дано n, Ваша задача — посчитать, сколько прямоугольных треугольников со сторонами длиной a, b и c удовлетворяют неравенству 1 ≤ a ≤ b ≤ c ≤ n.

Входные данные

В единственной строке записано одно целое число n (1 ≤ n ≤ 104), упомянутое выше.

Выходные данные

Выведите единственное целое число — ответ на задачу.

B. Календарь

Перебор реализация *1300

Сейчас повсеместно используется Григорианский календарь, он фактически стал международным стандартом и используется в гражданских целях почти по всему миру. Григорианская реформа поправила Юлианскую систему високосных годов так:

Каждый год, который делится на четыре без остатка, является високосным, за исключением годов, которые делятся на 100 без остатка. Если «столетние» года делятся на 400, то они все же являются високосными. Например, 1900 год не високосный, а 2000 високосный.

В этой задаче Вам даны две даты, от Вас требуется посчитать, сколько между ними дней. Помните, что в високосном году в феврале содержится непривычное количество дней.

Смотрите тестовые примеры, для понимания какие из границ включаются в ответ, а какие нет.

Входные данные

Первые две строки содержат две даты, каждая дата записана в формате yyyy:mm:dd (1900 ≤ yyyy ≤ 2038 и yyyy:mm:dd — корректная дата).

Выходные данные

Выведите единственное целое число — ответ на задачу.

A. Странное сложение

Конструктив Перебор реализация *1600

Вася, к сожалению, умеет складывать только пары чисел (a, b) такие, что для каждого разряда десятичной записи хотя бы одно из чисел имеет цифру 0 в этом разряде. Например, Вася может сложить числа 505 и 50, но не может сложить 1 и 4.

У Васи есть множество из k различных целых неотрицательных чисел d1, d2, ..., dk.

Вася хочет выбрать из этого множества несколько чисел так, чтобы любые два выбранных числа он мог сложить. Какое максимальное количество чисел он может выбрать требуемым способом?

Входные данные

В первой строке входных данных задано целое число k (1 ≤ k ≤ 100) — количество чисел.

В второй строке записаны k различных целых чисел через пробел d1, d2, ..., dk (0 ≤ di ≤ 100).

Выходные данные

В первую строку выведите одно целое число n — максимальное количество выбранных чисел. Во второй строке выведите n различных целых неотрицательных чисел — искомые числа.

Если возможных решений несколько — выведите любое из них. Числа можно выводить в любом порядке.

B. Цепные дроби

математика Перебор реализация *1700

Цепной дробью высоты n называется дробь вида . Вам даны два рациональных числа, одно представлено в виде , а второе в виде конечной цепной дроби высоты n. Проверьте, равны ли они.

Входные данные

В первой строке через пробел записаны два целых числа p, q (1 ≤ q ≤ p ≤ 1018) — числитель и знаменатель первой дроби.

Во второй строке записано целое число n (1 ≤ n ≤ 90) — высота второй дроби. В третьей строке через пробел записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1018) — цепная дробь.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите «YES», если эти дроби равны и «NO» в противном случае.

Примечание

В первом примере .

Во втором примере .

В третьем примере .

C. Достать сокровище

графы кратчайшие пути Перебор Структуры данных *2500

Рейнбоу выстроил h ячеек в ряд и пронумеровал их от 1 до h слева направо. В n из этих ячеек находится сокровище. Будем называть каждую из этих n ячеек «ячейка с сокровищами». «Ячейка с сокровищами» номер i — это ai-ая ячейка, в ней лежат сокровища на ci долларов.

Сейчас Фреда встала в первую ячейку. В любой момент она может пройти k ячеек вперед или вернуться в первую ячейку. Это значит, что Фреда может дойти до 1-ой, (k + 1)-ой, (k + 1)-ой, (k + 1)-ой ячеек и так далее.

Рейнбоу дала Фреде m операций. Каждая операция относится к одному из следующих трех типов:

  1. Добавить способ перемещения x: в любой момент времени можно также пройти на x ячеек вперед. Например, в самом начале у Фреды есть только один способ перемещения k. Если в какой-то момент времени у Фреды есть способы перемещения a1, a2, ..., ar, то она может дойти до любой ячейки вида , где vi — некоторое целое неотрицательное число.
  2. Уменьшить цену сокровища в x-ой «ячейке с сокровищами» на y долларов. Иными словами, выполнить присвоение cx = cx - y.
  3. Узнать стоимость самого ценного сокровища среди ячеек, до которых может дойти Фреда. Если Фреда не может дойти ни до одной ячейки с сокровищами, то считается, что стоимость самого ценного сокровища в таком случае равна 0 и дальше ничего не происходит. Иначе, Фреда забирает самое ценное сокровище из соответствующей ячейки. Если существует несколько «ячеек с сокровищами», которые содержат самое ценное сокровище, то нужно выбрать ту, номер которой минимален (такая ячейка не обязательно имеет минимальный номер, потому что нумерации ячеек и «ячеек с сокровищами» независимы). После этой операции количество ячеек, в которых содержится сокровище, становится на единицу меньше.

Фреда как программист просит Вас написать программу, которая выполнит каждую операцию.

Входные данные

Первая строка содержит четыре целых числа: h (1 ≤ h ≤ 1018), n, m (1 ≤ n, m ≤ 105) и k (1 ≤ k ≤ 104).

Каждая из следующих n строк содержит два целых числа: ai (1 ≤ ai ≤ h), ci (1 ≤ ci ≤ 109). Это означает, что i-ая «ячейка с сокровищами» — это ai-ая ячейка и в ней лежит сокровище на ci долларов. Все ai различны.

Каждая из следующих m строк записана в одном из следующих трех форматов:

  • «1 x» — операция типа 1, 1 ≤ x ≤ h;
  • «2 x y» — операция типа 2, 1 ≤ x ≤ n, 0 ≤ y < cx;
  • «3» — операция типа 3.

Максимальное количество операций типа 1 — 20. Гарантируется, что в любой момент стоимость сокровища в любой ячейке с сокровищем положительна. Гарантируется, что все операции корректны (никакая операция не может уменьшить стоимость уже взятого сокровища).

Пожалуйста, не используйте спецификатор %lld, для чтения 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Для каждой операции типа 3, выведите целое число, указывающее на ценность (в долларах) самого ценного сокровища среди «ячеек c сокровищами», которые Фреда может достать. Если такого сокровища нет, выведите 0.

Примечание

В примере дано 10 ячеек и 3 «ячейки с сокровищами». Первая — это ячейка 5, в ней лежит сокровище на 50 долларов. Вторая — это ячейка 7, в ней лежит сокровище на 60 долларов. Третья — это ячейка 8, в ней лежит сокровище на 100 долларов.

Сначала Фреда может дотянуться только до ячеек 1, 3, 5, 7 и 9. Первая операция уменьшает стоимость в долларах второй «ячейки с сокровищами» с 60 до 55. После этого самое ценное сокровище среди доступных ей «ячеек с сокровищами» — это max(50, 55) = 55. После третьей операции она может двигаться на 3 ячейки вперед с каждым шагом, таким образом она может достигнуть ячеек 1, 3, 4, 5, 6, 7, 8, 9, 10. Значит, четвертая операция забирает сокровище стоимостью 100 долларов.

Обратите внимание, что она забрала сокровище стоимостью 55 и 100 долларов, следовательно, ответ последней операцией она забирает сокровище стоимостью 50 долларов.

A. Сережа и бутылки

Перебор *1400

Сережа и его друзья пошли на пикник. Специально для пикника у ребят было припасено n бутылок газировки. Сережа, как всегда, забыл «открывашку», поэтому ребятам пришлось искать другой способ открывать бутылки.

Сережа знает, что i-тая бутылка имеет марку ai, а также, что с помощью нее можно открывать другие бутылки марки bi. Одной бутылкой можно открыть несколько других бутылок. Сережа может открыть бутылку как открытой, так и закрытой бутылкой.

Зная эту информацию, Сережа хочет узнать сколько бутылок из имеющихся у него не получится открыть никаким способом. Помогите ему, найдите это количество.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 100) — количество бутылок. В следующих n строках содержится описание бутылок. В i-той строке записаны два целых числа ai, bi (1 ≤ ai, bi ≤ 1000) — описание i-той бутылки.

Выходные данные

В единственную строку выведите целое число — ответ на задачу.

B1. ЭКГ

Перебор поиск в глубину и подобное *1500

В суматохе современной жизни люди часто забывают насколько прекрасен мир. Времени насладиться окружающим у них настолько мало, что некоторые даже занимают очередь в поликлинике сразу в несколько кабинетов одновременно, бегая из одной очереди в другую.

Наверняка многие из вас сталкивались с тем, когда незнакомец спрашивает у вас, кто последний в очереди, высказывает мнение, что он будет крайним, после чего скрывается в неизвестном направлении — это именно те представители современного мира, у которых коэффициент нехватки времени настолько велик, что они даже не смотрят зарубежные рейтинговые сериалы. Такие люди часто создают проблемы в очередях, ведь вновь пришедший человек не видит последнего в очереди и занимает место за «виртуальным» звеном этой цепочки, недоумевая, куда же делась легендарная личность.

Умный Бобер после длительной болезни записался на прием к терапевту. Кратко и лаконично терапевт сообщил Умному Бобру печальное известие: необходимо сделать ЭКГ. На следующий день Умный Бобер встал пораньше, поставил на скачивание известный сериал (до полной загрузки необходимо около трех часов) и, стиснув зубы, мужественно пошел занимать очередь в кабинет электрокардиограммы, который славится самыми большими очередями в поликлинике.

Отстояв около трех часов в очереди, Умный Бобер понял, что многие не видели, за кем занимали очередь, из-за чего получилась неразбериха. Он спросил у каждого бобра, имеющего желание посетить кабинет ЭКГ, за кем тот занимал. Если бобр не знал за кем он, то, возможно, сейчас его очередь на прием, а может ему еще стоять и стоять...

Как Вы догадались, Умный Бобер очень спешил домой, поэтому он дал Вам все необходимые данные, чтобы Вы помогли ему определить, каким же по номеру в очереди он может следовать.

Входные данные

В первой строке записаны два целых числа n (1 ≤ n ≤ 103) и x (1 ≤ x ≤ n) — количество бобров, стоявших в очереди, и номер Умного Бобра соответственно. Все желающие попасть на прием к врачу пронумерованы от 1 до n.

Во второй строке содержится n целых чисел a1, a2, ..., an (0 ≤ ai ≤ n) — номер бобра, за которым следует i-ый бобер. Если ai = 0, то i-ый бобер не знает, за кем он занимал. Гарантируется, что значения ai соответствуют корректной очереди. Другими словами нет циклических зависимостей в очереди, а также за любым бобром в очереди может следовать не более одного бобра.

Ограничения на входные данные для получения 30 баллов (подзадача B1):

  • Гарантируется, что количество нулевых элементов ai не превзойдет 20.

Ограничения на входные данные для получения 100 баллов (подзадачи B1+B2):

  • Количество нулевых элементов ai произвольно.
Выходные данные

Выведите все возможные позиции Умного Бобра в очереди в порядке возрастания.

Примечание
Картинка для 4-го теста.

D1. Урок физкультуры

дп Перебор *2300

Умный Бобер хочет быть не только умным, но и здоровым бобром! И поэтому он начал посещать уроки физкультуры в школе X. В этой школе занятия физкультурой ведет очень креативный преподаватель. Одним из его любимых разминочных упражнений является перебрасывание мячей. Ученики становятся в ряд. Каждый изначально получает один мяч. Мячи пронумерованы от 1 до n (требование комиссии по инвентаризации).

Рисунок 1. Начальное положения для n = 5.

После получения мячей ученики выполняют разминочное упражнение. Упражнение проходит в несколько бросков. Для каждого из бросков учитель выбирает двух произвольных разных учеников, которые будут в нем участвовать. Выбранные ученики бросают друг другу свои мячи. Таким образом, после каждого броска ученики остаются на своих местах, а два мяча меняются местами.

Рисунок 2. Пример броска.

В данном случае произошел бросок между учениками, которые держали 2-й и 4-й мячи. Так как упражнений в разминке немало, то на каждое из них выделяется немного времени. Поэтому для каждого ученика известно, в каком максимальном числе бросков он может принять участие. В рамках рассматриваемых уроков физкультуры, это число 1 или 2.

Заметим, что после всех этапов рассматриваемого упражнения любой из мячей может оказаться у любого из учеников. Умный Бобер решил формализовать это и ввел понятие «порядок мячей». Порядок мячей — это последовательность из n чисел, которая соответствует порядку мячей в строю. Первое число будет соответствовать номеру мяча у первого слева ученика в строю, второе — номеру мяча у второго ученика и так далее. Например, на рисунке 2 порядок мячей был (1, 2, 3, 4, 5), а после броска стал (1, 4, 3, 2, 5). Умный бобер знает количество учеников и для каждого из учеников максимальное число бросков, в которых данный ученик может принять участие. И теперь ему стало любопытно, каково количество различных вариантов порядка мячей после окончания упражнения.

Входные данные

Первая строка содержит одно целое число n — количество учеников в строю и мячей. Следующая строка содержит ровно n целых чисел, разделенных пробелами. Каждое число соответствует ученику в строю (i-ое число соответствует i-ому слева в строю ученику) и показывает, в каком числе бросков он может участвовать.

Ограничения на входные данные для получения 30 баллов (подзадача D1):

  • 1 ≤ n ≤ 10.

Ограничения на входные данные для получения 70 баллов (подзадачи D1+D2):

  • 1 ≤ n ≤ 500.

Ограничения на входные данные для получения 100 баллов (подзадачи D1+D2+D3):

  • 1 ≤ n ≤ 1000000.
Выходные данные

Вывод должен содержать ровно одно целое число — число вариантов порядка мячей после окончания упражнения. Так как оно может быть достаточно велико, выводите его по модулю 1000000007 (109 + 7).

E1. Задание на лето

Перебор Структуры данных *1500

К своим трем годам Умный Бобер в совершенстве овладел всеми арифметическими операциями, а от своего учителя по математике одаренный ученик получил следующее домашнее задание на лето:

Дана последовательность целых чисел a1, a2, ..., an. Необходимо последовательно произвести над ней m операций следующего вида:

  1. Для заданных чисел xi и vi присвоить элементу axi значение vi.
  2. Для заданных чисел li и ri необходимо вычислить сумму , где f0 = f1 = 1 и при i ≥ 2: fi = fi - 1 + fi - 2.
  3. Для тройки чисел li ri di необходимо для всех x (li ≤ x ≤ ri) увеличить значение ax на di.

Этим летом Умный Бобер решил отправиться в тур по великим озерам Канады, потому просит Вас помочь ему в решении данной задачи.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 2·105) — количество чисел в последовательности и количество операций соответственно. Вторая строка содержит n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 105). Далее идет m строк, каждая из которых описывает операцию. Каждый строка начинается с целого числа ti (1 ≤ ti ≤ 3) — тип операции:

  • если ti = 1, то далее идет два целых числа xi vi (1 ≤ xi ≤ n, 0 ≤ vi ≤ 105);
  • если ti = 2, то далее идет два целых числа li ri (1 ≤ li ≤ ri ≤ n);
  • если ti = 3, то далее идет три целых числа li ri di (1 ≤ li ≤ ri ≤ n, 0 ≤ di ≤ 105).

Ограничения на входные данные для получения 30 баллов (подзадача E1):

  • Гарантируется, что n не превышает 100, m не превышает 10000 и не будет запросов 3-го типа.

Ограничения на входные данные для получения 70 баллов (подзадачи E1+E2):

  • Гарантируется, что будут запросы только 1-го и 2-го типа.

Ограничения на входные данные для получения 100 баллов (подзадачи E1+E2+E3):

  • Дополнительные ограничения отсутствуют.
Выходные данные

Для каждого запроса второго типа выведите вычисленную сумму по модулю 1000000000 (109).

A. Превосходная пара

Перебор *1600

Назовем пару целых чисел m-превосходной, если хотя бы одно из них по своей величине не меньше заданного целого числа m. Так, пары (3, 3) и (0, 2) являются 2-превосходными, а пара (-1, 1) — нет.

На доске выписано два целых числа x, y. Разрешается стереть с доски одно из чисел и записать вместо него их сумму (x + y).

Какое минимальное количество таких действий потребуется, чтобы сделать заданную пару целых чисел m-превосходной?

Входные данные

Единственная строка входных данных содержит три целых числа x, y и m ( - 1018 ≤ x, y, m ≤ 1018).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d).

Выходные данные

Выведите минимальное количество операций или «-1» (без кавычек), если сделать заданную пару m-превосходной невозможно.

Примечание

В первом примере подходит следующая последовательность действий: (1, 2) (3, 2) (5, 2).

Во втором примере: (-1, 4) (3, 4) (7, 4) (11, 4) (15, 4).

Наконец, в третьем примере числа x, y не получится сделать положительными, поэтому подходящей последовательности не существует.

B. Муравьи

Перебор реализация *2000

Во время исследования поведения муравьев в графеновых трубках на целочисленной решетке было сделано следующее важное наблюдение об их поведении: каждую минуту в каждом узле (x, y), в котором находится хотя бы четыре муравья, выделяется ровно одна группа из четырех муравьев, и они разбегаются по одному по трубкам в соседние узлы (x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1). Никаких других движений муравьи не совершают. Муравьи никоим образом не мешают друг другу.

Ученые запустили колонию из n муравьев в центр графеновой плоскости (0, 0) и хотят узнать, сколько муравьев окажется в определенных узлах в тот момент, когда муравьи перестанут бегать.

Входные данные

Первая строка содержит целые числа n (0 ≤ n ≤ 30000) и t (1 ≤ t ≤ 50000), где n — количество муравьев в колонии, t — количество запросов. Каждая из следующих t строк содержит координаты узлов-запросов: целые числа xi, yi ( - 109 ≤ xi, yi ≤ 109). Запросы могут повторяться.

Гарантируется, что наступит момент, когда муравьи не смогут больше совершать движения и процесс остановится.

Выходные данные

Выведите t чисел, по одному на строчку — количества муравьев в соответствующих узлах в конце забега.

Примечание

В первом примере колония состоит всего из одного муравья, и никаких движений не происходит.

Во втором примере колония состоит из 6 муравьев. На первой минуте 4 муравья из (0, 0) разбегаются в соседние узлы. После этого процесс останавливается.

A. Разведка

Перебор *800

По уставу Берляндской армии, в разведку всегда должны отправляться ровно два человека. Причем чтобы один не сильно выделялся на фоне другого, их рост должен отличаться не более чем на d сантиметров. В отряде капитана Васи n солдат. Их рост — a1, a2, ..., an сантиметров. Рост некоторых солдат может совпадать. Вася хочет знать, сколько есть способов отправить в разведку двух солдат из его отряда. Помогите ему.

Способы (1, 2) и (2, 1) следует считать различными.

Входные данные

В первой строке записано два целых числа n и d (1 ≤ n ≤ 1000, 1 ≤ d ≤ 109) — количество солдат в Васином отряде и наибольшая допустимая разница в росте соответственно. Во второй строке через пробел записано n натуральных чисел — рост всех солдат в Васином отряде. Эти числа не превосходят 109.

Выходные данные

Выведите одно число — количество способов отправить в разведку двух солдат, рост которых отличается не больше чем на d.

A. Волшебные числа

жадные алгоритмы Перебор *900

Волшебное число — это такое число, которое получается конкатенацией (сцеплением) чисел 1, 14 и 144. Каждое число разрешается брать сколько угодно раз. Следовательно, 14144, 141414 и 1411 — волшебные числа, а 1444, 514 и 414 — нет.

Вам дано число. Определите, волшебное оно или нет.

Входные данные

Первая строка содержит целое число n, (1 ≤ n ≤ 109). Это число не содержит ведущих нулей.

Выходные данные

Выведите «YES», если n является волшебным числом, в противном случае выведите «NO».

A. Игра с переворачиванием

дп Перебор реализация *1200

Яхубу стало скучно и он придумал игру, в которую надо играть на бумаге.

Яхуб выписывает n целых чисел a1, a2, ..., an. Каждое из этих целых чисел может быть равно 0 или 1. Ему разрешено выполнить ровно одно действие: выбрать два индекса i и j (1 ≤ i ≤ j ≤ n) и перевернуть все значения ak, позиции которых находятся на отрезке [i, j] (то есть i ≤ k ≤ j). Перевернуть значение x, значит выполнить операцию x = 1 - x.

Цель игры — получить максимальное количество единиц после ровно одного хода. Напишите программу, которая решает маленькую игру Яхуба.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100). Во второй строке записано n целых чисел: a1, a2, ..., an. Гарантируется, что каждое из этих n чисел равняется либо 0, либо 1.

Выходные данные

Выведите целое число — максимальное количество единиц, которое можно получить после ровно одного хода.

Примечание

В первом случае надо перевернуть отрезок от 2 до 5 (i = 2, j = 5). Такой переворот превращает последовательность в: [1 1 1 0 1]. Итого, в ней теперь четыре единицы. Мы никак не сможем превратить последовательность в [1 1 1 1 1].

Во втором случае, если мы перевернем только второй и третий элементы (i = 2, j = 3), все числа будут равны 1.

A. Игра с переворачиванием

дп Перебор реализация *1200

Яхубу стало скучно и он придумал игру, в которую надо играть на бумаге.

Яхуб выписывает n целых чисел a1, a2, ..., an. Каждое из этих целых чисел может быть равно 0 или 1. Ему разрешено выполнить ровно одно действие: выбрать два индекса i и j (1 ≤ i ≤ j ≤ n) и перевернуть все значения ak, позиции которых находятся на отрезке [i, j] (то есть i ≤ k ≤ j). Перевернуть значение x, значит выполнить операцию x = 1 - x.

Цель игры — получить максимальное количество единиц после ровно одного хода. Напишите программу, которая решает маленькую игру Яхуба.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100). Во второй строке записано n целых чисел: a1, a2, ..., an. Гарантируется, что каждое из этих n чисел равняется либо 0, либо 1.

Выходные данные

Выведите целое число — максимальное количество единиц, которое можно получить после ровно одного хода.

Примечание

В первом случае надо перевернуть отрезок от 2 до 5 (i = 2, j = 5). Такой переворот превращает последовательность в: [1 1 1 0 1]. Итого, в ней теперь четыре единицы. Мы никак не сможем превратить последовательность в [1 1 1 1 1].

Во втором случае, если мы перевернем только второй и третий элементы (i = 2, j = 3), все числа будут равны 1.

A. Игра с переворачиванием

дп Перебор реализация *1200

Яхубу стало скучно и он придумал игру, в которую надо играть на бумаге.

Яхуб выписывает n целых чисел a1, a2, ..., an. Каждое из этих целых чисел может быть равно 0 или 1. Ему разрешено выполнить ровно одно действие: выбрать два индекса i и j (1 ≤ i ≤ j ≤ n) и перевернуть все значения ak, позиции которых находятся на отрезке [i, j] (то есть i ≤ k ≤ j). Перевернуть значение x, значит выполнить операцию x = 1 - x.

Цель игры — получить максимальное количество единиц после ровно одного хода. Напишите программу, которая решает маленькую игру Яхуба.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100). Во второй строке записано n целых чисел: a1, a2, ..., an. Гарантируется, что каждое из этих n чисел равняется либо 0, либо 1.

Выходные данные

Выведите целое число — максимальное количество единиц, которое можно получить после ровно одного хода.

Примечание

В первом случае надо перевернуть отрезок от 2 до 5 (i = 2, j = 5). Такой переворот превращает последовательность в: [1 1 1 0 1]. Итого, в ней теперь четыре единицы. Мы никак не сможем превратить последовательность в [1 1 1 1 1].

Во втором случае, если мы перевернем только второй и третий элементы (i = 2, j = 3), все числа будут равны 1.

A. Игра с переворачиванием

дп Перебор реализация *1200

Яхубу стало скучно и он придумал игру, в которую надо играть на бумаге.

Яхуб выписывает n целых чисел a1, a2, ..., an. Каждое из этих целых чисел может быть равно 0 или 1. Ему разрешено выполнить ровно одно действие: выбрать два индекса i и j (1 ≤ i ≤ j ≤ n) и перевернуть все значения ak, позиции которых находятся на отрезке [i, j] (то есть i ≤ k ≤ j). Перевернуть значение x, значит выполнить операцию x = 1 - x.

Цель игры — получить максимальное количество единиц после ровно одного хода. Напишите программу, которая решает маленькую игру Яхуба.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100). Во второй строке записано n целых чисел: a1, a2, ..., an. Гарантируется, что каждое из этих n чисел равняется либо 0, либо 1.

Выходные данные

Выведите целое число — максимальное количество единиц, которое можно получить после ровно одного хода.

Примечание

В первом случае надо перевернуть отрезок от 2 до 5 (i = 2, j = 5). Такой переворот превращает последовательность в: [1 1 1 0 1]. Итого, в ней теперь четыре единицы. Мы никак не сможем превратить последовательность в [1 1 1 1 1].

Во втором случае, если мы перевернем только второй и третий элементы (i = 2, j = 3), все числа будут равны 1.

A. Игра с переворачиванием

дп Перебор реализация *1200

Яхубу стало скучно и он придумал игру, в которую надо играть на бумаге.

Яхуб выписывает n целых чисел a1, a2, ..., an. Каждое из этих целых чисел может быть равно 0 или 1. Ему разрешено выполнить ровно одно действие: выбрать два индекса i и j (1 ≤ i ≤ j ≤ n) и перевернуть все значения ak, позиции которых находятся на отрезке [i, j] (то есть i ≤ k ≤ j). Перевернуть значение x, значит выполнить операцию x = 1 - x.

Цель игры — получить максимальное количество единиц после ровно одного хода. Напишите программу, которая решает маленькую игру Яхуба.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100). Во второй строке записано n целых чисел: a1, a2, ..., an. Гарантируется, что каждое из этих n чисел равняется либо 0, либо 1.

Выходные данные

Выведите целое число — максимальное количество единиц, которое можно получить после ровно одного хода.

Примечание

В первом случае надо перевернуть отрезок от 2 до 5 (i = 2, j = 5). Такой переворот превращает последовательность в: [1 1 1 0 1]. Итого, в ней теперь четыре единицы. Мы никак не сможем превратить последовательность в [1 1 1 1 1].

Во втором случае, если мы перевернем только второй и третий элементы (i = 2, j = 3), все числа будут равны 1.

A. Игра с переворачиванием

дп Перебор реализация *1200

Яхубу стало скучно и он придумал игру, в которую надо играть на бумаге.

Яхуб выписывает n целых чисел a1, a2, ..., an. Каждое из этих целых чисел может быть равно 0 или 1. Ему разрешено выполнить ровно одно действие: выбрать два индекса i и j (1 ≤ i ≤ j ≤ n) и перевернуть все значения ak, позиции которых находятся на отрезке [i, j] (то есть i ≤ k ≤ j). Перевернуть значение x, значит выполнить операцию x = 1 - x.

Цель игры — получить максимальное количество единиц после ровно одного хода. Напишите программу, которая решает маленькую игру Яхуба.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100). Во второй строке записано n целых чисел: a1, a2, ..., an. Гарантируется, что каждое из этих n чисел равняется либо 0, либо 1.

Выходные данные

Выведите целое число — максимальное количество единиц, которое можно получить после ровно одного хода.

Примечание

В первом случае надо перевернуть отрезок от 2 до 5 (i = 2, j = 5). Такой переворот превращает последовательность в: [1 1 1 0 1]. Итого, в ней теперь четыре единицы. Мы никак не сможем превратить последовательность в [1 1 1 1 1].

Во втором случае, если мы перевернем только второй и третий элементы (i = 2, j = 3), все числа будут равны 1.

A. Игра с переворачиванием

дп Перебор реализация *1200

Яхубу стало скучно и он придумал игру, в которую надо играть на бумаге.

Яхуб выписывает n целых чисел a1, a2, ..., an. Каждое из этих целых чисел может быть равно 0 или 1. Ему разрешено выполнить ровно одно действие: выбрать два индекса i и j (1 ≤ i ≤ j ≤ n) и перевернуть все значения ak, позиции которых находятся на отрезке [i, j] (то есть i ≤ k ≤ j). Перевернуть значение x, значит выполнить операцию x = 1 - x.

Цель игры — получить максимальное количество единиц после ровно одного хода. Напишите программу, которая решает маленькую игру Яхуба.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100). Во второй строке записано n целых чисел: a1, a2, ..., an. Гарантируется, что каждое из этих n чисел равняется либо 0, либо 1.

Выходные данные

Выведите целое число — максимальное количество единиц, которое можно получить после ровно одного хода.

Примечание

В первом случае надо перевернуть отрезок от 2 до 5 (i = 2, j = 5). Такой переворот превращает последовательность в: [1 1 1 0 1]. Итого, в ней теперь четыре единицы. Мы никак не сможем превратить последовательность в [1 1 1 1 1].

Во втором случае, если мы перевернем только второй и третий элементы (i = 2, j = 3), все числа будут равны 1.

A. Тортминатор

Перебор реализация *800

Дан квадратный торт, который имеет вид таблицы размером r × c. Каждая ячейка таблицы содержит либо гадкую клубничку, либо является пустой. Например, торт размера 3 × 4 может выглядеть так:

Тортминатор намерен съесть этот торт! Каждый раз, когда он ест, он выбирает строку или столбец, не содержащие гадкой клубнички, а содержащие по крайней мере одну несъеденную ячейку торта. Затем Тортминатор поедает все выбранные им ячейки торта. Тортминатор может есть сколько угодно раз.

Пожалуйста, выведите максимальное количество ячеек, которые может съесть Тортминатор.

Входные данные

Первая строка содержит два целых числа r и c (2 ≤ r, c ≤ 10), обозначающих количество строк и количество столбцов в торте. Следующие r строк содержат по c символов — j-ый символ i-ой строки обозначает содержимое ячейки в строке i и столбце j, и имеет одно из следующих значений:

  • символ '.' обозначает ячейку торта без гадкой клубнички;
  • символ 'S' обозначает ячейку торта с гадкой клубничкой.
Выходные данные

Выведите максимальное количество ячеек торта, которые может съесть тортминатор.

Примечание

В первом примере возможная стратегия поедания максимального количества ячеек торта следующая (выполнено 3 поедания).

C. Счастливые билеты

Конструктив Перебор *2700

У Геральда есть друг Поллард. Поллард увлекается счастливыми билетами. Причем, сначала он считал счастливым билет, между некоторыми цифрами номера которого можно поставить знаки действий и скобки так, чтобы результатом полученного арифметического выражения было число 100. Но он быстро исследовал такие билеты и перешел к более общему вопросу. Теперь он исследует k-счастливые билеты.

Поллард считает билет k-счастливым, если между, а так же слева и справа от цифр его номера можно поставить знаки арифметических действий (а именно, «+», «-», « × ») и скобки так, чтобы получилось корректное арифметическое выражение, значение которого равно k. К примеру, билет номер «224201016» является 1000-счастливым, поскольку ( - 2 - (2 + 4)) × (2 + 0) + 1016 = 1000.

Поллард настолько увлекся счастливыми билетами, что записался на семинар по счастливым билетам и, насколько известно Геральду, будет ежедневно ездить на него в один известный институт к семи вечера на одном и том же трамвайчике в течение m дней. В этом трамвайчике билеты имеют восьмизначные номера. И Геральд хочет сделать Полларду сюрприз — каждый день Поллард будет получать в трамвайчике k-счастливый билет. Кондуктор трамвайчика уже согласился выдавать Полларду все эти m дней определенные билеты, и хочет только, чтобы Геральд сказал ему, какие именно билеты нужно выдавать. В связи с этим, помогите Геральду подобрать ровно m различных k-счастливых билетов.

Входные данные

В единственной строке находятся два целых числа k и m (0 ≤ k ≤ 104, 1 ≤ m ≤ 3·105).

Выходные данные

Выведите m строк. В каждой строке должно быть ровно 8 цифр — номер очередного k-счастливого билета. Номера могут начинаться с 0, все номера должны быть различны. Если существует больше, чем m различных k-счастливых билетов, то выведите любые m из них. Гарантируется, что хотя бы m различных k-счастливых билетов существуют. Билеты можно выводить в любом порядке.

D. Характеристики прямоугольников

Бинарный поиск битмаски Перебор реализация сортировки *2100

Геральд обнаружил табличку, состоящую из n строк и m столбцов, в каждой клетке которой целое число. Как видный специалист по прямоугольным таблицам, он сейчас же посчитал характеристику этой таблицы, то есть, минимальное из чисел в углах этой таблицы. Однако полученная величина ему не понравилась — она показалась ему слишком уж маленькой. И чтобы сделать эту величину побольше, он решил немного обрезать таблицу: удалить несколько столбцов слева и несколько справа, а также несколько строк сверху и несколько — снизу. Найдите, какой максимальной может стать характеристика таблицы после такого обрезания. Учтите, что в таблице должно остаться хотя бы две строки и хотя бы два столбца. При этом количество обрезаемых с каждой из четырех сторон строк или столбцов может быть нулевым.

Входные данные

В первой строке даны через пробел два целых числа n и m (2 ≤ n, m ≤ 1000). В следующих n строках описана таблица. В i-той из этих строк перечислены через пробел целые числа ai, 1, ai, 2, ..., ai, m (0 ≤ ai, j ≤ 109)m чисел стоящих в i-той строке таблицы.

Выходные данные

Выведите единственное целое число — ответ на задачу.

Примечание

В первом тестовом примере Геральд ничего не может поделать со своим недовольством — в таблице всего две строки и два столбца.

Во втором тестовом примере, как бы Геральд не обрезал таблицу, все равно хотя бы в одном из углов будет 0.

E. Летний заработок

Бинарный поиск битмаски геометрия Перебор сортировки *2500

Многие школьники ищут себе работу на лето, и вот, однажды, когда Геральд был еще школьником, он тоже решил поработать летом. Но так как Геральд был совсем необычным школьником, то и работу он нашел себе неожиданную. Некая Компания согласилась заплатить ему определенную сумму денег, если он нарисует им три одинаковых круга на плоскости, которые не будут пересекаться друг с другом (но могут касаться). Центры кругов он может выбирать только из n вариантов, предоставленных Компанией. Радиус кругов он волен выбирать сам (радиус всех трех кругов должен быть одинаковым); при этом, чем больше окажется этот радиус, тем больше ему заплатят.

Помогите Геральду заработать как можно больше.

Входные данные

В первой строке записано единственное целое число n — количество центров (3 ≤ n ≤ 3000). В следующих n строках записаны по два целых числа xi, yi ( - 104 ≤ xi, yi ≤ 104) — координаты потенциальных центров кругов, предоставленные Компанией.

Все заданные точки различны.

Выходные данные

Выведите единственное вещественное число — максимальный возможный радиус кругов. Ответ будет засчитан, если его относительная или абсолютная погрешность не превышает 10 - 6.

C. Медведь Василий и последовательность

жадные алгоритмы Перебор реализация теория чисел *1800

У медведя Василия есть последовательность целых положительных чисел a1, a2, ..., an. Медведь Василий хочет выписать из них несколько чисел себе на листок так, чтобы красота выписанных чисел была максимальна.

Красотой выписанных чисел b1, b2, ..., bk медведь называет такое максимальное целое неотрицательное число v, что число b1 and b2 and ... and bk делится без остатка на число 2v. Если же такого числа v не существует (то есть для любого целого неотрицательного v число b1 and b2 and ... and bk делится без остатка на 2v), красота выписанных чисел равна -1.

Подскажите медведю, какие числа ему нужно выписать, чтобы красота выписанных чисел была максимальна. Если же существует несколько способов выписать числа, следует выбрать тот, при котором медведь выпишет наибольшее количество чисел.

Здесь выражение x and y означает применение к числам x и y операции побитового И. В языках программирования C++ и Java эта операция обозначается как «&», на Pascal она обозначается как «and».

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105). Во второй строке записаны n целых чисел через пробел a1, a2, ..., an (1 ≤ a1 < a2 < ... < an ≤ 109).

Выходные данные

В первой строке выведите единственное число k (k > 0) — количество чисел, которые надо выписать. Во второй строке выведите k целых чисел b1, b2, ..., bk — числа, которые нужно выписать. Числа b1, b2, ..., bk разрешается выводить в любом порядке, однако все они должны быть различными. Если существует несколько способов выписать числа, следует выбрать тот, при котором количество выписанных чисел максимально. Если все равно существует несколько способов, разрешается вывести любой.

E. Дерево делителей

Деревья Перебор теория чисел *2200

Дерево делителей — это корневое дерево, для которого выполняются следующие условия:

  • В каждой из вершин дерева записано целое положительное число.
  • В листьях дерева записаны простые числа.
  • Для любой внутренней вершины произведение чисел, записанных в ее сыновьях, равно числу, записанному в этой вершине.

У Манао есть n различных чисел a1, a2, ..., an. Он пытается построить такое дерево делителей, в вершинах которого каждое из ai будет встречаться хотя бы по одному разу. Манао любит компактность, но деревья у него получаются уж слишком большие. Помогите Манао определить минимальное возможное количество вершин в искомом дереве делителей.

Входные данные

Первая строка содержит единственное целое число n (1 ≤ n ≤ 8). Во второй строке через пробел записаны n различных целых чисел ai (2 ≤ ai ≤ 1012).

Выходные данные

Выведите единственное число — минимальное количество вершин в дереве делителей, содержащем каждое из чисел ai.

Примечание

Пример 1. Самое маленькое дерево делителей выглядит так:

Пример 2. В этом случае можно построить следующее дерево делителей:

Пример 3. Дерево может состоять из единственной вершины.

E. Столкновения

математика Перебор реализация *2000

На числовой прямой находятся n шариков. На момент времени 0 для каждого известна его координата xi, скорость vi (возможно, отрицательная) и масса mi. Радиусом шариков можно пренебречь.

Шарики сталкиваются абсолютно упруго. То есть если два шарика массой m1 и m2 со скоростями v1 и v2 сталкиваются, их новые скорости будут:

.

Требуется найти, где каждый шарик будет находиться через t секунд.

Входные данные

В первой строке записано два целых числа n и t (1 ≤ n ≤ 10, 0 ≤ t ≤ 100) — количество шариков и продолжительность процесса. Далее следует n строк по три целых числа в каждой: xi, vi, mi (1 ≤ |vi|, mi ≤ 100, 0 ≤ |xi| ≤ 100) — координата, скорость и масса шарика номер i в момент времени 0.

Гарантируется, что изначально никакие два шарика не находятся в одном и том же месте. Кроме того, гарантируется, что в одном столкновении не будет участвовать одновременно более двух шариков (т.е. три и более шарика никогда не окажутся в одной точке в отрезке времени [0;t]).

Выходные данные

Выведите n чисел — координаты шариков через t секунд. Выводите числа не менее чем с 4 знаками после десятичной точки.

B. Четырехугольник с максимальной площадью

геометрия Перебор *2100

Яхуб нарисовал множество из n точек на декартовой плоскости. Он назвал их «особыми точками». Четырехугольник — это многоугольник без самопересечений, имеющий четыре стороны (или ребра) и четыре вершины (или угла). Пожалуйста, обратите внимание, что четырехугольник может не быть выпуклым. Особый четырехугольник — это такой четырехугольник, в котором все четыре вершины принадлежат множеству особых точек. Вам дано множество особых точек. Пожалуйста, вычислите максимальную площадь особого четырехугольника.

Входные данные

В первой строке записано целое число n (4 ≤ n ≤ 300). В каждой из следующих n строк записано по два целых числа: xi, yi ( - 1000 ≤ xi, yi ≤ 1000) — декартовы координаты i-той особой точки. Гарантируется, что никакие три точки не лежат на одной прямой. Гарантируется, что никакие две точки не совпадают.

Выходные данные

Выведите единственное вещественное число — максимальную площадь особого четырехугольника. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превышает 10 - 9.

Примечание

В тестовом примере можно выбрать первые четыре точки и построить на них четырехугольник — квадрат со стороной 4. Таким образом, площадь равняется 4·4 = 16.

B. Ксюша и шпионы

жадные алгоритмы Перебор реализация *1500

Перед грозным детективом Ксюшей выстроились в ряд n (n ≥ 2) иностранных шпионов. Будем считать, что шпионы пронумерованы от 1 до n слева направо.

У шпиона номер s хранится важная записка. Он должен передать ее шпиону номер f. Допрос шпионов проходит в несколько этапов. В течение одного этапа шпион, у которого сейчас хранится важная записка, может передать записку одному из своих соседей в ряду. Другими словами, если этот шпион имеет номер x, он может передать записку одному из шпионов x - 1 или x + 1 (если x = 1 или x = n, то у шпиона только один сосед). Также в течение этапа шпион может сохранить записку у себя и никому ее не передавать.

Но не все так просто, в течение m этапов Ксюша пристально наблюдает за некоторыми шпионами. А именно, в течение этапа номер ti (этапы нумеруются, начиная с 1) Ксюша наблюдает за шпионами с номерами li, li + 1, li + 2, ..., ri (1 ≤ li ≤ ri ≤ n). Конечно, если в течение какого-то этапа за шпионом наблюдают, он не может ни передавать записку, ни принимать ее от другого шпиона. Иначе Ксюша сразу раскроет хитрый заговор шпионов. Тем не менее, если шпион на текущем этапе сохраняет записку у себя, даже если Ксюша наблюдает за ним, она ничего не обнаружит.

Вам заданы s и f, а также в какие моменты и за кем следит Ксюша. Определите, как нужно действовать шпионам, чтобы передать записку от шпиона s до шпиона f как можно быстрее (за минимальное количество этапов).

Входные данные

В первой строке записаны четыре целых числа n, m, s и f (1 ≤ n, m ≤ 105; 1 ≤ s, f ≤ ns ≠ fn ≥ 2). В каждой из следующих m строк записаны три целых числа ti, li, ri (1 ≤ ti ≤ 109, 1 ≤ li ≤ ri ≤ n). Гарантируется, что t1 < t2 < t3 < ... < tm.

Выходные данные

Выведите k символов в одну строку: i-ый символ в строке должен обозначать действие шпионов на этапе номер i. Если на этапе номер i шпион, у которого находится записка, должен передать ее шпиону с меньшим номером, i-ый символ должен быть равен «L». Если на этапе номер i шпион, у которого находится записка, должен передать ее шпиону с большим номером, i-ый символ должен быть равен «R». Если шпион должен оставить записку у себя на i-ом этапе, i-ый символ должен быть равен «X».

В результате применения выведенной последовательности действий шпион s должен передать записку шпиону f. Количество выведенных символов k должно быть как можно меньше. Ксюша не должна обнаружить, что шпионы передают записку.

Если существует несколько оптимальных ответов, разрешается вывести любой. Гарантируется, что ответ существует.

E. Насосные станции

графы Деревья жадные алгоритмы Перебор поиск в глубину и подобное Потоки разделяй и властвуй *2900

Безумный ученый Майк устроился на работу. Его задача — управлять системой насосных станций для перекачки воды.

Система состоит из n насосных станций, которые пронумерованы целыми числами от 1 до n. Некоторые пары станций соединены двунаправленными трубами, по которым может течь вода в том или другом направлении (но одновременно только в одном). Для каждой трубы задана пропускная способность — наибольшее количество литров воды, которое может через нее протекать в течение одного часа. Каждая насосная станция может перекачивать входящую воду из одних станций в другие станции по трубам при условии, что за один час общее входящее в эту станцию количество литров воды равняется общему исходящему из этой станции количеству литров воды.

В обязанности Майка входит перекачивание воды между станциями. Из станции a в станцию b по трубам (возможно, через другие станции) в течение одного часа можно пустить какое-то количество литров воды согласно правилам, описанным выше. В течение этого времени вода из других станций не может втекать в станцию a, и не может вытекать из станции b, при том из станции a может вытекать любое количество воды, и в станцию b может втекать любое количество воды. Если из станции a за час в общем было выкачано x литров воды, то Майк получает к зарплате x бублей.

Чтобы получить зарплату, Майк по контракту должен работать n - 1 дней. В первый день он выбирает две станции v1 и v2, и в течение одного часа перекачивает определённое количество воды из v1 в v2. Далее в i-тый день Майк выбирает до этого ни разу не выбранную станцию vi + 1, и в течение одного часа перекачивает определенное количество воды из станции vi в станцию vi + 1. При этом количество перекачиваемой воды в i-тый день не зависит от количества перекачиваемой воды в (i - 1)-ый день.

Для своих проектов Майку нужно заработать как можно больше бублей. Помогите Майку найти такую перестановку номеров станций v1, v2, ..., vn, при которой Майк может заработать наибольшую возможную зарплату.

Входные данные

В первой строке входных данных через пробел записаны два целых числа n и m (2 ≤ n ≤ 200, 1 ≤ m ≤ 1000) — количество станций и количество труб в системе, соответственно. В i-той из следующих m строк через пробелы записаны три числа ai, bi и ci (1 ≤ ai, bi ≤ n, ai ≠ bi, 1 ≤ ci ≤ 100) — номера станций, которое соединяет i-тая труба и пропускная способность трубы, соответственно. Гарантируется, что любые две станции соединяет не более чем одна труба и между любыми двумя станциями существует путь по трубам.

Выходные данные

В первой строке выведите одно целое число — наибольшее значение зарплаты, которую может получить Майк. В второй строке через пробелы выведите перестановку из n чисел от 1 до n — номера станций последовательности v1, v2, ..., vn. Если существует несколько ответов, выведите любой.

B. Простые молекулы

графы математика Перебор *1200

Безумный ученый Майк ставит эксперименты по химии. Сегодня он попытается собрать одну молекулу из трех атомов.

Известно, что молекула состоит из атомов, некоторые пары которых соединены атомарными связями. У каждого атома есть значение валентности — количества связей, которые атом должен образовывать с другими атомами. Атом может создавать одну или несколько связей с любым другим атомом, но не с самим собой. Количество связей для атома в молекуле должно быть равно его валентности.

Майку известны валентности всех трех атомов. Найдите молекулу, которую из них можно собрать, или же определите, что это невозможно.

Входные данные

В единственной строке входных данных через пробел записаны три целых числа a, b и c (1 ≤ a, b, c ≤ 106) — валентности трех данных атомов.

Выходные данные

Если нужная молекула существует, выведите через пробел три целых числа — количество связей между 1-м и 2-м, 2-м и 3-м, 3-м и 1-м атомами соответственно. Если решений несколько, выведите любое. Если решения не существует, выведите «Impossible» (без кавычек).

Примечание

Первый пример соответствует первому рисунку. Между 1-м и 2-м атомами в данном случае нет связей.

Второй пример соответствует второму рисунку. Между каждой парой атомов есть одна или несколько связей.

Третий пример соответствует третьему рисунку. Решения не существует, потому что атом не может образовывать связи с самим собой.

Ситуация на четвертом рисунке невозможна, так как каждый атом должен вступать хотя бы в одну атомарную связь.

B. Неподвижные точки

математика Перебор реализация *1100

Перестановка длины n — это последовательность целых чисел такая, что каждое целое число от 0 до (n - 1) встречается в ней ровно один раз. Например, последовательность [0, 2, 1] представляет собой перестановку длины 3, а вот [0, 2, 2] и [1, 2, 3] — нет.

Неподвижная точка функции — это такая точка, которую отображение функции переводит в нее же. Перестановку можно рассматривать как взаимно-однозначную функцию. Дадим определение неподвижной точки перестановки. Целое число i называется неподвижной точкой перестановки a0, a1, ..., an - 1 тогда и только тогда, когда ai = i. Например, перестановка [0, 2, 1] имеет 1 неподвижную точку, а перестановка [0, 1, 2] имеет 3 неподвижные точки.

Дана перестановка a. Вам разрешено не более одного раза поменять местами два элемента перестановки. Какое наибольшее количество неподвижных точек можно получить в перестановке? Обратите внимание, что вам разрешено сделать не более одного обмена местами.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 105). Во второй строке записано n целых чисел a0, a1, ..., an - 1 — данная перестановка.

Выходные данные

Выведите единственное целое число — максимальное количество неподвижных точек, которое можно получить в перестановке, используя не более одного обмена двух элементов местами.

C. Суммы подмножеств

Перебор Структуры данных *2500

Дан массив a1, a2, ..., an и m множеств S1, S2, ..., Sm индексов элементов этого массива. Введем обозначение, Sk = {Sk, i} (1 ≤ i ≤ |Sk|), другими словами Sk, i — это некоторый элемент множества Sk.

В задаче нужно ответить на q запросов. Каждый запрос имеет один из следующих типов:

  1. Найти сумму элементов с индексами из множества Sk: . Формат запроса — «? k».
  2. Добавить число x ко всем элементам с индексами из множества Sk: aSk, i заменяется на aSk, i + x для всех i (1 ≤ i ≤ |Sk|). Формат запроса — «+ k x».

После каждого запроса первого типа, выведите искомую сумму.

Входные данные

В первой строке записаны целые числа n, m, q (1 ≤ n, m, q ≤ 105). В следующей строке записаны n целых чисел a1, a2, ..., an (|ai| ≤ 108) — элементы массива a.

Каждая из следующих m строк описывает одно множество индексов. В k-ой строке сначала записано целое положительное число, обозначающее количество элементов в множестве (|Sk|), а затем даны |Sk| различных целых чисел Sk, 1, Sk, 2, ..., Sk, |Sk| (1 ≤ Sk, i ≤ n) — элементы множества Sk.

В следующих q строках заданы запросы. Каждый запрос имеет вид «? k» или «+ k x» и находится на отдельной строчке. Для всех запросов выполняются ограничения: 1 ≤ k ≤ m, |x| ≤ 108. Запросы заданы в том порядке, в котором их нужно выполнять.

Гарантируется, что сумма размеров всех множеств Sk не превосходит 105.

Выходные данные

После каждого запроса первого типа, выведите искомую сумму в отдельной строке.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

C. Опять пожар

кратчайшие пути Перебор поиск в глубину и подобное *1500

После ужасающего лесного пожара в Берляндии была реализована программа восстановления леса, по которой были посажены N рядов по M деревьев в каждом, причем настолько ровно, что можно ввести систему координат, в которой j-тое дерево в i-м ряду будет иметь координаты (i, j). Но случилось ужасное, и едва окрепший лес загорелся. И теперь для составления плана эвакуации необходимо найти координаты дерева, которое загорится позже всех.

Возгорание произошло в K точках одновременно, т.е. в начальный момент времени загорелось K деревьев. Каждую минуту огонь перекидывается со всех горящих деревьев на те деревья, которые еще не горят и расстояние от которых до ближайшего горящего дерева равно 1.

Найдите дерево, которое загорится позже всех. Если таких деревьев несколько, выведите любое.

Входные данные

В первой строке входного файла заданы два целых числа N, M (1 ≤ N, M ≤ 2000) — размеры леса. Деревья были посажены во всех точках вида (x, y) (1 ≤ x ≤ N, 1 ≤ y ≤ M), x и y — целые числа.

Во второй строке задано одно целое число K (1 ≤ K ≤ 10) — количество деревьев, горящих в начальный момент времени.

В третьей строке задано K пар целых чисел: x1, y1, x2, y2, ..., xk, yk (1 ≤ xi ≤ N, 1 ≤ yi ≤ M) — координаты точек возгорания. Гарантируется, что все точки возгорания различны.

Выходные данные

Выведите одну строку, содержащую два целых числа x и y, записанные через пробел, — координаты дерева, которое загорится последним. Если таких деревьев несколько, выведите любое из них.

A. TL

жадные алгоритмы Перебор реализация *1200

Валера решил подготовить раунд для Codesecrof. У него уже есть одна задача, в которой он хочет выставить ограничение по времени (TL).

Валера уже написал n верных решений. Для каждого верного решения он знает время его работы (в секундах). Также Валера написал m неправильных решений, и для каждого неправильного решения он знает время его работы (в секундах).

Предположим, Валера установит в задаче TL v секунд. Тогда будем говорить, что решение пройдет системное тестирование, если время его работы не больше v секунд. Также будем говорить, что решение пройдет системное тестирование с «запасом», если время его работы a секунд удовлетворяет неравенству 2a ≤ v.

В результате, Валера решил выставить такой TL v секунд, что выполнятся все условия:

  1. v — целое положительное число;
  2. все верные решения пройдут системное тестирование;
  3. хотя бы одно верное решение пройдет системное тестирование с «запасом»;
  4. все неверные решения не пройдут системное тестирование;
  5. значение v минимально среди всех TL, для которых верны условия 1, 2, 3, 4.

Помогите Валере, найдите наиболее подходящий TL или определите, что такого TL не существует.

Входные данные

В первой строке записаны два целых числа n, m (1 ≤ n, m ≤ 100). Во второй строке записаны n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 100) — время работы каждого из n верных решений в секундах. В третьей строке записаны m целых чисел через пробел b1, b2, ..., bm (1 ≤ bi ≤ 100) — время работы каждого из m неверных решений в секундах.

Выходные данные

Если подходящее значение TL существует, выведите его. Иначе, выведите -1.

E. Неверный Флойд

графы Конструктив Перебор поиск в глубину и подобное *2200

Валера проводит эксперименты с алгоритмами поиска кратчайших путей. Недавно он изучил алгоритм Флойда, сегодня Валера решил поэкспериментировать именно с ним.

Валера уже написал код, который посчитает ему кратчайшие расстояния между всеми парами вершин в неориентированном связном графе из n вершин и m ребер, не содержащем петли и кратные ребра. Также Валера решил часть вершин пометить, а именно он пометил ровно k вершин a1, a2, ..., ak.

Ниже приведена реализация его алгоритма.


ans[i][j] // кратчайшее расстояние для пары вершин i, j
a[i] // помеченные Валерой вершины

for(i = 1; i <= n; i++) {
for(j = 1; j <= n; j++) {
if (i == j)
ans[i][j] = 0;
else
ans[i][j] = INF; //INF — очень большое число
}
}

for(i = 1; i <= m; i++) {
считать пару вершин u, v, между которыми есть неориентированное ребро;
ans[u][v] = 1;
ans[v][u] = 1;
}

for (i = 1; i <= k; i++) {
v = a[i];
for(j = 1; j <= n; j++)
for(r = 1; r <= n; r++)
ans[j][r] = min(ans[j][r], ans[j][v] + ans[v][r]);
}

Валера понял, что его код неверный. Помогите Валере, найдите для заданного набора помеченных вершин a1, a2, ..., ak такой неориентированный связный граф, состоящий из n вершин и m ребер, для которого код Валеры хотя бы для одной из пар вершин (i, j) посчитает неверное кратчайшее расстояние. Валера очень хочет, чтобы найденный граф не содержал петли и кратные ребра. Если же такого графа не существует, выведите -1.

Входные данные

В первой строке входных данных записаны три целых числа n, m, k (3 ≤ n ≤ 300, 2 ≤ k ≤ n , ) — количество вершин, количество ребер, и количество помеченных вершин.

Во второй строке входных данных записаны k целых чисел через пробел a1, a2, ... ak (1 ≤ ai ≤ n) — номера помеченных вершин. Гарантируется, все числа ai различны.

Выходные данные

Если требуемого графа не существует выведите в единственной строке -1. Иначе выведите m строк по два целых числа u, v — описание ребер искомого Валерой графа.

A. Джефф и цифры

математика Перебор реализация *1000

У Джеффа есть n карточек, на каждой карточке нарисована либо цифра 0, либо цифра 5. Джефф может выбрать некоторые карточки и выложить их в ряд — получится некоторое число. Какое максимальное число, делящееся на 90, Джефф может выложить из имеющихся у него карточек?

Выложенное число не должно содержать лидирующих нулей, при этом считается, что число 0 не содержит лидирующих нулей. Джеффу не обязательно использовать все карточки.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 103). В следующей строке записано n целых чисел a1, a2, ..., an (ai = 0 или ai = 5). Число ai обозначает цифру, которая записана на i-ой карточке.

Выходные данные

В единственную строку выведите ответ на задачу — максимальное число, которое делится на 90. Если из карточек нельзя составить ни одно число, которое делится на 90, выведите -1.

Примечание

В первом тесте единственное число кратное 90, которое можно сложить — это 0.

Во втором тесте можно сложить число 5555555550, оно кратно 90.

A. Вася и робот

жадные алгоритмы математика Перебор *1500

У Васи есть n предметов, которые лежат в ряд. Предметы последовательно пронумерованы числами от 1 до n таким образом, что самый левый предмет имеет номер 1, самый правый — номер n. Каждый предмет имеет свой вес, i-тый из них весит wi килограмм.

Васе нужно собрать все эти предметы, однако он не будет делать этого сам, а использует своего нового робота. У робота есть две разные руки — левая и правая. Робот может последовательно выполнять действия:

  1. Взять левой рукой самый левый из предметов, затратив на это wi · l единиц энергии (где wi — вес самого левого предмета, l — заданный параметр), если предыдущее действие было таким же (левой рукой), то робот тратит дополнительные Ql единиц энергии.
  2. Взять правой рукой самый правый из предметов, затратив на это wj · r единиц энергии (где wj — вес самого правого предмета, r — заданный параметр), если предыдущее действие было таким же (правой рукой), то робот тратит дополнительные Qr единиц энергии.

Разумеется, Вася хочет запрограммировать робота так, чтобы тот потратил как можно меньше энергии. С этой задачей он и обратился за помощью к вам. Ваша задача — найти минимальное количество энергии, которое потратит робот, чтобы собрать все предметы.

Входные данные

В первой строке содержится пять целых чисел n, l, r, Ql, Qr (1 ≤ n ≤ 105; 1 ≤ l, r ≤ 100; 1 ≤ Ql, Qr ≤ 104).

Во второй строке содержится n целых чисел w1, w2, ..., wn (1 ≤ wi ≤ 100).

Выходные данные

В единственной строке выведите целое число — ответ на задачу.

Примечание

Рассмотрим первый пример. Так как l = r, мы можем просто по очереди брать по одному предмету с левой, с правой и потом опять с левой стороны. В итоге будет затрачено 4·42 + 4·99 + 4·3 = 576 единиц энергии.

Второй пример. Оптимальное решение — взять один предмет справа, затем один предмет слева и затем два предмета справа. В итоге будет затрачено (2·4) + (7·1) + (2·3) + (2·2 + 9) = 34 единицы энергии.

C. Вася и красивые массивы

дп Перебор теория чисел *2100

У Васи скоро день рождения и мама решила подарить ему массив, состоящий из целых положительных чисел, a длины n.

Вася считает красотой массива наибольший общий делитель всех его элементов. Мама, конечно, хочет подарить ему максимально красивый массив (с наибольшей красотой). К сожалению, в магазине остался всего один массив a, но продавец сказал, что может уменьшить в нем некоторые числа, каждое число не более чем на k.

Продавец может из массива a получить массив b, если выполняются условия: bi > 0; 0 ≤ ai - bi ≤ k для всех 1 ≤ i ≤ n.

Помогите маме найти максимально возможную красоту массива, который она сможет подарить Васе (продавец сможет его получить).

Входные данные

В первой строке содержится два целых числа n и k (1 ≤ n ≤ 3·105; 1 ≤ k ≤ 106). Во второй строке содержатся n целых чисел ai (1 ≤ ai ≤ 106) — массив a.

Выходные данные

В единственной строке выведите целое число — максимально возможную красоту полученного массива.

Примечание

В первом примере можно получить массив:

3 6 9 12 12 15

Во втором примере можно получить следующий массив:

7 21 49 14 77

A. Кружок школьников

жадные алгоритмы Перебор реализация *1000

В начале учебного года в Берляндском государственном университете начинает работать городской кружок школьников по программированию. Кружок будет проходить в двух группах: начальной и продвинутой. Для того, чтобы распределить школьников на группы, было проведено тестирование. По его результатам каждый школьник получил оценку от 1 до m баллов. Известно, что c1 школьников получили 1 балл, c2 школьников получили 2 балла, ..., cm школьников получили максимальные m баллов. Теперь нужно объявить проходной балл k (целое число от 1 до m): все школьники, набравшие строго меньше k баллов, попадут в начальную группу, а те, кто набрал хотя бы k баллов, в продвинутую. Известно, что если размер группы школьников больше чем y, то в университете не найдется аудитории, чтобы их вместить. Также известно, что если в группе меньше x школьников, то она слишком маленькая и с ней нецелесообразно вести занятия. Таким образом, всех школьников нужно разбить на две группы так, чтобы размер каждой был от x до y включительно. Помогите подобрать проходной балл таким образом, чтобы эти ограничения выполнялись.

Входные данные

В первой строке записано целое число m (2 ≤ m ≤ 100). Во второй строке записаны m целых чисел c1, c2, ..., cm, разделенные одиночными пробелами (0 ≤ ci ≤ 100). В третьей строке записаны через пробел два целых числа x и y (1 ≤ x ≤ y ≤ 10000). Хотя бы одно ci отлично от 0.

Выходные данные

Если невозможно выбрать проходной балл таким образом, чтобы размер каждой из получившихся групп был не меньше чем x, и не больше чем y, выведите 0. Иначе выведите целое число от 1 до m — предлагаемый вами проходной балл. Если возможных ответов несколько, выведите любой из них.

Примечание

В первом примере в начальную группу попадают 7 школьников, в продвинутую — 6.

Во втором примере также правильным является ответ 3.

A. Дима и непрерывная линия

Перебор реализация *1400

Дима и Сережа живут в обыкновенной общажной двушке. Однажды у Димы было свидание с его девушкой, и он попросил Сережу покинуть комнату. В качестве компенсации Сережа свалил на Диму свое домашнее задание.

Учитель дал Сереже координаты n различных точек на оси абсцисс и попросил последовательно соединить их полуокружностями в определенном порядке: сначала соединить первую со второй, потом вторую с третьей, потом третью с четвертой и так далее до n-ой точки. Две точки с координатами (x1, 0) и (x2, 0) соединяются полуокружностью, проходящей над осью абсцисс, с диаметром, совпадающим с отрезком между точками. Сереже нужно узнать, будет ли линия на рисунке иметь самопересечения. Для уточнения, посмотрите на рисунок, который Сережа показал Диме (на левом рисунке линия имеет самопересечения, на правом — не имеет).

Сережа — мальчик не маленький, поэтому координаты точек могут быть достаточно большими. Помогите Диме справится с этой задачей.

Входные данные

Первая строка содержит единственное целое число n (1 ≤ n ≤ 103). Вторая строка содержит n различных целых чисел x1, x2, ..., xn ( - 106 ≤ xi ≤ 106)i-ая точка имеет координаты (xi, 0). Точки не обязательно отсортированы по x координате.

Выходные данные

В единственной строке выведите «yes» (без кавычек), если линия имеет самопересечения. В противном случае выведите «no» (без кавычек).

Примечание

Первый тест из условия изображен на рисунке слева, второй — на рисунке справа.

B. Дима и СМС

Перебор Строки *1500

Сережа крайне не постоянен, на этот раз он не уступил место Диме и его девушке (кстати, ее зовут Инна). Но ребята всегда найдут способ пообщаться, сегодня они переписываются по смс.

Дима и Инна используют тайный шифр в своих смсках. Когда Дима хочет отправить Инне какую-то фразу, он выписывает все слова, ставя перед каждым словом и после последнего сердечку. Сердечка — это последовательность из двух символов: знака меньше (<) и цифры тройки (3). После этого этапа шифрования смс выглядит следующим образом: <3word1<3word2<3 ... wordn<3.

На этом шифрование не заканчивается. Далее Дима вставляет произвольное количество маленьких латинских символов, цифр, знаков больше и меньше (<, >) в любые места сообщения.

Инна знает Диму как облупленного, так что наперед знает, какую фразу Дима собирается ей отправить. Инне только что пришла смс, помогите ей определить, правильно ли ее зашифровал Дима. Другими словами определите, могла ли смс быть получена методом шифрования описанным выше.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 105) — количество слов в сообщении Димы. Следующие n строк содержат непустые слова, по одному слову в строке. Слова состоят только из маленьких латинских букв. Суммарная длина всех слов не превышает 105.

Последняя строка содержит непустую смс, которое получила Инна. Количество символов в смс не превышает 105. Cмс может содержать в себе только маленькие латинские буквы, цифры и знаки больше и меньше.

Выходные данные

В единственной строке выведите «yes» (без кавычек), если Дима правильно зашифровал смс, и «no» (без кавычек) в противном случае.

Примечание

Прошу заметить, что за второй пример из условия Дима еще и по шапке получил потом.

E. Дима и пинки

графы Перебор реализация снм *2300

Дима хороший. Очень. Но всему хорошему приходит конец...

Сережа собирается надавать Диме пинков. Для этого Сережа разделил комнату на единичные квадраты. Теперь комната представляет собой прямоугольник, состоящий из единичных квадратов, размера n × m.

Первоначально Сережа поставил Диму в центр некоторого единичного квадрата. Затем он начал давать Диме пинков (известно, что он дал Диме как минимум один пинок). Каждый раз, когда Дима получает пинок, он подлетает и перемешается в одном из четырех направлений (вверх, вниз, влево, вправо) на k (k > 1) единиц длины. Сережа очень добрый, поэтому он пинает Диму так, что тот никогда не ударяется о стены (то есть не вылетает за пределы прямоугольной комнаты). Еще Сережа очень оригинальный, поэтому он пинает Диму так, что тот никогда не пролетает над одним и тем же отрезком, который соединяет центры двух соседних по стороне квадратов, дважды.

Сережа долго пинал Диму. Но Дима не злопамятный — Дима записывает. Поэтому Дима пометил все квадраты, в которых он находился и над центрами которых он пролетал. Дима совершенно не помнит, с какой силой его пинал Сережа. Он хочет восстановить по своим записям все возможные варианты. Помогите ему, найдите все такие значения k, что Сережа мог пинать Диму так, что тот перемещался по комнате на k единиц от одного пинка.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 103) — размеры комнаты.

Далее следует n строк, содержащих по m чисел aij — записи Димы: aij = 1, если Дима стоял в клеточке (i, j) или пролетал над ней. В противном случае aij = 0.

Известно, что как минимум одно значение aij равно 1.

Выходные данные

В единственной строке выведите в возрастающем порядке все k (k > 1), при которых могли получиться такие записи Димы. Если таких k не существует и Дима выдумал всю эту историю с пинками, выведите -1.

D. Пара чисел

Бинарный поиск математика Перебор Структуры данных *2000

У Семена есть массив a1, a2, ..., an, состоящий из n целых положительных чисел. Сегодня Семен попросил вас найти пару целых чисел l, r (1 ≤ l ≤ r ≤ n) такую, что выполнены следующие условия:

  1. существует целое число j (l ≤ j ≤ r), такое что все числа al, al + 1, ..., ar нацело делятся на aj;
  2. величина r - l принимает максимально возможное значение среди всех пар, для которых верно условие 1;

Помогите Семену, найдите требуемую пару чисел (l, r). Если таких пар несколько, требуется найти все.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 3·105).

Во второй строке записаны n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 106).

Выходные данные

В первой строке выведите два целых числа — сколько пар нашлось и максимальное значение r - l. Во второй строке выведите все значения l из оптимальных пар в порядке возрастания.

Примечание

В первом примере пара чисел подходящая, поскольку числа 6, 9, 3 делятся на 3.

Во втором примере все числа делятся на число 1.

В третьем примере все числа простые, поэтому условиям 1 и 2 удовлетворяют только пары чисел (1, 1), (2, 2), (3, 3), (4, 4), (5, 5).

B. Забор

дп Перебор *1100

Перед домом Поликарпа находится забор, который состоит из n одинаковых по ширине досок, расположенных одна за другой слева направо. Высота i-ой доски составляет hi метров, разные доски могут иметь различные высоты.

Забор для n = 7 и h = [1, 2, 6, 1, 1, 7, 1]

Поликарп приобрел рояль и теперь ищет наилучший способ занести рояль в свой дом. Для того, чтобы осуществить задуманное, ему придется выломать ровно k подряд идущих досок в заборе. Так как высокие доски выламывать сложнее, Поликарп хочет найти такие k последовательных досок, что сумма их высот минимальна.

Напишите программу, которая найдет номера k последовательных досок с наименьшей суммой высот. Обратите внимание, забор не окружает дом Поликарпа, а находится перед ним (другими словами, забор не зациклен).

Входные данные

В первой строке входных данных содержатся целые числа n и k (1 ≤ n ≤ 1.5·105, 1 ≤ k ≤ n) — количество досок в заборе и ширина проема для рояля. Вторая строка содержит последовательность целых чисел h1, h2, ..., hn (1 ≤ hi ≤ 100), где hi — высота i-ой доски забора.

Выходные данные

Выведите такое j, что сумма высот досок j, j + 1, ..., j + k - 1 — наименьшая возможная. Если таких j несколько, то выведите любое из них.

Примечание

В примере требуется найти три последовательные доски с минимальной суммой высот. В данном случае три доски с номерами 3, 4 и 5 обладают требуемым свойством и имеют суммарную высоту 8.

E. Два круга

Перебор реализация Структуры данных *2500

Пусть задана таблица n × m, заполненная целыми числами. Клетку в i-ой строке и j-ом столбце будем обозначать (i, j). Таким образом, (1, 1) является левой верхней клеткой таблицы, а (n, m) — правой нижней. Назовем кругом радиуса r с центром в клетке (i0, j0) множество таких клеток (i, j), что . Будем рассматривать только такие круги, которые не выходят за пределы таблицы, то есть у которых r + 1 ≤ i0 ≤ n - r и r + 1 ≤ j0 ≤ m - r.

Круг радиуса 3 с центром в (4, 5).

Найдите два таких непересекающихся круга заданного радиуса r, что сумма чисел в клетках, принадлежащим этим кругам, максимальна. Два круга пересекаются, если найдется клетка, принадлежащая обоим кругам. Поскольку может быть более одного способа выбрать пару кругов с максимальной суммой, то нас будет интересовать еще и количество таких пар. Посчитайте количество неупорядоченных пар кругов, то есть, к примеру, пара кругов радиуса 2 с центрами в (3, 4) и (7, 7) это та же самая пара, что и пара кругов радиуса 2 с центрами в (7, 7) и (3, 4).

Входные данные

В первой строке записано три целых числа n, m и r (2 ≤ n, m ≤ 500, r ≥ 0). Каждая из следующих n строк содержит по m целых чисел в диапазоне от 1 до 1000 — элементы таблицы. Строки таблицы перечислены сверху вниз, элементы в строках — слева направо. Гарантируется, что существует хотя бы один круг радиуса r, не выходящий за пределы таблицы.

Выходные данные

Выведите два числа — максимальную сумму чисел в клетках, которые находятся в двух непересекающихся кругах, и количество пар непересекающихся кругов с максимальной суммой. Если не существует ни одной пары непересекающихся кругов, то выведите 0 0.

C. Красивое множество

Перебор теория чисел *2300

Назовем множество целых положительных чисел a красивым, если выполняется следующее: для любого простого p, если , то . Другими словами, если одно число из множества делится на простое p, то не менее половины чисел из множества делятся на p.

Нужно найти любое красивое множество, количество элементов в котором равно k и каждый элемент не превосходит 2k2.

Входные данные

В первой строке находятся целое число k (10 ≤ k ≤ 5000) — количество чисел в требуемом красивом множестве.

Выходные данные

В первой строке через пробел выведите k целых положительных целых чисел, являющихся красивым множеством. Если существует несколько ответов, разрешается вывести любой.

D. Ghd

математика Перебор Теория вероятностей *2900

Джон Доу предложил своей сестре Джейн Доу найти gcd некоторого набора чисел a.

Gcd — это целое положительное число g такое, что все числа из набора делятся на g нацело и не существует g' (g' > g), такого, что все числа набора делятся на g' нацело.

К сожалению, Джейн не смогла справиться с заданием и Джон предложил ей найти ghd того же набора чисел.

Ghd — это целое положительное число g такое, что не менее половины чисел из набора делятся на g нацело и не существует g' (g' > g), такого, что не менее половины чисел из набора делятся на g' нацело.

С таким заданием Джейн справилась всего за два часа. Попробуйте и вы.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 106) — количество чисел в наборе a. Во второй строке через пробел записаны целые числа a1, a2, ..., an (1 ≤ ai ≤ 1012). Обратите внимание, среди чисел могут быть одинаковые.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать спецификатор %I64d.

Выходные данные

Выведите единственное число g — ghd набора a.

B. Дима и дела

Перебор реализация *1200

Благодаря вам Дима чудесно провел выходные, но пришло время делать дела. Естественно, что Дима, как и все мужчины, у которых есть женщина, все делает не правильно.

Инна и Дима сейчас вместе в одной комнате. Инна ругает Диму за каждое дело, которое он делает в ее присутствии. Поругав Диму за какое-то дело, Инна удаляется в другую комнату и там ходит по кругу, причитая, какой у нее непутевый суженый. За это время Дима спокойно успевает сделать k - 1 дело. Затем Инна возвращается и за следующее дело, сделанное в ее присутствии, вновь ругает Диму, после чего снова удаляется в другую комнату. Описанное продолжается до тех пор, пока Дима не сделает все свои дела.

Всего у Димы n дел, каждое из которых имеет уникальный номер от 1 до n. Дима любит порядок, поэтому он делает дела последовательно, начиная с некоторого дела. Например, если у Димы всего 6 дел, то если он начнет с 5-го дела, порядок дел будет следующий: сначала Дима сделает 5-ое дело, потом 6-ое, потом 1-ое, потом 2-ое, 3-е, 4-е.

Инна так часто и систематично ругает Диму (исключительно любя и по делу!), что Дима уже выучил наизусть с какой силой Инна ругает его за каждое дело. Помогите Диме выбрать первое дело так, чтобы в сумме его ругали как можно слабее.

Входные данные

Первая строка входных данных содержит два целых числа n, k (1 ≤ k ≤ n ≤ 105). Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 103), где ai — сила, с которой Инна ругает Диму, если присутствует в комнате, когда он делает i-ое дело.

Гарантируется, что n делится на k.

Выходные данные

В единственной строке выведите номер дела, с которого стоит начать Диме, чтобы в сумме его ругали как можно слабее. Если существует несколько решений, выведите то, у которого номер первого дела минимальный.

Примечание

Пояснение к тесту 1.

Если Дима сделает первое дело первым, Инна поругает его с силой 3, затем Дима успевает сделать одно дело (так как k = 2), затем Инна ругает его за третье дело с силой 1, после чего ругает его за пятое с силой 5. Таким образом Диму ругают с суммарной силой 3 + 1 + 5 = 9. Если бы Дима начал со второго дела, к примеру, Инна поругала бы его за дела 2, 4 и 6 с силой 2 + 6 + 4 = 12.

Пояснение к тесту 2.

Во втором тесте k = 5, а значит, между делами, за которые его ругают, Дима успевает сделать 4 дела. Таким образом Инна ругает Диму за дела с номерами 1 и 6 (если он начнет с 1 или 6), 2 и 7 (если с 2 или 7) и так далее. Оптимальнее всего начать с дела 3 или 8, из них 3 с меньшим номером, поэтому ответ 3.

E. Дима и волшебная гитара

математика Перебор реализация *2200

Дима очень любит Инну, поэтому он решил написать ей песню. У Димы есть волшебная гитара, у которой n струн и m ладов. Звукоизвлечение на гитаре происходит следующим образом: чтобы сыграть ноту, нужно зажать одну из струн на одном из ладов, а затем дернуть эту струну. Обозначим ноту, которую играет Димина гитара, если на ней сыграть i-ую струну зажатую на j-ом ладу, переменной aij. Известно, что Димина гитара может играть k различных нот, при этом вполне вероятно, что некоторые ноты можно сыграть несколькими способами. Другими словами, возможно, aij = apq при (i, j) ≠ (p, q).

Дима уже написал песню — последовательность из s нот. Чтобы сыграть песню нужно последовательно сыграть ноты из песни на гитаре, причем каждую ноту можно играть любым из доступных способов. Дима понял, что есть очень много способов сыграть песню, и хочет сыграть ее так, чтобы она выглядела как можно сложнее (выкобеЙнивается).

Будем обозначать способ сыграть песню последовательностью пар (xi, yi) (1 ≤ i ≤ s) таких, что xi-ая струна на yi-ом ладу издает i-ую ноту песни. Сложностью перехода между парами (x1, y1) и (x2, y2) назовем значение + . Сложностью способа сыграть песню назовем максимальную из сложностей переходов между соседними парами в способе.

Помогите Диме определить максимально возможную сложность способа сыграть его песню! Пусть парень выглядит круто!

Входные данные

Первая строка входных данных содержит четыре целых числа n, m, k и s (1 ≤ n, m ≤ 2000, 1 ≤ k ≤ 9, 2 ≤ s ≤ 105).

Далее следует n строк по m целых чисел aij (1 ≤ aij ≤ k) в каждой. Число в строке номер i в столбце j (aij) означает ноту, которую издает гитара на i-ой струне на j-ом ладу.

Последняя строка входных данных содержит s чисел qi (1 ≤ qi ≤ k) — последовательность нот из песни.

Выходные данные

В единственной строке выведите одно число — максимально возможную сложность песни.

D. Сломанный монитор

жадные алгоритмы Конструктив Перебор реализация *2100

У Иннокентия беда — cломался монитор компьютера. Теперь некоторые пиксели его монитора являются «битыми», то есть всегда имеют черный цвет. Как следствие, Иннокентий не может играть в обыкновенные компьютерные игры. В настоящий момент он играет в следующую игру со своим младшим братом Поликарпом.

Иннокентий вслепую пишет программу, которая на черном экране рисует квадратную белую рамку шириной в один пиксель. Так как монитор неисправен, то некоторые пиксели, которые должны быть белыми, остаются черными. Глядя на результат работы программы на экране, Поликарп должен угадать позицию и размер рамки Иннокентия. Поликарпу не очень нравится игра, но Иннокентий убедил брата играть, ведь «игра развивает фантазию и наблюдательность».

Помогите Поликарпу, автоматизировав его участие в игре. Напишите программу, которая находит такую возможную квадратную рамку, что:

  • ширина рамки составляет 1 пиксель,
  • рамка полностью помещается на экране,
  • все белые пиксели монитора расположены на рамке,
  • из всех рамок, которые удовлетворяют предыдущим трем условиям, искомая рамка должна иметь наименьший размер.

Формально, квадратная рамка представляет собой такие пиксели сплошного квадрата, которые находятся на краю квадрата, то есть не являются полностью окруженными другими пикселями квадрата. Например, если рамка имеет размер d = 3, то она состоит из 8 пикселей, если ее размер d = 2, то из 4, а если d = 1, то она вырождается в один пиксель.

Входные данные

В первой строке содержится разрешение монитора в виде пары целых чисел n, m (1 ≤ n, m ≤ 2000). Следующие n строк содержат ровно по m символов — состояние пикселей монитора на момент игры. Символ «.» (точка) соответствует черному пикселю, а символ «w» (строчная латинская буква w) — белому. Гарантируется, что хотя бы один пиксель монитора — белый.

Выходные данные

Выведите экран монитора, обозначив искомую рамку символами «+» (знак «плюс»). Те пиксели, которые во время игры были белыми, изменять не следует. Их следует выводить, используя «w». Если возможных вариантов размещения рамки минимального размера несколько, выведите любой из них.

Если искомой рамки не существует, то выведите вместо n строк единственную строку, содержащую число -1.

Примечание

В первом примере размер искомой рамки равен 4. Во втором примере размер искомой рамки равен 3. В третьем примере искомая рамка имеет размер 1. В четвертом примере искомой рамки не существует.

C. Гамбургеры

Бинарный поиск Перебор *1600

Поликарп очень любит гамбургеры, особенно приготовленные собственноручно. Поликарп считает, что существует только три достойных ингредиента для приготовления гамбургера: хлеб, колбаса и сыр. Рецепт своего знаменитого «гамбургера от Поликарпа» он записывает в виде строки из букв 'B' (хлеб), 'S' (колбаса) и 'C' (сыр). В рецепте ингредиенты перечисляются снизу вверх, например, рецепт «ВSCBS» обозначает гамбургер в котором снизу вверх идут: хлеб, колбаса, сыр, хлеб и снова колбаса.

На кухне у Поликарпа в наличии nb кусочков хлеба, ns кусочков колбасы и nc кусочков сыра. Кроме того, в магазине неподалеку есть в продаже все три ингредиента по цене: pb рублей за кусок хлеба, ps — за кусок колбасы и pc — за кусочек сыра.

У Поликарпа есть r рублей, которые он готов потратить в магазине. Какое наибольшее количество гамбургеров он сможет приготовить? Считается, что ломать или резать любой из кусочков (хлеба, колбасы, сыра) нельзя, а также что в магазине есть бесконечно много кусочков каждого из ингредиентов.

Входные данные

В первой строке входных данных содержится непустая строка, описывающая рецепт «гамбургера от Поликарпа». Длина строки не превосходит 100, строка содержит только буквы 'B' (прописная латинская B), 'S' (прописная латинская S) и 'C' (прописная латинская C).

Вторая строка содержит три целых числа nb, ns, nc (1 ≤ nb, ns, nc ≤ 100) — количество кусочков хлеба, колбасы и сыра на кухне Поликарпа. Третья строка содержит три целых числа pb, ps, pc (1 ≤ pb, ps, pc ≤ 100) — цена одного кусочка хлеба, колбасы и сыра в магазине. Наконец, четвертая строка содержит целое число r (1 ≤ r ≤ 1012) — количество рублей у Поликарпа.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите наибольшее количество гамбургеров, которое Поликарп может приготовить. Если он не может приготовить ни одного гамбургера, выведите 0.

B. Весело считать прямоугольники

дп Перебор разделяй и властвуй *1900

Дана таблица размера n × m, в каждой ячейке которой записано целое число: ноль или единица. Обозначим ячейку в i-ой строке и j-ом столбце как (i, j).

Определим «прямоугольник» четверкой целых чисел a, b, c, d (1 ≤ a ≤ c ≤ n; 1 ≤ b ≤ d ≤ m). Прямоугольник задает множество ячеек таблицы {(x, y) :  a ≤ x ≤ c, b ≤ y ≤ d}. Определим «хороший прямоугольник» как прямоугольник, включающий только ячейки с нулями.

Вам надо ответить на следующие q запросов: посчитать количество хороших прямоугольников, у которых все ячейки содержатся в данном прямоугольнике.

Входные данные

В первой строке записано три целых числа: n, m и q (1 ≤ n, m ≤ 40, 1 ≤ q ≤ 3·105). Каждая из следующих n строк содержит m символов — таблицу. Мы можем считать, что строки таблицы пронумерованы сверху вниз, а столбцы — слева направо. И строки, и столбцы пронумерованы, начиная с единицы.

Каждая из следующих q строк содержит по запросу — четыре целых числа, описывающих текущий прямоугольник, a, b, c, d (1 ≤ a ≤ c ≤ n; 1 ≤ b ≤ d ≤ m).

Выходные данные

Для каждого запроса выведите ответ — единственное целое число на отдельной строке.

Примечание

В первом примере дана квадратная таблицы размера 5 × 5, а первый, второй и третий запросы представлены в следующем рисунке.

  • В первом запросе есть 10 хороших прямоугольников, пять размера 1 × 1, два — 2 × 1, два — 1 × 2 и один — 1 × 3.
  • Во втором запросе есть всего один хороший прямоугольник размера 1 × 1.
  • В третьем запросе есть 7 хороших прямоугольников, четыре размера 1 × 1, два размера 2 × 1 и один размера 3 × 1.

A. Игра с кубиком

Перебор *800

Два игрока играют в игру. Сначала каждый из них записывает на бумажку целое число от 1 до 6, а затем бросается кубик. Выигрывает тот игрок, чье записанное число оказалось ближе к выпавшему на кубике; если же разница одинакова, объявляется ничья.

Первый игрок записал число a, а второй — число b. Сколько существует вариантов броска кубика, при которых выиграет первый игрок, будет ничья, или выиграет второй игрок?

Входные данные

В единственной строке записаны два целых числа a и b (1 ≤ a, b ≤ 6) — числа, записанные на бумажке первым и вторым игроком соответственно.

Выходные данные

Выведите три целых числа: количество вариантов броска кубика, при которых выиграет первый игрок, будет ничья, и выиграет второй игрок соответственно.

Примечание

Игральный кубик — это стандартная игральная кость, у которой на каждой из шести граней написано число от 1 до 6, и все числа на всех гранях различны.

Считается, что число a ближе к числу x, чем число b, если |a - x| < |b - x|.

D. Новогоднее письмо

битмаски дп Перебор *2000

Во многих странах есть новогодняя традиция — писать письма дедушке Морозу со своими пожеланиями подарков на новый год. Вася — обыкновенный мальчик-программист. Как все обыкновенные мальчики, он в канун нового года собирается написать письмо дедушке Морозу.

Вася уже придумал алгоритм, по которому он будет писать письмо. Сначала он выберет две строки s1 и s2, состоящие из прописных латинских букв. Далее мальчик составит строку sk, пользуясь рекуррентным соотношением sn = sn - 2 + sn - 1, операция '+' обозначает конкатенацию (то есть последовательную запись) строк в заданном порядке. После чего Вася запишет строку sk на листочек, положит его в письмо и пошлет письмо деду Морозу.

Вася точно уверен: чтобы дед Мороз подарил ему самый лучший подарок, нужно чтобы в полученной строке sk подстрока AC встречалась ровно x раз (сокращение AC напоминает Васе о сданных задачах). Более того, Вася решил, что строка s1 должна иметь длину n, а строка s2 — длину m. Больше Вася ничего не решил.

У Васи сейчас срочные новогодние дела, поэтому он просит вас выбрать для него две строки s1 и s2 требуемым образом. Помогите Васе.

Входные данные

В первой строке записано четыре целых числа k, x, n, m (3 ≤ k ≤ 50; 0 ≤ x ≤ 109; 1 ≤ n, m ≤ 100).

Выходные данные

В первой строке выведите строку s1, состоящую из n заглавных латинских букв. Во второй строке выведите строку s2, состоящую из m заглавных латинских букв. Если существует несколько подходящих строк, разрешается вывести любую.

Если требуемой пары строк не существует, выведите «Happy new year!» без кавычек.

B. Ладья, Конь... и снова Конь

математика Перебор реализация *1200

На стандартной шахматной доске 8 × 8 находятся две фигуры — ладья и конь. Известно, в каких позициях они расположены. Гарантируется, что ни одна из них не бьет другую.

Ваша задача — найти количество способов поставить на эту доску еще одного коня так, чтобы ни одна из трех фигур на доске не била никакую другую. Новую фигуру разрешается ставить только на свободную клетку.

Входные данные

Первая строка входных данных содержит описание положения ладьи на доске, которое представляет собой строку длины 2, где первый символ — это строчная буква латинского алфавита от a до h, а второй символ — цифра от 1 до 8. Вторая строка содержит описание положения коня в аналогичном формате. Гарантируется, что позиции не совпадают.

Выходные данные

Выведите одно число — искомое количество способов.

C. Жалюзи

Перебор *1400

Как известно, жалюзи состоят из горизонтальных непрозрачных полос, которые можно поворачивать, таким образом регулируя количество света, поступающего в помещение. На складе завода для производства жалюзи есть n полос ширины 1. Проблема заключается в том, что все они — неизрасходованные части с различных заказов, то есть возможно не все они одинаковой длины (возможно даже, что все они имеют различные длины).

Каждую полосу можно разрезать на две или более части. Разрезы производятся перпендикулярно стороне, вдоль которой измеряется длина. Таким образом, разрезы не изменяют ширину полосы, но каждый из получившихся кусков имеет меньшую длину (сумма которых равна длине исходной полосы).

После всех разрезаний, конструируются жалюзи путем последовательного соединения по сторонам, вдоль которых измеряется длина, некоторого количества одинаковых по длине частей. Также, кроме полученных кусков, в качестве части жалюзи может выступать исходная полоса, если она не была разрезана. Запрещено конструировать жалюзи каким-либо другим способом.

Таким образом, если жалюзи состоят из k частей длины d каждая, то она имеет вид прямоугольника k × d бурльметров.

Ваша задача — найти, для какого наибольшего по площади окна можно изготовить жалюзи из заданных полос, если по техническим причинам не разрешается использовать куски короче l бурльметров. Окно представляет собой прямоугольник с целыми положительными длинами сторон.

Входные данные

В первой строке входных данных находятся два целых числа, записанных через пробел, n и l (1 ≤ n, l ≤ 100) — количество полос на складе и минимальная допустимая длина части жалюзи в бурльметрах. Во второй строке через пробел записаны n целыx чисел ai — длины исходных полос в бурльметрах (1 ≤ ai ≤ 100).

Выходные данные

Выведите единственное целое число — максимальную площадь окна в квадратных бурльметрах, которую можно закрыть полностью. Если не существует окна положительной площади, которое можно закрыть полностью, не нарушив никакое из описанных правил, то выведите единственное число 0.

Примечание

В первом тесте из условия, искомое окно имеет размеры 2 × 4, а жалюзи для него состоят из 4 частей по 2 бурльметра каждая. Одна из частей — это исходная полоса длины 2, другая — часть обрезанной полосы длины 3, а две оставшиеся — части разрезанной пополам полосы длины 4.

A. Сережа и префиксы

Бинарный поиск Перебор *1600

Сережа очень любит числовые последовательности. Поэтому он решил сделать себе еще одну. Для этого он действует по следующему алгоритму.

Сережа берет чистый листок бумаги. Далее он начинает выписывать последовательность в m этапов. Каждый раз он либо дописывает новое число в конец последовательности, либо берет l первых элементов текущей последовательности и дописывает их в конец c раз. Более формально, если обозначить текущую последовательность a1, a2, ..., an, то после применения описанной операции она превратится в a1, a2, ..., an[, a1, a2, ..., al] (блок, который выделен в квадратные скобки, нужно повторить c раз).

Прошел день. Сережа уже построил последовательность. Теперь он хочет знать, чему равны некоторые ее элементы? Помогите Сереже.

Входные данные

Первая строка содержит целое число m (1 ≤ m ≤ 105) — количество этапов для построения последовательности.

Следующие m строк содержат описание этапов в порядке их следования. Первое число в строке — это тип этапа (1 или 2). Тип 1 обозначает добавление одного числа в конец последовательности, в этом случае далее в строке идет целое число xi (1 ≤ xi ≤ 105) — число, которое нужно добавить. Тип 2 обозначает копирование префикса длины li в конец ci раз, в этом случае далее в строке идут два целых числа li, ci (1 ≤ li ≤ 105, 1 ≤ ci ≤ 104), li — длина префикса, ci — количество копирований. Гарантируется, что длина префикса li никогда не превышает текущей длины последовательности.

Следующая строка содержит целое число n (1 ≤ n ≤ 105) — количество элементов, которые интересуют Сережу. Следующая строка содержит номера интересующих Сережу элементов в полученной последовательности в строго возрастающем порядке. Гарантируется, что все числа строго больше нуля и не превосходят длины полученной последовательности. Считайте, что элементы итоговой последовательности пронумерованы, начиная от 1, от начала последовательности к концу.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите интересующие Сережу элементы в порядке, в котором их номера следуют во входных данных.

A. Медведь и малина

жадные алгоритмы Перебор реализация *1000

Медведь решил запастись малиной на зиму. Хитрым образом он узнал, сколько килограммов малины будет стоить бочонок меда в каждый из следующих n дней. По данным медведя, в i-ый (1 ≤ i ≤ n) день один бочонок меда будет стоить xi килограмм малины.

К сожалению, у медведя нет ни бочонка меда, ни малины. В это же время, у медведя есть друг, который готов за c килограмм малины одолжить ему бочонок меда ровно на один день. Поэтому медведь придумал хитрый план. Он хочет выбрать некоторый день d (1 ≤ d < n), занять у друга в этот день бочонок меда и сразу же (в день d) продать его по курсу дня d. На следующий день (d + 1), медведь хочет купить новый бочонок меда по курсу текущего дня (ведь у него осталась малина от продажи прошлого бочонка) и сразу же (в день d + 1) отдать другу одолженный бочонок меда, а также c килограмм малины за аренду бочонка.

Медведь хочет привести в действие свой план не более одного раза, после чего уйти в спячку. Какое максимальное количество малины (в килограммах) он может заработать? Учтите, что если на каком-то этапе своего плана у медведя не хватает малины, то такой план медведь осуществлять не будет.

Входные данные

В первой строке записаны два целых числа n и c (2 ≤ n ≤ 100, 0 ≤ c ≤ 100), разделенных пробелом — количество дней и количество килограмм малины, которое медведь должен отдать за взятие бочонка в долг.

Во второй строке записаны n целых чисел x1, x2, ..., xn (0 ≤ xi ≤ 100), разделенных пробелом — стоимость бочонка меда в день i.

Выходные данные

Выведите одно целое число — ответ на задачу.

Примечание

В первом примере медведю выгодно взять в долг бочонок меда в 3 день и продать его за 7. На 4 день купить бочонок меда за 3 и отдать его другу. Полученная выгода равна (7 - 3 - 1) = 3.

В втором примере медведю выгодно взять в долг бочонок меда в 1 день и продать его за 100. На 2 день купить бочонок меда за 1. Полученная выгода равна (100 - 1 - 2) = 97.

B. Медведь и строки

жадные алгоритмы математика Перебор реализация Строки *1200

У медведя есть строка s = s1s2... s|s| (записью |s| обозначается длина строки), состоящая из строчных букв латинского алфавита. Медведь хочет посчитать количество таких пар индексов i, j (1 ≤ i ≤ j ≤ |s|), что строка x(i, j) = sisi + 1... sj содержит в себе хотя бы одну строку «bear» в качестве подстроки.

Строка x(i, j) содержит в себе строку «bear», если существует такой индекс k (i ≤ k ≤ j - 3), что sk = b, sk + 1 = e, sk + 2 = a, sk + 3 = r.

Помогите медведю справиться с поставленной задачей.

Входные данные

В первой строке записана непустая строка s (1 ≤ |s| ≤ 5000). Гарантируется, что строка состоит только из строчных букв латинского алфавита.

Выходные данные

Выведите одно целое число — ответ на задачу.

Примечание

В первом примере подходят следующие пары (i, j): (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9).

Во втором примере подходят следующие пары (i, j): (1,  4), (1,  5), (1,  6), (1,  7), (1,  8), (1,  9), (1,  10), (1,  11), (2,  10), (2,  11), (3,  10), (3,  11), (4,  10), (4,  11), (5,  10), (5,  11), (6,  10), (6,  11), (7,  10), (7,  11).

C. Медведь и простые числа

Бинарный поиск дп математика Перебор реализация Структуры данных теория чисел *1700

Недавно медведь начал изучать структуры данных и столкнулся со следующей задачей.

Задана последовательность целых чисел x1, x2, ..., xn длины n и m запросов, каждый из которых характеризуется двумя целыми числами li, ri. Обозначим за f(p) — количество таких индексов k, что xk делится на p. Ответом на запрос li, ri является сумма: , где S(li, ri) — множество простых чисел из отрезка [li, ri] (обе границы включаются в отрезок).

Помогите медведю справиться с этой задачей.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 106). Во второй строке записаны n целых чисел x1, x2, ..., xn (2 ≤ xi ≤ 107). Числа не обязательно различные.

В третьей строке записано целое число m (1 ≤ m ≤ 50000). В каждой из m следующих строк записана пара целых чисел через пробел li и ri (2 ≤ li ≤ ri ≤ 2·109) — числа, характеризующие текущий запрос.

Выходные данные

Выведите m целых чисел — ответы на запросы в порядке появления запросов во входных данных.

Примечание

Рассмотрим первый тестовый пример. Всего в первом примере 3 запроса.

  1. Поступает первый запрос l = 2, r = 11. Нужно посчитать f(2) + f(3) + f(5) + f(7) + f(11) = 2 + 1 + 4 + 2 + 0 = 9.
  2. Поступает второй запрос l = 3, r = 12. Нужно посчитать f(3) + f(5) + f(7) + f(11) = 1 + 4 + 2 + 0 = 7.
  3. Поступает третий запрос l = 4, r = 4. Так как на этом промежутке нет простых чисел, то сумма равна 0.

B. Халява лети!

Бинарный поиск Перебор реализация *1400

Все любят халяву. Студенты особенно.

Как известно, если в ночь перед экзаменом высунуться в раскрытое окно, открыть зачетку и громко трижды прокричать «Халява лети!», то прилетевшая халява поможет сдать предстоящий экзамен.

В ночь перед экзаменом по матанализу из окон студенческого общежития номер π n студентов прокричали заветные слова. Для каждого студента известен момент времени ti, в который он совершил таинство. Известно, что ti равно количеству секунд, прошедших с начала ночи.

Известно, что халява дама капризная и своенравная. В эту ночь халява была неподалеку от общежития в течение T секунд. Поэтому, если для двух студентов разность моментов времени совершения таинств больше T, то хотя бы к одному из них она точно не прилетит.

Так как все студенты оптимисты, им очень хочется знать, какое наибольшее количество человек может войти в группу счастливчиков.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100), где n — количество студентов, прокричавших «Халява лети!». Во второй строке содержится n целых положительных чисел ti (1 ≤ ti ≤ 1000). Последняя строка содержит целое число T (1 ≤ T ≤ 1000) — интервал времени, в течение которого халява была около общежития.

Выходные данные

Выведите единственное целое число — наибольшее количество человек, которые смогут войти в группу счастливчиков.

B. Георгий и раунд

жадные алгоритмы Перебор *1200

Георгий решил подготовить раунд для Codesecrof, поэтому он подготовил m задач. Пронумеруем подготовленные задачи целыми числами от 1 до m. Сложность задачи с номером i Георгий оценивает целым числом bi.

Чтобы раунд получился хорошим, он должен состоять как минимум из n задач. Кроме этого он должен иметь хотя бы одну задачу со сложностью ровно a1, хотя бы одну со сложностью ровно a2, ..., и хотя бы одну задачу со сложностью ровно an. Конечно, в раунде дополнительно могут быть задачи и с другими сложностями.

Георгий обладает плохой фантазией, поэтому ему проще упростить некоторую уже подготовленную задачу, чем придумать новую и подготовить ее. В упрощении задач Георгий виртуоз. Он может упростить любую уже подготовленную задачу со сложностью c до любой целой положительной сложности d (c ≥ d), изменив ограничения на входные данные.

Однако не все так просто. Георгий понял, что даже в том случае, если он упростит некоторые задачи, ему может не хватить задач для хорошего раунда. Поэтому он решил узнать у вас, какое минимальное количество задач ему необходимо придумать дополнительно к уже подготовленным m задачам, чтобы из всех задач можно было собрать хороший раунд. Учтите, что Георгий может придумывать задачи любой сложности.

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 3000) — минимальное количество задач в хорошем раунде и количество подготовленных Георгием задач. Во второй строке заданы целые числа через пробел a1, a2, ..., an (1 ≤ a1 < a2 < ... < an ≤ 106) — требования на сложности задач в хорошем раунде. В третьей строке заданы целые числа через пробел b1, b2, ..., bm (1 ≤ b1 ≤ b2... ≤ bm ≤ 106) — сложности задач, подготовленных Георгием.

Выходные данные

Выведите единственное целое число — ответ на задачу.

Примечание

В первом примере набор подготовленных задач удовлетворяет требованиям хорошего раунда.

Во втором примере достаточно придумать и подготовить две задачи со сложностями 2 и 3, чтобы получить хороший раунд.

В третьем примере очень просто получить хороший раунд, если дополнительно придумать и подготовить три задачи со сложностями 2, 3, 4.

B. Сгибание слов

Перебор

За решение этой задачи вы получите 5 баллов.

Манао изобрел новую операцию над строками, называемую сгибом. Каждый сгиб происходит между парой соседних символов в строке. В результате сгиба вторая часть строки оказывается над первой частью, только записывается она в противоположном направлении, при этом конец первой и начало второй части строки уравниваются. С помощью этой операции Манао превращает строку в структуру, которая имеет несколько уровней. Количество этих уровней на единицу больше количества сгибов в строке. Давайте рассмотрим несколько примеров.

Будем обозначать позиции сгибов символом '|'. Например, слово «ABRACADABRA», записанное как «AB|RACA|DAB|RA», обозначает, что было произведено три сгиба: первый — между левой парой букв 'B' и 'R'; второй — между буквами 'A' и 'D'; и третий, между правой парой 'B' и 'R'. Вот несколько примеров строк со сгибами:


"ABCDEF|GHIJK" | "A|BCDEFGHIJK" | "AB|RACA|DAB|RA" | "X|XXXXX|X|X|XXXXXX"
| | | XXXXXX
KJIHG | KJIHGFEDCB | AR | X
ABCDEF | A | DAB | X
| | ACAR | XXXXX
| | AB | X
Еще один пример для строки «ABCD|EFGH|IJ|K»:

K
IJ
HGFE
ABCD

Манао заметил, что согнутую строку можно рассматривать как несколько столбиков из символов. Например, в предыдущем примере согнутая строка представляет собой четыре столбика, которые можно прочитать как «AHI», «BGJK», «CF» и «DE» снизу вверх. Манао интересуется: какой самый высокий столбик из одинаковых букв он может получить, сгибая данную строку? Помогите ему ответить на этот вопрос. Учтите, что в столбике не должно быть пропусков, а также, что он должен начинаться на самом нижнем уровне (на том уровне, где записана самая левая часть строки). Например, в самом правом из четырех примеров выше, ни один из столбиков не устраивает Манао, так как каждый из них либо содержит пропуски, либо начинается выше первого уровня, либо и то и другое.

Входные данные

В единственной строке записано слово из заглавных букв латинского алфавита, длина которого между 1 и 1000, включительно.

В этой задаче нет подзадач. За ее решение вы получите 5 баллов.

Выходные данные

Выведите единственное целое число — высоту самого высокого столбика из одинаковых символов, который можно построить в результате сгибания данной строки.

Примечание

В первом примере Манао может создать столбик из трех букв 'A', производя сгибы следующим образом: «AB|RACAD|ABRA». Результатом будет такая структура:


ABRA
DACAR
AB

Во втором примере можно выбрать следующие два сгиба: «AB|BB|CBDB».


CBDB
BB
AB

Манао также может произвести сгибы по схеме «AB|B|BCBDB»:


BCBDB
B
AB

В третьем примере заданную строку сгибать не нужно. Таким образом она будет записана на одном уровне.

C1. Турнир

Перебор

Задача состоит из трех подзадач: за решение подзадачи С1 вы получите 4 балла, за решение подзадачи С2 вы получите 4 балла, за решение подзадачи C3 вы получите 8 баллов.

Манао решил заняться борьбой на профессиональном уровне. Для своего дебюта он избрал уже начавшийся турнир. До того, как Манао вступил в него, в турнире было n участников, пронумерованных от 1 до n. У каждого из них было некоторое количество очков. Более конкретно, у i-го участника было pi очков.

Манао будет бороться с каждым из участников ровно один раз. Каждый из поединков заканчивается для него или победой, или поражением. Каждая победа Манао прибавляет к его счету 1 очко, а каждое его поражение прибавляет 1 очко к счету соответствующего противника. Для каждого i, Манао определил степень усилий ei, которую ему нужно приложить, что победить в бою против i-го участника. Проиграть бой усилий не требует.

После окончания всех боев с участием Манао будет сгенерирована турнирная таблица. Стандартно, самое лучшее место в турнирной таблице — первое, а самое худшее — место n + 1. Участники турнира будут упорядочены по убыванию набранных ими очков. Участники, имеющие равный счет с Манао, будут иметь ранг лучше него, если их единственный бой закончился поражением Манао, и хуже в противном случае. Как именно производится ранжировка других участников с одинаковым количеством очков, для этой задачи значения не имеет.

Цель Манао — получить место k или лучше. Определите минимальную суммарную степень усилий, которую ему надо приложить для достижения своей цели, если это вообще возможно.

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ k ≤ n + 1). Затем следует n строк, каждая из которых содержит пару целых чисел, записанных через пробел — pi и ei (0 ≤ pi, ei ≤ 200000).

Задача состоит из трех подзадач, которые отличаются друг от друга ограничениями на входные данные. За решение каждой подзадачи вы получите определенное количество баллов. Описание подзадач следует ниже.

  • В подзадаче C1 (4 балла) ограничение на n: 1 ≤ n ≤ 15.
  • В подзадаче C2 (4 балла) ограничение на n: 1 ≤ n ≤ 100.
  • В подзадаче C3 (8 баллов) ограничение на n: 1 ≤ n ≤ 200000.
Выходные данные

В единственной строке выведите целое число — наименьшую суммарную степень усилий, которую Манао нужно приложить, чтобы попасть в лучшие k бойцов. Если Манао не может попасть в лучшие k бойцов, выведите число -1.

Примечание

Рассмотрим первый пример. В момент вступления Манао в турнир, в нем уже участвует три бойца. Первый из них набрал 1 турнирное очко, а победа над ним потребует 1 единицу усилий Манао. Второй участник также имеет одно очко, но победа над ним стоит Манао 4 единицы усилий. У третьего участника 2 очка, а для победы над ним нужно приложить 2 единицы усилий. Манао хочет получить место 2 или выше. Оптимальным решением является выиграть у бойцов 1 и 3, после чего Манао и участники под номерами 2 и 3 будут иметь по два очка. Манао будет выигрывать в турнирной таблице у бойца 3 и проигрывать бойцу 2, таким образом занимая второе место.

Во втором примере, даже если Манао одержит победу в обоих поединках, он все равно останется на третьем месте.

D1. Суперколлайдер

Перебор

Задача состоит из двух подзадач: за решение подзадачи D1 вы получите 3 балла, за решение подзадачи D2 вы получите 16 баллов.

Манао — главный архитектор плана постройки нового суперколлайдера. Его задача — выбрать место, на котором можно построить коллайдер максимального размера. В новом суперколлайдере должно происходить столкновение частиц, движущихся с равной скоростью из четырех направлений, поэтому коллайдер будет иметь четыре камеры ускорения равной длины. Также, чтобы минимизировать помехи от магнитного поля Земли, камеры должны быть либо параллельны, либо перпендикулярны магнитному полю планеты. Таким образом, Манао ищет место, на котором можно построить большую структуру в форме плюса.

Чтобы уложиться в бюджет, камеры ускорения должны быть выложены вдоль длинных ровных трактов на местности. Манао уже провел топографическое исследование, в результате которого были обнаружены все такие тракты, параллельные или перпендикулярные магнитному полю Земли. Для постройки максимально большого суперколлайдера, Манао должен определить, какие два тракта создают самую большую фигуру в форме плюса. Иными словами, он должен найти два перпендикулярных тракта, которые пересекаются и имеют наибольшую длину от центра созданного ими «плюса» до ближайшего конца одного из трактов.

Исследование, проведенное Манао, выявило немало трактов, как в направлении север-юг, так и в направлении запад-восток. Ему требуется ваша помощь, чтобы быстро определить место, где будет построен суперколлайдер.

Входные данные

Первая строка содержит пару разделенных единственным пробелом чисел n и m, где n — количество трактов в направлении север-юг, а m — количество трактов в направлении восток-запад.

Каждая из следующих n строк содержит три разделенных пробелом целых числа xi, yi, li, где (xi, yi) — самая северная точка i-го тракта в направлении север-юг, а li — это длина тракта. Таким образом, соответствующий тракт можно представить как вертикальный отрезок от (xi, yi) до (xi, yi + li).

Далее следует m строк, описывающих тракты в направлении запад-восток. Каждая из этих строк содержит три разделенных пробелом целых числа xi, yi, li, где (xi, yi) — это самая западная точка i-го тракта, а li — его длина. Таким образом, соответствующий тракт можно представить как горизонтальный отрезок от (xi, yi) до (xi + li, yi).

Значения всех xi и yi в диапазоне между -100000000 и 100000000, включительно. Значения всех li в диапазоне между 1 и 100000000, включительно. Никакая пара вертикальных отрезков не касается и не пересекается, и никакая пара горизонтальных отрезков не касается и не пересекается.

Задача состоит из двух подзадач, которые отличаются друг от друга ограничениями на входные данные. За решение каждой подзадачи вы получите определенное количество баллов. Описание подзадач следует ниже.

  • В подзадаче D1 (3 балла), n и m будут между 1 и 1000, включительно.
  • В подзадаче D2 (16 баллов), n и m будут между 1 и 50000, включительно.
Выходные данные

Выведите единственное целое число — максимальный возможный размер суперколлайдера, построенного на паре ортогональных трактов. Размер суперколлайдера определяется как длина одной из камер ускорения. Иными словами, размер суперколлайдера — это расстояние от пересечения двух трактов до ближайшего конца одного из трактов. Если никакая пара ортогональных трактов не пересекается, построить коллайдер невозможно и ответом должен быть 0.

Примечание

Рассмотрим пример. Есть вертикальный отрезок из (4, 0) в (4, 9) и два горизонтальных отрезка: между (1, 1) и (9, 1), и между (1, 2) и (8, 2). Наибольшая фигура в форме плюса получается из вертикального отрезка и второго из горизонтальных отрезков. Ее центр будет в точке (4, 2).

Ответом на тест является число 2, так как ближайший из концов этих двух отрезков находится в точке (4, 0), на расстоянии 2 от (4, 2). Коллайдер будет выложен вдоль отрезков (2, 2)-(6, 2) и (4, 0)-(4, 4).

A. Счетные палочки

Перебор реализация

Когда новые ученики приходят в СУНЦ, их многому приходится учить заново. Иногда учителя (небезосновательно) говорят, что мы даже считать не умеем. Вот и решили наши учителя заново учить нас арифметике. А какой лучший способ научить детей складывать и вычитать? — Правильно, счетные палочки! И вот наше новое задание:

Выражением из счетных палочек называется выражение вида:

[ A палочек][знак +][B палочек][знак =][C палочек] (1 ≤ A, B, C).

Знак + состоит из двух пересекающихся палочек: одной вертикальной и одной горизонтальной. Знак = состоит из двух горизонтальных палочек. Выражение называется арифметически верным, если A + B = C.

Дано выражение вида A + B = C, выложенное счетными палочками. Нужно передвинуть не более одной палочки (можно ничего не передвигать) так, чтобы выражение стало арифметически верным. Обратите внимание, нельзя удалять палочки из выражения, а также нельзя перемещать палочки, которые относятся к знакам + и =.

С арифметикой у нас действительно не очень. Поможете нам?

Входные данные

В единственной строке находится исходное выражение. Гарантируется, что выражение имеет вид A + B = C, где 1 ≤ A, B, C ≤ 100.

Выходные данные

Если не существует способа так переложить палочку, что выражение станет верным, в единственной строке выведите «Impossible» (без кавычек). Если способ существует, выведите полученное выражение, следуйте формату выходных данных из тестовых примеров. Не выводите лишних пробельных символов.

Если существует несколько правильных ответов, выведите любой. Для лучшего понимания условия рекомендуется изучить тестовые примеры.

Примечание

В первом тестовом примере достаточно переложить палочку из последней группы палочек в первую.

Во втором тестовом примере нельзя переложить вертикальную палочку плюса во вторую группу палочек, получая таким образом вместо знака плюс знак минус.

Ответа на третий тестовый пример нету, потому что убирать палочки просто так нельзя.

В четвертом примере ничего не требуется перекладывать: исходное выражение и так арифметически корректное.

D. Физкультура и булочки

математика Перебор реализация

Учитель физкультуры СУНЦа тоже немного математик. Больше всего в математике он любит арифметические прогрессии. Именно поэтому учитель хочет, чтобы ученики, выстроенные по неубыванию роста, образовывали арифметическую прогрессию.

Для достижения своей цели учитель физкультуры заказал очень много волшебных булочек из столовой. Волшебные булочки бывают двух типов: когда ученик съедает одну волшебную булочку первого типа, его рост увеличивается на единицу; когда ученик съедает одну волшебную булочку второго типа, его рост уменьшается на единицу. Учитель физкультуры, как и положено, заботится о здоровье своих учеников, поэтому не хочет, чтобы они ели очень много булочек. Точнее, он хочет, чтобы максимальное количество булочек, съеденных некоторым учеником, было минимально.

Помогите учителю, найдите, какое максимальное количество булочек, придется съесть некоторому ученику для достижения цели учителя. Кроме того, найдите один из возможных вариантов достижения цели, а именно: рост самого низкого ученика в итоге и шаг результирующей прогрессии.

Входные данные

В первой строке содержится целое число n (2 ≤ n ≤ 103) — количество учеников. Во второй строке через пробел записаны n целых чисел — рост всех учеников. Рост одного ученика — это целое число, по модулю не превосходящее 104.

Выходные данные

В первой строке выведите максимальное количество булочек, съеденных некоторым учеником для достижения цели учителя. Во второй строке через пробел выведите два целых числа — рост самого низкого ученика в итоге и шаг прогрессии. Обратите внимание, что шаг прогрессии — неотрицательное число.

Если существует несколько верных ответов, разрешается вывести любой.

Примечание

В первом тестовом примере учителю нужно действовать следующим способом:

  • не кормить 1-го ученика, его рост останется равным -3;
  • накормить 2-го ученика двумя булочками первого типа, его рост станет равным -2;
  • накормить 3-го ученика двумя булочками первого типа, его рост станет равным 0;
  • накормить 4-го ученика двумя булочками первого типа, его рост станет равным -1;
  • накормить 5-го ученика двумя булочками второго типа, его рост станет равным 1.

Итого, когда ученики встанут в шеренгу по неубыванию роста получится прогрессия: -3, -2, -1, 0, 1. Минимальный рост ученика в прогрессии равен -3, шаг прогрессии равен 1. Ученик, который съел больше всего булочек, съел две булочки. То есть максимальное количество булочек, съеденных одним учеником равно 2.

A. Арбуз

математика Перебор *800

В один из жарких летних дней Петя и его друг Вася решили купить арбуз. Они выбрали самый большой и самый спелый, на их взгляд. После недолгой процедуры взвешивания весы показали w килограмм. Поспешно прибежав домой, изнемогая от жажды, ребята начали делить приобретенную ягоду, однако перед ними встала нелегкая задача. Петя и Вася являются большими поклонниками четных чисел, поэтому хотят поделить арбуз так, чтобы доля каждого весила именно четное число килограмм, при этом не обязательно, чтобы доли были равными по величине. Ребята очень сильно устали и хотят скорее приступить к трапезе, поэтому Вы должны подсказать им, удастся ли поделить арбуз, учитывая их пожелание. Разумеется, каждому должен достаться кусок положительного веса.

Входные данные

В первой и единственной строке входных данных записано целое число w (1 ≤ w ≤ 100) — вес купленного ребятами арбуза.

Выходные данные

Выведите YES, если ребята смогут поделить арбуз на две части, каждая из которых весит четное число килограмм, и NO в противном случае.

Примечание

Например, ребята могут поделить арбуз на две части размерами 2 и 6 килограммов соответственно (другой вариант — две части 4 и 4 килограмма).

B. Инна и новая матрица конфет

Перебор расписания реализация *1200

Инна очень любит сладкое и игру «Матрица конфет». Сегодня она придумала новую игру — «Матрица конфет 2: перезагрузка».

Поле для новой игры представляет собой прямоугольную таблицу размера n × m. В каждой строке этой таблицы одна клетка занята фигуркой гномика, одна клетка занята конфеткой, остальные клетки строки свободны. Игра длится несколько ходов. На каждом ходе игрок должен выбрать все строки матрицы, в которых гномики не стоят в конфетах, и крикнуть: «Побежали!». После чего все гномики в выбранных строках начинают синхронно передвигаться вправо. За одну секунду каждый гномик шагает в соседнюю клетку, которая находится правее его текущей клетки. Передвижения продолжаются до тех пор пока не случится одно из событий:

  • какой-то гномик в одной из выбранных строк находится в самой правой клетке своей строки;
  • какой-то гномик в выбранных строках находится в клетке с конфетой.

Цель игры — сделать так, чтобы все гномики находились в клетках с конфетами.

Инна — большой молодец, ведь она придумала такую интересную игру. А как же вы? Ваша задача — сыграть в эту игру оптимальным образом. А именно, по заданному игровому полю сказать, какое минимальное количество ходов потребуется игроку, чтобы добиться цели игры.

Входные данные

Первая строка входных данных содержит два целых числа n и m (1 ≤ n ≤ 1000; 2 ≤ m ≤ 1000).

Следующие n строк содержат по m символов — поле для игры в «Матрица конфет 2: перезагрузка». Символ «*» обозначает свободную клеточку поля, символ «G» — фигурку гномика, а символ «S» — конфету. Других символов матрица не содержит. Гарантируется, что каждая строка содержит ровно один символ «G» и один символ «S».

Выходные данные

В единственной строке выведите целое число — минимальное количество ходов, необходимое для достижения цели игры, либо -1, если достичь ее на данном игровом поле невозможно.

D. Роман и числа

битмаски дп Комбинаторика Перебор теория чисел *2000

Роман — юный, но уже довольно известный в Ужляндии, математик. К сожалению, Сережа так не считает. Чтобы переубедить Сережу, Роман готов решить любую математическую задачу. Сережа, не долго думая, попросил Рому найти количество близких чисел к числу n по модулю m.

Число x называется близким к числу n по модулю m, если:

  • его можно получить перестановкой цифр числа n,
  • оно не имеет лидирующих нулей,
  • остаток от деления числа x на m равен 0.

Роман — хороший математик, но поскольку различных вариантов ответа может быть очень много, ему будет трудно найти ответ. Поэтому он просит помощи у вас.

Входные данные

В первой строке записано два целых числа: n (1 ≤ n < 1018) и m (1 ≤ m ≤ 100).

Выходные данные

В единственной строке выведите целое число — количество близких чисел к числу n по модулю m.

Примечание

В первом примере нам подходят числа: 104, 140, 410.

Во втором примере подходит единственное число 232.

B. Деревья в ряду

Перебор реализация *1400

В саду королевы Англии растут n деревьев, выстроенных в ряд. Причем i(1 ≤ i ≤ n) слева дерево имеет высоту ai метров. Сегодня королева решила обновить виды своего сада. Она хочет, чтобы для высот деревьев выполнялось условие: для всех i (1 ≤ i < n), ai + 1 - ai = k, где k — выдуманное королевой число.

К сожалению, у королевского садовника не тысяча рук, и он не может выполнить желание королевы моментально! За одну минуту садовник может либо уменьшить высоту некоторого дерева до любой целой положительной высоты, либо увеличить высоту некоторого дерева до любой целой положительной высоты. Как нужно действовать королевскому садовнику, чтобы выполнить прихоть его величества за минимальное количество минут?

Входные данные

В первой строке заданы два целых числа через пробел: n, k (1 ≤ n, k ≤ 1000). Во второй строке задано n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 1000) — высоты деревьев в ряду.

Выходные данные

В первой строке выведите единственное число p — минимальное количество минут, которое потребуется садовнику. В следующих p строках выведите описание его действий.

Если садовнику требуется увеличить высоту j-го (1 ≤ j ≤ n) слева дерева на x (x ≥ 1) метров, то в соответствующей строке выведите «+ j x». Если садовнику требуется уменьшить высоту j-го (1 ≤ j ≤ n) слева дерева на x (x ≥ 1) метров, то в соответствующей строке выведите «- j x».

Если существует несколько способов сделать ряд из деревьев красивым за минимальное количество действий, разрешается вывести любой.

C. Ищем граф

графы Конструктив Перебор *1500

Будем называть неориентированный граф из n вершин p-интересным, если выполнены условия:

  • граф содержит ровно 2n + p ребер;
  • граф не содержит петель и кратных ребер;
  • для любого целого k (1 ≤ k ≤ n) любой подграф, состоящий из k вершин, содержит не более 2k + p ребер.

Подграфом графа будем называть некоторое множество вершин графа и некоторое множество ребер графа. Причем множество ребер должно удовлетворять условию: оба конца каждого ребра из множества должны принадлежать выбранному множеству вершин.

Ваша задача отыскать p-интересный граф, состоящий из n вершин.

Входные данные

В первой строке задано единственное целое число t (1 ≤ t ≤ 5) — количество тестовых данных. В следующих t строках задано по два целых числа: n, p (5 ≤ n ≤ 24; p ≥ 0; ) — количество вершин в графе и параметр интересности для соответствующего теста.

Гарантируется, что искомый граф существует.

Выходные данные

Для каждого из t тестов выведите 2n + p строк, содержащих описание ребер p-интересного графа: i-я строка должна содержать два целых числа через пробел ai, bi (1 ≤ ai, bi ≤ nai ≠ bi) — две вершины, соединенные ребром в результирующем графе. Считайте, что вершины графа пронумерованы целыми числами от 1 до n.

Ответы для тестов выводите в том порядке, в котором тесты заданы во входных данных. Если существует несколько решений, разрешается вывести любое из них.

A. Треугольник

геометрия математика Перебор реализация *1600

Есть прямоугольный треугольник с катетами длины a и b. Требуется расположить его на плоскости так, что ни одна из его сторон не параллельна осям координат, а вершины находятся в точках с целочисленными координатами, либо определить, что это невозможно.

Входные данные

В первой и единственной строке находятся два целых числа a, b (1 ≤ a, b ≤ 1000), разделенные одним пробелом.

Выходные данные

В первой строке выведите «YES» или «NO» (без кавычек) в зависимости от того, существует ли искомое расположение. Если оно существует, то в трех следующих строках выведите три пары целых чисел — координаты вершин треугольника, по одной паре в строке. Координаты должны быть целыми числами, не превышающими 109 по модулю.

C. Занимательный массив

Комбинаторика математика Перебор реализация *2500

Задан массив, состоящий из n целых чисел: a[1], a[2], ..., a[n]. Более того, заданы m запросов, каждый из которых характеризуется тремя числами li, ri, ki. Запрос li, ri, ki обозначает, что нужно добавить к каждому элементу a[j], где li ≤ j ≤ ri, число Ckij - li + ki.

Запись Cxy обозначает биномиальный коэффициент, или количество сочетаний из y элементов по x элементов.

Вам нужно выполнить последовательно все запросы и вывести, чему будут равны элементы массива в итоге, после всех запросов.

Входные данные

В первой строке заданы целые числа n, m (1 ≤ n, m ≤ 105).

Во второй строке задано n целых чисел a[1], a[2], ..., a[n] (0 ≤ ai ≤ 109) — изначальное состояние массива.

В следующих m строках заданы запросы в формате li, ri, ki — прибавить всем элементам отрезка li... ri число Ckij - li + ki (1 ≤ li ≤ ri ≤ n; 0 ≤ k ≤ 100).

Выходные данные

Выведите n целых чисел: i-е число — это значение элемента a[i] после всех запросов. Так как значения могут быть достаточно большими выводите их по модулю 1000000007 (109 + 7).

H. A + B наносит ответный удар

*особая задача Конструктив Перебор реализация снм *1500

Задача A + B часто используется как пример простейшей задачи для демонстрации платформы спортивного программирования. Тем не менее, некоторые ученые отмечают, что иногда эту задачу не так-то просто сдать. Хотите попробовать?

Входные данные

Входные данные содержат два целых числа a и b (0 ≤ a, b ≤ 103), разделенных пробелом.

Выходные данные

Выведите сумму заданных чисел.

B. Марсианский доллар

Перебор *1400

Однажды Вася завладел информацией о курсе марсианского доллара в бурлях на ближайшие n дней. Цены покупки и продажи одного доллара в i-ый день совпадают и равны ai. У Васи есть b бурлей. Он может не более одного раза за n дней купить сколько-то долларов, а потом их продать. По марсианским законам, можно покупать только целое число долларов. Какую наибольшую сумму денег в бурлях Вася может получить к концу n-го дня?

Входные данные

В первой строке записано два целых числа n и b (1 ≤ n, b ≤ 2000) — количество дней и начальное количество денег в бурлях. В следующей строке записано n целых чисел ai (1 ≤ ai ≤ 2000) — цены марсианских долларов.

Выходные данные

Выведите одно число — какую наибольшую сумму денег в бурлях Вася может получить к концу n-го дня.

B. Гильдия художников

дп Перебор реализация *1300

Знаменитое объединение художников «Калевич жив!» поставило на поток производство шедевров. Объединение состоит из n художников, которые решили следующим образом организовать свою работу.

Каждый из художников будет использовать только один закрепленный за ним цвет. Цвета для всех художников различны, будем считать что первый художник использует первый цвет, второй художник — второй цвет, и так далее. Каждый шедевр будет содержать все эти цвета. Чтобы наложить j-й цвет на i-й шедевр, j-му художнику потребуется tij единиц времени.

Во всем нужен порядок, поэтому работа художников упорядочена по следующим правилам:

  • каждый шедевр сначала обрабатывается первым художником, потом вторым и т.д., то есть после окончания обработки j-м художником шедевр должен быть обработан (j + 1)-м (если j < n);
  • каждый из художников работает над шедеврами по порядку: сначала работает над первым шедевром, потом над вторым и так далее;
  • каждый художник может одновременно работать не более чем над одним шедевром, но времени на отдых им не требуется;
  • как только j-й художник заканчивает работу над шедевром, тот мгновенно передается следующему художнику.

Считая, что художники приступят к работе в момент времени 0, найдите для каждого шедевра момент времени, когда он будет готов к продаже.

Входные данные

В первой строке входных данных записаны целые числа m, n (1 ≤ m ≤ 50000, 1 ≤ n ≤ 5), где m — количество шедевров, а n — количество художников. Далее следуют описания шедевров по одному в строке. Каждая из строк содержит по n целых чисел ti1, ti2, ..., tin (1 ≤ tij ≤ 1000), где tij — время работы j-го художника над i-м шедевром.

Выходные данные

Выведите последовательность из m целых чисел r1, r2, ..., rm, где ri — момент окончания работы n-го художника над i-м шедевром.

C. Взлом сейфа

Конструктив Перебор *2200

Вам предстоит решить простую задачу — взломать сейф. На электронном кольце сейфа по кругу отображаются четыре натуральных числа. Вам известно, что если все четыре числа станут равными единице, то сейф будет вскрыт. С помощью интеллектуальной системы ввода можно выполнять следующие кодовые операции: выбрать два соседних числа и увеличить оба на единицу; выбрать два соседних четных числа и поделить их на два. Вот и все. Взломайте сейф!

Входные данные

Единственная строка входного файла содержит четыре разделенных пробелом натуральных числа, каждое не больше 109 — защитные числа сейфа в последовательном порядке.

Выходные данные

Выведите "-1" (без кавычек), если сейф взломать невозможно. Иначе выведите последовательность операций (каждую на отдельной строчке), которые приводят к взлому. Количество операций не требуется минимизировать, но оно не должно превосходить 1000. Будем считать, что числа на входе стоят на позициях от 1 до 4. Каждая операция задается двумя символами. Если это деление, то первый символ — '/', если сложение — '+'. Второй символ задает позицию первого из двух чисел в последовательном порядке (см. примеры).

Если решений несколько, выведите любое.

D. Биатлонная трасса

Бинарный поиск дп Конструктив Перебор Структуры данных *2300

Недавно состоялось официальное заявление мирового олимпийского комитета, согласно которому зимние Олимпийские игры 2030 года пройдут в Томске. Городские власти решили основательно подготовиться к проведению олимпиады и как можно раньше построить все необходимые олимпийские объекты. Первой построена будет биатлонная трасса.

Для строительства биатлонной трассы был выделен участок земли, представляющий собой прямоугольник, разбитый на n × m одинаковых квадратов. Каждый квадрат имеет координаты: номер строки (от 1 до n), в которой он находится, и номер столбца (от 1 до m), в котором он находится. Более того, каждый из квадратов характеризуется своей высотой. В ходе спортивных состязаний биатлонисты будут вынуждены передвигаться из одного квадрата в другой. Если перемещение происходит из более высокого квадрата в более низкий, то биатлонист совершает спуск. Если биатлонист перемещается из более низкого квадрата в более высокий, то он совершает подъем. Если биатлонист перемещается между двумя квадратами с одинаковой высотой, то он двигается по ровной местности.

Биатлонная трасса должна представлять собой границу некоторой прямоугольной области выделенного земельного участка, по которой биатлонисты будут двигаться в направлении движения по часовой стрелке. Известно, что на одно перемещение по ровной местности среднестатистический биатлонист тратит tp секунд, на один подъем — tu секунд, на один спуск — td секунд. Томская администрация хочет выбрать трассу таким образом, чтобы время ее прохождения среднестатистическим биатлонистом было как можно ближе к t секундам. Другими словами, разность времени ts прохождения выбранной трассы и t должна быть минимальна.

Для более четкого понимания можно рассмотреть первый пример входных данных. В этом примере n = 6, m = 7, а администрация хочет, чтобы время прохождения трассы было как можно ближе к t = 48 секундам, причем tp = 3, tu = 6 и td = 2. Если рассмотреть показанный стрелками на изображении прямоугольник, то при движении по его границе по часовой стрелке у среднестатистического биатлониста уйдет ровно 48 секунд. Левый верхний угол этой трассы расположен в квадрате с номером строки 4 и номером столбца 3, а правый нижний — в квадрате с номером строки 6 и номером столбца 7.

Администрация, помимо всего прочего, хочет, чтобы все стороны прямоугольника, по границе которого будут двигаться биатлонисты, состояли не менее чем из трех квадратов и полностью размещалась внутри выделенного земельного участка.

Вас привлекли для написания программы, которая для заданного земельного участка и всех необходимых временных величин найдет наиболее подходящий прямоугольник для создания биатлонной трассы. Если таких прямоугольников несколько — разрешается вывести любой из них.

Входные данные

В первой строке входных данных содержатся три целых числа n, m и t (3 ≤ n, m ≤ 300, 1 ≤ t ≤ 109) — размеры земельного участка и желательное время прохождения.

Во второй строке так же содержатся три целых числа tp, tu и td (1 ≤ tp, tu, td ≤ 100) — время прохождения среднестатистическим биатлонистом ровного участка трассы, подъема и спуска соответственно.

Далее следует n строк по m целых чисел, задающих высоты каждого из квадратов выделенного земельного участка. Каждое из значений высот — целое положительное число, не превышающее 106.

Выходные данные

В единственной строке выходных данных требуется вывести четыре целых положительных числа — номер строки и номер столбца левого верхнего угла, а также номер строки и номер столбца правого нижнего угла выбранного для трассы прямоугольника.

A. Сережа и обмены

Перебор сортировки *1500

Как обычно, у Сережи есть массив a, элементами которого являются целые числа: a[1], a[2], ..., a[n]. Введем обозначения:

Операцией обмена назовем следующую последовательность действий:

  • выбрать два индекса i, j (i ≠ j);
  • выполнить присвоения tmp = a[i], a[i] = a[j], a[j] = tmp.

Какое максимальное значение функции m(a) может получить Сережа, если ему разрешается выполнить не более k операций обмена?

Входные данные

Первая строка содержит два целых числа n и k (1 ≤ n ≤ 200; 1 ≤ k ≤ 10). Следующая строка содержит n целых чисел a[1], a[2], ..., a[n] ( - 1000 ≤ a[i] ≤ 1000).

Выходные данные

В единственную строку выведите максимальное значение m(a), которое может получить Сережа, выполнив не более k обменов.

D. Путешествие

Конструктив Перебор реализация *2000

Территория Берляндии представляет собой прямоугольное поле n × m клеток. Король Берляндии живет в столице, расположенной в верхней левой клетке (1, 1). Нижняя правая клетка имеет координаты (n, m). Однажды король решил объехать всю страну и вернуться назад в столицу, побывав в каждой клетке (кроме столицы) ровно один раз. В столице король должен побывать ровно два раза — в самом начале и в самом конце путешествия. Король может переходить только в соседние по стороне клетки. Однако королевский советник сказал, что, возможно, у короля не получится это сделать. Но есть выход — построить систему односторонних телепортов между некоторыми клетками так, чтобы король сумел осуществить задуманное. В одну клетку можно установить не более одного телепорта, каждый телепорт можно использовать сколько угодно раз, но при каждом использовании он ведет в одну и ту же, заранее заданную для каждого телепорта в отдельности клетку. Когда король приходит в клетку, где есть телепорт, он сам выбирает, будет ли он пользоваться телепортом. Какое наименьшее количество телепортов необходимо построить, чтобы король смог успешно совершить запланированное путешествие? Также требуется составить для короля маршрут путешествия.

Входные данные

В первой строке через пробел записано два целых числа n и m (1 ≤ n, m ≤ 100, 2 ≤  n · m) — размеры поля. Верхняя левая клетка имеет координаты (1, 1), а нижняя правая — (n, m).

Выходные данные

В первой строке выведите целое число k — минимальное количество телепортов. Далее выведите k строк по 4 целых числа x1 y1 x2 y2 (1 ≤ x1, x2 ≤ n, 1 ≤ y1, y2 ≤ m) — координаты клетки, в которую ставится телепорт (x1, y1), и координаты клетки, куда ведет телепорт (x2, y2).

Далее выведите nm + 1 строк по два числа — координаты клеток, в порядке их обхода королем. Маршрут должен начинаться и заканчиваться в (1, 1). Король может переходить в соседние по стороне клетки, а так же в клетки, куда ведет телепорт. При этом он должен побывать в столице ровно 2 раза, а во всех остальных клетках — ровно по одному разу.

E. Гонка

Перебор реализация *2300

Сегодня в Берляндии проходят автогонки. Трасса представляет собой прямую дорогу длиной s километров. В гонке участвует n машин, все они стартуют одновременно в самом начале трассы. Для каждой машины известно ее поведение во время гонки — система отрезков, на каждом из которых скорость машины постоянна. j-ый отрезок у i-ой машины — пара (vi, j, ti, j), где vi, j — скорость машины на всем отрезке в километрах в час, ti, j — сколько часов машина ехала с такой скоростью. Отрезки заданы в последовательном порядке.

Ваша задача — выяснить, сколько обгонов произошло за время гонки. Обгоном считается ситуация, когда одна машина догоняет и опережает другую. Известно, что все обгоны происходят мгновенно, то есть не существует отрезка времени положительной длины, в течение которого какие-то две машины едут «вместе». В один момент времени в одной и той же точке на трассе может произойти несколько обгонов. В этом случае их все следует учитывать отдельно. Встречи машин на старте и на финише не считаются обгонами.

Входные данные

В первой строке записано два целых числа n и s (2 ≤ n ≤ 100, 1 ≤ s ≤ 106) — количество машин и длина дороги в километрах. Далее следует n строк — описание системы отрезков для каждой машины. Каждое описание начинается с целого числа k (1 ≤ k ≤ 100) — количество отрезков в системе. Далее через пробел записано k пар чисел, каждая пара — скорость и длительность отрезка. Эти числа — целые положительные, не превосходящие 1000. Гарантируется, что сумма длин всех отрезков (в километрах) для каждой машины равна s, и все обгоны происходят мгновенно.

Выходные данные

Выведите одно число — количество обгонов, произошедших во время гонки.

B. Игра с шарами

Перебор *1400

Яхуб готовится к международной олимпиаде по программированию. А лучшая подготовка — это играть в Zuma-подобную игру!

В этой игре n шариков лежат в ряд. Каждый шарик окрашен в один из k цветов. Изначально в ряду нет трех или более подряд лежащих шариков одного цвета. У Яхуба есть один шар цвета x. Он может поместить свой шар в любое место ряда (даже между двумя шариками). Если в какой-то момент времени в ряду есть три или более лежащих подряд шариков одного цвета, они немедленно уничтожаются. Это правило применяется, возможно, несколько раз.

Например, если у Яхуба есть ряд шариков [черный, черный, белый, белый, черный, черный] и белый шарик, он может поместить свой шарик между двумя белыми шариками. Затем три белых шарика уничтожаются, после уничтожения белых шариков четыре черных шарика теперь лежат подряд, поэтому все они уничтожаются. В итоге ряд не будет содержать шариков, то есть Яхуб уничтожит все 6 шариков.

Яхуб хочет уничтожить как можно больше шариков. Вам дано описание ряда шариков и цвет шарика Яхуба. Помогите Яхубу подготовиться к международной олимпиаде по программированию, скажите ему, какое максимальное количество шариков из ряда он может уничтожить.

Входные данные

В первой строке записано три целых числа: n (1 ≤ n ≤ 100), k (1 ≤ k ≤ 100) и x (1 ≤ x ≤ k). В следующей записано n целых чисел через пробел c1, c2, ..., cn (1 ≤ ci ≤ k). Число ci означает, что i-й шар в ряду имеет цвет ci.

Гарантируется, что начальный ряд шариков никогда не будет содержать три или более подряд лежащих шариков одного цвета.

Выходные данные

Выведите единственное целое число — максимальное количество шариков, которые может уничтожить Яхуб.

B. Очередь в душ

Перебор реализация *1200

Много студентов живут в общежитии. Общежитие — это большой мир веселых развлечений и возможностей, но у него есть свои минусы.

В общежитии всего один душ, а желающих принять душ утром, конечно, больше. Поэтому каждое утро перед душем общежития образуется очередь из пяти человек. Как только душ открывается, первый человек из очереди заходит в душ. Спустя некоторое время, когда первый зашедший выходит из душа, следующий заходит в душ. Этот процесс продолжается, пока все в очереди не примут душ.

Душ — дело не быстрое, поэтому во время ожидания студенты общаются. В каждый момент времени студенты общаются парами: (2i - 1)-й человек в очереди (на текущий момент) общается с (2i)-м.

Рассмотрим этот процесс подробнее. Обозначим людей цифрами от 1 до 5. Пусть изначально очередь имеет вид 23154 (человек 2 стоит в начале очереди). Тогда перед открытием душа 2 общается с 3, 1 общается с 5, 4 ни с кем не общается. Затем 2 заходит в душ. Пока 2 принимает душ, 3 и 1 общаются, а также 5 и 4 общаются. Затем 3 заходит в душ. Пока 3 принимает душ, 1 и 5 общаются, 4 ни с кем не общается. Затем 1 заходит в душ, а пока он принимает душ, 5 и 4 общаются. Затем 5 заходит в душ, а затем 4 заходит в душ.

Известно, что если студенты i и j общаются, то радость студента i увеличивается на gij, а радость студента j увеличивается на gji. Вам надо найти такой изначальный порядок студентов в очереди, чтобы суммарная радость всех студентов в итоге была максимальной. Стоит заметить, что некоторые студенты могут общаться несколько раз. В приведенном выше примере студенты 1 и 5 общаются пока ждут открытия душа, а также пока 3 принимает душ.

Входные данные

Входные данные состоят из пяти строк, в каждой строке записано пять целых чисел разделенных пробелом: j-е число в i-й строке обозначает gij (0 ≤ gij ≤ 105). Гарантируется, что gii = 0 для всех i.

Считайте, что студенты пронумерованы от 1 до 5.

Выходные данные

Выведите единственное целое число — максимально возможную суммарную радость студентов.

Примечание

В первом примере оптимальное расположение очереди 23154. В таком случае суммарная радость равна:

(g23 + g32 + g15 + g51) + (g13 + g31 + g54 + g45) + (g15 + g51) + (g54 + g45) = 32
.

B. Футбольная форма

жадные алгоритмы Перебор реализация *1200

Рассмотрим футбольный турнир, в котором участвует n команд. У каждой команды есть две формы: домашняя и гостевая. Домашняя форма i-й команды имеет цвет xi, а гостевая форма — цвет yi (xi ≠ yi).

В турнире каждая команда играет с каждой ровно один матч дома и ровно один матч на выезде (всего n(n - 1) матчей). Команда, играющая дома, традиционно играет матч в домашней форме. Команда, играющая в гостях, по возможности играет в гостевой форме. Однако, если цвет гостевой формы команды, играющей в гостях, совпадает с цветом домашней формы, команды играющей дома, то команды будет сложно отличить на поле друг от друга. В этом случае команда, играющая в гостях, в качестве исключения играет матч в домашней форме.

Посчитайте, сколько матчей в турнире каждая команда сыграет в домашней форме, а сколько в гостевой?

Входные данные

В первой строке задано единственное целое число n (2 ≤ n ≤ 105) — количество команд. Далее в n строках задано описание команд. В i-й строке через пробел заданы два целых числа xi, yi (1 ≤ xi, yi ≤ 105xi ≠ yi) — номера цветов домашней и гостевой форм i-й команды соответственно.

Выходные данные

Для каждой команды в отдельной строке выведите через пробел два целых числа — количество матчей, которое эта команда сыграет в домашней и в гостевой формах соответственно. Ответы для команд выводите в порядке следования команд во входных данных.

A. Подарок Китахара Харуки

Перебор реализация *1100

Китахара Харуки купил n яблок для Тоума Казусы и Огисо Сетсуны. Он хочет разделить все купленные яблоки между друзьями.

Каждое яблоко весит 100 или 200 грамм. Конечно, Китахара Харуки не хочет обидеть ни одного из своих друзей. Следовательно, суммарный вес яблок, выданных Тоума Казусе, должен равняться суммарному весу яблок, выданных Огисо Сетсуне.

Но, к сожалению, Китахара Харуки не захватил с собой нож, поэтому он не может разрезать какое-то из яблок на части. Помогите герою определить, существует ли способ поровну разделить все яблоки между его друзьями?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100) — количество яблок. Во второй строке записано n целых чисел w1, w2, ..., wn (wi = 100 или wi = 200), где wi равняется весу i-го яблока.

Выходные данные

Выведите в единственной строке «YES» (без кавычек), если разделить яблоки поровну между друзьями Харуки возможно. В противном случае выведите «NO» (без кавычек).

Примечание

В первом тестовом примере Китахара Харуки может дать первое и последнее яблоко Огисо Сетсуне, а среднее — Тоума Казусе.

D. Специальная сетка

дп жадные алгоритмы Перебор *2000

Задана сетка размера n × m, некоторые узлы которой черные, а остальные белые. Более того, сетка не совсем обычная — в каждом единичном квадрате сетки проведены диагонали.

На рисунке ниже изображен пример такой сетки размера 3 × 5. Четыре узла этой сетки черные, остальные 11 узлов белые.

Требуется посчитать количество таких треугольников на заданной сетке, что:

  • их углы совпадают с белыми узлами, а площадь ненулевая;
  • все стороны проходят по линиям сетки (горизонтальным, вертикальным или диагональным);
  • никакая сторона не содержит черных узлов.
Входные данные

В первой строке записаны два целых числа n и m (2 ≤ n, m ≤ 400). В каждой следующих n строк содержится по m символов (нулей и единиц) — описание сетки. Если j-й символ в i-й строке равен нулю, значит узел на i-й горизонтальной линии и на j-й вертикальной линии покрашен в белый цвет. Иначе этот символ покрашен в черный цвет.

Горизонтальные линии нумеруются от единицы сверху вниз, вертикальные линии нумеруются от единицы слева направо.

Выходные данные

Выведите единственное целое число — количество требуемых треугольников.

Примечание

На рисунке ниже красным и синим цветами выделены треугольники, которые считаются в ответе (это не все требуемые треугольники, а только два из них). Зеленым выделен один из неподходящих треугольников. Он не подходит, поскольку не все его стороны проходят по линиям сетки.

F. Banners

дп Перебор Структуры данных *3000

Все современные мобильные приложения делятся на платные и бесплатные. Даже разработчики одного приложения часто выпускают две версии: платную версию без рекламы и бесплатную версию с рекламой.

Предположим, что платная версия приложения стоит p (p — целое число) рублей, а бесплатная версия приложения содержит c рекламных баннеров. Каждого пользователя можно охарактеризовать двумя целыми числами: ai — сколько рублей этот пользователь не пожалеет за платную версию приложения, и bi — сколько баннеров он готов терпеть в бесплатной версии приложения.

Поведение каждого пользователя будем считать строго детерминированным:

  • если для пользователя i значение bi не меньше c, тогда он пользуется бесплатной версией,
  • иначе, если значение ai не меньше p, то он покупает платную версию без рекламы,
  • иначе пользователь просто не пользуется приложением.

Каждый пользователь бесплатной версии приложения приносит прибыль c × w рублей. Каждый пользователь платной версии приложения приносит прибыль p рублей.

Ваша задача — помочь разработчикам приложения оптимально выбрать параметры p и c. А именно, считая, что известны все характеристики пользователей, для каждого значения c от 0 до (max bi) + 1 определить максимальную прибыль от приложения и соответствующий параметр p.

Входные данные

В первой строке записаны два целых числа n и w (1 ≤ n ≤ 105; 1 ≤ w ≤ 105) — количество пользователей и прибыль с одного баннера. В каждой из следующих n строк записано два целых числа ai и bi (0 ≤ ai, bi ≤ 105) — характеристики i-го пользователя.

Выходные данные

Выведите (max bi) + 2 строки, в i-й строке выведите два целых числа: pay — максимальная полученная прибыль при c = i - 1, p (0 ≤ p ≤ 109) — соответствующая оптимальная стоимость. Если существует несколько оптимальных решений, разрешается вывести любое.

C. Деву и разбиение массива

Конструктив Перебор реализация теория чисел *1700

Деву еще маленький, поэтому он очень любит играть. Весьма удивительно, но играть он предпочитает только с массивами. Однажды во время игры ему в голову пришел интересный вопрос, который Деву сам для себя разрешить не мог. Сможете ли вы найти ответ на этот вопрос?

Дан массив, состоящий из различных целых чисел. Возможно ли так разбить весь массив на k непересекающихся непустых частей, чтобы ровно p частей имели четную сумму элементов (каждая из этих p частей должна иметь четную сумму), а оставшиеся k - p частей имели нечетную сумму элементов? (обратите внимание, что элементы какой-то части не обязаны идти в массиве подряд).

Если существует способ разбить массив описанным образом, требуется вывести также и само разбиение.

Входные данные

В первой строке записано три целых числа через пробел n, k, p (1 ≤ k ≤ n ≤ 105; 0 ≤ p ≤ k). В следующей строке записано n различных целых чисел через пробел, представляющих содержимое массива a: a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

В первой строке выведите «YES» (без кавычек), если можно разбить массив требуемым способом. В противном случае выведите «NO» (без кавычек).

Если требуемое разбиение существует, выведите k строк вслед за первой. В i-й из них должно быть записано содержимое i-й части. Выводите содержимое части в строке следующим образом: сперва выведите количество элементов в этой части, затем выведите все элементы части в произвольном порядке. Сумма элементов у ровно p из всех выведенных частей должна быть четной. В каждой из оставшихся k - p частей сумма должна быть нечетная.

Так как может быть несколько способов разбиения, разрешается вывести любое корректное разбиение.

I. Игрушки

Комбинаторика Перебор *2300

Маленькая девочка Маша любит раскладывать свои игрушки в кучки на полу. А еще она очень не любит, когда кто-нибудь трогает ее игрушки. Как-то раз Маша аккуратно разложила все свои n игрушек в несколько кучек, а затем ее старший брат Саша пришел и собрал все кучки в одну. Маша увидела это, страшно расстроилась и принялась плакать. У Саши никак не получается успокоить Машу, а скоро придет мама и ему влетит за то, что сестренка плачет. Поэтому он решает восстановить разложение игрушек по кучкам. Однако он совершенно не помнит, как лежали игрушки. Маша, конечно, помнит это, но она еще не умеет говорить и может помочь Саше лишь тем, что радостно завопит, когда он выложит игрушки именно так, как они и лежали. Значит, Саше придется раскладывать игрушки всеми возможными способами до тех пор, пока Маша не узнает нужное разложение. Взаимное расположение кучек и игрушек в каждой кучке не важно, поэтому два способа разложить игрушки считаются различными, если найдутся две такие игрушки, которые при одном из способов лежат в одной и той же кучке, а при другом нет. Саша ищет наиболее быстрый путь перебора всех способов, потому что скоро придет мама. За одно действие Саша может взять игрушку из любой кучки и переложить ее в любую другую кучку (возможно, при этом появится новая кучка или одна из кучек исчезнет). Саша хочет найти такую последовательность действий, что в процессе все способы разложить игрушки на кучки будут перебраны ровно по одному разу. Помогите Саше. Изначально, как мы помним, все игрушки находятся в одной кучке.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 10) — число игрушек.

Выходные данные

В первой строке выведите количество различных способов разложить игрушки на кучки. Далее выведите все способы разложить игрушки на кучки в том порядке, в каком их должен перебирать Саша (т.е. каждый следующий способ должен получаться из предыдущего описанной в условии операцией). Каждый способ надо выводить следующим образом. В каждой кучке игрушки надо упорядочить по возрастанию номера. После этого надо упорядочить кучки по возрастанию номеров первых игрушек в них. Каждый способ выводите в отдельной строке. См. пример для уточнения формата выходных данных. Если решений несколько, выведите любое из них.

A. Боря и Ханаби

битмаски Перебор реализация *1700

Вы когда-нибудь играли в Ханаби? Если нет, то вам обязательно стоит попробовать! В этой задаче пойдет речь об упрощенной версии этой игры.

Всего в игре 25 типов карт (5 различных цветов и 5 различных значений). У Бори на руках n карт. Игра несколько усложняется тем, что эти карты видят все, кроме него. Из информации, которая была доступна Боре на протяжении игры, он смог вычислить, какие именно карты у него есть, но он ничего не подозревает о порядке, в котором они лежат. Заметим, что у Бори может быть несколько одинаковых карт (и про каждый из 25 типов карт он знает, сколько именно у него карт этого типа).

Цель других игроков — сделать так, чтобы про каждую свою карту Боря смог сказать, какого она цвета и какое число на ней написано. Для этого другие игроки могут делать подсказки. Подсказки бывают двух типов: по цвету и по значению.

Подсказка по цвету происходит следующим образом. Игрок называет некоторый цвет и показывает на все карты этого цвета.

Аналогично происходит и подсказка по значению. Игрок называет некоторое число и показывает на все карты, на которых написано это число.

Определите, какое наименьшее количество подсказок должны сделать другие игроки, чтобы про каждую карту Боре стало понятно, какого она цвета и какое число на ней написано.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100) — количество карт у Бори. В следующей строке через пробел следуют описания n карт. Описание каждой карты состоит ровно из двух символов. Первый символ обозначает цвет (всего на этой позиции может стоять пять различных букв — R, G, B, Y, W). Второй символ обозначает значение карты (это цифра от 1 до 5). Боря не знает порядок, в котором карты выложены на стол.

Выходные данные

Выведите единственно число — наименьшее количество подсказок, которые должны сделать другие игроки.

Примечание

В первом примере Боря и так знает про каждую карту, что она зеленая тройка.

Во втором примере можно показать все четверки и все красные карты.

В третьем примере нужно сделать подсказки про любые четыре цвета.

B. Коля и тандемный повтор

Перебор реализация Строки *1500

На день рождения Коле подарили строку s, состоящую из маленьких латинских букв. Он, недолго думая, дописал к ней еще k символов справа.

После этого пришел Боря и сказал, что в новой строке, в качестве подстроки, есть тандемный повтор длины l. Насколько большим могло быть l?

Определение тамдемного повтора дано в примечании.

Входные данные

В первой строке содержится s (1 ≤ |s| ≤ 200). Строка состоит только из маленьких английских букв. Во второй строке содержится число k (1 ≤ k ≤ 200) — количество дописанных символов.

Выходные данные

Выведите одно число — максимальную длину тандемного повтора, который мог встретится в новой строке.

Примечание

Тандемным повтором длины 2n называется строка s, в которой для любой позиции i (1 ≤ i ≤ n) выполняется si = si + n.

В первом примере Коля мог получить строку aabaab, во втором — aaabbbbbb, в третьем — abracadabrabracadabra.

B. DZY любит модификации

жадные алгоритмы Перебор Структуры данных *2000

Как мы знаем, DZY любит играть. Однажды он решил поиграть с матрицей размера n × m. Точнее, он решил модифицировать матрицу, используя ровно k операций.

Каждая операция может быть одной из двух следующих:

  1. Разрешается выбрать некоторую строку матрицы и уменьшить каждый элемент этой строки на p. Такая операция доставляет DZY удовольствие в размере, равном сумме элементов строки до уменьшения.
  2. Разрешается выбрать некоторый столбец матрицы и уменьшить каждый элемент этого столбца на p. Такая операция доставляет DZY удовольствие в размере, равном сумме элементов столбца до уменьшения.

DZY хочет знать, какое максимальное суммарное удовольствие он может получить, выполнив ровно k модификаций? Пожалуйста, помогите ему посчитать это значение.

Входные данные

В первой строке записано четыре целых числа через пробел: n, m, k и p (1 ≤ n, m ≤ 103; 1 ≤ k ≤ 106; 1 ≤ p ≤ 100).

Затем следует n строк. В каждой строке записано по m целых чисел aij (1 ≤ aij ≤ 103) — элементы текущей строки матрицы.

Выходные данные

Выведите единственное целое число — максимальное суммарное удовольствие, которое DZY может получить.

Примечание

В первом примере можно выполнить модификации: столбец 2, строка 2. После этого матрица будет выглядеть так:


1 1
0 0

Во втором примере можно выполнить модификации: столбец 2, строка 2, строка 1, столбец 1, столбец 2. После этого матрица будет выглядеть так:


-3 -3
-2 -2

D. Про таблицу умножения

Бинарный поиск Перебор *1800

Бизон-Чемпион не только обаятельный, но и очень умный.

Пока одни учили обычную таблицу умножения, Бизон-Чемпион развлекался по-своему. Бизон-Чемпион рисовал таблицу умножения размера n × m, где элемент, стоящий на пересечении i-й строки и j-го столбца, равняется i·j (строки и столбцы таблицы нумеруются, начиная от единицы). Затем его спрашивали, какое число в этой таблице k-е по величине? Бизон-Чемпион отвечал всегда правильно и не задумываясь. Сможете ли вы повторить его успех?

Рассмотрим описанную таблицу умножения. Если выписать все n·m чисел из этой таблицы в порядке неубывания, то число выписанное k-м называется k-м по величине.

Входные данные

В единственной строке содержатся целые числа n, m и k (1 ≤ n, m ≤ 5·105; 1 ≤ k ≤ n·m).

Выходные данные

Выведите k-е по величине число в таблице умножения n × m.

Примечание

Таблица умножения 2 × 3 выглядит следующим образом:


1 2 3
2 4 6

E. Про делители

Перебор поиск в глубину и подобное реализация теория чисел *2200

Бизон-Чемпион не только дружелюбный, но и любит программировать.

Определим функцию f(a), где a последовательность целых положительных чисел. Функция f(a) возвращает следующую последовательность: сначала идут все делители a1 в порядке возрастания, затем идут все делители a2 в порядке возрастания, и так далее до последнего элемента последовательности a. Например f([2, 9, 1]) = [1, 2, 1, 3, 9, 1].

Определим последовательность Xi, для целых i (i ≥ 0): X0 = [X] ([X] — это последовательность, состоящая из одного числа X), Xi = f(Xi - 1) (i > 0). Например, при X = 6 получится X0 = [6], X1 = [1, 2, 3, 6], X2 = [1, 1, 2, 1, 3, 1, 2, 3, 6].

Для заданных чисел X и k найдите последовательность Xk. Так как ответ может быть слишком большим, найдите только первые 105 элементов этой последовательности.

Входные данные

В единственной строке содержатся два целых числа, разделенных пробелом — X (1 ≤ X ≤ 1012) и k (0 ≤ k ≤ 1018).

Выходные данные

Выведите элементы последовательности Xk в одной строке через пробел. Если количество элементов превосходит 105, то выведите только первые 105 элементов.

C. Предскажите исход игр

математика Перебор реализация *1700

Футбольный турнир состоит из n игр. В нем участвуют три команды. На данный момент команды уже сыграли k матчей.

Вы ярый футбольный фанат, по случайности пропустивший все k игр. К счастью, вы вспомнили прогноз одного вашего друга на первые k игр. Друг не назвал точное количество побед каждой команды по итогу k матчей. Вместо этого он предполагал, что модуль разности между количеством побед первой и второй команды будет равен d1, а второй и третьей — d2.

Вы не хотите, чтобы какая-то команда стала победителем турнира, иными словами, у каждой команды должно быть одинаковое количество побед по завершении n игр. Поэтому вам хочется узнать, может ли турнир пройти так, что предсказание вашего друга сбудется, и при этом в итоге все команды будут иметь одинаковое количество побед?

Обратите внимание, что в этом турнире матч не может закончиться ничьей.

Входные данные

В первой строке записано целое число t (1 ≤ t ≤ 105) — количество тестовых данных.

В каждой из следующих t строк записаны четыре целых числа через пробел: n, k, d1, d2 (1 ≤ n ≤ 1012; 0 ≤ k ≤ n; 0 ≤ d1, d2 ≤ k).

Выходные данные

Выведите "yes", если у турнира может не быть победителя. В противном случае, выведите "no" (без кавычек).

Примечание

Пример 1. Еще не состоялось ни одного матча (k = 0, d1 = 0, d2 = 0). Один из возможных турниров — это турнир с матчами (1-2, 2-3, 3-1), где каждая команда выигрывает ровно один раз.

Пример 2. Вы пропустили все игры (k = 3). Так как d1 = 0 и d2 = 0, достаточно взять турнир из предыдущего примера.

Пример 3. Вы пропустили 4 матча, и d1 = 1, d2 = 0. Первые 4 матча могли бы быть такими: 1-2 (победа 2-го), 1-3 (победа 3-го), 1-2 (победа 1-го), 1-3 (победа 1-го). На данный момент первая команда имеет 2 победы, вторая команда имеет 1 победу, третья команда имеет 1 победу. Два оставшихся матча могут быть такими: 1-2 (победа 2-го), 1-3 (победа 3-го). В итоге все команды имеют одинаковое количество побед (2 победы).

A. Eevee

Перебор реализация Строки *1000

Вы решаете кроссворд из задачи K с IPSC 2014. Вы уже решили почти весь кроссворд, осталось не разгаданным одно слово: в кого эволюционирует Eevee? Вы не очень хорошо знаете покемонов, но быстрый поиск в интернете помог вам узнать, что Eevee может эволюционировать в восемь разных покемонов: Vaporeon, Jolteon, Flareon, Espeon, Umbreon, Leafeon, Glaceon и Sylveon.

Вы знаете длину слова в кроссворде, кроме того, вам уже известны некоторые буквы. Также известно, что этой длине и известным буквам удовлетворяет только один из покемонов, в которых эволюционирует Eevee. Ваша задача найти этого покемона.

Входные данные

Первая строка содержит целое число n (6 ≤ n ≤ 8) – длину строки.

Следующая строка содержит строку, состоящую из n символов, каждый из которых либо строчная латинская буква (если соответствующая буква известна), либо символ точки (если соответствующая буква не известна).

Выходные данные

Выведите имя покемона, в которого Eevee может эволюционировать, который подходит под длину слова и известные буквы из входных данных. Используйте только строчные латинские буквы для вывода имени (в частности, не начинайте имя с заглавной буквы).

Примечание

Имена покемонов из задачи в формате, удобном для вставки в ваше решение:

["vaporeon", "jolteon", "flareon", "espeon", "umbreon", "leafeon", "glaceon", "sylveon"]

{"vaporeon", "jolteon", "flareon", "espeon", "umbreon", "leafeon", "glaceon", "sylveon"}

B. Ломаная на четырех точках

геометрия Деревья Конструктив Перебор *1800

Вам дана прямоугольная сетка с целочисленными точками с координатами от (0, 0) до (n, m) включительно. Вам надо выбрать ровно 4 разных точки и построить из них ломаную, возможно, с самопересечениями и самокасаниями. Ваша задача — найти самую длинную такую ломаную.

Ломаная линия, построенная из точек p1, p2, p3, p4, состоит из трех отрезков p1p2, p2p3, p3p4, и ее длина определена как сумма длин этих отрезков.

Входные данные

Единственная строка входных данных содержит два целых числа n и m (0 ≤ n, m ≤ 1000). Гарантируется, что сетка содержит хотя бы четыре различных точки.

Выходные данные

Выведите 4 строки, по два целых числа на каждой — координаты точек p1, p2, p3, p4, образующих самую длинную ломаную соответственно.

Проверяющая программа сравнивает длину ответа участника и длину ответа жюри с точностью 10 - 6.

B. Маленькая пони и ларец гармонии

битмаски дп Перебор *2000

Принцесса Twilight пришла к Celestia в замок, где раньше жила Luna, чтобы исследовать ларец элементов гармонии.

Последовательность положительных целых чисел bi называется гармонической тогда и только тогда, когда наибольший общий делитель любых двух ее элементов равен 1. Согласно древней книге, ключ от ларца — это гармоническая последовательность bi, минимизирующая значение выражения:

Вам дана последовательность ai. Помогите принцессе Twilight найти ключ от ларца.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 100) — количество элементов в последовательностях a и b. Следующая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 30).

Выходные данные

Выведите ключ — последовательность bi, которая минимизирует сумму, описанную выше. Если существует несколько правильных последовательностей, выведите любую.

C. Выборы

Перебор *2100

Скоро выборы губернатора. Вы работаете на текущего губернатора, поэтому провели несколько опросов, в результате которых для каждого голосующего вы знаете: за кого он будет голосовать на выборах, и сколько нужно ему заплатить, чтобы он проголосовал за текущего губернатора. Какое минимальное количество денег придется потратить, чтобы текущий губернатор победил на выборах? Текущий губернатор победит на выборах, только если он наберет строго больше голосов, чем каждый из остальных кандидатов.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество голосующих в городе. В каждой из следующих n строк записано два целых числа ai и bi (0 ≤ ai ≤ 105; 0 ≤ bi ≤ 104), где ai обозначает номер кандидата, за которого будет голосовать i-й человек, а bi обозначает количество денег, которое требуется, чтобы подкупить его. Текущий губернатор имеет номер 0, поэтому, если ai = 0 (человек голосует за текущего губернатора), то и bi также равно 0.

Выходные данные

Выведите единственное целое число — минимальную сумму денег.

A. Игра с мячом

Перебор реализация *800

Воспитательница детского сада Наталья Павловна придумала новую развивающую игру с мячом. Эта игра не только развивает детишек в плане физического развития, но при этом еще обучает их счету.

Игра заключается в следующем. Детишки стоят по кругу. Условимся считать, что они пронумерованы числами от 1 до n по часовой стрелке и ребенок с номером 1 держит мяч. Вначале первый ребенок кидает мяч следующему за ним по кругу, т.е. ребенку с номером 2. Дальше ребенок с номером 2 кидает мяч ребенку, стоящему через одного, т.е. c номером 4, затем четвертый ребенок кидает мяч ребенку, стоящему через 2 от него, т.е. ребенку с номером 7, дальше мяч достается ребенку, стоящему через 3 от очередного, дальше — через 4 и т.д. Заметим, что при броске мяча может произойти переход через начало круга. Например, если n = 5, то после третьего броска мяч достанется снова ребенку с номером 2. Всего делается n - 1 бросок, и игра заканчивается.

Проблема заключается в том, что не всем детям в процессе игры достается мяч. Если ребенку не достается мяч, он очень расстраивается и плачет до тех пор, пока Наталья Павловна не даст ему конфетку. Поэтому Наталья Павловна просит вас помочь ей определить номера детишек, которым будет доставаться мяч после каждого броска.

Входные данные

В первой строке содержится целое число n (2 ≤ n ≤ 100) — количество детишек в кругу.

Выходные данные

В единственной строке выведите n - 1 число — номера детишек, которым будет доставаться мяч после каждого броска. Числа разделяйте пробелами.

A. Вася и носки

математика Перебор реализация *900

У Васи есть n пар носков. Утром каждого дня, собираясь в школу, Вася должен надеть пару носков. Вечером, прийдя со школы, Вася снимает надетые носки и выбрасывает их. Каждый m-й день (в дни с номерами m, 2m, 3m, ...) мама покупает Васе одну пару носков. Она делает это поздно вечером, поэтому Вася может надеть новые носки не раньше следующего дня. На сколько подряд идущих дней Васе хватит носков?

Входные данные

В единственной строке записано два целых числа n и m (1 ≤ n ≤ 100; 2 ≤ m ≤ 100), разделенные пробелом.

Выходные данные

Выведите единственное целое число — ответ на задачу.

Примечание

В первом примере первые два дня Вася будет носить носки, которые у него были изначально, затем на третий день будет носить носки, которые были куплены во второй день.

Во втором примере первые девять дней он будет носить носки, которые у него были изначально, затем три дня будет носить носки, которые были куплены в третий, шестой и девятый дни. Затем еще день будет носить носки, которые были куплены в двенадцатый день.

B. Димка и уравнение

математика Перебор реализация теория чисел *1500

Маленький Дима много баловался на уроке математики, и злой учитель Леонид Иванович в наказание ему придумал следующую задачу.

Найти все целочисленные решения уравнения x (0 < x < 109):

x = b·s(x)a + c, 

где a, b, c — некоторые заранее определенные константы, а функция s(x) обозначает сумму всех цифр в десятичном представлении числа x.

Учитель дает эту задачу Диме на каждом уроке, меняя только параметры уравнения: a, b, c. Диме надоело получать двойки, и он просит вас помочь ему решить эту нелегкую задачу.

Входные данные

В первой строке записаны три целых числа через пробел: a, b, c (1 ≤ a ≤ 5; 1 ≤ b ≤ 10000;  - 10000 ≤ c ≤ 10000).

Выходные данные

Выведите целое число n — количество найденных решений. Затем выведите n целых чисел в порядке возрастания — найденные решения заданного уравнения. Выводить нужно только целочисленные решения, большие нуля и строго меньшие, чем 109.

D. Витя и множество

Конструктив математика Перебор *2300

Маленький Витя очень любит теорию множеств (напомним, что множество — это набор чисел, в котором все числа попарно различны). Сегодня Витя хочет найти множество целых чисел S, обладающее следующими свойствами:

  • для всех x выполняется неравенство l ≤ x ≤ r;
  • 1 ≤ |S| ≤ k;
  • обозначим i-й по порядку элемент множества S как si; значение как можно меньше.

Помогите Вите найти описанное множество.

Входные данные

В первой строке через пробел записаны три целых числа l, r, k (1 ≤ l ≤ r ≤ 1012; 1 ≤ k ≤ min(106, r - l + 1)).

Выходные данные

Выведите минимально возможное значение f(S). Затем выведите мощность множества |S|. Затем сами элементы множества в любом порядке.

Если существует несколько оптимальных множеств, разрешается вывести любое.

Примечание

Операция обозначает операцию побитого исключающего ИЛИ. Другими словами, операцию XOR.

E. Роланд и роза

геометрия математика Перебор сортировки *2700

Роланд любит выращивать цветы. Недавно он вырастил красивую розу в точке (0, 0) декартовой системы координат. Роза настолько красива, что Роланд опасается, как бы силы зла не попытались украсть ее.

Чтобы защитить розу, Роланд хочет построить n защитных башен (будем считать, что башня это точка на плоскости) на расстоянии не более r от розы. Кроме того, Роланд считает, что башни должны быть построены в точках с целочисленными координатами, а сумма квадратов расстояний между всем парами башен должна быть как можно больше. Обратите внимание, что Роланд может построить несколько башен в одной и той же точке плоскости, также разрешается строить башни в точке (0, 0).

Помогите Роланду построить башни в целочисленных точках так, чтобы сумма квадратов расстояний между всеми башнями была максимально возможной. Обратите внимание, что под расстоянием в этой задаче понимается евклидово расстояние между точками.

Входные данные

В первой строке записаны два целых числа n и r (2 ≤ n ≤ 8; 1 ≤ r ≤ 30).

Выходные данные

В первой строке выведите целое число — максимально возможную сумму квадратов расстояний. В i-й из следующих n строк выведите два целых числа xi, yi — координаты i-й башни. Каждая башня должна находиться внутри или на границе окружности радиуса r. Обратите внимание, что несколько башен могут находиться в одной и той же точке плоскости, также башни могут находиться в точке (0, 0).

Если существует несколько подходящих оптимальных расстановок, выведите любую.

A. Яблов и простая задача

Перебор реализация *1000

Тостов придумал очень простую задачу. Он задал ее Яблову, но Яблов не может ее решить. Сможете ли вы ему помочь?

Дана шахматная доска размера n × n. В каждой клетке доски записан либо символ 'x', либо символ 'o'. Правда ли, что каждая клетка доски имеет четное число соседних клеток, содержащих символ 'o'? Две клетки доски называются соседними, если у них есть общая сторона.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100). Затем следует n строк, описывающих шахматную доску. В каждой строке записано по n символов ('x' или 'o') без пробелов.

Выходные данные

Выведите «YES» или «NO» (без кавычек) — ответ на вопрос задачи.

A. Caisa и сахар

Перебор реализация *1200

Caisa собирается провести вечеринку и хочет приготовить большой шоколадный торт для нее. Для этого он поехал в самый большой супермаркет города.

В супермаркете всего имеется n различных видов сахара. Caisa собирается купить один из этих видов, для этого у него есть s долларов. Но это еще не все! Оказалось, что в супермаркете очень необычная политика выдачи сдачи: вместо центов продавцы дают конфетки покупателям в качестве сдачи (1 конфетка = 1 цент). Конечно, количество выданных в качестве сдачи конфеток никогда не превышает 99, поскольку продавцы всегда стараются дать как можно больше долларов в сдаче (100 центов можно заменить одним долларом).

Какое максимальное количество конфеток в качестве сдачи Caisa может получить, если купит ровно один вид сахара? Обратите внимание, что Caisa не старается минимизировать стоимость покупки, она хочет получить как можно больше конфет.

Входные данные

В первой строке содержится два целых числа n, s (1 ≤ n, s ≤ 100).

В i-й из n следующих строк содержится два целых числа xi, yi (1 ≤ xi ≤ 100; 0 ≤ yi < 100), где xi обозначает количество долларов, а yi — количество центов, требуемых для покупки сахара i-го вида.

Выходные данные

Выведите единственное целое число — максимальное количество конфеток, которое можно получить, либо -1, если Caisa не сможет купить, ни один вид сахара.

Примечание

В первом тестовом примере, если Caisa купит четвертый вид сахара, то в качестве сдачи она получит 50 конфет.

B. Caisa и колонны

математика Перебор реализация *1100

Caisa уже купил сахар и теперь идет домой. Во время пути домой он решил пройти игру на своем мобильном телефоне.

В игре есть (n + 1) колонн, пронумерованных от 0 до n. Нулевая колонна имеет высоту 0, i(i > 0) колонна имеет высоту hi. Цель игры — добраться до n-й колонны, при этом единственное действие, которое может совершать игрок: перепрыгнуть с текущей колонны (обозначим ее номер переменной k) на следующую колонну (ее номер равен k + 1). После описанного прыжка энергия игрока увеличивается на hk - hk + 1 (если это значение меньше нуля, то игрок теряет соответствующее количество энергии). По правилам игры в любой момент времени энергия игрока должна быть неотрицательной.

Изначально Caisa стоит на нулевой колонне и имеет ноль единиц энергии. Также в игре есть специально оплачиваемая возможность: за один доллар игрок может увеличить высоту любой колонны на единицу. Caisa может использовать эту возможность несколько раз, но, конечно, он не хочет тратить слишком много денег. Какое минимальное количество денег ему придется потратить, чтобы пройти игру?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105). В следующей строке записаны n целых чисел h1, h2, ..., hn (1  ≤  hi  ≤  105), обозначающие высоты колонн.

Выходные данные

Выведите единственное целое число — минимальное количество денег, которое придется заплатить Caisa, чтобы пройти игру.

Примечание

В первом тестовом примере Caisa должен заплатить 4 доллара и увеличить высоту нулевой колонны на 4. В таком случае он сможет пройти игру.

E. Caisa и дерево

Деревья математика Перебор поиск в глубину и подобное теория чисел *2100

Caisa сейчас дома и его сын придумал для него простую задачку.

Задано корневое дерево, состоящее из n вершин, пронумерованных от 1 до n (вершина 1 — корень дерева). В каждой вершине записано некоторое значение. Требуется ответить на q запросов. Каждый запрос является одним из следующих:

  • Формат запроса «1 v». Выпишем последовательность вершин вдоль пути от корня до вершины v: u1, u2, ..., uk (u1 = 1; uk = v). Выведите такую вершину ui, что gcd(значение вершины ui, значение вершины v) > 1 и i < k. Если существует несколько таких вершин, выведите вершину с максимальным значением i. Если таких вершин вовсе нет, выведите -1.
  • Формат запроса «2 v w». Нужно изменить значение, записанное в вершине v, на w.

Вам заданы все запросы, помогите Caisa справиться с этой задачей.

Входные данные

В первой строке записаны два целых числа n, q (1 ≤ n, q ≤ 105).

Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 2·106), где ai обозначает значение, записанное в вершине i изначально.

В каждой из следующих n - 1 строк записаны два целых числа xi и yi (1 ≤ xi, yi ≤ nxi ≠ yi), обозначающие, что в дереве есть ребро между вершинами xi и yi.

В каждой из следующих q строк задан запрос в формате, описанном выше. Для каждого запроса выполняются следующие неравенства: 1 ≤ v ≤ n и 1 ≤ w ≤ 2·106. Обратите внимание: не более 50 запросов из всех меняют значение в вершине.

Выходные данные

Для каждого запроса первого типа выведите ответ на него.

Примечание

Запись gcd(x, y) обозначает наибольший общий делитель целых чисел x и y.

B. Восстановите куб

геометрия Перебор *2000

Петя расположил в трехмерном пространстве куб с ненулевой длиной стороны таким образом, что все его вершины оказались в точках с целочисленными координатами (возможно, при этом стороны куба оказались не параллельны осям координат). Затем он записал на бумажке восемь строк, в каждой по три числа — координаты вершин куба в некотором порядке (в одной строке записаны координаты одной вершины, каждая вершина записана ровно один раз), оставил бумажку на столе и ушел. Пока Пети не было, его младший брат Коля решил поиграть с написанными числами. За одну операцию Коля мог поменять местами некоторые числа внутри одной строки (числа из разных строк Коля местами не менял). Коля мог совершить любое количество таких операций.

Когда Петя вернулся и узнал про шалости Коли, он стал вспоминать, каковы были исходные координаты. Помогите Пете восстановить исходное положение точек, или установите, что это невозможно, и исходные числа были записаны неверно.

Входные данные

В каждой из восьми строк записано по три целых числа, разделенных пробелами — числа, написанные на бумажке после возможных изменений. Все числа не превосходят по модулю 106.

Выходные данные

Если существует способ восстановить положение, в первой строке выведите «YES». В каждой из следующих восьми строк выведите по три целых числа — восстановленные координаты точек из исходного набора. Числа в i-й строке вывода должны являться перестановкой чисел в i-й строке ввода. Точки должны являться вершинами куба с ненулевой длиной стороны. Если существует несколько возможных способов восстановить координаты, выведите любой.

Если способа не существует, в первой строке выведите «NO» (без кавычек). Больше ничего выводить не нужно.

B. Чудо-комната

математика Перебор *2000

В связи с началом учебного года во многих общежитиях возникли проблемы с поселением студентов. В одном из таких общежитий есть чудо-комната размером a × b квадратных метров. Комендант хочет поселить в нее ровно n студентов. Но, по закону, на одного жильца должно быть не меньше 6 квадратных метров жилой площади (то есть, комната для n студентов должна иметь площадь не менее 6n квадратных метров). Комендант может увеличить любую из сторон комнаты (возможно, обе) на произвольное целое положительное количество метров. Помогите коменданту изменить комнату так, чтобы все n студентов могли жить в комнате, и итоговая площадь комнаты была как можно меньше.

Входные данные

В единственной строке через пробел записано три целых числа n, a и b (1 ≤ n, a, b ≤ 109) — количество студентов и размеры комнаты.

Выходные данные

Выведите три целых числа s, a1 и b1 (a ≤ a1b ≤ b1) — итоговая площадь комнаты и ее размеры. Если существует несколько оптимальных решений, выведите любое.

C. Количество способов

Бинарный поиск дп Перебор Структуры данных *1700

Задан массив a[1], a[2], ..., a[n], состоящий из n целых чисел. Посчитайте количество способов разбить все элементы массива на три непрерывные части так, чтобы сумма элементов в каждой части была одинаковой.

Более формально, нужно найти количество таких пар индексов i, j (2 ≤ i ≤ j ≤ n - 1), что .

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 5·105) — количество чисел в массиве. Во второй строке записаны n целых чисел a[1], a[2], ..., a[n] (|a[i]| ≤  109) — элементы массива a.

Выходные данные

Выведите единственное целое число — количество способов разбить массив на три части с одинаковой суммой.

B. Федя и новая игра

битмаски Конструктив Перебор реализация *1100

Как только вы помогли Юре с Лешей заселиться, они пошли помогать своему другу Феде играть в новую компьютерную игру «Call of Soldiers 3».

Всего в игре есть (m + 1) игроков и n видов солдат. Игроки «Call of Soldiers 3» пронумерованы от 1 до (m + 1), а виды солдат пронумерованы от 0 до n - 1. У каждого игрока есть армия, армия i-го игрока характеризуется целым неотрицательным числом xi. Рассмотрим битовое представление числа xi: если j-й бит числа xi равен единице, то в армии i-го игрока есть солдаты j-го вида.

Федя — игрок с номером m + 1. Федя считает, что два игрока могут дружить, если их армии отличаются не более чем на k видов солдат (другими словами, битовые представления соответствующих чисел различаются не более чем в k битах). Помогите Феде посчитать, сколько игроков могут с ним дружить.

Входные данные

В первой строке записаны три целых числа n, m, k (1 ≤ k ≤ n ≤ 20; 1 ≤ m ≤ 1000).

В i-й из (m + 1) последующих строк содержится одно целое число xi (1 ≤ xi ≤ 2n - 1), которое характеризует армию i-го игрока. Напомним, что Федя — это игрок с номером (m + 1).

Выходные данные

Выведите единственное целое число — количество возможных друзей Феди.

A. Треугольные числа

математика Перебор *800

Треугольное число — это число кружков, которые могут быть расставлены в форме равностороннего треугольника. Например, три кружка можно расставить в форме треугольника, значит три — треугольное число. n-ое треугольное число — это количество кружков в треугольнике, на стороне которого n кружков. . Вы можете прочитать подробно про эти числа в Википедии (http://en.wikipedia.org/wiki/Triangular_number или http://ru.wikipedia.org/wiki/Треугольное_число).

Ваша задача — определить, является ли заданное целое число треугольным.

Входные данные

Первая строка содержит одно число n (1 ≤ n ≤ 500) — заданное целое число.

Выходные данные

Если заданное целое число является треугольным, выведите YES, иначе выведите NO.

D. Сейф

Перебор *2200

Вася пытается взломать сейф. Он знает, что код состоит из n цифр, причем каждая цифра — 0 или 1. Вася сделал m попыток ввести код. После каждой попытки система сообщала ему, в скольких позициях стоят правильные цифры. В каких именно позициях стоят неправильные цифры не сообщается. Вася был настолько неудачлив, что ни разу не ввел код, в котором было бы правильно более 5 цифр. Сейчас Вася совсем запутался — ему кажется, что в системе ошибка, и она противоречит самой себе. Помогите Васе — посчитайте, сколько осталось возможных вариантов кода, которые не противоречат предыдущим ответам системы.

Входные данные

В первой строке записано два целых числа n и m (6 ≤ n ≤ 35, 1 ≤ m ≤ 10) — количество цифр в коде и количество попыток, сделанных Васей. Далее следует m строк, в каждой из которых через пробел записаны si и ci — соответственно Васина попытка (строка из n цифр 0 или 1) и ответ системы (целое число от 0 до 5 включительно).

Выходные данные

Выведите одно число — сколько осталось вариантов кода, которые не противоречат m ответам системы.

C. МУХ и карточные домики

Бинарный поиск жадные алгоритмы математика Перебор *1700

Белые медведи Меньшиков и Услада из Санкт-Петербургского зоопарка и слоник Хорас из Киевского зоопарка решили построить карточный домик. Для этого они уже нашли внушительную колоду, содержащую n игральных карт. Давайте опишем домик, который они хотят собрать:

  1. Домик состоит из некоторого ненулевого количества этажей.
  2. Каждый этаж состоит из ненулевого количества комнат и потолка. Комната — две карты, прислоненных друг к другу. Комнаты располагаются в ряд, и на каждые две соседние комнаты кладется потолок из еще одной карты.
  3. Каждый этаж, кроме самого нижнего, должен содержать меньше комнат, чем этаж ниже.

Обратите внимание, что домик может заканчиваться этажом с более чем одной комнатой и в таком случае их тоже требуется накрыть потолком. Также количество комнат на соседних этажах не обязательно должно отличаться на единицу, разница может быть больше.

Пока медведи тренируются ставить карты, Хорас пытается сообразить, из скольки этажей должен состоять их дом. Назовем высотой дома количество этажей в нем. Возможно, что из n карт можно собрать много разных домиков разных высот. Кажется, эта задача слонику не под силу, он просит вас посчитать, домики скольки различных высот они смогут собрать, использовав ровно n карт.

Входные данные

В единственной строке находится целое число n (1 ≤ n ≤ 1012) — количество карт.

Выходные данные

Выведите количество различных высот, которые могут быть у домиков, построенных ровно из n карт.

Примечание

В первом примере, использовав все 13 карт, можно построить только такие два дома:

Таким образом из 13 карт можно построить только двухэтажные домики, поэтому ответ — 1.

Из шести карт во втором примере ни одного домика построить нельзя.

C. Капитан Сурок

геометрия Перебор *2000

Капитан Сурок хочет подготовить огромную и важную битву против своего врага капитана Змеи. В этой битве у Сурка есть n полков, каждый полк состоит из 4 кротов.

Изначально каждый крот i (1 ≤ i ≤ 4n) стоит на некоторой позиции (xi, yi) на декартовой плоскости. Капитан Сурок хочет передвинуть некоторых кротов и сделать полки компактными, если это возможно.

У каждого крота i есть дом на месте (ai, bi). Чтобы один раз передвинуть крота, надо повернуть точку его местоположения (xi, yi) на 90 градусов против часовой стрелки относительно точки дома (ai, bi).

Полк компактный, только если точки местоположений 4 кротов лежат в вершинах квадрата ненулевой площади.

Помогите капитану Сурку найти для каждого полка минимальное количество ходов, необходимое, чтобы полк сделался компактным, если это возможно.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 100), количество полков.

В следующих 4n строках записано по 4 целых числа xi, yi, ai, bi ( - 104 ≤ xi, yi, ai, bi ≤ 104).

Выходные данные

Выведите n строк. Если полк i можно сделать компактным, то в i-ой строке должно быть записано единственное целое число — минимальное количество требуемых ходов. В противном случае в i-ой строке выведите «-1» (без кавычек).

Примечание

В первом полку можно один раз передвинуть второго или третьего крота.

Второй полк сделать компактным не получается.

В третьем полку среди 3 последних кротов достаточно передвинуть один раз любого из них и два раза любого другого.

В четвертом полку можно два раза передвинуть первого крота и один раз — третьего крота.

B. Сильно связный город

графы Перебор поиск в глубину и подобное реализация *1400

Рассмотрим город, в котором есть n горизонтальных улиц пересекаются с m вертикальными, формируя сетку размера (n - 1) × (m - 1). Чтобы снизить количество заторов, мэр города решил сделать каждую улицу односторонней. Это значит, что по каждой горизонтальной улице машины будут ехать либо только с запада на восток, либо только с востока на запад. Аналогично, по каждой вертикальной улице машины будут ехать либо только с севера на юг, либо только с юга на север. На любом перекрестке можно свернуть с вертикальной улицы на горизонтальную и наоборот.

Мэр города получил несколько вариантов направления улиц. Ваша задача — проверить можно ли в данном варианте добраться от любого перекрестка до любого другого перекрестка, двигаясь по дорогам в указанном для них направлении.

Входные данные

В первой строке записано два целых числа n, m, (2 ≤ n, m ≤ 20), обозначающие соответственно количество горизонтальных и вертикальных улиц.

Во второй строке записана строка длины n из символов '<' и '>' — направления горизонтальных улиц. Если очередной символ этой строки равняется '<', то соответствующая улица направлена с востока на запад, в противном случае улица направлена с запада на восток. Улицы приводятся в порядке с севера на юг.

В третьей строке записана строка длины m из символов '^' и 'v' — направления вертикальных улиц. Если очередной символ равняется '^', то улица направлена с юга на север, в противном случае улица направлена с севера на юг. Улицы приводятся в порядке с запада на восток.

Выходные данные

Если указанная схема удовлетворяет требованиям, выведите в единственной строке "YES", в противном случае выведите в единственной строке "NO".

Примечание

Рисунок в условии соответствует второму примеру.

C. Картина Камаль оль-Молька

жадные алгоритмы Конструктив Перебор *2100

Ходят слухи, что одна из картин Камаль оль-Молька была подрисована. По картине провели прямоугольной кистью вправо и вниз.

Представим картину как прямоугольную сетку размера n × m. Сперва прямоугольная кисть размера x × y была поставлена где-то внутри картины так, что её стороны оказались параллельны линиям сетки, (1 ≤ x ≤ n, 1 ≤ y ≤ m). Затем кисть несколько раз сдвинули на клетку вниз или на клетку вправо. В процессе движения кисть оставалась строго в рамках картины. Кисть меняет каждую затронутую ей в какой-либо момент клетку.

Вы нашли одну из старых картин Камаль оль-Молька. Вы хотите знать, могла ли она быть подрисована указанным образом, и если да, то какого минимального размера могла быть кисть.

Входные данные

В первой строке входного файла записано два целых числа n и m, (1 ≤ n, m ≤ 1000), обозначающих высоту и ширину картины.

В следующих n строках содержится картина. В последующих n строках записано по m символов. Символ 'X' обозначает, что клетка была изменена, в противном случае клетка обозначается символом '.'. На картине присутствует хотя бы одна измененная клетка.

Выходные данные

Выведите минимальную площадь кисти, если картина могла быть подрисована указанным образом. В противном случае, выведите  - 1.

D. CGCDSSQ

математика Перебор Структуры данных *2000

Вам дана последовательность целых чисел a1, ..., an и q запросов x1, ..., xq. Для каждого запроса xi требуется подсчитать количество пар (l, r), таких, что 1 ≤ l ≤ r ≤ n и .

По определению — это наибольший общий делитель v1, v2, ..., vn, то есть наибольшее целое число, которое делит каждое vi.

Входные данные

В первой строке записано целое число n, (1 ≤ n ≤ 105), означающее длину последовательности. В следующей строке записано через пробел n целых чисел a1, ..., an, (1 ≤ ai ≤ 109).

В третьей строке записано целое число q, (1 ≤ q ≤ 3 × 105) — количество запросов. Затем следует q строк, в каждой строке записано целое число xi, (1 ≤ xi ≤ 109).

Выходные данные

Для каждого запроса выведите результат в отдельной строке.

B. Dreamoon и WiFi

битмаски дп Комбинаторика математика Перебор Теория вероятностей *1300

Dreamoon стоит на отметке 0 на числовой прямой. Drazil отправляет ему на смартфон список команд через Wi-Fi, а Dreamoon следует им.

Каждая команда относится к одному из двух типов:

  1. Пройти на 1 единицу в положительном направлении, обозначается как «+»
  2. Пройти на 1 единицу в отрицательном направлении, обозначается как «-»

Но так как уровень сигнала Wi-Fi очень слабый, смартфон Dreamoon'а сообщает, что некоторые команды не поддаются распознаванию. Более того, Dreamoon знает, что даже некоторые из рапознанных команд могут быть неверными. Dreamoon решил выполнять каждую распознанную команду, а для нераспознанных команд бросать монетку (это значит, что он пойдёт на 1 единицу в положительном или отрицательном направлении с одинаковой вероятностью 0.5).

Вам дан изначальный список команд, которые выслал Drazil, и список, который получил Dreamoon. Какова вероятность того, что Dreamoon окажется в том положении, к которому привели бы команды Drazil'а?

Входные данные

В первой строке записана строка s1 — команды, которые Drazil посылает Dreamoon'у, строка состоит только из символов из набора {«+», «-»}.

Во второй строке записана строка s2 — команды, которые распознал смартфон Dreamoon'а, эта строка состоит только из символов из набора: {«+», «-», «?»}. Символом «?» обозначается нераспознанная команда.

Обе строки одинаковой длины и не превышают 10.

Выходные данные

Выведите требуемую вероятность. Ответ будет сраниваться с относительной или абсолютной погрешностью 10 - 9.

Примечание

В первом примере как s1, так и s2 приведут Dreamoon'а к одной и той же позиции  + 1.

Во втором примере s1 приведет Dreamoon'а к позиции 0, в то время как для s2 есть четыре варианта: {"+-++", "+-+-", "+--+", "+---"} с конечными позициями {+2, 0, 0, -2}, соответственно. Таким образом, есть 2 подходящих случая из 4, так что вероятность окончить путь в верной позиции равна 0.5.

Для третьего примера, s2 может привести только к позициям {+1, -1, -1, -3}, таким образом, вероятность окончить путь в позиции  + 3 равна 0.

E. Волнистые числа

meet-in-the-middle Перебор поиск в глубину и подобное сортировки *2900

Волнистым числом называется такое целое положительное число, что для каждой цифры десятичного представления, не являющейся первой или последней, она либо строго больше обеих соседних с ней цифр, либо строго меньше обеих соседних с ней цифр. Например, числа 35270, 102, 747, 20 и 3 являются волнистыми, а числа 123, 1000 и 2212 — нет.

Для двух заданных целых чисел n и k требуется найти k-е по величине волнистое число r, которое делится нацело на n.

Ваша задача — написать программу для нахождения искомого числа r в случае, если оно не превосходит 1014.

Входные данные

В единственной строке содержатся два целых числа n и k, разделенных одним пробелом (1 ≤ n, k ≤ 1014).

Выходные данные

Требуется вывести единственное целое число r — ответ на задачу. Если такого числа не существует или оно больше 1014, то требуется вывести «-1» (минус единицу без кавычек).

Примечание

Значения первых четырех волнистых чисел кратных n для первого примера входных данных: 492, 615, 738 и 1845.

A. Выражение

математика Перебор *1000

Петя учится в школе и очень любит математику. Уже несколько занятий они с классом проходят арифметические выражения. На последнем уроке учительница написала на доске три положительных целых числа a, b, c. Задание заключалось в том, чтобы расставить между этими числами знаки операций '+' и '*', а также, возможно, скобки. Значение получившегося выражения должно быть как можно больше. Рассмотрим пример: пусть учительница выписала на доску числа 1, 2 и 3. Вот некоторые варианты расстановки знаков и скобок:

  • 1+2*3=7
  • 1*(2+3)=5
  • 1*2*3=6
  • (1+2)*3=9

Обратите внимание на то, что знаки операций можно вставлять только между a и b, а также между b и c, то есть нельзя менять числа местами. Так, в приведенном примере нельзя получить выражение (1+3)*2.

Легко убедиться, что максимальное значение, которое можно получить, — это 9.

Ваша задача — по заданным a, b и c вывести, какое максимальное значение выражения можно получить.

Входные данные

Во входных данных записаны три целых числа a, b и c, каждое в отдельной строке (1 ≤ a, b, c ≤ 10).

Выходные данные

Выведите максимальное значение выражения, которое можно получить.

B. Башни

жадные алгоритмы Конструктив Перебор реализация сортировки *1400

Как известно, все дети в Берляндии любят играть с кубиками. У маленького Пети имеется n башен, состоящих из кубиков одинакового размера. Башня под номером i представляет собой ai кубиков, поставленных друг на друга. Неустойчивостью набора башен Петя называет величину, равную разности высот самой высокой и самой низкой башни. К примеру, если Петя построил из кубиков пять башен с высотами (8, 3, 2, 6, 3), то неустойчивость этого набора равна 6 (самая высокая башня имеет высоту 8, самая низкая — высоту 2).

Мальчик хочет, чтобы неустойчивость его набора башен была как можно меньше. Все, что он может сделать, это несколько раз проделать следующую операцию: взять верхний кубик с какой-то из башен и положить его сверху на какую-то другую башню из своего набора. Обратите внимание, что Петя никогда не будет класть кубик на ту же башню, с которой тот был снят, потому что считает это пустой тратой времени.

Прежде чем отправиться в школу, мальчик успеет произвести не более k таких операций. Петя не хочет опоздать на урок, поэтому вам придется помочь ему выполнить эту задачу.

Входные данные

В первой строке через пробел записаны два целых положительных числа n и k (1 ≤ n ≤ 100, 1 ≤ k ≤ 1000) — количество башен в имеющемся наборе и максимальное число операций, которые Петя может произвести. Во второй строке через пробел записаны n целых положительных чисел ai (1 ≤ ai ≤ 104) — исходные высоты башен.

Выходные данные

В первой строке выведите через пробел два целых неотрицательных числа s и m (m ≤ k). Первое из чисел — это величина минимально возможной неустойчивости, которую можно достичь, применив не более k операций, а второе — количество операций, необходимых для этого.

Затем в m строках выведите описание каждой из операций в виде двух целых положительных чисел i и j, каждое из которых лежит в пределах от 1 до n. Они обозначают, что Петя переложил верхний кубик с i-й башни на j-ю (i ≠ j). Обратите внимание, что в процессе выполнения операций высоты некоторых башен могут стать равны нулю.

Если существует несколько корректных последовательностей операций, при которых достигается минимально возможная неустойчивость, разрешается вывести любую из них.

Примечание

В первом примере осуществляется два перекладывания, со второй башни на третью и со второй на первую. После этого высоты башен становятся одинаковыми и равными 6.

B. Участок для дома

Перебор реализация *1200

У дяди Васи есть прекрасный сад, где растут чудесные фруктовые деревья, каждый год дающие небывалый урожай. Но в последнее время воры стали слишком часто лазить в сад по ночам и красть оттуда фрукты. Дядя Вася не может ночевать на участке и караулить урожай, потому что в саду нету домика! Дядя Вася подкопил денег и решился на постройку. Дело осталось за малым: определить, в какой части сада строить домик. Вечером он сел за стол и начертил план сада. На плане сад представляет собой прямоугольное клетчатое поле размера n × m, разбитое на клетки со стороной 1. В некоторых клетках дядя Вася отметил растущие в них деревья (деревья нельзя сажать близко, поэтому в одной клетке получилось не более одного дерева). Дядя Вася хочет выделить под строительство прямоугольный участок размера a × b клеток, причем границы участка для строительства должны идти по линиям сетки, которая разграничивает клетки. Все деревья, которые окажутся на участке для постройки домика, придется вырубить. Дядя Вася очень любит свой сад, поэтому помогите ему выбрать такое положение участка для строительства, чтобы количество вырубленных деревьев было как можно меньшим.

Входные данные

В первой строке записано два целых числа n и m (1 ≤ n, m ≤ 50) — размеры сада. В следующих n строках записано по m чисел 0 или 1, которые описывают сад на плане. Ноль означает, что в этой клетке не растет дерево, а единица — что растет. В последней строке записано два целых числа a и b (1 ≤ a, b ≤ 50). Обратите внимание, что дядя Вася может выбрать для строительства как прямоугольник a × b, так и b × a, т.е. сторона участка для строительства длиной a может располагаться как параллельно стороне участка с длиной n, так и параллельно стороне участка с длиной m.

Выходные данные

Выведите наименьшее количество деревьев, которое нужно вырубить, чтобы выделить участок a × b под строительство домика. Гарантируется, что хотя бы одно положение для участка всегда найдется, т. е. или a ≤ n и b ≤ m, или a ≤ m и b ≤ n.

Примечание

Во втором примере левая верхняя клетка участка это (1,1), а правая нижняя — (3, 2).

A. Опровержение гипотез

математика Перебор реализация теория чисел *1100

Ваш друг недавно узнал про взаимно простые числа. Пара чисел (a, b) называется взаимно простой, если максимальное число, которое делит оба числа a и b, равно единице.

Ваш друг часто придумывает разные утверждения. Недавно он предположил, что если пара чисел (a, b) является взаимно простой и пара чисел (b, c) является взаимно простой, то пара чисел (a, c) является взаимно простой.

Вы хотите опровергнуть утверждение вашего друга. Ваша задача — найти тройку различных чисел (a, b, c), для которой утверждение вашего друга неверно, и числа в тройке удовлетворяют условию l ≤ a < b < c ≤ r.

Формально, вам нужно найти тройку чисел (a, b, c), такую что l ≤ a < b < c ≤ r, пары (a, b) и (b, c) взаимно простые, а пара (a, c) не является взаимно простой.

Входные данные

В единственной строке записано два целых положительных числа через пробел l, r (1 ≤ l ≤ r ≤ 1018; r - l ≤ 50).

Выходные данные

В единственной строке выведите три целых положительных числа через пробел a, b, c — искомую тройку различных чисел (a, b, c). Если существует несколько решений, разрешается вывести любое. Числа в тройке необходимо выводить в порядке возрастания.

Если искомой тройки не существует, выведите единственное число -1.

Примечание

В первом примере пара (2, 4) не является взаимно простой, а пары (2, 3) и (3, 4) — взаимно простые.

В втором примере нельзя составить тройку из трех различных чисел, поэтому ответ -1.

В третьем примере нетрудно заметить, что числа 900000000000000009 и 900000000000000021 делятся на 3.

B. Ценные ресурсы

жадные алгоритмы Перебор *1300

Во многих компьютерных играх стратегического жанра нужно строить города, создавать армию, захватывать племена, накапливать ресурсы. Иногда это приводит к интересным задачам.

Предположим, вам требуется построить город квадратной формы. На карте мира введена декартова система координат. Стороны города должны быть параллельны осям координат. На карте присутствуют рудники с ценными ресурсами, расположенные в точках с целочисленными координатами. Размерами рудников можно пренебречь, то есть их можно считать точками. Город должен быть построен так, чтобы все рудники были внутри или на границе квадрата, которым он образован.

Так как строительство города требует затрат, зависящих от его размера, то необходимо построить город с минимальной площадью. По заданному расположению рудников найдите минимальную возможную площадь города.

Входные данные

Первая строка ввода содержит целое число n — количество рудников на карте (2 ≤ n ≤ 1000). В каждой из n последующих строк содержится по паре целых чисел xi и yi — координаты соответствующего рудника ( - 109 ≤ xi, yi ≤ 109). Все точки попарно различны.

Выходные данные

Выведите минимальную площадь города, которым можно покрыть все рудники с ценными ресурсами.

C. Преобразование в палиндром

жадные алгоритмы Перебор реализация *1700

Нам играет со строкой на своем компьютере. Строка состоит из n строчных английских букв. Строка не представляет собой ничего осмысленного, так что Нам решил её приукрасить, для чего он решил превратить её в палиндром, используя 4 кнопки со стрелками на клавиатуре: влево, вправо, вверх, вниз.

Курсор указывает на некоторый символ строки. Предположим, что курсор сейчас находится в положении i (1 ≤ i ≤ n, строка использует индексируется с 1). Левая и правая стрелки перемещают курсор по строке. Строка циклична, то есть при нажатии на левую стрелку курсор перемещается в положение i - 1, если i > 1, а в противном случае — в конец строки (т.е., положение n). Аналогично себя ведёт правая стрелка (если i = n, то курсор появляется в начале строки).

Когда Нам нажимает на стрелку вверх, то буква, на которую указывает курсор, заменится на следующую букву английского алфавита (алфавит также является цикличным, то есть за буквой «z» следует буква «a»). Аналогично себя ведёт стрелка вниз.

Изначально курсор находится в положении p.

У Нама много домашней работы, поэтому он хочет добиться результата как можно скорее. Помогите ему подсчитать минимальное количество нажатий на стрелочки, необходимое для превращения строки в палиндром?

Входные данные

В первой строке записано два целых числа через пробел, n (1 ≤ n ≤ 105) и p (1 ≤ p ≤ n), соответственно длина строки Нама и начальное положение курсора.

В следующей строке записано n строчных символов, составляющих строку Нама.

Выходные данные

Выведите минимальное количество нажатий, необходимое для преобразования строки в палиндром.

Примечание

Строка является палиндромом, если она одинаково читается слева-направо и справа-налево.

В примере изначальная строка Нама такова: (положение курсора выделено жирным).

В оптимальном решении Нам может совершить 6 следующих шагов:

В результате получится строка , являющаяся палиндромом.

A. Бьём чудовище!

Бинарный поиск Перебор реализация *1800

На Киберленд напало чудовище!

Отважный мастер Янь собирается сражаться с чудовищем. У Яня и чудовища есть по три атрибута: очки здоровья (HP), сила атаки (ATK) и сила защиты (DEF).

За каждую секунду сражения HP чудовища уменьшается на max(0, ATKY - DEFM), а HP Яня уменьшается на max(0, ATKM - DEFY), где индекс Y обозначает мастера Яня, а индекс M обозначает чудовище. Уменьшение происходит одновременно. Как только у чудовища HP ≤ 0, а у мастера Яня в то же время HP > 0, мастер Янь побеждает.

Мастер Янь может купить увеличение атрибутов в киберлендском магазине волшебства: h биткоинов за очко HP, a биткоинов за очко ATK, и d биткоинов за очко DEF.

Теперь Мастер Янь хочет знать, какое наименьшее количество биткоинов ему надо потратить, чтобы победить.

Входные данные

В первой строке через пробел записаны три целых числа HPY, ATKY, DEFY, обозначающих начальные HP, ATK и DEF мастера Яня.

Во второй строке через пробел записаны три целых числа HPM, ATKM, DEFM, обозначающих начальные HP, ATK и DEF чудовища.

В третьей строке через пробел записаны три целых числа h, a, d, обозначающих цену HP, ATK и DEF.

Все числа во вводе целые и лежат в пределах от 1 до 100 включительно.

Выходные данные

В единственной строке вывода выведите единственное целое число, обозначающее минимальное количество биткоинов, которые мастер Янь должен потратить для победы.

Примечание

В первом примере цены на ATK и DEF очень высокие. Мастер Янь может купить 99 HP, тогда он сможет победить чудовище и остаться с 1 HP в запасе.

Во втором примере мастер Янь достаточно силен, чтобы сразу победить чудовище, так что покупать ничего не надо.

A. Гигабашня

Перебор *1100

Гигабашня — самое высокое и глубокое здание в Киберленде. В ней 17 777 777 777 этажей, пронумерованных от  - 8 888 888 888 до 8 888 888 888. В частности, между этажами  - 1 и 1 есть этаж 0. Тысячи туристов ежедневно приходят сюда, чтобы насладиться чудесным видом.

В Киберленде верят, что цифра «8» прносит удачу (именно поэтому в Гигабашне 8 888 888 888 этажей над землей), а целое число является счастливым тогда и только тогда, когда в его десятичной записи содержится по крайней мере одна цифра «8». Например, 8,  - 180, 808 — примеры счастливых чисел, а 42,  - 10 — нет. Когда вы пишете код на этаже со счастливым номером, с вами пребудет удача (да и этот раунд #278 тоже счастливый, не так ли?).

Турист Генри пришёл в башню за удачей. Сейчас он находится на этаже под номером a. Он хочет найти минимальное положительное целое число b, такое, что если он поднимется на b этажей вверх, он окажется на этаже со счастливым номером.

Входные данные

В единственной строке записано целое число a ( - 109 ≤ a ≤ 109).

Выходные данные

Выведите минимальное b.

Примечание

В первом примере юноше нужно дойти до этажа номер 180.

Во втором примере — до 8.

Обратите внимание, что b должно быть положительным числом, так что ответ в третьем примере — 10, а не 0.

B. Коробки конфет

Конструктив математика Перебор *1900

В Киберленде есть древняя традиция держать в доме 4 коробки конфет. Количества конфет в коробках являются особенными, если их среднее арифметическое, медиана и диапазон совпадают. По определению, для набора чисел {x1, x2, x3, x4} (x1 ≤ x2 ≤ x3 ≤ x4) средним арифметическим называется , медианой называется , а диапазоном — x4 - x1. Среднее арифметическое и медиана не обязательно являются целыми числами. Хорошо известно, что набор коробок особенных размеров создаёт «отладочное поле» и программы в этом поле не будут содержать баги.

Например, 1, 1, 3, 3 — возможные 4 числа, которые удовлетворяют указанному условию, их среднее арифметиеское, медиана и диапазон равны 2.

У Джеффа есть 4 особенные коробки конфет. Но случилось нечто плохое! Некоторые коробки могли быть потеряны, и сейчас осталось ровно n (0 ≤ n ≤ 4) коробок. В i-й из оставшихся коробок лежит ai конфет.

Теперь Джефф хочет знать, возможно ли подобрать количества конфет в 4 - n пропавших коробках так, чтобы набор удовлетворял условию (среднее арифметическое, медиана и диапазон равны между собой)?

Входные данные

В первой строке ввода записано единственное целое число n (0 ≤ n ≤ 4).

В следующих n строках, записаны целые число ai, каждое из которых обозначает количество конфет в i-й коробке (1 ≤ ai ≤ 500).

Данные числа ai могут следовать в любом порядке во вводе, а не обязательно в неубывающем.

ai могли находиться на любых позициях в исходном наборе, а не обязательно на n первых позициях.

Выходные данные

В первой строке выведите «YES», если существует хотя бы одно решение, либо выведите «NO», если решения не существует.

Если существует хотя бы одно решение, выведите ещё 4 - n строк, в каждой строке выведите число b, обозначающее количество конфет в одной из пропавших коробок.

Значения b должны удовлетворять условию 1 ≤ b ≤ 106. Гарантируется, что если существует хотя бы одно положительное целочисленное решение, вы всегда сможете найти значения b, удовлетворяющие условию. Если есть несколько решений, можно вывести любое из них.

Выводить значения b можно в любом порядке.

Примечание

В первом примере количество конфет в 4 коробках может быть равно 1, 1, 3, 3. Среднее арифметическое, медиана и диапазон равны 2.

Во втором примере невозможно найти количества пропавших конфет.

В третьем примере ни одна из коробок не пропала, и количества конфет удовлетворяют условию.

D. Невыносимая запутанность бытия

графы Комбинаторика Перебор поиск в глубину и подобное *1700

Томаш постоянно плутает и теряется, гуляя по улицам столицы Берляндии. Еще бы, ведь он привык, что в его родном городе для любой пары перекрестков существует ровно один способ пройти от одного к другому. В столице Берляндии это совсем не так!

Томаш подметил, что даже простые случаи неоднозначности перемещения его путают. Так, четверку различных перекрестков a, b, c и d таких, что существует два пути из a в c — один через b, а другой через d, он называет «чёртов ромб». Обратите внимание, пары перекрёстков (a, b), (b, c), (a, d), (d, c) должны быть непосредственно соединены дорогами. Схематично «чёртов ромб» изображен на рисунке ниже:

Наличие других дорог между любыми из перекрестков не делают ромб более привлекательным для Томаша, поэтому четверка перекрестков остается для него «чёртовым ромбом».

Принимая во внимание, что в столице Берляндии n перекрестков и m дорог, все из которых являются односторонними и известны наперед, найдите количество «чёртовых ромбов» в городе.

При сравнении ромбов порядок перекрестков b и d значения не имеет.

Входные данные

В первой строке входных данных записана пара целых чисел n, m (1 ≤ n ≤ 3000, 0 ≤ m ≤ 30000) — количество перекрестков и дорог соответственно. Далее в m строках перечислены дороги по одной в строке. Каждая из дорог задана парой целых чисел ai, bi (1 ≤ ai, bi ≤ n;ai ≠ bi) — номером перекрестка откуда она ведет и номером перекрестка куда она ведет. Между парой перекрестков существует не более одной дороги в каждом из двух направлений.

Не гарантируется, что из любого перекрестка можно добрать до любого другого.

Выходные данные

Выведите искомое количество «чёртовых ромбов».

D. Игра

дп Перебор реализация *1800

Вася и Петя придумали новую игру. Вася берет полоску 1 × n клеточек, и раскрашивает ее клетки в белый и черный. После этого Петя может делать ходы — за один ход он может выбрать любые две соседние клетки одного цвета и перекрасить эти две клетки так, как ему захочется, возможно в разные цвета. Петя может перекрашивать клетки только в белый и черный. Цель Пети — перекрасить полоску так, чтобы никакие две соседние клетки не были одного цвета. Помогите Пете — по заданной начальной раскраске найдите наименьшее количество ходов, необходимое Пете чтобы выиграть.

Входные данные

В первой строке записано число n (1 ≤ n ≤ 1000) — длина полоски. Во второй строке без пробелов записано n символов — начальная раскраска строки. 0 соответствует белой клетке, 1 соответствует черной клетке.

Выходные данные

Если Петя не сможет выиграть при такой начальной раскраске, выведите -1. Иначе выведите наименьшее число ходов, необходимое Пете для победы.

Примечание

В первом примере Петя может выбрать клетки 1 и 2. Он перекрашивает клетку 1 в черный и клетку 2 в белый.

Во втором примере Петя может выбрать клетки 2 и 3. Он перекрашивает клетку 2 в белый и клетку 3 в черный.

C. Взлом шифра

математика Перебор Строки теория чисел *1700

Поликарп участвует в соревновании по взлому нового защищенного мессенджера. Для победы в конкурсе осталось совсем немного.

Тщательно изучив протокол взаимодействия, Поликарп пришел к выводу, что секретный ключ можно получить, если правильным образом порезать на две части публичный ключ приложения. Публичным ключом является длинное целое число, которое может состоять даже из миллиона цифр!

Поликарпу надо найти такой способ порезать публичный ключ на две непустые части, что первая (левая) часть как отдельное число делится на a, а вторая (правая) часть как отдельное число делится на b. Обе части должны быть положительными числами, не имеющими лидирующих нулей. Значения a и b Поликарпу известны.

Помогите Поликарпу и найдите любой из подходящих способов порезать публичный ключ.

Входные данные

В первой строке входных данных записан публичный ключ мессенджера — целое число без ведущих нулей, имеющее длину от 1 до 106 цифр. Вторая строка содержит пару записанных через пробел целых положительных чисел a, b (1 ≤ a, b ≤ 108).

Выходные данные

В первую строку выведите «YES» (без кавычек), если искомый способ существует. Далее в этом случае выведите две строки — левую и правую части после разреза. Записанные подряд (сначала левая, потом правая) эти части должны в точности составлять публичный ключ. Левая часть должна делиться на a, а правая — на b. Обе части должны быть целыми положительными числами, не имеющими ведущих нулей. Если ответов несколько, выведите любой из них.

Если ответа не существует, то выведите в единственной строке «NO» (без кавычек).

D. Шоколадки

meet-in-the-middle математика Перебор поиск в глубину и подобное теория чисел *1900

Поликарпу нравится делать подарки Прасковье. Вот и сейчас он купил две плитки шоколада, каждая из них имеет форму прямоугольника из долек. Первая плитка имеет размеры a1 × b1 долек, а вторая — a2 × b2 долек.

Поликарп хочет угостить на большой перемене Прасковью одной плиткой, а вторую съесть сам. Кроме того, он хочет подчеркнуть одинаковую значимость ума Поликарпа и красоты Прасковьи, поэтому плитки должны содержать одинаковое количество долек.

Чтобы сделать плитки равными по количеству долек, Поликарп каждую минуту съедает немного шоколада. Каждую минуту он:

  • либо разламывает одну плитку ровно пополам (вертикально или горизонтально) и съедает ровно половину шоколадки,
  • либо отламывает от плитки ровно одну треть (вертикально или горизонтально) и съедает ровно треть шоколадки.

В первом случае от плитки останется половина, а во втором — две трети.

Не всегда возможны оба развития событий, а иногда бывает, что Поликарп вообще не может отломить половину или треть. Например, если плитка имеет размер 16 × 23, то от нее можно отломить половину, но нельзя одну треть. Если плитка имеет размер 20 × 18, то от нее можно отломить как половину, так и треть. Если плитка имеет размер 5 × 7, то отломить как половину так и треть невозможно.

Какое минимальное количество минут понадобится Поликарпу, чтобы сделать обе плитки одинаковыми по количеству долек в них? Найдите не только искомое минимальное количество минут, но и возможные размеры плиток после их вынужденного «уравнивания».

Входные данные

В первой строке входных данных записаны целые числа a1, b1 (1 ≤ a1, b1 ≤ 109) — первоначальные размеры первой шоколадки. Во второй строке входных данных записаны целые числа a2, b2 (1 ≤ a2, b2 ≤ 109) — первоначальные размеры второй шоколадки.

Вы можете использовать типы данных int64 (в Паскале), long long (в С++), long (в Java) для работы с большими целыми числами (превосходящими 231 - 1).

Выходные данные

В первую строку выведите m — искомое минимальное количество минут. Во вторую и третью строки выведите возможные размеры плиток после их уравнивания за m минут. Выводите размеры, используя формат, аналогичный формату входных данных. Размеры (числа в выводимых парах) выводите в любом порядке. Вторая строка должна соответствовать первой шоколадке, а третья — второй. Если решений несколько, выведите любое из них.

Если решения не существует, то выведите единственную строку с числом -1.

E. Восстановление возрастающей последовательности

Бинарный поиск жадные алгоритмы Перебор реализация *2000

Петя написал на доске строго возрастающую последовательность целых положительных чисел a1, a2, ..., an. После этого Вася заменил некоторые цифры в числах этой последовательности на знаки вопроса. Таким образом, каждый знак вопроса соответствует ровно одной стертой цифре.

Восстановите последовательность по тому, что осталось на доске.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 105) — длина последовательности. Следующие n строк содержат по одному элементу последовательности. Каждый из элементов состоит только из цифр и знаков вопросов. Никакой из элементов не начинается с цифры 0. Каждый из элементов имеет длину от 1 до 8 символов включительно.

Выходные данные

Если ответ существует, то выведите в первую строку «YES» (без кавычек). Следующие n строк должны содержать последовательность целых положительных чисел — возможный вариант последовательности Пети. Найденная последовательность должна быть строго возрастающей, получена из заданной путем замены каждого знака вопроса на одиночную цифру. Все числа в найденной последовательности должны быть записаны без ведущих нулей. Если решений несколько, выведите любое из них.

Если ответа не существует, то выведите единственную строку «NO» (без кавычек).

C. Вася и баскетбол

Бинарный поиск Перебор реализация сортировки Структуры данных *1600

Вася следит за баскетбольным матчем, записывая, какая команда с какой дистанции сделала очередной бросок. Вася знает, что каждый бросок оценивается либо в 2, либо в 3 очка. Бросок оценивается в 2 очка, если дистанция, с которого он выполнен, не превосходит некоторого значения в d метров, и 3, если эта дистанция больше, чем d метров, где d — некоторое неотрицательное целое число.

Вася хочет, чтобы разность набранных командами очков (очки первой команды минус очки второй команды) была как можно больше. Для этого он может мысленно выбирать значение d. Помогите ему добиться желаемого.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 2·105) — количество бросков первой команды. Далее следуют n целых чисел — дистанции бросков ai (1 ≤ ai ≤ 2·109).

Затем дается число m (1 ≤ m ≤ 2·105) — количество бросков второй команды. Далее m целых чисел — дистанции бросков bi (1 ≤ bi ≤ 2·109).

Выходные данные

Выведите два числа в формате a:b — возможный в условиях задачи счёт, при котором разность a - b максимальна. Если таких счетов несколько, выведите такой, в котором число а — максимально.

A. Минимальная сложность

математика Перебор реализация *900

Миша пытается заниматься скалолазанием, но получается у него из рук вон плохо.

На стене висят n зацепок, i-я из которых расположена на высоте ai от земли. Кроме того, пусть последовательность ai возрастает, т.е. ai < ai + 1 для всех i от 1 до n - 1; назовем такую последовательность трассой. Миша считает, что трасса a1, ..., an обладает сложностью . Иными словами, сложность равна максимальному расстоянию между соседними по высоте зацепками.

Сегодня Миша решил пролезть трассу, в которой зацепки висят на высотах a1, ..., an. Чтобы усложнить себе задачу, Миша решил снять одну из зацепок, т.е. удалить один элемент последовательности (например, если из последовательности (1, 2, 3, 4, 5) удалить третий элемент, останется последовательность (1, 2, 4, 5)). Однако, поскольку лазает Миша плохо, он хочет, чтобы после удаления сложность (т. е. максимальная разность высоты между соседними зацепками) была минимальной среди всех возможных вариантов снять одну зацепку. Первая и последняя зацепка должны остаться на месте.

Помогите Мише определить минимальную сложность трассы после снятия одной зацепки.

Входные данные

Первая строка содержит одно целое число n (3 ≤ n ≤ 100) — количество зацепок.

Следующая строка содержит n целых чисел ai (1 ≤ ai ≤ 1000), разделенных пробелами, где ai — высота, на которой висит зацепка номер i. Последовательность ai возрастает (т.е. каждый элемент, кроме первого, строго больше предыдущего).

Выходные данные

Выведите одно число — минимальную сложность трассы после снятия одной зацепки.

Примечание

В первом тесте можно удалить только вторую зацепку, после нее последовательность примет вид (1, 6), максимальная разность соседних элементов равна 5.

Во втором тесте после удаления любой зацепки сложность равна 2.

В третьем тесте можно получить последовательности (1, 3, 7, 8), (1, 2, 7, 8), (1, 2, 3, 8), для которых сложность составляет 4, 5 и 5 соответственно. Таким образом, ответ достигается при удалении второго элемента и равен 4.

B. Секретный код

Конструктив Перебор реализация *1500

Вам в руки попала шкатулка с кодовым замком. На замке есть дисплей, который показывает n цифр. Рядом с дисплеем расположены две кнопки, каждая из которых изменяет цифры на дисплее. Вы быстро догадались, что первая кнопка прибавляет 1 ко всем цифрам (при этом все цифры 9 превращаются в цифры 0), а вторая — сдвигает все цифры на дисплее на одну позицию вправо (при этом последняя цифра становится первой). Например, если дисплей в данный момент показывает число 579, то если нажать первую кнопку, дисплей станет показывать 680, а если после этого нажать вторую кнопку, дисплей станет показывать 068.

Вам известно, что замок откроется, если на дисплее будет отображаться минимальное число из всех, которые можно получить нажатием на кнопки в каком-то порядке (каждая кнопка может быть нажать произвольное число раз). При сравнении чисел ведущие нули игнорируются. Теперь вам требуется определить, что это за число.

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 1000) — количество цифр на дисплее.

Во второй строке записано n цифр — исходное состояние дисплея.

Выходные данные

Выведите одну строку из n цифр — искомое состояние дисплея, содержащее минимально возможное число.

C. Удаление столбцов

Конструктив Перебор реализация *1500

Вам дана прямоугольная таблица размера n × m, состоящая из маленьких латинских букв. За одну операцию можно целиком удалить из таблицы один столбец; оставшиеся части образуют новую сплошную таблицу. Например, после удаления второго столбца из таблицы


abcd
edfg
hijk

 

получится таблица:


acd
efg
hjk

 

Таблица называется хорошей, если ее строки упорядочены сверху вниз в лексикографическом порядке, т.е. каждая строка лексикографически не превосходит следующую за ней. Определите минимальное количество операций удаления столбца, необходимых для того, что сделать данную таблицу хорошей.

Входные данные

В первой строке записано два целых числа — n и m (1 ≤ n, m ≤ 100).

В следующих n строках записано по m маленьких латинских букв — символы таблицы.

Выходные данные

Выведите одно число — минимальное число столбцов, которые необходимо удалить, чтобы таблица стала хорошей.

Примечание

В первом примере таблица уже является хорошей.

Во втором примере достаточно удалить первый и третий столбец.

В третьем примере необходимо удалить все столбцы (обратите внимание, что таблица, в которой все строки пустые, по определению является хорошей).

Пусть строки s и t имеют равную длину. Тогда строка s лексикографически больше строки t, если они не совпадают, и следующий за максимальным общим префиксом s и t (общий префикс может быть пустым) символ строки s идет в алфавитном порядке позже соответствующего символа строки t.

D. Шестерни

геометрия математика Перебор *2900

На плоскости расположены два многоугольника A и B. Многоугольник A вращается вокруг точки P, а многоугольник B — вокруг точки Q. Каждый многоугольник вращается с постоянной угловой скоростью по часовой стрелке вокруг своей точки, угловые скорости вращения многоугольников совпадают.

Требуется определить, произойдет ли когда-нибудь столкновение между многоугольниками. Под столкновением подразумевается ситуация, в которой многоугольники имеют хотя бы одну общую точку.

Гарантируется, что в момент времени 0 многоугольники A и B не пересекаются, и ни один из многоугольников не содержится целиком внутри другого.

Обратите внимание, что:

  • многоугольники могут не являться выпуклыми;
  • точки P и Q могут находиться на границе или вне своих многоугольников.
Входные данные

В первой строке через пробел записаны координаты точки P.

Во второй строке записано одно целое число n (3 ≤ n ≤ 1000) — количество вершин многоугольника A.

В каждой их следующих n строк записано по два числа, разделенных пробелом — координаты очередной вершины многоугольника A.

Следующая строка оставлена пустой.

Далее следуют через пробел координаты точки Q.

В следующей строке находится одно целое число m (3 ≤ m ≤ 1000) — количество вершин многоугольника B. Далее в m строках в аналогичном формате описаны координаты координаты вершин многоугольника B.

Вершины обоих многоугольников перечислены в порядке обхода против часовой стрелки. Все координаты точек — целые числа, по модулю не превосходящие 104.

Выходные данные

Выведите «YES», если столкновение произойдет, и «NO» в противном случае.

Примечание

Многоугольником называется замкнутая ломаная без самопересечений и самокасаний.

Картинка к первому примеру:

A. Подарок мистера Китаюта

Перебор реализация Строки *1100

Мистер Китаюта любезно предоставил Вам строку s из строчных букв латинского алфавита. Он просит вас вставить ровно одну строчную букву латинского алфавита в s так, чтобы получился палиндром. Палиндром — это строка, которая читается одинаково в обоих направлениях. Например, «noon», «testset» и «a» — палиндромы, а «test» и «kitayuta» — нет.

Вы можете выбрать любую строчную букву латинского алфавита и вставить её в любую позицию s, в частности, можно вставить в начало или в конец s. Букву надо вставить, даже если данная строка уже является палиндромом.

Если возможно вставить одну строчную букву латинского алфввита в s так, чтобы получившаяся строка была палиндромом, выведите состояние строки после вставки. В противном случае выведите «NA». Если возможно получить более одного палиндрома, можно вывести любой из них.

Входные данные

Ввод состоит из строки s (1 ≤ |s| ≤ 10). Каждый символ s — строчная буква латинского алфавита.

Выходные данные

Если можно превратить строку s в палиндром, вставив одну строчную букву латинского алфавита, выведите итоговую строку в единственной строке. В противном случае выведите «NA» (без кавычек, регистр имеет значение). Если существует более одного решения, будет засчитано любое.

Примечание

В первом можно добавить «r> к концу строки «revive», чтобы получить палиндром «reviver».

Во втором примере решений несколько. Например, «eve» также будет засчитан.

В третьем примере невозможно превратить «kitayuta» в палиндром путем прибавления одной буквы.

D. Цветной граф мистера Китаюта

графы Перебор поиск в глубину и подобное снм *2400

Мистер Китаюта только что приобрёл неориентированный граф, состоящий из n вершин и m ребер. Вершины графа пронумерованы от 1 до n. i-е ребро, соединяющее вершины ai и bi, окрашено в цвет ci.

Мистер Китаюта хочет, чтобы вы обработали следующие q запросов.

i-й запрос состоит из двух целых чисел — ui и vi.

Найдите количество цветов, таких, что ребра этого цвета непосредственно или косвенно соединяют вершину ui и вершину vi (т. е. по рёбрам только этого цвета можно добраться от вершины ui до вершины vi).

Входные данные

В первой строке следуют два целых числа через пробел — n и m (2 ≤ n ≤ 105, 1 ≤ m ≤ 105), обозначающих количество вершин и количество ребер, соответственно.

В следующих m строках следуют три целых числа через пробел — ai, bi (1 ≤ ai < bi ≤ n) и ci (1 ≤ ci ≤ m). Обратите внимание, что между двумя вершинами может быть несколько ребер. Однако между двумя вершинами не может быть нескольких ребер одного цвета, то есть, если i ≠ j, то (ai, bi, ci) ≠ (aj, bj, cj).

В следующей строке записано целое число — q (1 ≤ q ≤ 105), обозначающее количество запросов.

Затем следуют q строк, содержащих по два целых числа через пробел — ui и vi (1 ≤ ui, vi ≤ n). Гарантируется, что ui ≠ vi.

Выходные данные

Для каждого запроса выведите ответ на отдельной строке.

Примечание

Рассмотрим первый пример.

Рисунок выше иллюстрирует первый пример.
  • Вершина 1 и вершина 2 соединены цветами 1 и 2.
  • Вершина 3 и вершина 4 соединены цветом 3.
  • Вершина 1 и вершина 4 не соединены никаким цветом.

A. Паша и пиксели

Перебор *1100

Паша любит свой телефон и поправлять прическу... Но сейчас не до нее.

Паша установил новую игру на свой телефон. Её суть заключается в следующем: имеется прямоугольное поле, состоящее из n строк по m пикселей. Изначально все пиксели окрашены в белый цвет. За один ход Паша может выбрать любой пиксель и перекрасить его в черный цвет. В том числе, разрешается выбрать пиксель, уже являющийся чёрным, тогда после хода он не меняется, то есть остаётся чёрным. Игра заканчивается поражением Паши, когда образуется квадратик 2 × 2 из черных пикселей.

Паша составил план из k ходов, в соответствии с которым он будет красить пиксели. Каждый ход в его плане представляется в виде пары чисел i и j, означающих соответственно номер строки и номер столбца пикселя, который будет покрашен на текущем ходу.

Определите, проиграет ли Паша, если будет действовать в соответствии со свои планом, и если да, то на каком ходу впервые образуется квадратик 2 × 2 из чёрных пикселей.

Входные данные

В первой строке входных данных следуют три целых числа n, m, k (1 ≤ n, m ≤ 1000, 1 ≤ k ≤ 105) — соответственно количество строк, количество столбцов и количество ходов, которые совершит Паша.

В следующих k строках заданы ходы Паши в порядке их совершения. Каждая строка состоит из двух целых чисел i и j (1 ≤ i ≤ n, 1 ≤ j ≤ m), обозначающих номер строки и номер столбца, содержащих пиксель, который будет покрашен на очередном ходу.

Выходные данные

Если Паша проиграет, то выведите номер хода, на котором образуется квадратик 2 × 2 из чёрных пикселей.

Если Паша не проиграет, то есть за указанные k ходов на поле не образуется квадратик 2 × 2 из чёрных пикселей, выведите 0.

A. Максимум в таблице

Перебор реализация *800

Таблица a размера n × n задаётся следующим образом:

  • В первой строке и в первом столбце таблицы стоят единицы, то есть ai, 1 = a1, i = 1 для всех i = 1, 2, ..., n.
  • Каждое из оставшихся чисел в таблице определяется как сумма числа над ним и числа слева от него. Иными словами, остальные элементы таблицы задаются формулой ai, j = ai - 1, j + ai, j - 1.

Эти условия однозначно задают все элементы таблицы.

Вам даётся число n. Требуется определить значение максимального числа в таблице n × n, построенной по вышеприведенным правилам.

Входные данные

В единственной строке входных данных задано натуральное число n (1 ≤ n ≤ 10) — количество строк и столбцов таблицы.

Выходные данные

В единственной строке выведите натуральное число m — максимальное число построенной таблицы.

Примечание

Во втором тесте строки таблицы выглядят так:

{1, 1, 1, 1, 1}, 
{1, 2, 3, 4, 5}, 
{1, 3, 6, 10, 15}, 
{1, 4, 10, 20, 35}, 
{1, 5, 15, 35, 70}.

D. Лиса и прыжки

битмаски дп математика Перебор *1900

Лиса Ciel играет в игру. Она стоит на бесконечной длинной ленте с ячейками, пронумерованными целыми числами (положительными, отрицательными и нулем). В начале она стоит в ячейке 0.

Также есть n карточек, каждая из которой характеризуется числом li и стоимостью ci. Если лиса заплатит ci долларов, то она сможет применить i-ю карточку. После применения i-й карточки лиса сможет совершать прыжки длины li, то есть, от ячейки x к ячейке (x - li) или ячейке (x + li).

Лиса хочет научиться прыгать в любую ячейку на ленте (возможно, посетив некоторые промежуточные ячейки). Для достижения этой цели она хочет купить некоторое количество карточек, заплатив при этом как можно меньше денег.

Если этого возможно добиться, посчитайте минимальную стоимость.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 300), количество карточек.

Во второй строке записано n чисел li (1 ≤ li ≤ 109), длины прыжков, указанные на карточках.

В третьей строке записано n чисел ci (1 ≤ ci ≤ 105), стоимости карточек.

Выходные данные

Если невозможно купить некоторое количество карточек и получить возможность прыгнуть в любую ячейку, выведите -1. В противном случае, выведите минимальную стоимость покупки такого набора карточек.

Примечание

В первом примере недостаточно купить одну карточку: например, если купить карточку для прыжков длины 100, то нельзя прыгнуть ни в одну ячейку, номер которой не кратен 100. Оптимальный способ — купить первую и вторую карточку, тогда можно будет добраться до любой ячейки.

Во втором примере, даже если купить все карточки, то вы не сможете прыгнуть ни в одну ячейку, номер которой не кратен 10, так что ответ — -1.

B1. Перестановки

Перебор *1400

Вам дана перестановка p чисел 1, 2, ..., n. Давайте обозначим через f(p) следующую сумму:

Найдите лексикографически m-ю перестановку длины n, обладающую максимальным возможным значением f(p).

Входные данные

Единственная строка входных данных содержит два целых числа n и m (1 ≤ m ≤ cntn), где cntn — количество перестановок длины n, обладающих максимальным возможным значением f(p).

Задача состоит из двух подзадач, которые отличаются друг от друга ограничениями на входные данные. За решение каждой подзадачи вы получите определенное количество баллов. Описание подзадач следует ниже.

  • В подзадаче B1 (3 балла), выполняется ограничение 1 ≤ n ≤ 8.
  • В подзадаче B2 (4 балла), выполняется ограничение 1 ≤ n ≤ 50.
Выходные данные

Выведите n чисел — искомую перестановку.

Примечание

В первом примере из условия обе перестановки чисел {1, 2} приводят к максимальному возможному значению f(p), равному 4. Из них (2, 1) идет второй в лексикографическом порядке.

G1. Инверсии

meet-in-the-middle дп Перебор поиск в глубину и подобное *1800

Вам дана перестановка из n чисел p1, p2, ..., pn. Мы совершаем k операций следующего типа: выбираем равновероятно случайным образом два индекса l и r (l ≤ r) и меняем порядок элементов pl, pl + 1, ..., pr на обратный. Ваша задача — определить математическое ожидание количества инверсий в итоговой перестановке.

Входные данные

Первая строка входных данных содержит два целых числа n и k (1 ≤ n ≤ 100, 1 ≤ k ≤ 109). Следующая строка содержит n целых чисел p1, p2, ..., pn — данную перестановку. Все pi различны и находятся в интервале от 1 до n.

Задача состоит из трех подзадач, которые отличаются друг от друга ограничениями на входные данные. За решение каждой подзадачи вы получите определенное количество баллов. Описание подзадач следует ниже.

  • В подзадаче G1 (3 балла) выполняется 1 ≤ n ≤ 6, 1 ≤ k ≤ 4.
  • В подзадаче G2 (5 баллов) выполняется 1 ≤ n ≤ 30, 1 ≤ k ≤ 200.
  • В подзадаче G3 (16 баллов) выполняется 1 ≤ n ≤ 100, 1 ≤ k ≤ 109.
Выходные данные

Выведите ответ на задачу с абсолютной или относительной погрешностью не более чем 1e - 9.

Примечание

Рассмотрим первый пример. В перестановке (1, 2, 3) (которая изначально не содержит инверсий) будет выбран один интервал и порядок его элементов будет изменен на обратный. С вероятностью , интервал будет состоять из одного элемента и перестановка не изменится. С вероятностью мы поменяем местами первые два элемента и получим перестановку (2, 1, 3) с одной инверсией. С такой же вероятностью мы можем выбрать интервал, состоящий из последних двух элементов, что приведет к перестановке (1, 3, 2), в которой тоже одна инверсия. Наконец, с вероятностью выбранный случайным образом интервал будет содержать все элементы, что приведет к перестановке (3, 2, 1) с тремя инверсиями. Таким образом, мат.ожидание количества инверсий равно .

B. Хан Соло и лазерная пушка

геометрия математика Перебор реализация Структуры данных *1400

На поле боя размещены n имперских штурмовиков. Поле боя представляет собой плоскость с прямоугольной системой координат. Каждый штурмовик задан своими координатами (x, y) на этой плоскости.

У Хана Соло есть новейшая двусторонняя лазерная пушка для сражения с этими штурмовиками. Она расположена в точке с координатами (x0, y0). За один выстрел она способна поразить всех штурмовиков, находящихся на некоторой прямой, проходящей через точку (x0, y0).

Требуется определить, за какое минимальное количество выстрелов Хан Соло сможет уничтожить всех штрумовиков.

Так как пушка — новейшее изобретение, она стреляет очень быстро и штурмовики даже после очень большого количества выстрелов не успевают понять, что происходит, и сменить свое местоположение.

Входные данные

В первой строке записано три целых числа n, x0 и y0 (1 ≤ n ≤ 1000,  - 104 ≤ x0, y0 ≤ 104) — количество штурмовиков на поле боя и координаты вашей пушки.

В следующих n строках записано по два целых числа xi, yi ( - 104 ≤ xi, yi ≤ 104) — координаты штурмовиков на поле боя. Известно, что ни один из штурмовик не стоит в той же точке, где находится пушка. Несколько штурмовиков могут находится в одной и той же точке.

Выходные данные

Выведите одно целое число — минимальное количество выстрелов, за которое Хан Соло сможет уничтожить всех штурмовиков.

Примечание

Пояснения к первому и второму тесту из условия соответственно:

B. Drazil и его счастливые друзья

meet-in-the-middle Перебор снм теория чисел *1300

У Drazil много друзей. Некоторые из них счастливы, а некоторые несчастны. Drazil хочет, чтобы все его друзья были счастливы. Поэтому он придумал такой план.

Среди его друзей n юношей и m девушек. Пронумеруем их от 0 до n - 1 и 0 до m - 1 соответственно. В i-й день Drazil приглашает -го юношу и -ю девушку поужинать (Drazil программист, поэтому i принимает значения с нуля). Если один из этих двух людей счастлив, то и другой становится счастливым. В противном случае оба человека останутся в том состоянии, в котором они были изначально. Как только человек становится счастливым (или же если он был счастлив с самого начала), он остается счастливым навсегда.

Drazil интересно, приведёт ли этот план к тому, что его друзья рано или поздно все станут счастливыми. Помогите ему найти ответ на этот вопрос.

Входные данные

В первой строке следуют два целых числа n и m (1 ≤ n, m ≤ 100).

Во второй строке следует целое число b (0 ≤ b ≤ n), — количество счастливых парней среди друзей Drazil, затем следуют b различных целых чисел x1, x2, ..., xb (0 ≤ xi < n), — номера счастливых парней.

В третьей строке следует целое число g (0 ≤ g ≤ m), — количество счастливых девушек среди друзей Drazil, затем следуют g различных целых чисел y1, y2, ... , yg (0 ≤ yj < m), — номера счастливых девушек.

Гарантируется, что у Drazil есть не менее одного несчастного друга.

Выходные данные

Если Drazil может осчастливить всех своих друзей, воспользовавшись этим планом, выведите "Yes". В противном случае выведите "No".

Примечание

Определим как остаток от целочисленного деления i на k.

В первом тесте из условия:

  • В 0-й день Drazil приглашает 0-го парня и 0-ю девушку. Так как 0-я девушка изначально счастливая, 0-й юноша становится счастлив в этот день.
  • В 1-й день Drazil приглашает 1-го парня и 1-ю девушку. Они оба несчастны, так что в этот день ничего не меняется.
  • Во 2-й день Drazil приглашает 0-го парня и 2-ю девушку. Так как 0-й парень уже счастлив, в этот день он делает 2-ю девушку счастливой.
  • В 3-й день Drazil приглашает 1-го парня и 0-ю девушку. 0-я девушка счастливая, она делает счастливым 1-го парня.
  • В 4-й день Drazil приглашает 0-го парня и 1-ю девушку. 0-ой парень счастлив, так что он делает 1-ю девушку счастливой. Итак, в этот момент все друзья Drazil становятся счастливыми.

F. Паша и труба

Бинарный поиск дп Комбинаторика Перебор реализация *2300

На очередном заседании правящей партии «A» министр Павел предложил усовершенствовать систему водопровода и проложить в городе новую трубу.

Город на карте представляет собой прямоугольное клетчатое поле размера n × m. Каждая клетка поля либо свободна (тогда труба может проходить по ней), либо занята (по такой клетке труба проходить не может). На карте свободные клетки обозначены символом '.', а занятые — '#'.

Труба должна удовлетворят следующим свойствам:

  • труба имеет вид ломанной ширины 1,
  • труба проходит по свободным клеткам,
  • труба начинается с края поля, но не с угловой клетки,
  • труба заканчивается на краю поля, но не в угловой клетке,
  • труба имеет не более 2-х поворотов (на 90 градусов),
  • на краях поля должно существовать ровно две клетки, по которым проходит труба,
  • если труба представляет собой один отрезок, то концевые точки трубы должны лежать на разных краях поля,
  • для каждой неконцевой клетки трубы существует ровно две соседние по стороне клетки, которые тоже принадлежат трубе,
  • для каждой из концевых клеток трубы существует ровно одна соседняя по стороне клетка, которая тоже принадлежит трубе.

Примеры разрешенных маршрутов для прокладывания труб:


....# ....# .*..#
***** ****. .***.
..#.. ..#*. ..#*.
#...# #..*# #..*#
..... ...*. ...*.

Примеры запрещенных маршрутов для прокладывания труб:


.**.# *...# .*.*#
..... ****. .*.*.
..#.. ..#*. .*#*.
#...# #..*# #*.*#
..... ...*. .***.

В примерах трубы обозначены символами ' * '.

Вам поручили написать программу, которая вычисляет количество различных способов проложить ровно одну трубу на территории города.

Два способа прокладывания труб считаются различными, если они отличаются хотя бы в одной клетке.

Входные данные

В первой строке входных данных следуют два целых числа n, m (2 ≤ n, m ≤ 2000) — размеры карты Берляндии.

В следующих n строках задано по m символов — карта города.

Если клетка карты обозначена символом '.', значит она свободна, и по ней может проходить труба.

Если клетка карты обозначена символом '#', значит она занята, и труба по ней проходить не может.

Выходные данные

Выведите в первую строку выходных данных одно целое число — количество различных способов проложить ровно одну трубу.

Примечание

В первом примере существует 3 способа проложить трубу (клетки трубы обозначены символами ' * '):


.*. .*. ...
.*# **# **#
.*. ... .*.

E. Аня и кубики

meet-in-the-middle Бинарный поиск битмаски дп математика Перебор *2100

Аня очень любит складывать и наклеивать. Сегодня она решила заняться именно этим.

У Ани есть n кубиков, лежащих в ряд и пронумерованных от 1 до n слева направо, с написанными на них натуральными числами. Также у нее есть k наклеек с восклицательными знаками. Известно, что количество наклеек не превышает количества кубиков.

Аня может наклеить на кубик восклицательный знак и получить факториал числа, записанного на кубике. Например, если на кубике было написано 5, то после наклеивания будет 5!, что равно 120.

Вам нужно помочь Ане посчитать, сколько существует способов оставить какое-то количество кубиков и наклеить на некоторые из них восклицательные знаки, использовав не более k восклицательных знаков, так, чтобы сумма чисел, написанных на кубиках (как отмеченных восклицательными знаками, так и нет), после наклеивания стала равна S. Аня может наклеить на один кубик не более одного восклицательного знака. Справитесь?

Два способа будем считать одинаковыми, если совпадают номера оставленных кубиков, а также совпадают номера кубиков, на которые наклеены восклицательные знаки.

Входные данные

В первой строке входных данных заданы через пробел три целых числа n, k и S (1 ≤ n ≤ 25, 0 ≤ k ≤ n, 1 ≤ S ≤ 1016) — количество кубиков и количество наклеек, которые есть у Ани, и сумма, которую необходимо набрать.

Во второй строке следуют n целых положительных чисел ai (1 ≤ ai ≤ 109) — числа, записанные на кубиках.

На разных кубиках могут быть написаны одинаковые числа.

Выходные данные

Выведите в первую строку выходных данных единственное целое неотрицательное число — количество способов оставить какое-то количество кубиков и наклеить на некоторые из них восклицательные знаки так, чтобы сумма чисел стала равна заданному числу S.

Примечание

В первом тесте из условия единственный способ достичь желаемого — оставить оба кубика, и наклеить на каждый из них по восклицательному знаку.

Во втором тесте из условия единственный способ достичь желаемого — оставить оба кубика, но не клеить восклицательный знак ни на один из них.

В третьем тесте из условия можно оставить любой из трёх кубиков, при этом на него можно как клеить, так и не клеить восклицательный знак, поэтому существует шесть способов достичь желаемого.

A. Король воров

Перебор реализация *1300

В данной задаче речь пойдёт про упрощённую модель игры King of Thieves.

В новой игре от компании ZeptoLab «King of Thieves» вам предстоит, управляя своим персонажем, добраться до сундука с золотом, избегая ловушек и препятствий, расставленных на пути.

Интересной особенностью игры является возможность проектирования собственных уровней, которые будут доступны для прохождения другим игрокам. Рассмотрим следующую модель простого уровня.

Подземелье состоит из n участков, расположенных на одном вертикальном уровне, каждый из которых представляет из себя либо площадку, на которой может находиться персонаж, либо яму, падение в которую приводит к проигрышу. Все участки имеют одинаковую длину, площадки на схеме уровня изображаются как '*', а ямы — как '.'.

На возможность скоростного прохождения уровня влияет возможность делать подряд множество прыжков одинаковой длины. Более формально, находясь на площадке номер i1, персонаж может сделать последовательность прыжков по площадкам i1 < i2 < ... < ik, если i2 - i1 = i3 - i2 = ... = ik - ik - 1. Разумеется, все участки i1, i2, ... ik должны быть именно площадками, а не ямами.

Уровень считается хорошим, если в нём можно произвести последовательность из четырёх прыжков одинаковой длины, или, иными словами, должна существовать последовательность i1, i2, ..., i5, состоящая из пяти площадок, расположенных через равные промежутки. По данной схеме уровня проверьте, является ли он хорошим.

Входные данные

В первой строке расположено целое число n (1 ≤ n ≤ 100) — количество участков на уровне.

В единственной строке расположена схема уровня, представляющая собой строку из n символов '*' и '.'.

Выходные данные

Если уровень является хорошим, то выведите ещё слово "yes" (без кавычек), иначе, выведите слово "no" (без кавычек).

Примечание

В первом тесте из условия можно совершить последовательность из прыжков по площадкам 2, 5, 8, 11, 14.

C. Ам Ням и леденцы

жадные алгоритмы математика Перебор *2000

Милый маленький монстрик Ам Ням очень любит леденцы. Однажды он оказался в весьма необычном положении, в котором ему пришлось применить смекалку и сообразительность, чтобы вдоволь полакомиться конфетами. А вы бы справились, оказавшись на его месте?

Как-то раз, придя к своему другу Эвану, Ам Ням не застал его дома, но зато обнаружил два мешка с конфетами. В первом мешке лежало множество синих леденцов, а во втором — множество красных леденцов. Ам Ням знает, что каждый красный леденец весит Wr грамм, а каждый синий — Wb грамм. При этом, съедая один красный леденец, Ам Ням получает Hr единиц радости, а съедая один синий леденец, Ам Ням получает Hb единиц радости.

Любовь к леденцам — это святое, но переедать тоже нельзя. Ам Ням знает, что если он суммарно съест более C грамм конфет, то ему станет плохо. Ам Ням считает, что оставлять часть конфеты неприлично, поэтому он может съесть леденец только целиком. Как прирождённый математик, Ам Ням быстро определил, сколько конфет какого типа ему надо съесть, чтобы получить максимальное количество единиц радости. А вы справитесь повторить его достижение? Считайте, что в каждом из мешков находится больше конфет, чем способен съесть Ам Ням.

Входные данные

В единственной строке заданы пять целых чисел C, Hr, Hb, Wr, Wb (1 ≤ C, Hr, Hb, Wr, Wb ≤ 109).

Выходные данные

Выведите единственное целое число — максимальное количество единиц радости, которое может получить Ам Ням.

Примечание

В первом тесте из условия Ам Ням может съесть по два леденца каждого вида, и получить тем самым 16 единиц радости.

B. Фото на память - 2 (online mirror version)

жадные алгоритмы Перебор сортировки *1900

Прошло много лет, и на вечеринке снова встретились n друзей. С момента последней встречи техника шагнула далеко вперёд, появились фотоаппараты с автоспуском, и теперь не требуется, чтобы один из друзей стоял с фотоаппаратом, и, тем самым, оказывался не запечатлённым на снимке.

Упрощенно процесс фотографирования можно описать следующим образом. На фотографии каждый из друзей занимает прямоугольник из пикселей: в стоячем положении i-й из них занимает прямоугольник ширины wi пикселей и высоты hi пикселей. Но также, при фотографировании каждый человек может лечь, и тогда он будет занимать прямоугольник ширины hi пикселей и высоты wi пикселей.

Общая фотография будет иметь размеры W × H, где W — суммарная ширина всех прямоугольников-людей, а H — максимальная из высот. Друзья хотят определить, какую минимальную площадь может иметь общая фотография, если лечь может не более половины всех друзей (ведь будет странно, если больше n / 2 солидных джентльменов будут лежать на фотографии, не так ли?)

Помогите им в этом.

Входные данные

В первой строке следует целое число n (1 ≤ n ≤ 1000) — количество друзей.

В последующих n строках следуют по два целых числа wi, hi (1 ≤ wi, hi ≤ 1000), обозначающие размеры прямоугольника, соответствующего i-му из друзей.

Выходные данные

Выведите единственное целое число, равное минимальной возможной площади фотографии, вмещающей всех друзей, если лечь может не более половины всех друзей.

A. Тавас и Нафас

Перебор реализация *1000

Тавас узнал количество баллов за тест, и теперь он хочет поделиться ими со своей девушкой Нафас.

Его телефон работает под управлением операционной системы Tavdroid, на клавиатуре которой нет цифр! Тавас хочет отправить Нафас смс-сообщение со своими результатами, так что деваться некуда — придется писать число баллов словами.

Тавас наелся сухого кофе, так что сейчас он не очень соображает.

Ваша задача — помочь ему и сказать, что печатать.

Входные данные

В первой и единственной строке ввода записано целое число s (0 ≤ s ≤ 99), результат Таваса.

Выходные данные

Выведите единственную строку, состоящую только из строчных букв английского алфавита и дефисов ('-'). Не используйте пробелы.

Примечание

Всю необходимую информацию про английские числительные можно найти по ссылке: http://en.wikipedia.org/wiki/English_numerals.

B. Тавас и СаДДас

битмаски Комбинаторика Перебор реализация *1100

Тавас снова начал есть сухой кофе ложками! Кейон пожаловался на ужасный запах, но юноша не остановился. Тогда Кейон попросил своего умного друга СаДДаса наказать Таваса! СаДДас забрал наушники Таваса и сказал ему: "Верну их, если ты решишь следующую задачу."

Задача звучит следующим образом:

Вам дано счастливое число n. Счастливые числа — это положительные целые числа, содержащие в своей десятичной записи только счастливые цифры 4 и 7. Например, числа 47, 744, 4 счастливые, а 5, 17, 467 — нет.

Если мы отсортируем все счастливые числа в возрастающем порядке, на какой позиции (при нумерации с единицы) будет стоять число n?

Тавас не такой умный, как СаДДас, так что он попросил Вас сделать ему одолжение и решить эту задачу, чтобы он мог получить назад свои наушники.

Входные данные

В первой и единственной строке следует счастливое число n (1 ≤ n ≤ 109).

Выходные данные

Выведите позицию, на которой n находится среди всех счастливых чисел.

D. Сочинение песни

дп Перебор Строки *2100

Одна из любимых забав Ёжика и его друга — это брать какое-нибудь предложение или песенку и заменять в них половину слов (а то и все) на имена друг друга.

Вот близится День Рождения, и Ёжик решил подготовить своему другу особенный подарок — очень длинную песенку, в которой много раз будет повторяться его имя. Но вот беда — ему никак не удаётся сочинить хорошую песенку!

Дело в том, что Ёжик уже точно решил, какой длины должно быть получившееся предложение (т.е. сколько букв в нём должно быть), и в каких позициях в этом предложении должно входить имя друга, а вот больше ни в какой позиции вхождения этого имени быть не должно. Кроме того, Ёжик решил ограничиться в этом предложении только первыми K буквами английского алфавита (так что это будет даже не предложение, а одно длинное слово).

В итоге и правда получается достаточно сложная задача, поэтому Ёжик просит Вас помочь ему — написать программу, которая по заданной строке-имени P, длине N искомого слова, заданным позициям вхождения имени P в искомое слово и размеру алфавита K построит это слово. Вхождения имени, вообще говоря, могут перекрываться.

Входные данные

В первой строке записаны числа N и K — соответственно длина искомой строки и размер алфавита. Ограничения: 1 ≤ N ≤ 100, 2 ≤ K ≤ 26.

Во второй строке записано имя P — непустая строка длиной не более N символов, состоящая только из первых K символов английского алфавита (в нижнем регистре).

В третьей строке находится строка длины N - length(P) + 1, состоящая только из нулей и единиц. Единица в i-ой позиции означает, что в этом месте должно начинаться вхождение имени P, ноль — что вхождения в этой позиции быть не должно.

Выходные данные

Выведите искомое слово S. Если ответов несколько, выведите любой.

Если решение не существует, выведите «No solution».

A. Солдат и бананы

математика Перебор реализация *800

Солдат хочет купить w бананов в магазине. Ему надо заплатить k долларов за первый банан, 2k долларов — за второй и так далее (иными словами, за i-й банан надо заплатить i·k долларов).

У него есть n долларов. Сколько долларов ему придется одолжить у однополчанина, чтобы купить w бананов?

Входные данные

В первой строке записано три положительных целых числа k, n, w (1  ≤  k, w  ≤  1000, 0 ≤ n ≤ 109), стоимость первого банана, изначальное количество долларов у солдата и количество бананов, которые он хочет купить.

Выходные данные

Выведите единственное целое число — количество долларов, которое солдату надо одолжить у однополчанина. Если деньги одалживать не надо, выведите 0.

B. Солдат и значки

жадные алгоритмы Перебор реализация сортировки *1200

У полковника есть n значков. Он хочет дать по значку каждому из n его солдатов. У каждого значка есть коэффициент крутизны, который показывает уровень, достигнутый владельцем значка. Коэффициент крутизны можно увеличить на 1 за одну монету.

Для каждой пары солдат один из них должен получить значок, коэффициент которого строго выше второго. Для солдат не важно, какие у них значения коэффициента, требуется лишь, чтобы их коэффициенты отличались друг от друга.

Полковник знает, какому солдату должен достаться какой значок исходно, но есть вот какая проблема. У некоторых значков может быть одинаковый коэффициент крутизны. Помогите ему и подсчитайте, сколько денег надо суммарно заплатить, чтобы у всех значков были различные коэффициенты крутизны.

Входные данные

Первая строка состоит из единственного целого числа n (1 ≤ n ≤ 3000) — количества солдат.

В следующей строке записано n целых чисел ai (1 ≤ ai ≤ n), обозначающих коэффициент крутизны каждого значка.

Выходные данные

Выведите единственное целое число — минимальное количество монет, которые придется выплатить полковнику.

Примечание

В первом тесте из примера мы можем увеличить коэффициент первого значка на 1.

Во втором тесте из примера мы можем увеличить коэффициенты второго и третьего значка на 1.

C. Солдат и карты

игры Перебор поиск в глубину и подобное *1400

Два скучающих солдата играют в карточную войну (эквивалент карточной игры «пьяница» в англоязычных странах). Их колода состоит ровно из n карт, пронумерованных различными числами от 1 до n. Исходно они делят между собой картны некоторым образом, возможно, не равным образом.

Правила игры следующие. На каждом ходу происходит сражение. Каждый игрок берет карту с вершины своей стопки и кладет на стол. Тот, у кого значение карты больше, выигрывает в этом сражении, берет обе карты со стола и кладет в низ своей стопки. Точнее говоря, сперва он берет карту противника и кладет в низ своей стопки, затем кладет свою карту в низ своей стопки. Если после какого-то хода стопка одного игрока становится пустой, то он проигрывает, а другой игрок побеждает.

Вам надо подсчитать, после сколько будет сражений и кто победит, в противном случае надо сказать, что игра не прекратится.

Входные данные

В первой строке записано единственное целое число n (2 ≤ n ≤ 10), количество карт.

Во второй строке записано целое число k1 (1 ≤ k1 ≤ n - 1), количество карт у первого солдата. Затем следует k1 целых чисел — значения карт первого солдата в порядке сверху вниз.

В третьей строке записано целое число k2 (k1 + k2 = n), количество карт у второго солдата. Затем следует k2 целых чисел — значения карт второго солдата сверху вниз.

Все значения карт различны.

Выходные данные

Если кто-то победит в этой игре, выведите 2 целых чисел, где первое число обозначает количество сражений в игре, а второе — 1 или 2, обозначающее, какой игрок победил.

Если игра не закончится, а будет продолжаться вечно, выведите  - 1.

Примечание

Первый пример:

Второй пример:

A. Майк, лягушка и цветок

жадные алгоритмы математика Перебор реализация *2200

У Майка есть лягушка и цветок. Его лягушку зовут Xaniar, а его цветок зовут Abol. Изначально (в момент времени 0), высота Xaniar равна h1 и высота Abol равна h2. Каждую секунду Mike поливает Abol и Xaniar.

Если сейчас высота Xaniar равна h1, а высота Abol равна h2, то через секунду высота Xaniar будет равна , а высота Abol будет равна , где x1, y1, x2 и y2 — некоторые целые числа, а обозначает остаток от целочисленного деления a на b.

Майк — фанат спортивного программирования. Он хочет знать через какое время высота Xaniar станет равна a1 и высота Abol станет равна a2 в первый раз.

Майк попросил Вас помочь ему. Вычислите минимальное время или же скажите, что требуемое событие никогда не произойдет.

Входные данные

В первой строке ввода записано целое число m (2 ≤ m ≤ 106).

Во второй строке ввода записаны целые числа, h1 и a1 (0 ≤ h1, a1 < m).

В третьей строке ввода записаны целые числа, x1 и y1 (0 ≤ x1, y1 < m).

В четвертой строка ввода записаны целые числа, h2 и a2 (0 ≤ h2, a2 < m).

В пяятой строке ввода записаны целые числа, x2 и y2 (0 ≤ x2, y2 < m).

Гарантируется, что h1 ≠ a1 и h2 ≠ a2.

Выходные данные

Выведите минимальное количество секунд, необходмое до того момента, как Xaniar достигнет высоты a1, а Abol достигнет высоты a2, а если же это никогда не произойдёт, выведите -1.

Примечание

В первом тесте из условия высоты меняются следующим образом:

Xaniar:

Abol:

A. Майк и факс

Перебор реализация Строки *1100

Пока Майк гулял по метро, всё посыпалось из его рюкзака прямо на землю. В его рюкзаке было несколько факс-сообщений. Майк конкатенировал эти строки в некоторым порядке и теперь у него есть строка s.

Он не уверен, его ли это рюкзак или чужой. Он помнит, что в его рюкзаке было ровно k сообщений, каждое сообщение представляло собой строку-палиндром, и у всех этих строк была однаковая длина.

Он просит вас помочь ему и сказать, свой ли рюкзак он подобрал. Проверьте, является ли данная строка s конкатенацией из k палиндромов одинаковой длины.

Входные данные

В первой строке ввода записана строка s, содержащая строчные буквы латиницы (1 ≤ |s| ≤ 1000).

Во второй строке записано целое число k (1 ≤ k ≤ 1000).

Выходные данные

Выведите "YES" (без кавычек), если юноша нес свой собственный рюкзак, в противном случае выведите "NO" (без кавычек).

Примечание

Палиндром — это строка, которая одинаково читается в обе стороны.

Во втором примере сообщения в рюкзаке могут быть "saddas" и "tavvat".

B. Майк и весёлая игра

дп жадные алгоритмы Перебор реализация *1400

Майк с некоторыми мишками играют в веселую игру. Майк — судья. Все медведи, кроме Майка, стоят на клетчатом поле размера n × m, в каждой клетке стоит ровно по медведю. Обозначим медведя на пересечении столбца номер j и строки номер i как (i, j). Майк держит руки на ушах (так как он судья), а каждый медведь стоящий на поле, закрывает лапами рот или глаза.

Медведи разыгрывают q раундов. В каждом раунде Майк выбирает медведя (i, j) и говорит ему поменять своё состояние, то есть, если медведь закрывает лапами рот, то он должен переместить лапы на глаза, а в противном случае — закрыть лапами рот. После этого Майк хочет знать счёт медведей.

Счет медведей — это максимальное по всем строкам количество стоящих подряд медведей с лапами на глазах в этой строке.

Медведи ленивые, поэтому Майк попросил Вас помочь ему. Для каждого раунда, назовите ему счет медведей после того, как поменет своё состояние выбранный в этом раунде медведь.

Входные данные

В первой строке находится три целых числа, n, m и q (1 ≤ n, m ≤ 500 и 1 ≤ q ≤ 5000).

В следующих n строках задано описание поля. Каждая строка состоит из m целых чисел, разделенных пробелами. Каждое из этих чисел равно либо 0 (закрывается рот), либо 1 (закрываются глаза).

В следующих q строках записана информация о раундах. В каждой из них записано два целых числа, i и j (1 ≤ i ≤ n and 1 ≤ j ≤ m), номер строки и столбца медведя, меняющего состояние.

Выходные данные

После каждого раунда выведите текущий счет медведей.

B. Самое маленькое число

Перебор *1600

В очередной раз получив кол по алгебре, Володя решил поупражняться в арифметике. Для этого он выписал на доску четыре целых числа a, b, c, d и в течение трех минут каждую минуту заменял какие-то два числа (не обязательно соседних) на доске на их сумму или произведение. В итоге он получил одно число, но из-за плохой памяти забыл какое. Несмотря на это, Володя помнит исходные числа, последовательность произведенных им операций, а также свое удивление от того, насколько маленьким получился результат. Помогите Володе вспомнить забытое число: определите, какое минимальное число можно получить из данных чисел данными операциями.

Входные данные

Первая строка содержит четыре целых числа, разделенные пробелом: 0 ≤ a, b, c, d ≤ 1000 — числа, выписанные Володей. Вторая строка содержит последовательность из трех символов "+" и "*", разделенных пробелом — операции в том порядке, в котором их производил Володя. ("+" соответствует сложению, "*" — умножению.)

Выходные данные

Выведите единственное целое число — минимальное число, которое Володя мог получить.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cin (также вы можете использовать спецификатор %I64d).

A. Две подстроки

дп жадные алгоритмы Перебор реализация Строки *1500

Дана строка s. Требуется определить, существуют ли в данной строке s две непересекающиеся подстроки "AB" и "BA" (подстроки могут идти в любом порядке).

Входные данные

На вход подаётся строка s длиной от 1 до 105 символов, состоящая из заглавных букв латинского алфавита.

Выходные данные

Выведите "YES" (без кавычек), если строка s содержит две непересекающиеся подстроки "AB" и "BA", и "NO" иначе.

Примечание

В первом примере входных данных, несмотря на то, что есть подстроки "AB" и "BA", их вхождения пересекаются, поэтому ответ — "NO".

Во втором примере входных данных есть следующие вхождения подстрок: BACFAB.

В третьем примере нет ни подстроки "AB", ни подстроки "BA".

B. Подготовка олимпиады

битмаски Перебор *1400

У вас есть n задач. Сложность i-й из них вы оценили целым числом ci. Теперь вы хотите подготовить комплект задач для олимпиады, используя некоторые из придуманных задач.

Комплект задач для олимпиады должен состоять не менее чем из двух задач. Вы считаете, что суммарная сложность задач олимпиады должна быть не менее l и не более r. Также вы считаете, что разница в сложности между самой легкой и самой тяжелой из выбранных задач должна быть не меньше x.

Найдите количество способов выбрать комплект задач для олимпиады.

Входные данные

Первая строка содержит четыре целых числа n, l, r, x (1 ≤ n ≤ 15, 1 ≤ l ≤ r ≤ 109, 1 ≤ x ≤ 106) — соответственно количество задач в вашем распоряжении, минимальное и максимальное значение суммарной сложности комплекта задач и минимальная разница по сложности между самой сложной задачей в комплекте и самой лёгкой.

Вторая строка содержит n целых чисел c1, c2, ..., cn (1 ≤ ci ≤ 106) — сложность каждой из придуманных задач.

Выходные данные

Выведите количество способов выбрать подходящий комплект задач для олимпиады.

Примечание

В первом примере подходят два комплекта: состоящий из второй и третьей задачи, а также состоящий из всех трех задач.

Во втором примере подходят два комплекта задач — комплект из задач сложностями 10 и 30, а также комплект из задач сложностями 20 и 30.

В третьем примере подходит любой комплект, в котором одна задача имеет сложность 10, а вторая — сложность 20.

C. Делимость на восемь

дп математика Перебор *1500

Дано целое неотрицательное число n, запись которого состоит из не более, чем 100 цифр, и не содержит ведущих незначащих нулей.

Нужно определить, можно ли в данном числе вычеркнуть некоторое (возможно нулевое) количество цифр так, чтобы полученное после вычеркивания цифр число содержало хотя бы одну цифру, было неотрицательным, не имело ведущих незначащих нулей и делилось на 8. После вычеркивания переставлять цифры запрещается.

Если решение существует, необходимо вывести его.

Входные данные

В единственной строке входных данных содержится целое неотрицательное число n. Запись числа n не содержит ведущих незначащих нулей и ее длина не превосходит 100 цифр.

Выходные данные

Выведите "NO" (без кавычек), если искомого способа вычеркнуть некоторые цифры из числа n не существует.

Иначе выведите "YES" в первой строке и число, получившееся в результате вычеркивания некоторых цифр числа n, во второй строке. Выведенное число должно делиться на 8.

Если возможных ответов несколько, требуется вывести любой из них.

A. GukiZ и контест

Перебор реализация сортировки *800

Профессору GukiZ нравятся контесты по программированию. Особенно ему нравится оценивать своих учеников по подготовленным им контестам. Сейчас он подготовил очередной контест.

Всего на занятия ходят n учеников, и до начала контеста у каждого из них есть рейтинг — некоторое положительное целое число. Ученики пронумерованы от 1 до n. Обозначим рейтинг i-го ученика за ai. GukiZ ожидает, что его ученики займут места согласно своим рейтингам.

Он считает, что каждый ученик займет место, равное . В частности, если у ученика A рейтинг строго ниже, чем у ученика B, ученик A займёт строго худшее место, чем ученик B, а если у двух учеников равные рейтинги, они разделят одно и то же место.

GukiZ хотел бы, чтобы вы определили, какие места займут ученики, если всё пойдёт именно так, как он ожидает. Помогите ему в этом.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 2000), количество учеников у GukiZ.

Во второй строке записано n чисел a1, a2, ... an (1 ≤ ai ≤ 2000), где ai — это рейтинг i-ого ученика (1 ≤ i ≤ n).

Выходные данные

В единственной строке выведите для каждого из n учеников место, которое он должен занять на контесте, в том же порядке, в котором они появляются во вводе.

Примечание

В первом примере ученики под номерами 2 и 3 расположены на первом месте (как ученики с самым высоким рейтингом), а ученик под номером 1 занимает третье место, так как есть ровно два ученика с рейтингом выше.

Во втором примере первый ученик является единственным, кто участвует в контесте.

В третьем примере ученики 2 и 5 делят первое место с наибольшим рейтингом, далее следует ученик 4 на третьем месте, а ученики номер 1 и 3 делят четвертое место.

B. ZgukistringZ

Конструктив Перебор реализация Строки *1800

Профессор GukiZ не всегда принимает строки такими, какие они есть. Получая строку, он иногда переставляет местами некоторые буквы в строке, таким образом, чтобы получалась новая строка.

У GukiZ есть строки a, b, и c. Он хочет получить строку k, поменяв местами некоторые буквы в a, так, чтобы в k содержалось как можно больше непересекающихся подстрок, равных либо b, либо c. Подстрока строки x — это строка, сформированная непрерывным подотрезком символов из x. Две подстроки строки x пересекаются, если есть такая позиция i в строке x, которая принадлежит обеим этим подстрокам.

GukiZ был разочарован, когда ни один из его учеников не смог решить эту задачу. Сможете помочь им и найти одну из возможных строк k?

Входные данные

В первой строке записана строка a, во второй строке записана строка b, а в третьей строке записана строка c (1 ≤ |a|, |b|, |c| ≤ 105, где |s| обозначает длину строки s).

Все три строки содержат только строчные буквы английского алфавита.

Строки b и c не обязательно различны.

Выходные данные

Найдите одну из возможных строк k, отвечающую описанию, данному в условии задачи. Если есть несколько возможных ответов, выведите любой.

Примечание

В третьем примере у данного оптимального решения есть три непересекающиеся подстроки, равные либо b, либо c в позициях 1 – 2 (ab), 3 – 4 (ab), 5 – 7 (aca). В этом примере существует много других оптимальных решений, одно из них: acaababbcc.

C. Ваня и весы

meet-in-the-middle дп жадные алгоритмы математика Перебор теория чисел *1900

У Вани есть чашечные весы и гири массами w0, w1, w2, ..., w100 грамм, где w — некоторое целое число не меньше 2 (ровно по одной гире каждого номинала). Ваня хочет узнать, может ли он взвесить вещь с массой m с помощью данных гирь, если гири можно класть на обе чаши весов. Формально говоря, требуется определить, можно ли положить вещь массой m и некоторые гири на левую чашу весов, а некоторые гири на правую чашу весов таким образом, чтобы чаши весов были уравновешены.

Входные данные

В первой строке содержатся два целых числа w, m (2 ≤ w ≤ 109, 1 ≤ m ≤ 109) — число, задающее массы гирь и массу вещи.

Выходные данные

Выведите слово 'YES', если вещь можно взвесить и 'NO', если нельзя.

Примечание

Пояснение к первому тесту из условия. На одной чаше может быть вещь массой 7 и гиря массой 3, а на второй чаше две гири массами 9 и 1 соответственно. Тогда 7 + 3 = 9 + 1.

Пояснение ко второму тесту из условия. На одной чаше может быть вещь массой 99 и гиря массой 1, а на второй гиря массой 100.

Пояснение к третьему тесту из условия. Взвесить вещь, как описано в условии, невозможно.

D. Ваня и треугольники

геометрия Комбинаторика математика Перебор сортировки Структуры данных *1900

Ване было скучно и он нарисовал n различных точек на плоскости. После этого он соединил попарно все точки и увидел, что в итоге образовалось большое количество треугольников с вершинами в отмеченных точках. Он просит вас посчитать количество образовавшихся треугольников с ненулевой площадью.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 2000) — количество отмеченных точек на плоскости.

В следующих n строках находятся по два целых числа xi, yi ( - 100 ≤ xi, yi ≤ 100) – координаты i-й точки. Гарантируется, что среди точек нет совпадающих.

Выходные данные

В первой строке выведите целое число — количество треугольников с ненулевой площадью среди отмеченных.

Примечание

Пояснение к первому тесту из условия. Образовано 3 треугольника: (0, 0) - (1, 1) - (2, 0); (0, 0) - (2, 2) - (2, 0); (1, 1) - (2, 2) - (2, 0).

Пояснение ко второму тесту из усовия. Образован 1 треугольник: (0, 0) - (1, 1) - (2, 0).

Пояснение к третьему тесту из условия. Одна точка не образует ни одного треугольника.

E. Ваня и скобки

дп жадные алгоритмы Перебор Разбор выражений реализация Строки *2100

Ваня делает домашнее задание по математике. У него есть выражение типа , где x1, x2, ..., xn — цифры от 1 до 9, а знаком обозначается либо плюс '+' либо знак умножения '*'. Ване нужно поставить в этом выражении одну пару скобок так, чтобы максимизировать значение полученного выражения.

Входные данные

В первой строке содержится выражение s (1 ≤ |s| ≤ 5001, |s| нечётно), в котором на нечетных позициях находятся только цифры от 1 до 9, а на чётных только знаки  +  и  * .

Количество знаков  *  не превосходит 15.

Выходные данные

В первой строке выведите максимальное возможное значение выражения.

Примечание

Пояснение к первому тесту из условия. 3 + 5 * (7 + 8) * 4 = 303.

Пояснение к второму тесту из условия. (2 + 3) * 5 = 25.

Пояснение к третьему тесту из условия. (3 * 4) * 5 = 60 (также подходит множество других вариантов, например, (3) * 4 * 5 = 60).

A. Кёя и фотокниги

математика Перебор Строки *900

Кёя Оотори продает фотокниги Гостевого клуба лицея Оран. У него есть 26 фотографий, обозначаемых строчными английскими буквами от 'a' до 'z'. Он собрал их в фото-книгу с некоторыми фотографиями в некотором порядке (возможно, некоторые фотографии повторяются). Таким образом, фото-книгу можно описать как строку, состоящую из строчных английских букв.

Сейчас он хочет создать "особое издание" своей фото-книги, вставив одну дополнительную фотографию в произвольное место книги. Он хочет сделать как можно больше различных особых изданий своей фото-книги, чтобы получить больше денег. Он спрашивает у Харухи: сколько различных фото-книг может он сделать, вставляя одну дополнительную фотографию в уже имеющуюся фото-книгу?

Пожалуйста, помогите Харухи решить эту задачу.

Входные данные

В первой строке входа находится единственная строка s (1 ≤ |s| ≤ 20). Строка s состоит только из строчных английских букв.

Выходные данные

Выведите единственное целое число, равное количеству различных фото-книг, которые может сделать Кёя Оотори, вставив одну дополнительную фотографию в имеющуюся фото-книгу.

Примечание

В первом примере можно сделать 'ab','ac',...,'az','ba','ca',...,'za', и 'aa', что даёт в итоге 51 различный вариант для фото-книги.

B. Охана прибирается в комнате

жадные алгоритмы Перебор Строки *1200

Охана Мацумаэ пытается убраться в комнате, имеющей вид сетки размера n на n ячеек. Каждая ячейка изначально либо чистая, либо грязная. Охана может мести метлой по столбцам сетки. Её метла очень необычная: если она проводит ею по чистому квадрату, он становится грязным, а если она проводит по грязному квадрату, он становится чистым. Девушка хочет провести метлой по некоторым столбцам комнаты так, чтобы максимизировать количество полностью чистых строк. Разрешается проводить метлой только по всему столбцу, проводить метлой по части столбца запрещается.

Выведите максимальное количество строк, которые она может сделать полностью чистыми.

Входные данные

В первой строке ввода находится единственное целое число n (1 ≤ n ≤ 100).

В следующих n строках дано описано состояния комнаты. В i-й строке находится строка из n символов, обозначающих состояние i-й строки комнаты. В этой строке j-й символ равен '1', если j-й квадрат в i-й строке чистый, и '0', если он грязный.

Выходные данные

Выведите целое число, равное максимальному возможному количеству строк, являющихся полностью чистыми.

Примечание

В первом примере Охана может подмести 1-й и 3-й столбцы. От этого 1-й и 4-й ряд станут полностью чистыми.

Во втором примере комната уже чистая, так что Охане ничего не надо делать.

B. Дело о поддельных шестеренках

Перебор реализация *1100

Андроид Андреид — известный на всю галактику детектив. Сейчас он расследует дело о мошенниках, подделывающих знаменитые шестеренки Стоппа, такую же популярную сейчас головоломку, какой был когда-то кубик Рубика.

Самыми важными ее компонентами являются кнопка и ряд из n одинаковых шестеренок. Каждая шестерёнка имеет n зубцов, на которых написаны в порядке против часовой стрелки все числа от 0 до n - 1. При нажатии кнопки первая шестеренка поворачивается по часовой стрелке, за ней поворачивается вторая шестерёнка против часовой стрелки, за ней третья по часовой стрелке и так далее.

Также у каждой шестеренки есть ровно один активный зубец. При повороте шестерёнки новым активным зубцом становится следующий за текущим активным в соответствии с направлением поворота. Например, если n = 5, а активным зубчиком является тот, на котором написано число 0, то при повороте по часовой стрелке активным станет зубчик с числом 1, а при повороте против часовой — зубчик с числом 4.

Андреид помнит, что настоящая головоломка обладает следующим свойством: можно так нажать на кнопку несколько раз, что в итоге числа на активных зубчиках шестеренок с первой по последнюю образуют последовательность 0, 1, 2, ..., n - 1. Напишите программу, определяющую, является ли данный экземпляр головоломки настоящим или поддельным.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 1000) — количество шестерёнок.

Во второй строке заданы n чисел a1, a2, ..., an (0 ≤ ai ≤ n - 1) — последовательность активных зубчиков: на активном зубчике i-й шестеренки написано число ai.

Выходные данные

В единственной строке выведите "Yes" (без кавычек), если данный экземпляр шестеренок Стоппа настоящий, и "No" (без кавычек) в ином случае.

Примечание

В первом тесте из условия при первом нажатии кнопки последовательность активных зубчиков станет 2 2 1, а при втором — 0 1 2.

C. Артур и стол

дп жадные алгоритмы математика Перебор сортировки Структуры данных *1900

Артур купил большой и красивый стол в свою новую квартиру. Придя домой, Артур обнаружил, что его покупка стоит неустойчиво и сильно шатается.

У стола, купленного Артуром, всего n ножек, длина i-й ножки равна li.

Артур решил сделать стол устойчивым и открутить некоторые ножки. Для каждой из них Артур определил число di — сколько единиц энергии он потратит, чтобы открутить i-ю ножку.

Стол с k ножками считается устойчивым, если ножек максимальной длины строго больше половины. Например, чтобы стол с 5-ю ножками был устойчивым, необходимо, чтобы ножек максимальной длины (среди этих пяти) было хотя бы три. Также, стол с одной ножкой всегда устойчивый, а стол с двумя ножками устойчив тогда и только тогда, когда они имеют равные длины.

Перед вами стоит задача помочь Артуру и посчитать минимальное число единиц энергии, которое Артур может затратить, чтобы сделать стол устойчивым.

Входные данные

В первой строке входных данных следует целое число n (1 ≤ n ≤ 105) — изначальное количество ножек у стола, купленного Артуром.

Во второй строке входных данных задана последовательность из n целых чисел li (1 ≤ li ≤ 105), где li равно длине i-й ножки стола.

В третьей строке входных данных задана последовательность из n целых чисел di (1 ≤ di ≤ 200), где di — это количество единиц энергии, которое Артур затратит для откручивания i-й ножки стола.

Выходные данные

Выведите одно целое число — минимальное число единиц энергии, которое нужно затратить Артуру, чтобы сделать стол устойчивым.

A. Лалаландия и яблони

Перебор реализация сортировки *1100

Amr живет в Лалаландии. Лалаландия — очень красивая страна, расположенная на координатной прямой. Лалаландия славится своими яблонями — в стране они растут везде.

Всего в Лалаландии ровно n яблонь. Яблоня номер i расположена в точке xi, на ней растет ai яблок. Amr хочет собрать яблоки с этих яблонь. Amr сейчас стоит в точке x = 0. Сначала он выбирает, вправо ли он пойдёт или влево. Он будет следовать в этом направлении, пока не дойдет до первой яблони. Он соберет с этой яблони все яблоки, а затем пойдет в противоположном направлении и будет идти, пока не дойдет до первой непосещённой яблони, снова развернётся, и так далее. Иными словами, посещая каждую новую яблоню, Amr разворачивается и идёт в противоположном направлении. Amr перестанет собирать яблоки, когда в направлении его движения не останется ни одной непосещённой яблони.

Какое максимальное количество яблок он сможет собрать?

Входные данные

В первой строке записано единственное число n (1 ≤ n ≤ 100), количество яблонь в Лалаландии.

В следующих n строках записано по два целых числа xi, ai ( - 105 ≤ xi ≤ 105, xi ≠ 0, 1 ≤ ai ≤ 105), обозначающих позицию i-го дерева и количество яблок на нем.

Гарантируется, что в каждой точке находится не более одной яблони. Гарантируется, что никакое дерево не растет в точке 0.

Выходные данные

Выведите максимальное количество яблок, которое может собрать Amr.

Примечание

В первом тесте не имеет значения, пойдет ли Amr сначала влево или вправо. В обоих случаях он соберет все яблоки.

Во втором тесте оптимальное решение таково: пойти влево до x =  - 1, собрать там яблоки, развернуться, затем дойти до x = 1, собрать там яблоки, развернуться, и дойти до последнего дерева x =  - 2.

В третьем тесте оптимальное решение таково: пойти вправо до x = 1, собрать там яблоки, развернуться, после чего Amr больше не может собирать яблоки, так как слева от него нет яблонь.

C. Amr и химия

графы жадные алгоритмы кратчайшие пути математика Перебор *1900

Amr любит химию, а особенно эксперименты. Он готовится к новому, интересному эксперименту.

У Amr есть n различных типов реактивов. У каждого реактива i есть изначальный объем ai литров. Для этого эксперимента Amr надо смешать друг с другом все реактивы, но сперва надо, чтобы у всех реактивов были одинаковые объемы. Итак, его задание — сделать так, чтобы у всех реактивов были одинаковые объемы.

Для этого Amr может производить операции двух различных типов.

  • Выбрать некий реактив i и удвоить его текущий объем, то есть его новый объем будет равен 2ai
  • Выбрать некий реактив i и разделить его объем на 2, округлив вниз до целого числа литров, то есть новый объем будет равен

Предположим, что каждый реактив расположен в контейнере бесконечного объема. Теперь Amr интересно, какое минимальное количество операций необходимо для того, чтобы объемы всех химикатов стали равны?

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 105), количество реактивов.

Во второй строке записано n целых чисел через пробел ai (1 ≤ ai ≤ 105), обозначающих изначальный объем i-го реактивов в литрах.

Выходные данные

Выведите единственное целое число — минимальное количество операций, необходимое, чтобы уравнять объемы всех химикатов.

Примечание

В первом тесте оптимальное решение — разделить объем второго реактива на два и умножить объем третьего химиката на два, чтобы все объемы стали равны 4.

Во втором тесте оптимальное решение — разделить объем первого реактива на два и разделить объемы второго и третьего химиката на два дважды, чтобы все объемы стали равны 1.

A. Шестиугольник Геральда

геометрия математика Перебор *1600

Геральду на день рождения подарили очень любопытный шестиугольник. Именинник выяснил, что все углы шестиугольника равны . Затем он измерил длины его сторон и обнаружил, что каждая из них равна целому числу сантиметров. На этом свойства самого шестиугольника закончились и Геральд решил на нём порисовать.

Он нарисовал несколько отрезков, параллельных сторонам этого шестиугольника, которые разбили шестиугольник на правильные треугольники со стороной в 1 сантиметр. Теперь Геральду интересно, сколько у него получилось треугольников. Но их так много, что Геральд всё время сбивается со счёта. Помогите имениннику посчитать треугольники.

Входные данные

В первой и единственной строке входных данных через пробел перечислены 6 целых чисел a1, a2, a3, a4, a5 и a6 (1 ≤ ai ≤ 1000) — длины сторон шестиугольника в сантиметрах в порядке обхода по часовой стрелке. Гарантируется, что шестиугольник с указанными свойствами и именно такими сторонами существует.

Выходные данные

Выведите единственное целое число — количество треугольников со стороной 1 сантиметр, на которые оказался разбит шестиугольник.

Примечание

Вот так выглядит шестиугольник Геральда в первом примере:

А вот так — во втором:

A. Простые или палиндромы?

математика Перебор реализация теория чисел *1600

Рихаил Мубинчик считает, что нынешнее определение простых чисел несостоятельно — они слишком сложны и непредсказуемы. Вот другое дело — палиндромные числа. И глазу приятны, и обладают рядом замечательных свойств. Помогите Рихаилу убедить научное сообщество в этом!

Напомним, что число называется простым, если оно целое, не меньше двух, и не делится ни на какое целое положительное число кроме себя и единицы.

Рихаил называет число палиндромным, если оно целое, положительное и его запись в десятичной системе счисления без ведущих нулей является палиндромом, то есть одинаково читается слева направо и справа налево.

Одна из проблем с простыми числами заключается в том, что их слишком много. Введём следующие обозначения: π(n) — количество простых чисел, не превышающих n, rub(n) — количество палиндромных чисел, не превышающих n. Рихаил хочет доказать, что простых чисел намного больше, чем палиндромных.

Он попросил вас решить следующую задачу: по заданному значению коэффициента A найти наибольшее такое n, что π(n) ≤ A·rub(n).

Входные данные

Ввод состоит из двух целых положительных чисел p, q — числитель и знаменатель дроби, являющейся значением коэффициента A ().

Выходные данные

Если наибольшее такое число существует, то вывести его. Иначе вывести "Palindromic tree is better than splay tree" (без кавычек).

D. Указательные столбы

геометрия математика Перебор *2800

В одном ханстве было очень много дорог и очень мало дерева. Ездить по дорогам было неудобно, ведь на дорогах не было столбиков с указанием направления на важные города.

Хан решил, что это пора исправить, и приказал поставить столбики на каждую дорогу. Министр транспорта был бы и рад, только вот столбиков у него всего k. Помогите министру решить его проблему, иначе бедолага может потерять не только должность, но и голову.

Более формально: каждая дорога в ханстве представляет собой прямую на плоскости Oxy, заданную уравнением вида Ax + By + C = 0 (A и B не равны нулю одновременно). Требуется определить, можно ли поставить столбики в не более, чем k точек так, чтобы на каждой дороге оказался установлен хотя бы один столбик.

Входные данные

На ввод подаются два целых положительных числа n, k (1 ≤ n ≤ 105, 1 ≤ k ≤ 5)

Следующие n строк содержат по три целых числа Ai, Bi, Ci в каждой, коэффициенты уравнения, задающего дорогу (|Ai|, |Bi|, |Ci| ≤ 105, Ai2 + Bi2 ≠ 0).

Гарантируется, что никакие две дороги не совпадают.

Выходные данные

Если решения не существует, выведите "NO" в единственной строке (без кавычек).

Иначе в первой строке выведите "YES" (без кавычек).

Во второй строке выведите единственное число m (m ≤ k) — количество использованных столбов. Затем в m строках выведите описания положений столбиков.

Описание положения одного столбика  — это два целых числа v, u. Если u и v — два различных целых числа от 1 до n, то считается, что столбик стоит в точке пересечения дорог с номерами v и u. Если u =  - 1, а v — целое число от 1 до n, то столбик стоит на дороге номер v, причем не в точке пересечения с какой-либо другой дорогой. В любом ином случае описание столбика будет считаться некорректным, а ваш ответ — неправильным. В том числе, если v = u, либо если v и u — номера двух непересекающихся дорог, ваш ответ также будет признан неправильным.

Дороги нумеруются с 1 в том порядке, в котором они даны во входных данных.

Примечание

Обратите внимание, вам не требуется минимизировать m, но оно должно быть не больше k.

В первом тесте все три дороги пересекаются в точке (0,0).

Во втором тесте три дороги образуют треугольник, и никак нельзя поставить один столб, чтобы он стоял на всех трёх дорогах сразу.

B. Мишка и три мушкетера

графы Перебор поиск в глубину и подобное хэши *1500

Знаете ли вы историю про трех мушкетеров? Сейчас вы узнаете её происхождение.

Ришелимакье — кардинал в городе Берисе. Он устал в одиночку бороться с преступностью, поэтому ему нужны три храбрых воина, чтобы помочь бороться с плохишами.

Дано n воинов. Ришелимакье хочет выбрать троих из них на должность мушкетеров, но это не так-то просто. Самое важное условие заключается в том, что мушкетеры в целях кооперации должны знать друг друга. Но они не должны быть слишком известными, ведь старые друзья могут предать их. Для каждого мушкетера, его узнаваемость — это количество известных ему воинов, не считая двух других мушкетеров.

Помогите Ришелимакье! Узнайте, можно ли выбрать трех мушкетеров, знающих друг друга, и какова может быть минимальная сумма их узнаваемостей.

Входные данные

В первой строке записано два целых числа через пробел, n и m (3 ≤ n ≤ 4000, 0 ≤ m ≤ 4000) — количество воинов и количество пар воинов, которые знают друг друга.

В i-й из последующих m строк находятся по два целых числа через пробел, ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi), означающих, что воины ai и bi знают друг друга. Каждая пара воинов будет указана не более одного раза.

Выходные данные

Если Ришелимакье может выбрать трех мушкетеров, выведите минимальную возможную сумму их узнаваемостей.

В противном случае выведите "-1" (без кавычек).

Примечание

В первом примере Ришелимакье стоит выбрать тройку 1, 2, 3. Первый мушкетер не знает никого, кроме двух других мушкетеров, так что его узнаваемость равняется 0. Узнаваемость второго мушкетера равняется 1, потому что он знает воина номер 4. Узнаваемость третьего мушкетера также равна 1, потому что он знает воина номер 4. Сумма узнаваемостей равна 0 + 1 + 1 = 2.

Другая возможная тройка: 2, 3, 4, но у неё больше сумма узнаваемостей, равная 1 + 1 + 1 = 3.

Во втором примере нет тройки воинов, знающих друг друга.

C. Клубы

битмаски Паросочетания Перебор *2700

Обратите внимание на необычное ограничение по памяти в этой задаче.

Сотрудники MDCS (Microsoft Development Center Serbia, сербского центра разработок Майкрософта) любят вечеринки. Обычно они ходят в ночные клубы в пятницу и субботу.

Всего в MDCS работает N людей, а в городе всего есть N клубов. К сожалению, если в ночном клубе будет больше одного сотрудника Майкрософта, то уровень крутизны этой вечеринки возрастает до небес, и вечеринка заканчивается, так что владельцы клуба никогда не позволяют более, чем одному сотруднику Майкрософта войти в их клуб в течение недели (так, на всякий случай).

Вы организуете ночную жизнь сотрудников Майкрософта и у Вас есть статистика о том, насколько каждому сотруднику нравятся вечеринки в пятницу и субботу, для всех клубов.

Вам надо распределить людей по клубам, максимизируя общую сумму их довольства (они настолько довольны, насколько им нравится выбранный клуб), при этом половина людей должна пойти клубиться в пятницу, а другая половина — в субботу.

Входные данные

В первой строке записано целое число N — количество сотрудников в MDCS.

Затем следует матрица размера N × N, где элемент на пересечении i-й строки и j-го столбца — целое число, обозначающее, насколько i-му человеку нравится клубиться в j-м клубе в пятницу.

Затем следует ещё одна матрица размера N × N, где элемент на пересечении i-й строки и j-го столбце — целое число, обозначающее, насколько i-му человеку нравится клубиться в j-м клубе в субботу.

  • 2 ≤ N ≤ 20
  • N четное
  • 0 ≤  уровень довольства  ≤ 106
  • Все значения являются целочисленными
Выходные данные

Вывод должен содержать единственное целое число — максимальную возможную сумму счастья.

Примечание

Распределение людей по клубам в примере:

Пятница: 1-й человек идет в 4-й клуб (4 единицы довольства), а 4-й человек идет в 1-й клуб (4 единицы довольства).

Суббота: 2-й человек идет в 3-й клуб (81 единица довольства), а 3-й человек идет во 2-й клуб (78 единиц довольства).

4 + 4 + 81 + 78 = 167.

B. Игра

жадные алгоритмы Перебор *1700

Вам дано n чисел a1, a2, ..., an. Вы можете выполнить не более k операций. За одну операцию можно умножить одно из данных чисел на x. Требуется сделать как можно больше, где обозначает побитовое ИЛИ.

Найдите максимально возможную величину после выполнения не более k операций оптимальным образом.

Входные данные

В первой строке записано три целых числа n, k и x (1 ≤ n ≤ 200 000, 1 ≤ k ≤ 10, 2 ≤ x ≤ 8).

Во второй строке записано n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 109).

Выходные данные

Выведите максимальное значение побитового ИЛИ для элементов последовательности после выполнения операций.

Примечание

В первом примере любой возможный выбор проведения одной операции приведет к трём различным числам 1, 1, 2, так что результат будет равен .

Во втором примере, если дважды умножить 8 на 3, то получим 72. В этом случае числа будут таковы: 1, 2, 4, 72, так что значение ИЛИ будет равно 79, что является наилучшим возможным результатом.

B. Ищем напарника

Перебор реализация сортировки *1300

Есть соревнование по программированию под названием SnakeUp, в котором хотят принять участие 2n человек. Принять участие в контесте можно только в составе команды из ровно двух людей. Известна сила каждой возможной команды из двух людей. Все значения сил различны.

Каждый соревнующийся надеется, что он может найти напарника, с которым он образует как можно более сильную команду. Таким образом, соревнующийся стремится создать команду с наибольшей возможной силой, путем выбора сокомандника из тех, кто согласен быть с ним в команде. Более формально, два человека, A и B смогут создать команду, если каждый из них является наилучшим возможным напарником (среди соревнующихся, не нашедших к текущему моменту пару) друг для друга.

Определить, кто с кем будет участвовать в команде?

Входные данные

Ввод состоит из 2n строк.

В первой строке записано целое число n (1 ≤ n ≤ 400) — количество команд, которые надо образовать.

В i-й строке (i > 1) записано i - 1 чисел ai1, ai2, ... , ai(i - 1). Здесь aij (1 ≤ aij ≤ 106, все aij различны) обозначает силу команды, состоящей из человека i и человека j (люди пронумерованы, начиная с 1)

Выходные данные

Выведите строку, содержащую 2n чисел. Из них i-е число должно обозначать номер напарника i-го человека.

Примечание

В первом примере люди номер 1 и 2 образуют команду, также образуют команду люди номер 3 и 4, так что напарники соревнующихся номер 1, 2, 3, 4 будут 2, 1, 4, 3, соответственно.

C. Деревья

Перебор *1800

На главной улице Бертауна растет n деревьев, дерево номер i имеет высоту ai метров (1 ≤ i ≤ n). К приезду президента Берлядии эти деревья решили изменить так, чтобы их высоты образовывали красивую последовательность. Это значит, что высоты крайних деревьев (1-го и n-го) должны быть равны между собой, высоты 2-го и (n - 1)-го дерева тоже должны быть равны между собой, причем высота 2-го должна быть на 1 больше, чем высота первого, и так далее. Другими словами, высоты деревьев, стоящих на одинаковом расстоянии от края (одного из концов последовательности), должны быть равны между собой, причем с увеличением расстояния от края на 1 высота деревьев тоже должна увеличиваться на 1. Например, последовательности "2 3 4 5 5 4 3 2" и "1 2 3 2 1" являются красивыми, а "1 3 3 1" и "1 2 3 1" не являются.

Изменение высоты одного дерева — очень дорогая операция, использующая передовые разработки берляндских ученых. За одну операцию вы можете выбрать любое дерево и изменить его высоту на любое число, как уменьшить, так и увеличить. Учтите, что даже после изменения, высота должна оставаться целым положительным числом, т. е. она не может быть меньше или равна нулю. Определите, какое наименьшее количество изменений высоты деревьев потребуется, чтобы последовательность их высот стала красивой.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество деревьев. Во второй строке записаны целые числа ai (1 ≤ ai ≤ 105) — высоты деревьев.

Выходные данные

Выведите одно число — минимальное количество деревьев, высоты которых придется изменить, чтобы последовательность стала красивой.

A. Кефа и первые шаги

дп Перебор реализация *900

Кефа решил подзаработать денег, занимаясь различной деятельностью в интернете на протяжении ровно n дней. Он знает, что в i-й день (1 ≤ i ≤ n) он заработает ai монет. Кефа любит прогресс, поэтому он хочет узнать длину максимального неубывающего подотрезка в последовательности ai. Напомним, что подотрезок последовательности — это её непрерывный фрагмент. Подотрезок чисел называется неубывающим, если числа в нём следуют в порядке неубывания.

Помогите Кефе справиться с этой задачей!

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 105).

Во второй строке заданы n целых чисел a1,  a2,  ...,  an (1 ≤ ai ≤ 109).

Выходные данные

Выведите единственное целое число — длину максимального неубывающего подотрезка последовательности a.

Примечание

В первом тесте максимальный неубывающий подотрезок это числа с третьего по пятое.

Во втором тесте максимальный неубывающий подотрезок это числа с первого по третье.

D. Три логотипа

битмаски геометрия Конструктив математика Перебор реализация *1700

Три компании решили заказать рекламный щит с изображениями своих логотипов. Рекламный щит представляет собой большую квадратную доску. Логотип каждой из компаний представляет собой прямоугольник ненулевой площади.

Рекламодатели разместят рекламу только в том случае, если возможно расположить все три логотипа на щите без наложений так, что на нём не останется свободного места. При размещении логотипы можно поворачивать так, чтобы стороны были параллельны сторонам рекламного щита.

Перед вами стоит задача определить, возможно ли разместить логотипы трех компаний на щите квадратной формы, не нарушив никакое из описанных правил.

Входные данные

В единственной строке входных данных находятся шесть целых положительных чисел x1, y1, x2, y2, x3, y3 (1 ≤ x1, y1, x2, y2, x3, y3 ≤ 100), где xi и yi обозначают длину и ширину логотипа i-й компании соответственно.

Выходные данные

Если разместить все три логотипа на квадратном щите невозможно, выведите одно число "-1" (без кавычек).

Если же это возможно, выведите в первую строку длину стороны квадрата n, в котором можно разместить все три логотипа. В следующих n строках должно содержаться по n заглавных латинских букв "A", "B" или "C". Наборы одинаковых букв должны образовывать сплошные прямоугольники, причем:

  • размеры прямоугольника, составленного из букв "A", должны быть равны размерам логотипа первой компании,
  • размеры прямоугольника, составленного из букв "B", должны быть равны размерам логотипа второй компании,
  • размеры прямоугольника, составленного из букв "C", должны быть равны размерам логотипа третьей компании.

Напомним, что логотипы компаний в процессе нанесения их на рекламный щит можно поворачивать. Пустых мест на щите остаться не должно. Если квадратный рекламный щит можно заполнить логотипами несколькими способами, разрешается вывести любой из них.

Изучите тестовые примеры для лучшего понимания условия.

D. Дима и Лиза

математика Перебор теория чисел *1800

Дима любит раскладывать нечетное число в сумму нескольких простых чисел, а Лиза любит, когда простых не больше трех. Помогите им представить данное число в виде суммы не более, чем трех простых чисел.

Более формально, вам дано нечётное число n. Найдите набор чисел pi (1 ≤ i ≤ k), такой что

  1. 1 ≤ k ≤ 3
  2. pi — простое число

Не требуется, чтобы числа pi были различными. Гарантируется, что хотя бы один возможный ответ существует.

Входные данные

В единственной строке записано нечетное число n (3 ≤ n < 109).

Выходные данные

В первой строке выведите k (1 ≤ k ≤ 3) - количество чисел в найденном вами представлении.

Во второй строке выведите сами числа pi в любом порядке. Если возможных ответов несколько, разрешается вывести любой.

Примечание

Простое число — это целое число, строго большее единицы, которое делится только на единицу и на само себя.

A. Стоматолог Геннадий

Перебор реализация *1800

Геннадий — один из лучших детских стоматологов Берляндии. Сегодня к нему на прием записались n детишек, которые выстроились в очередь перед его кабинетом.

Все дети любят громко плакать на приеме у зубного врача. Перенумеруем детишек целыми числами от 1 до n в порядке очереди. Каждый ребенок характеризуется величиной решимости pi. Дети по очереди один за другим заходят в кабинет; каждый раз к врачу заходит первый ребенок из очереди.

Пока Геннадий лечит зубы i-му ребенку, ребенок плачет с громкостью vi. При этом решимость первого ребенка в очереди уменьшается на величину vi, второго — на величину vi - 1, и так далее. Дети, находящиеся в очереди после vi-го ребенка, практически не слышат плача, поэтому их решимость остается неизменной.

Если в какой-то момент времени решимость j-го ребенка станет меньше нуля, то он начинает плакать с громкостью dj и, покидая очередь, бежит к выходу, не заходя в кабинет врача. При этом решимости всех детей, находящихся после j-го в очереди, уменьшатся на величину dj.

Все эти события происходят мгновенно, одно за другим в каком-то порядке. Одни крики могут стать причиной других, провоцируя «цепную реакцию». Как только в коридоре становится тихо, в кабинет заходит ребенок, оказавшийся в очереди первым.

Помогите стоматологу Геннадию определить номера детишек, которым он вылечит зубки. Ответ выведите в хронологическом порядке.

Входные данные

В первой строке входных данных находится целое положительное число n (1 ≤ n ≤ 4000) — количество детишек в очереди.

В следующих n строках находятся по три целых числа vi, di, pi (1 ≤ vi, di, pi ≤ 106) — громкость плача в кабинете, громкость плача в коридоре и решимость i-го ребенка.

Выходные данные

В первой строке выведите число k — количество детишек, которым Геннадий вылечит зубки.

Во второй строке выведите k целых чисел — номера детишек, которые дождутся своей очереди, в порядке возрастания.

Примечание

В первом примере сначала Геннадий вылечит зубки первому ребенку, который будет плакать с громкостью 4. Решимости остальных детишек станут равны  - 2, 1, 3, 1 соответственно. Таким образом, второй ребенок тоже заплачет с громкостью 1 и побежит к выходу. Решимости оставшихся детишек станут равны 0, 2, 0. Затем в кабинет войдет третий ребенок и будет плакать с громкостью 5. Оставшиеся дети не выдержат этого и с громким плачем побегут к выходу.

Во втором примере сначала в кабинет войдет первый ребенок, который будет плакать с громкостью 4. Решимости остальных детишек станут равны 5,  - 1, 6, 8. Таким образом, третий ребенок заплачет с громкостью 1 и побежит к выходу. Решимости оставшихся детишек станут равны 5, 5, 7. После этого в кабинет войдет второй ребенок и будет плакать с громкостью 5. Решимости оставшихся детишек станут равны 0, 3. Далее, в кабинет войдет четвертый ребенок и будет плакать с громкостью 2. Вследствие этого решимость пятого ребенка станет равна 1, и он последним войдет в кабинет.

A. 2Char

Перебор реализация *1200

Андрей часто читает статьи в своём любимом журнале 2Char. Главная особенность этих статей заключается в том, что в каждой из них используется не более двух различных букв. Андрей решил отправить в журнал свою статью, но поскольку писать их он не умеет, то просто решил взять случайную статью из журнала 26Char. Однако, перед тем как отправлять её в журнал 2Char, необходимо адаптировать текст под формат журнала. Для этого необходимо выбросить некоторые слова, таким образом, чтобы весь оставшийся текст можно было записать используя не более чем две различные буквы.

Поскольку гонорар выплачивается пропорционально количеству непробельных символов в статье, Андрей хочет оставить множество слов с максимальной суммарной длиной.

Входные данные

В первой строке входных данных записано число n (1 ≤ n ≤ 100) — количество слов в выбранной Андреем статье. Следующие n строк содержат по одному слову каждая. Все слова состоят только из маленьких английский букв, а их суммарная длина не превосходит 1000. Слова могу повторяться, в этом случае разрешается использовать слово в статье не больше раз, чем оно встречается во входных данных.

Выходные данные

Выведите единственное целое число — максимальную возможную суммарную длину слов в статье Андрея.

Примечание

В первом примере оптимальным способом выбрать слова является набор {'abb', 'aaa', 'bbb'}.

Во втором примере слово 'cdecdecdecdecdecde' содержит три различных буквы, поэтому Андрей не может добавить его в свою статью. Оптимальный ответ: {'a', 'a', 'aaaa'}.

C. Эдо и магниты

жадные алгоритмы Перебор реализация *2300

У Эдо скопилась большая коллекция магнитиков на холодильник — целых n штук!

Он решил купить холодильник и повесить магнитики на его дверь. В магазине на заказ могут изготовить холодильник с любым размером двери, удовлетворяющим следующим ограничениям: дверь холодильника должна быть прямоугольником, а длина и ширина двери — целыми положительными числами.

Эдо придумал, как он хочет расположить магнитики на холодильнике. Он ввел систему координат на плоскости, представил каждый магнит в виде прямоугольника со сторонами, параллельными осям координат, и нарисовал их желаемое расположение.

Теперь он хочет убрать не более k магнитиков (возможно, не убирать ни одного) таким образом, чтобы все магнитики оказались прикреплены к двери холодильника, при этом площадь этой двери должна быть минимально возможной. Магнитик считается прикреплённым к двери холодильника, если его центр лежит на двери или на её границе. Относительное расположение неубранных магнитиков на двери холодильника должно совпадать с заданным на плане.

Поясним последние два предложения. Пусть мы хотим повесить на холодильник два магнита. Пусть магнит задан на плане координатами левого нижнего (x1, y1) и правого верхнего (x2, y2) углов, тогда его центр имеет координаты (, ) (возможно, не целые). Под сохранением относительного положения имеется в виду, что доступна только операция параллельного переноса всех магнитов, то есть вектор, соединяющий центры двух магнитов на изначальном плане, должен быть равен вектору, соединяющему центры этих двух магнитов при их расположении на холодильнике.

Стороны двери холодильника так же должны быть параллельны осям координат.

Входные данные

В первой строке содержатся два n и k (1 ≤ n ≤ 100 000, 0 ≤ k ≤ min(10, n - 1)) — количество магнитиков, имеющихся у Эдо, и максимальное количество магнитиков, которые можно не вешать на холодильник, соответственно.

Следующие n строк описывают план расположения магнитиков, нарисованный Эдо. В каждой строке содержится четыре целых числа x1, y1, x2, y2 (1 ≤ x1 < x2 ≤ 109, 1 ≤ y1 < y2 ≤ 109) — координаты левого нижнего и правого верхнего углов текущего магнитика соответственно. Магнитики могут как накладываться друг на друга частично, так и совпадать полностью.

Выходные данные

Выведите единственное целое число — минимальную площадь двери холодильника, на которую можно повесить хотя бы n - k магнитиков, сохраняя относительный порядок.

Примечание

В первом тестовом примере оптимально удалить либо первый, либо третий магнитик. Если удалить первый магнитик, центры двух других будут лежать в точках (2.5, 2.5) и (3.5, 3.5). Таким образом, достаточно купить холодильник с шириной двери 1 и высотой двери 1, и, соответственно, площадью двери также равной 1.

Во втором тестовом примере неважно, какой из магнитиков удалить, потому что ответ все равно не изменится — нужен холодильник с шириной двери 8 и длиной двери 8.

В третьем тестовом примере ничего удалить нельзя, так как k = 0.

E. Плитка шоколада

дп Перебор *2000

У вас есть плитка шоколада, состоящая из n × m долек. Вы хотите съесть ровно k долек, для этого может потребоваться разделить шоколадку на части.

За одно действие можно разломить ровно один цельный прямоугольный кусок шоколада на два прямоугольных куска. Разламывать можно только по линиям, проходящим между дольками: по горизонтали или по вертикали. Стоимость разлома равна квадрату длины разлома.

Например, если сначала у вас была шоколадка из 2 × 3 долек, то за один горизонтальный разлом вы можете получить два цельных куска 1 × 3 (стоимость такого разлома равна 32 = 9), либо вы можете разломить шоколадку по вертикали одним из двух способов и получить два цельных куска 2 × 1, 2 × 2 (стоимость такого разлома равна 22 = 4).

Ваша задача для нескольких значений n, m и k определить, за какую минимальную суммарную стоимость разломов, можно разделить исходную шоколадку на такие прямоугольные куски, что можно выбрать несколько кусков, суммарный размер которых составляет ровно k долек. При этом оставшиеся n·m - k долек не обязательно образуют цельный кусок.

Входные данные

В первой строке находится целое положительное число t (1 ≤ t ≤ 40910) — количество троек n, m и k, для которых нужно решить задачу.

В следующих t строках записаны по три целых числа n, m и k (1 ≤ n, m ≤ 30, 1 ≤ k ≤ min(n·m, 50)) — размеры очередной шоколадки и количество её долек, которые вы хотите съесть.

Выходные данные

Для каждой тройки n, m и k выведите минимальную стоимость, которую необходимо потратить на разламывание шоколадки, чтобы можно было съесть ровно k долек.

Примечание

В первом запросе из примера необходимо сделать два разлома:

  • сначала нужно разбить кусок размера 2 × 2 на два куска размера 2 × 1 (стоимость такого разлома равна 22 = 4),
  • затем нужно один из получившихся кусков размера 2 × 1 разломить на два куска размера 1 × 1 (стоимость такого разлома равна 12 = 1).

Во втором запросе из примера вы хотите съесть 3 дольки. Для этого можно действовать аналогично первому запросу.

D. Спанч Боб и Квадраты

математика Перебор *1900

Спанч Боб уже устал придумывать оправдания для своих странных действий и вычислений, поэтому просто попросил вас найти все такие пары n и m, что в табличке, состоящей из n рядов и m столбцов, существует ровно x различных квадратов. Например, в табличке 3 × 5 существует 15 квадратов со стороной один, 8 квадратов со стороной два и 3 квадрата со стороной три. Итого в табличке 3 × 5 существует 15 + 8 + 3 = 26 различных квадратов.

Входные данные

В первой строке входных данных записано единственное целое число x (1 ≤ x ≤ 1018) — требуемое количество квадратов внутри искомых табличек.

Выходные данные

В первой строке выведите единственное число k — количество табличек, внутри которых существует ровно x квадратов.

Далее выведите k пар чисел, описывающих эти таблички. Пары выводите в порякде возрастания n, а при равенстве — в порядке возрастания m.

Примечание

В табличке 1 × 2 количество способов выбрать квадрат 1 × 1 равняется 2. Итого — 2 способа.

В табличке 2 × 3 количество способов выбрать квадрат 1 × 1 равняется 6, а квадрат 2 × 2 — 2 способа. Итого — 8 способов.

A. Треугольник

геометрия Перебор *900

У Валеры есть младшая сестра Настя, которая отличается умом и сообразительностью. Возвратившись домой из детского садика, девочка рассказала о задаче, предложенной воспитательницей. Оказывается, необходимо было всего лишь составить треугольник из четырех разноцветных палочек. Естественно, одна палочка при этом остается лишней. Ломать или использовать неполную длину палочек нельзя. Настя прекрасно справилась с этим заданием и теперь предлагает сделать тоже самое Валере.

Мальчик сказал, что запросто справится с этой пустяковой задачкой. Однако, повозившись с ней некоторое время, обнаружил, что бывают разные хитрые случаи. Бывает, что треугольник положительной площади составить невозможно, но можно сложить треугольник, вырожденный в отрезок. Может быть и такое, что даже вырожденный треугольник составить невозможно. Поскольку Валера очень ленив и не желает рассматривать такое большое количество вариантов, он просит Вас помочь ему в этом.

Входные данные

В первой строке входных данных заданы четыре целых положительных числа, разделенных пробелами — длины палочек. Числа не превосходят 100.

Выходные данные

Выведите TRIANGLE, если из заданных палочек возможно составить треугольник положительной площади, SEGMENT — если невозможен первый вариант, но можно сложить треугольник, который вырождается в отрезок. Выведите IMPOSSIBLE если никакой треугольник составить невозможно. Помните, что обязательно использовать три палочки. Ломать или использовать неполную длину палочек запрещено.

D. Ящерицы и подвалы 2

дп Перебор *2600

Это упрощенная версия задачи, использованной на соревновании. Оригинальная формулировка предполагает слишком сложное решение, поэтому в этой задаче были уменьшены ограничения.

Поликарп очень любит играть в компьютерную ролевую игру «Ящерицы и подвалы». В настоящий момент он проходит ее за мага. На одном из последних уровней он противостоит шеренге лучников. Единственное заклинание, которым он может их поражать — это, конечно, огненный шар. Если Поликарп попадает огненным шаром в лучника с номером i (пусть они пронумерованы слева направо), то с него снимается a единиц жизненной силы. При этом заклинание поражает и соседних с i лучников (если они есть) — с них снимается по b (1 ≤ b < a ≤ 10) единиц жизненной силы.

Так как крайние лучники (т.е. те, что имеют номера 1 и n) находятся очень далеко, то до них огненный шар долететь не может. В любого другого лучника Поликарп может попасть огненным шаром.

Для каждого лучника известно количество единиц его жизненной силы. Лучник будет убит, когда это значение опустится ниже 0. Какое наименьшее количество заклинаний может использовать Поликарп, чтобы убить всех противников.

Поликарп может стрелять в лучника, даже если тот уже убит.

Входные данные

В первой строке записано три целых числа n, a, b (3 ≤ n ≤ 10; 1 ≤ b < a ≤ 10). Вторая строка содержит последовательность n целых чисел — h1, h2, ..., hn (1 ≤ hi ≤ 15), его hi обозначает количество единиц жизненной силы i-го лучника.

Выходные данные

В первую строку выведите t — искомое минимальное количество огненных шаров.

Во вторую строку выведите t чисел — номера лучников, в которые должен попадать Поликарп, чтобы убить всех лучников за t заклинаний. Все выводимые номера должны находиться в отрезке от 2 до n - 1. Числа разделяйте пробелами. Если решений несколько, выведите любое. Числа выводите в любом порядке.

C. Грибная вражда

Перебор поиск в глубину и подобное *2100

Паша и Аким составляли карту леса — полянки были вершинами графа, а дорожки, соединяющие полянки, были рёбрами. Они решили зашифровать количество смешливых грибов на каждой полянке следующим образом — на каждом ребре между двумя полянками они написали два числа — наибольший общий делитель (НОД) и наименьшее общее кратное (НОК) количества грибов на этих полянках. Но однажды Паша и Аким поссорились из-за смешливых грибов и порвали карту. У Паши осталась лишь какая-то часть, на которой было всего лишь m тропинок. Ваша задача — помочь Паше восстановить по карте, которая у него есть, сколько грибов было на каждой полянке. Так как ответ не обязательно однозначный, восстановите любой, либо сообщите, что такого расположения грибов не существует. Гарантируется, что на изначальной карте числа на дорожках были не меньше 1 и не больше 106.

Входные данные

В первой строке содержится два числа n и m () — количество полянок и количество дорожек, про которые мы знаем. В каждой из следующих m строк содержится четыре числа — номера полянок, которые тропинка соединяет, НОД и НОК количества грибов на этих полянках (1 ≤ НОД, НОК ≤ 106). Гарантируется, что никакая дорожка не соединяет полянку саму с собой, а между любой парой полянок существует не более одной дорожки.

Выходные данные

Выведите в первой строке "NO" если расставить числа невозможно. Иначе выведите "YES", а в следующей строчке выведите n чисел — количество грибов на соответствующей полянке.

D. Спаситель

математика Перебор снм *2500

Миша решил помочь Паше и Акиму помириться. У него есть хитрый план — уничтожить все смешливые грибы. Он знает, что смешливые грибы замечательно лопаются от смеха. На полянках растут грибы. На t-ой полянке растет a[t] грибов.

Ещё Миша знает, что у полянок, на которых растут грибы, есть уникальная способность. Полянка (например, i) может передать свой смех на другую полянку (например, j) если существует целое число (например, b) такое, что некоторая перестановка чисел a[i], a[j] и b является красивой тройкой (i ≠ j). Красивая тройка — это такие три попарно взаимно простые числа x, y, z, что: x2 + y2 = z2.

Миша хочет узнать, на каком минимальном количестве полянок ему нужно посмеяться, чтобы все смешливые грибы лопнули.

Входные данные

В первой строке находится одно целое число n (1 ≤ n ≤ 106) — количество полянок. В следующей строке содержится n целых чисел ai — количество грибов на полянке (1 ≤ ai ≤ 107). Все количества различны.

Выходные данные

Выведите одно число — минимальное количество полянок, на которых Миша должен посмеяться, чтобы все грибы лопнули.

A. Два основания

Перебор реализация *1100

Впервые увидев мем ALL YOUR BASE ARE BELONG TO US (грамматически ошибочный вариант фразы "все ваши базы (основания) принадлежат нам" - прим. переводчика), числа X и Y осознали, что они записаны в системах счисления с разными основаниями, что осложнило их отношения.

Вам дана запись числа X по основанию bx и запись числа Y по основанию by. Сравните эти два числа.

Входные данные

В первой строке входных данных записаны два целых числа n и bx (1 ≤ n ≤ 10, 2 ≤ bx ≤ 40), где n — количество цифр в записи числа X по основанию bx.

Во второй строке записано n целых чисел x1, x2, ..., xn (0 ≤ xi < bx) — цифры числа X. Цифры даны в порядке от самого старшего разряда до самого младшего.

Следующие две строки описывают Y аналогичным способом. В третьей строке записано два целых числа m и by (1 ≤ m ≤ 10, 2 ≤ by ≤ 40, bx ≠ by), где m — количество цифр в записи Y по основанию by. Четвёртая строка содержит m целых чисел y1, y2, ..., ym (0 ≤ yi < by) — цифры числа Y.

Ведущих нулей не бывает. Гарантируется, что X и Y — положительные. Все цифры обоих чисел даны в десятичной системе счисления.

Выходные данные

В качестве ответа выведите единственный символ (без кавычек):

  • '<', если X < Y
  • '>', если X > Y
  • '=', если X = Y
Примечание

В первом примере X = 1011112 = 4710 = Y.

Во втором примере X = 1023 = 215 и Y = 245 = 1123, поэтому X < Y.

В третьем примере и Y = 48031509. Несложно заметить, что X начинается с большей цифры, при этом основание bx больше основания by, поэтому X, очевидно, будет больше Y.

B. Новый год и старые свойства

битмаски Перебор реализация *1300

2015 год почти подошёл к концу.

Лимак — белый медвежонок, который недавно узнал о двоичной системе счисления. Он сразу заметил, что запись номера прошедшего года в двоичной системе счисления содержит ровно один ноль — 201510 = 111110111112. Обратите внимание, количество нулей в записи числа в десятичной системе счисления значения не имеет.

Лимак выбрал некоторый интервал лет и теперь собирается посчитать количество лет из этого интервала, таких что их запись в двоичной системе счисления так же содержит ровно один ноль. А сможете ли вы сделать это быстрее?

Считайте, что положительные целые числа всегда записываются без ведущих нулей.

Входные данные

В единственной строке входных данных записаны два целых числа a и b (1 ≤ a ≤ b ≤ 1018) — первый и последний год в интервале Лимака, соответственно.

Выходные данные

Выведите одно целое число — количество лет в данном интервале, запись которых в двоичной системе счисления содержит ровно один ноль.

Примечание

В первом примере интервал Лимака содержит числа 510 = 1012, 610 = 1102, 710 = 1112, 810 = 10002, 910 = 10012 и 1010 = 10102. Два из них (1012 и 1102) обладают описанным выше свойством.

A. Разбиение текста

Перебор реализация Строки *1300

Вам задана строка s длины n и пара чисел p, q. Вам требуется разбить строку s на строки длины p и q. Например, строку "Hello" при p = 2, q = 3 можно разбить на две строки "Hel" и "lo" или на две строки "He" и "llo".

Заметим, что допускается разбиение строки только на строки длины p или только на строки длины q (смотрите второй тестовый пример).

Входные данные

В первой строке находятся три целых положительных числа n, p, q (1 ≤ p, q ≤ n ≤ 100).

Во второй строке находится строка s, состоящая из строчных и прописных букв латинского алфавита, и цифр.

Выходные данные

Если разбить строку s на строки длины p и q невозможно выведите число "-1".

В противном случае в первой строке выведите целое число k — количество строк в разбиении s.

В следующих k строках выведите строки в разбиении. Каждая строка должна быть длины p или q. Строки нужно вывести в порядке появления в исходной строке s — слева направо.

Если существует несколько решений, разрешается вывести любое из них.

B. Навыки

Бинарный поиск дп жадные алгоритмы Перебор сортировки *1900

Лёша играет в недавно вышедшую новую версию легендарной игры hacknet. В этой версии был добавлен механизм навыков. Теперь каждый игровой персонаж обладает ровно n навыками. Каждый навык представляется одним неотрицательным целым числом ai — текущим уровнем навыка. Все навыки имеют одинаковый максимальный уровень A.

Одновременно с навыками был введён всеобщий рейтинг всех игроков. Игроки ранжируются по так называемой Силе. Сила игрока считается как сумма следующих величин:

  • Количество навыков, которыми персонаж владеет в совершенстве (т.е. таких, что ai = A), умноженное на коэффициент cf.
  • Минимальный текущий уровень среди всех навыков (min ai), умноженный на коэффициент cm.

Сейчас у Лёши есть m хакнетианских денежных единиц, которые он готов потратить. Каждая денежная единица позволяет увеличить текущий уровень любого навыка на 1 (если его уровень еще не максимален). Помогите ему потратить деньги таким образом, чтобы достичь как можно большего уровня Силы.

Входные данные

В первой строке через пробел записаны пять целых чисел n, A, cf, cm и m (1 ≤ n ≤ 100 000, 1 ≤ A ≤ 109, 0 ≤ cf, cm ≤ 1000, 0 ≤ m ≤ 1015).

Во второй строке записано ровно n целых чисел ai (0 ≤ ai ≤ A), разделённых пробелами, — текущие уровни навыков.

Выходные данные

Сначала выведите максимальное значение Cилы, которое может получить персонаж.

Затем выведите n целых чисел — a'i (ai ≤ a'i ≤ A), уровни навыков, до которых следует развиться, чтобы достичь указанного значения Силы, при этом используя не более m денежных единиц. Если правильных ответов несколько — выведите любой.

Примечание

В первом тесте оптимальной стратегией является повышение второго навыка до его максимума, а остальных — на единицу.

Во втором тесте нужно увеличить уровни всех навыков до максимума.

A. Link/Cut Tree

Перебор реализация *1500

Программист Ростислав серьёзно увлёкся структурой данных Link/Cut Tree, которая основана на Splay-деревьях. В частности, сейчас он изучает процедуру expose.

К сожалению, понять определение этой процедуры Ростислав не в состоянии, и поэтому он решил обратиться за помощью к программисту Серёже. Тот согласился помочь, только если Ростислав решит простую задачу (а если не решит, то зачем ему Splay-деревья?)

По заданным l, r и k необходимо вывести все степени числа k в промежутке от l до r, включая границы. Однако Ростиславу не хочется решать эту задачу самостоятельно, ведь он увлекся сетевой игрой в Agar с Глебом. Помогите ему!

Входные данные

В первой строке входных данных через пробел записаны три целых числа l, r и k (1 ≤ l ≤ r ≤ 1018, 2 ≤ k ≤ 109).

Выходные данные

Выведите все степени числа k, лежащие в промежутке от l до r, в порядке возрастания. Если таких чисел не существует, выведите "-1" (без кавычек).

Примечание

Пояснение к первому примеру: 1 = 20, 2 = 21, 4 = 22, 8 = 23. 16 = 24, что больше чем 10, следовательно не подходит.

D. Крыса Квеш и сыр

Конструктив математика Перебор *2400

Мокрая Акула предложил Крысе Квешу выбрать три положительных числа x, y и z от 0.1 до 200.0 включительно. Крыса Квеш хочет удивить Мокрую Акулу, поэтому он выбирает все числа ровно с одним знаком после десятичной точки.

Мокрая Акула знает, что Крыса Креш хочет получить как можно больше сыра, и он решил предоставить ему такую возможность. Он предлагает скомбинировать имеющиеся числа x, y и z одним из следующих двенадцати способов:

  1. a1 = xyz;
  2. a2 = xzy;
  3. a3 = (xy)z;
  4. a4 = (xz)y;
  5. a5 = yxz;
  6. a6 = yzx;
  7. a7 = (yx)z;
  8. a8 = (yz)x;
  9. a9 = zxy;
  10. a10 = zyx;
  11. a11 = (zx)y;
  12. a12 = (zy)x.

Пусть m — максимальное среди всех ai, а c — такой минимальный индекс (от 1 до 12), что ac = m. Именно это c вас и просит найти Крыса Креш. Поскольку он хотел бы увидеть, сколько именно сыра он получит, то он просит вывести не индекс c, а соответствующее ему выражение.

Входные данные

Единственная строка входных данных содержит три вещественных числа x, y и z (0.1 ≤ x, y, z ≤ 200.0), каждое из них дано ровно с одним знаком после десятичной точки.

Выходные данные

Среди выражений xyz, xzy, (xy)z, (xz)y, yxz, yzx, (yx)z, (yz)x, zxy, zyx, (zx)y и (zy)x выберите одно с максимальным значением. Если правильных ответов несколько, то выведите то, которое встречается в списке раньше.

xyz выводите как «x^y^z» (скобки не используются), а (xy)z как (x^y)^z (скобки используются).

A. Последовательность команд

Перебор реализация *1000

Робот Кельвин находится на бесконечном клетчатом поле. Его исходный код является последовательностью из n команд, каждая из которых это «U», «R», «D», или «L» — указание роботу сдвинуться на одну клетку вверх, вправо, вниз или влево соответственно. Кельвину интересно, сколько различных подстрок (непрерывных подпоследовательностей) строки с командами обладают тем свойством, что, выполнив все команды данной подстроки, Кельвин вернётся в ту же клетку, с которой начинал. Две подстроки считаются различными, если у них отличаются индексы первой или последней позиции.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 200) — длина исходной последовательности команд.

В следующей строке записаны n символов, каждый из которых является «U», «R», «D» или «L» — сама исходная последовательность команд.

Выходные данные

Выведите единственное целое число — количество подстрок, выполнение которых оставит Кельвина на месте.

Примечание

В первом примере подходит вся строка и подстрока «RL».

Обратите внимание: в третьем примере подстрока «LR» встречается три раза, поэтому и в ответе должна быть учтена тоже три раза.

C. Башни из кубиков

жадные алгоритмы математика Перебор теория чисел *1600

Сегодня на парах студенты собирают башни из кубиков. Каждый студент собирается построить башню ненулевой высоты, поставив друг на друга некоторое количество блоков из кубиков. n студентов используют блоки, состоящие из двух кубиков, а m студентов используют блоки из трёх кубиков. Блоки кладутся только вертикально, то есть каждый блок добавляет к высоте башни 2 или 3 кубика соответственно.

Студенты хотят, чтобы все башни имели различную высоту, но при этом они не хотят использовать много блоков, поэтому они попросили вас определить минимально возможную высоту самой высокой башни.

Входные данные

В первой строке входных данных записаны два числа n и m (0 ≤ n, m ≤ 1 000 000, n + m > 0) — количество студентов, использующих блоки из двух кубиков, и количество студентов, использующих блоки из трёх кубиков, соответственно.

Выходные данные

Выведите единственное целое число — минимально возможную высоту самой высокой башни, если высоты всех башен положительны и различны.

Примечание

В первом примере студент, использующий блоки из двух кубиков, может построить башню высоты 4, а студенты, использующие блоки из трёх кубиков, — башни высоты 3, 6 и 9. Самая высокая башня будет иметь высоту 9 кубиков.

Во втором примере студенты могут построить башни высотой 2, 4 и 8, используя блоки по два кубика, и башни высотой 3 и 6, используя блоки по три кубика.

D. Протест Джерри

дп Комбинаторика Перебор Теория вероятностей *1800

Эндрю и Джерри играют в игру, а Гарри ведёт счёт. Игра состоит из трёх раундов. В каждом раунде Эндрю и Джерри по очереди вынимают по одному шару из урны, содержащей n шаров, на которых написаны различные целые числа. Затем они передают шары Гарри, который добавляет очко тому, на чьём шаре было написано большее число, и кладёт их обратно в урну. Победителем игры объявляется тот, кто выиграл хотя бы в двух раундах из трёх.

Известно, что Эндрю выиграл в раундах 1 и 2, а Джерри победил в раунде 3, так что победителем игры стал Эндрю. Однако Джерри недоволен способом определения победителя — по его словам, сумма чисел на вытянутых им шарах была строго больше суммы чисел на шарах, вытянутых Эндрю. Какова вероятность такого события?

Входные данные

В первой строке входных данных записано единственное число n (2 ≤ n ≤ 2000) — количество шаров в урне.

Во второй строке записаны n целых чисел ai (1 ≤ ai ≤ 5000) — числа, написанные на шарах. Гарантируется, что все ai различны.

Выходные данные

Выведите единственное вещественное число — вероятность того, что сумма чисел на всех шарах, вытянутых Джерри, была строго больше суммы чисел на всех шарах, вытянутых Эндрю, если известно, что Эндрю выиграл первые два раунда, а Джерри выиграл третий раунд. Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

В первом примере имеется всего два шара. В первых двух раундах Эндрю обязательно доставал шар с числом 2, а Джерри доставал шар с числом 1, и наоборот в последнем раунде. Таким образом, сумма на всех шарах Эндрю обязательно равна 5, а на всех шарах Джерри — 4.

Во втором примере у каждой игры могло быть три исхода: 10 - 2, 10 - 1 или 2 - 1. Чтобы выполнилось условие на сумму, Эндрю обязательно должен был оба раза победить с исходом 2 - 1, а в последнем раунде Джерри должен был достать 10. Вероятность такого события равняется .

A. Дальние родственники и торт

Комбинаторика Конструктив Перебор реализация *800

Семья Доров готовится праздновать день рождения Фомы Дора, для этого члены семьи приготовили ему весьма своеобразный торт.

Торт представляет собой квадрат n × n, состоящий из одинаковых квадратиков со стороной 1. Каждый квадрат либо пустой, либо содержит шоколадку. Члены семьи испекли торт и разложили на нём шоколадки. Они думают, что радость Фомы будет равна количеству пар клеток с шоколадками, расположенных в одной строке или в одном столбце. Теперь они пытаются вычислить, чему же будет равно это значение для данного торта.

Обратите внимание, что каждая пара может быть посчитана не более чем один раз, поскольку две различные клетки не могут быть одновременно расположены в одной строке и в одном столбце.

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 100) — длина стороны торта.

Следующие n строк содержат по n символов, описывающих сам торт. Пустые клетки обозначаются символом «.», а клетки, содержащие шоколадку, задаются символом «C».

Выходные данные

Выведите, чему будет равна радость Фомы Дора, когда он увидит торт, то есть количество клеток с шоколадками, расположенных в одной строке или в одном столбце.

Примечание

Пронумеруем строки сверху вниз, а столбцы слева направо. Тогда в одной строке расположены:

  1. (1, 2) и (1, 3)
  2. (3, 1) и (3, 3)
В одном столбце расположены следующие клетки с шоколадками:
  1. (2, 1) и (3, 1)
  2. (1, 3) и (3, 3)

B. Дальние-дальние друзья

Перебор *1100

Фома Дор хочет пригласить на вечеринку в далёкую-далёкую страну своих друзей. Всего у него n друзей, и каждый из них может приехать только в определённый промежуток дней с ai по bi. Разумеется, Фома Дор хотел бы видеть как можно больше гостей на своей вечеринке.

Машины в далёкой-далёкой стране очень странные и могут одновременно перевозить только ровно двух людей противоположного пола, то есть ровно одного мужчину и одну женщину. При этом страна настолько далёкая, что другого способа туда добраться не существует.

Фома Дор хочет выбрать какой-то день года и пригласить некоторых друзей, которые могут приехать в это время, так чтобы количество приглашённых мужчин равнялось количеству приглашённых женщин. Определите, сколько максимум гостей может быть на вечеринке.

Входные данные

В первой строке входных данных записано единственное число n (1 ≤ n ≤ 5000) — количество друзей у Фомы Дора.

Затем следует n строк, каждая из которых описывает одного друга. Строка начинается с заглавной английской 'F', если это друг женского пола, и заглавной английской 'M', если мужского. Затем идут два целых числа ai и bi (1 ≤ ai ≤ bi ≤ 366), которые означают, что i-й друг может приехать в любой день между ai и bi включительно.

Выходные данные

Выведите максимально возможное количество гостей на вечеринке Фомы Дора.

Примечание

В первом примере друзья 3 и 4 могут прийти в любой день между 117 и 128 включительно.

Во втором примере друзья с номерами 3, 4, 5 и 6 могут прийти в день 140.

C. Быки и коровы

Перебор реализация *1700

В игру «Быки и коровы» играют двое: ведущий и отгадывающий.

Ведущий загадывает четырехзначное число в десятичной системе счисления, в котором все цифры различны, и может быть ведущий нуль. Оно не может иметь больше одного лидирующего нуля, так как все цифры должны быть различны. Отгадывающий должен отгадать загаданное число. Он делает серию попыток, пробуя числа, на что получает ответы ведущего в формате «x быков y коров», где x — количество цифр пробного числа, стоящих на тех же местах, что и в загаданном числе, а y — количество цифр пробного числа, которые присутствуют в в загаданном числе, но стоят на других местах. Разумеется, пробные числа, так же как и загаданное число, являются четырехзначными числами, в которых все цифры различны, и может быть ведущий нуль.

Например, предположим, что ведущий загадал число 0123. Тогда на пробное число 1263 отгадывающий получит ответ «1 бык 2 коровы» (3 стоит в обоих числах на одном и том же месте, а 1 и 2 есть и там, и там, но они стоят на разных позициях), а на число 8103 — «2 быка 1 корова» (аналогично — 1 и 3 стоят на тех же местах, а 0 стоит в другом месте).

Когда отгадывающий получает ответ «4 быка 0 коров», игра заканчивается.

Сейчас отгадывающий уже сделал некоторое количество попыток и хочет узнать, а не может ли его следующий ход оказаться последним.

Входные данные

Первая строка входных данных содержит целое число n (1 ≤ n ≤ 10) — количество уже сделанных попыток. Далее идут n строк вида «ai bi ci», где aii-е пробное число, bi — количество быков, ci — количество коров (1 ≤ i ≤ n, 0 ≤ bi, ci, bi + ci ≤ 4). Пробные числа корректны — то есть каждое из них содержит ровно 4 цифры, в каждом из них все цифры различны, и может быть лидирующий нуль. Все пробные числа различны. Так как отгадывающий еще не отгадал числа, ответа «4 быка 0 коров» не встречается.

Выходные данные

Если входных данных достаточно для определения загаданного числа — в единственной строке выведите это число с четырьмя цифрами. Если в числе меньше четырех цифр, добавьте лидирующий ноль. Если данных недостаточно — выведите «Need more data» без кавычек. Если же вдруг окажется, что ведущий где-то ошибся при ответе — выведите «Incorrect data» без кавычек.

A. Собеседование

Перебор реализация *900

Блейк управляет крупной компанией «Blake Technologies». Он очень любит свою компанию и считает, что она должна быть самой лучшей, по этой причине каждый кандидат, который хочет в ней работать, должен пройти собеседование. Оно состоит всего из одной интересной задачи, которую нужно решить.

Определим функцию f(x, l, r) как побитовое «ИЛИ» (будем обозначать как OR) чисел xl, xl + 1, ..., xr, где xi — элемент массива x с индексом i. Вам даны два массива a и b длины n. Нужно определить максимальное значение f(a, l, r) + f(b, l, r) по всем 1 ≤ l ≤ r ≤ n.

Входные данные

В первой строке входных данных записано одно целое число n (1 ≤ n ≤ 1000) — длина массивов a и b.

Во второй строке записаны n целых чисел ai (0 ≤ ai ≤ 109).

В третьей строке записаны n целых чисел bi (0 ≤ bi ≤ 109).

Выходные данные

Выведите единственное целое число — максимальное значение f(a, l, r) + f(b, l, r) по всем 1 ≤ l ≤ r ≤ n.

Примечание

Напомним, что значением побитового «ИЛИ» двух неотрицательных целых чисел a и b называется такое число c = a OR b, у которого в каждом разряде в двоичной записи стоит единица, если и только если хотя бы у одного из двух чисел a или b стоит единица в соответствующем разряде в двоичной записи.

В первом примере максимальный ответ получается при l = 2 и r = 4, так как f(a, 2, 4) + f(b, 2, 4) = (2 OR 4 OR 3) + (3 OR 3 OR 12) = 7 + 15 = 22. Максимальный ответ можно получить и другими способами, например при l = 1 и r = 4, l = 1 и r = 5, l = 2 и r = 4, l = 2 и r = 5, l = 3 и r = 4 или при l = 3 и r = 5.

Во втором примере максимальный ответ получается при l = 1 и r = 9.

B. Алиса, Боб, две команды

Конструктив Перебор *1400

Алиса и Боб играют в игру. Частью игры является разделение игровых фигур на две группы. Всего в игре есть n фигур и i-я из них имеет силу pi.

Фигуры разделяются на группы за несколько шагов:

  1. Сначала Алиса разделяет фигуры на две группы A и B. Таким образом, Алиса записывает строку длины n, где i-й символ равен A или B в зависимости от группы i-й фигуры.
  2. Затем Боб выбирает некоторый суффикс или префикс, и меняет все символы на нём (то есть заменяет A на B, а B на A). Он это делает не больше одного раза.
  3. Алиса забирает все фигуры с буквой A, а Боб забирает фигуры с буквой B.

Сила игрока определяется как суммарная сила фигур в группе игрока.

Вам задано начальное разделение Алисы на команды, помогите Бобу найти оптимальную стратегию. Выведите наибольшую силу, которую Боб может получить.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 5·105) — количество игровых фигур.

Во второй строке находятся n целых чисел pi (1 ≤ pi ≤ 109) — сила i-й фигуры.

В третьей строке находятся n символов A или B — разделение на команды после первого хода (после хода Алисы).

Выходные данные

Выведите одно целое число a — максимальную силу, которую Боб может получить.

Примечание

В первом примере Боб должен поменять символы на суффиксе длины один.

Во втором примере Боб должен поменять символы на префиксе или суффиксе (здесь это одно и то же) длины 5.

В третьем примере Боб должен ничего не делать.

D. Самая длинная подпоследовательность

математика Перебор теория чисел *2100

Вам задан массив a из n элементов и число m. Рассмотрим некоторую подпоследовательность a и значение наименьшего общего кратного (НОК) её элементов. Обозначим этот НОК буквой l. Найдите самую длинную подпоследовательность массива a со значением l ≤ m.

Подпоследовательностью массива a называется массив, который получается из a удалением некоторых элементов. Разрешено удалять ноль или все элементы массива.

НОК пустого массива равен 1.

Входные данные

В первой строке находится пара целых чисел n и m (1 ≤ n, m ≤ 106) — размер массива a и параметр, описанный в условии задачи.

Во второй строке находятся n целых чисел ai (1 ≤ ai ≤ 109) — элементы массива a.

Выходные данные

В первой строке выведите два целых числа l и kmax (1 ≤ l ≤ m, 0 ≤ kmax ≤ n) — значение НОК и количество элементов в оптимальной подпоследовательности.

Во второй строке выведите kmax целых чисел — позиции элементов в исходной последовательности, в возрастающем порядке.

Заметим, что вы можете найти и вывести любую подпоследовательность с наибольшей длиной.

F. Волшебная матрица

графы Деревья матрицы Перебор разделяй и властвуй *2400

Вам задана матрица A размера n × n.

Будем называть матрицу с неотрицательными элементами волшебной, если она симметрична (то есть aij = aji), aii = 0 и aij ≤ max(aik, ajk) для всех троек i, j, k. Заметим, что i, j, k не обязательно различны.

Определите является ли матрица волшебной.

Рекомендуется для ввода и вывода данных использовать функции scanf, printf в языке C++, поскольку они работают значительно быстрее чем cin, cout. Аналогично, рекомендуется использовать классы BufferedReader, PrintWriter вместо Scanner, System.out в языке Java.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 2500) — размер матрицы A.

В каждой из следующих n строк находится n целых чисел aij (0 ≤ aij < 109) — элементы матрицы A.

Заметим, что заданная матрица не обязательно является симметричной и может быть произвольной.

Выходные данные

Выведите ''MAGIC" (без кавычек) если матрица A является магической. В противном случае выведите ''NOT MAGIC".

A. Тёмный и Светлый

математика Перебор теория чисел *1100

Данте сражается со «Спасителем». Чтобы нанести ему решающий удар мечом, он сначала должен уничтожить его щит. У Данте есть два пистолета, Тёмный и Светлый, каждый из которых может произвести любое неотрицательное количество выстрелов.

Каждая пуля, попавшая в щит, наносит a единиц урона, если она была выпущена из Тёмного пистолета, и b единиц урона, если она была выпущена из Светлого. Чтобы разрушить щит, Данте должен нанести ровно c единиц урона. Проверьте, возможно ли это.

Входные данные

В первой строке входного файла записаны три целых числа a, b и c (1 ≤ a, b ≤ 100, 1 ≤ c ≤ 10 000) — количество единиц урона, который наносится Тёмным и Светлым пистолетами за один выстрел, и количество единиц урона, который необходимо нанести щиту, соответственно.

Выходные данные

Если Данте может нанести ровно c единиц урона, то выведите «Yes» (без кавычек), в противном случае выведите «No» (без кавычек).

Примечание

Во втором примере Данте может выпустить 1 пулю из Тёмного пистолета и 2 пули из Светлого, таким образом он нанесёт по щиту 1·3 + 2·2 = 7 единиц урона.

B. Тривиальная задача

Конструктив математика Перебор теория чисел *1300

Мистер Санта поручил всем сильнейшим программистам мира решить тривиальную задачу. Он даёт им целое положительное число m и просит найти количество таких целых положительных чисел n, что десятичная запись факториала числа n будет заканчиваться ровно на m нулей. А вы считаете себя достаточно сильным программистом, чтобы решить эту задачу?

Входные данные

В единственной строке входных данных записано целое число m (1 ≤ m ≤ 100 000) — требуемое количество нулей в конце десятичной записи факториала.

Выходные данные

Сначала выведите k — количество таких целых чисел n, что их факториал заканчивается на m нулей. Затем выведите эти k целых чисел в порядке возрастания.

Примечание

Факториал n равняется произведению всех целых чисел от 1 до n включительно, то есть n! = 1·2·3·...·n.

В первом примере 5! = 120, 6! = 720, 7! = 5040, 8! = 40320 и 9! = 362880.

D. Фибоначчиеватость

дп математика Перебор реализация хэши *2000

Яш недавно узнал о числах Фибоначчи. Он так обрадовался этому знанию, что решил называть произвольную последовательность фибоначчиеватой, если

  1. последовательность состоит хотя бы из двух элементов;
  2. f0 и f1 произвольные;
  3. fn + 2 = fn + 1 + fn при всех n ≥ 0.

Вам дана последовательность целых чисел a1, a2, ..., an. Вам требуется переставить элементы последовательности таким образом, чтобы как можно более длинный её префикс был фибоначчиеватой последовательностью.

Входные данные

В первой строке входных данных записано единственное число n (2 ≤ n ≤ 1000) — длина последовательности ai.

Во второй строке записаны n целых чисел a1, a2, ..., an (|ai| ≤ 109).

Выходные данные

Выведите количество элементов в самом длинном возможном фибоначчиеватом префиксе после перестановки элементов.

Примечание

В первом примере, если переставить элементы исходной последовательности следующим образом  - 1, 2, 1, то вся последовательность ai будет фибоначчиеватой.

Во втором примере оптимальным способом переставить элементы является , , , , 28.

A. Оркестр

Перебор реализация *1100

Пауль наслаждается концертом симфонического оркестра. Секция струнных инструментов представляет собой клетчатый прямоугольник r × c. В каждой клетке находится скрипач, за исключением n клеток с альтистами. Паулю очень нравятся альты, поэтому он хочет сделать фотографию, на которой будет как минимум k альтистов. Пауль может сфотографировать некоторый прямоугольник со сторонами, параллельными осям координат. Посчитайте, сколько различных подходящих фотографий он может сделать.

Две фотографии считаются различными, если отличаются координаты соответствующих прямоугольников.

Входные данные

В первой строке входных данных записаны четыре целых числа r, c, n, k (1 ≤ r, c, n ≤ 10, 1 ≤ k ≤ n) — количество строк и столбцов в прямоугольнике, описывающем секцию струнных инструментов, общее количество альтистов и минимальное количество альтистов, которое должно присутствовать на фотографии Пауля, соответственно.

В следующих n строках записаны по два целых числа xi и yi (1 ≤ xi ≤ r, 1 ≤ yi ≤ c) — номер строки и номер столбца, определяющие позицию i-го альтиста, соответственно. Гарантируется, что позиции всех альтистов различны.

Выходные данные

Выведите единственно целое число — количество различных фотографий, на которых будут хотя бы k альтистов.

Примечание

Будем использовать «*» для обозначения скрипачей и «#» для альтистов.

В первом примере оркестр выглядит следующим образом:


*#
**
Пауль может сделать фотографию, содержащую только альтиста, прямоугольник 1 × 2, содержащий весь столбец с альтистом, 2 × 1 строчку с альтистом или сфотографировать разом всю секцию струнных инструментов. Таким образом, возможны 4 фотографии.

Во втором примере оркестр выглядит следующим образом:


#*
*#
#*
Паулю подойдёт только фотография всего оркестра.

В третьем примере оркестр выглядит так же, как и во втором.

C. Промокоды с ошибками

*особая задача Конструктив Перебор реализация *1400

Во время проведения новогодней акции в группе «Бары Судиславля» были разыграны n промокодов. Каждый промокод состоит из ровно шести цифр и даёт право на один бесплатный коктейль в баре «Приют комара». Разумеется, все промокоды различны.

Поскольку «Приют комара» открывается только в 9, а вечеринки в Судиславле, как правило, начинаются уже в 6, то у многих могут возникнуть проблемы с тем, чтобы вбить промокод без ошибок. Необходимо вычислить такое максимальное k, что промокод может быть однозначно идентифицирован, если был введён не более чем с k ошибками. При этом k = 0 означает, что промокоды необходимо вводить абсолютно точно.

Ошибкой в этой задаче следует считать ввод неправильной цифры. Например, значение «123465» содержит две ошибки относительно промокода «123456». Независимо от количества ошибок, введённое значение состоит ровно из шести цифр.

Входные данные

В первой строке выходных данных записано число n (1 ≤ n ≤ 1000) — количество промокодов.

В каждой из следующих n строк записан один промокод, состоящий из ровно шести цифр. Гарантируется, что все промокоды различны. Допустимо, что промокоды начинаются с цифры «0».

Выходные данные

Выведите максимальное k (разумеется, не превосходящее длины промокода), такое что любой промокод может быть однозначно идентифицирован, если введён с не более чем k ошибками.

Примечание

В первом примере k < 3, так как если посетитель бара вобьёт значение «090909», то будет невозможно определить, какой именно промокод ему соответствует.

D. Трёхмерный черепаший суперкомпьютер

графы Перебор поиск в глубину и подобное *1800

В Черепашьей Академии Наук построили суперкомпьютер, состоящий из n·m·k процессоров. В качестве архитектуры был выбран параллелепипед размера n × m × k, разбитый на ячейки размером 1 × 1 × 1, в каждой из которых находится ровно один процессор. Таким образом, каждый процессор можно однозначно идентифицировать тройкой из номера слоя от 1 до n, номера строки от 1 до m и номера столбца от 1 до k.

В ходе работы суперкомпьютера процессоры могут отправлять друг другу сообщения по знаменитой черепашьей схеме: процессор (x, y, z) может отправлять сообщения процессорам (x + 1, y, z), (x, y + 1, z) и (x, y, z + 1) (если, конечно, такие существуют), при этом обратная связь отсутствует, то есть процессоры (x + 1, y, z), (x, y + 1, z) и (x, y, z + 1) не могут отправлять сообщения процессору (x, y, z).

Со временем некоторые процессоры вышли из строя и перестали работать. Такие процессоры не могут отправлять сообщения, принимать сообщения или служить промежуточными звеньями в пересылке сообщений. Будем говорить, что процессор (a, b, c) управляет процессором (d, e, f) , если существует цепочка из процессоров (xi, yi, zi), такая что (x1 = a, y1 = b, z1 = c), (xp = d, yp = e, zp = f) (здесь и далее p — длина цепочки), а процессор в цепочке с номером i (i < p) может отправлять сообщения процессору i + 1.

Черепахи очень беспокоятся об отказоустойчивости системы связи между оставшимися процессорами. Для этого они хотят знать количество критических процессоров. Процессор (x, y, z) называется критическим, если его отключение нарушит какое-нибудь управление, то есть если существуют два отличных от (x, y, z) процессора (a, b, c) и (d, e, f), таких что (a, b, c) управлял (d, e, f) до отключения (x, y, z) и перестал управлять им после отключения.

Входные данные

В первой строке содержатся три целых числа n, m и k (1 ≤ n, m, k ≤ 100) — размерности суперкомпьютера.

Далее следуют n блоков, описывающих текущее состояние процессоров. Блоки соответствуют слоям суперкомпьютера в порядке от 1 до n. Каждый блок состоит из m строк по k символов в каждой — описание очередного слоя в формате таблички m × k. Таким образом, состоянию процессора (x, y, z) соответствует z-й символ y-й строки блока номер x. Символ «1» соответствует работающему процессору, а символ «0» —вышедшему из строя. Блоки разделяются ровно одной пустой строкой.

Выходные данные

Выведите единственное целое число — количество критических процессоров, то есть таких, что отключение только этого процессора нарушит какое-то управление.

Примечание

В первом примере не работает весь первый слой процессоров. Во втором слое при отключении процессора (2, 1, 2) нарушится управление процессора (2, 1, 3) процессором (2, 1, 1), а при отключении процессора (2, 2, 2) нарушится управление процессора (2, 2, 3) процессором (2, 2, 1).

Во втором примере критическими являются все процессоры, кроме угловых.

В третьем примере нет ни одного процессора, управляющего другим процессором, поэтому ответ 0.

E. Простой отрезок

*особая задача математика Перебор теория чисел *1800

Простое число это такое число, у которого ровно два различных натуральных делителя. Например, числа 2, 3, 17, 97 — простые, а числа 1, 10, 120 — нет.

Для заданного числа n найдите наиболее короткий отрезок чисел [a, b] такой, что a ≤ n ≤ b, а числа a и b — простые.

Входные данные

В единственной строке входных данных задано целое число n (2 ≤ n ≤ 10000).

Выходные данные

Выведите пару искомых чисел a и b через пробел.

C. Маленький Артёмка и Танцы

Конструктив Перебор реализация *1800

Маленький Артёмка очень любит танцевать. Особенно ему нравится танцевать руэду — кубинский танец, в котором все пары стоят по кругу.

Более детально: во время исполнения руэды n пар из мальчиков и девочек стоят по кругу. Изначально мальчик под номером 1 танцует с девочкой под номером 1, мальчик под номером 2 танцует с девочкой под номером 2 и так далее. Девочки пронумерованы в порядке по часовой стрелке. Во время танца громко объявляются различные команды, и все пары должны одновременно их исполнить, при этом мальчики могут в результате выполнения команд перемещаться вдоль круга, а девушки всегда стоят на своих изначальных местах. В данной задаче мы рассматриваем команды двух видов:

  1. Объявляется число x и направление, после чего все мальчики смещаются на x девушек в соответствующем направлении.
  2. Партнёры, которые танцуют с девушками с чётными индексами, меняются местами с партнёрами, которые танцуют с девушками с нечётными индексами, то есть тот, кто танцевал с девушкой 1, переходит к девушке номер 2, тот, кто танцевал с девушкой номер 2, переходит к девушке номер 1, тот, кто танцевал с девушкой номер 3, переходит к девушке номер 4 и так далее. Гарантируется, что n всегда чётно.

Ваша задача — определить конечное положение мальчиков после выполнения всех команд.

Входные данные

В первой строке входных данных записаны числа n и q (2 ≤ n ≤ 1 000 000, 1 ≤ q ≤ 2 000 000) — количество пар и количество выполненных команд соответственно. Гарантируется, что n чётно.

В следующих строках даны танцевальные команды в порядке их выполнения. Каждая команда начинается с целого числа, означающего ее тип, — 1 или 2. Команда первого типа является числом x ( - n ≤ x ≤ n), где 0 ≤ x ≤ n означает, что все мальчики переходят на x девушек в направлении по часовой стрелке, а x < 0 означает переход на  - x в направлении против часовой стрелки. Для команды второго типа нет дополнительных входных данных.

Выходные данные

Выведите n чисел, i-е из которых означает номер мальчика, с которым танцует девушка номер i после выполнения всех команд.

A. Проверка дружбы

Конструктив Перебор реализация *1200

Корове Бесси и её лучшей подруге Элси подарили на день числа Пи пазлы. Каждый пазл состоит из таблички 2 × 2 и трёх костяшек с пометками «A», «B» и «C». Эти костяшки расположены в табличке таким образом, что одна клетка свободна. За один ход разрешается выбрать любую костяшку, расположенную в смежной со свободной клетке, и переложить её в свободную клетку, как показано на картинке:

Чтобы выяснить, являются ли они Лучшими Друзьями на Всю Жизнь (ЛДВЖ), Бесси и Элси хотя понять, существует ли такая последовательность ходов (ходить можно в обоих пазлах), которая переводит их пазлы в одинаковую конфигурацию. Конфигурации двух пазлов считаются одинаковыми, если одинаковые костяшки расположены на одинаковых позициях. Поворачивать и переворачивать пазл не разрешается.

Входные данные

В первых двух строках входных данных записана табличка 2 × 2 с изначальной конфигурацией пазла Бесси. Следующие две строки задают табличку 2 × 2 с конфигурацией пазла Элси. Костяшки обозначены буквами «A», «B» и «C», а пустая клетка обозначена как «X». Гарантируется, что оба пазла содержат ровно одну костяшку с каждой буквой и ровно одну пустую клетку.

Выходные данные

Выведите «YES» (без кавычек) если можно совершить такую последовательность ходов, что конфигурации пазлов совпадут (а значит, Бесси и Элси настоящие ЛДВЖ). В противном случае выведите «NO» (без кавычек).

Примечание

Решение для первого тестового примера представлено на рисунке. Бесси достаточно переместить вниз костяшку с пометкой «A».

Во втором примере два пазла нельзя привести в одну конфигурацию. Возможно Бесси и Элси не такие уж и друзья...

B. Гарри Поттер и история магии

жадные алгоритмы Перебор реализация *1700

История магии, пожалуй, самый скучный предмет в Школе Чародейства и Волшебства Хогвартс. Гарри Поттер обычно спит на уроках истории, а лекции за него пишет Самопишущее Перо. Профессор Бинс, учитель истории магии, читает лекции настолько скучным и монотонным голосом, что он оказывает усыпляющее действие даже на Самопишущее Перо. Из-за этого Перо часто допускает ошибки, особенно в датах.

И вот в конце семестра профессор Бинс решил собрать у учеников пергаменты с лекциями на проверку. Рон Уизли в панике: если у Гарри есть хотя бы какие-то конспекты, пусть и с ошибками, то у него нет никаких, потому что на лекциях Рон тоже спал, а его перо давно сгрызла крыса Короста. Гермиона Грейнджер отказалась дать Рону свои конспекты, потому что, по ее мнению, все должны учиться самостоятельно. Поэтому Рону ничего не остается делать, кроме как переписывать конспекты Гарри.

Из-за ошибок Пера у Гарри вышла полнейшая путаница с датами: годы восстаний гоблинов и других важных для магического мира событий идут не по порядку, иногда даже встречаются даты из будущего. Теперь при переписывании Рон хочет изменить некоторые цифры так, чтобы даты шли в хронологическом (т.е. неубывающем) порядке и чтобы в конспектах не было дат позже 2011 года или раньше 1000 года. Чтобы полученная в результате последовательность была как можно ближе к той, которую диктовал профессор Бинс, Рон будет изменять не более одной цифры в каждой дате на другую цифру. Помогите ему сделать это.

Входные данные

В первой строке входного файла содержится одно целое число n (1 ≤ n ≤ 1000) — количество дат в конспектах Гарри. Следующие n строк содержат сами даты y1, y2, ..., yn, по одной в строке. Каждая дата является четырехзначным целым числом (1000 ≤ yi ≤ 9999).

Выходные данные

Выведите n чисел z1, z2, ..., zn (1000 ≤ zi ≤ 2011) — даты, получившиеся у Рона. Числа выводите по одному в строке. Числа zi должны образовывать неубывающую последовательность. Каждое число zi должно отличаться от соответствующей даты yi не более чем одной цифрой. Замена первой цифры числа на 0 не допускается. Если возможных решений несколько, выведите любое. Если решений нет, выведите «No solution» (без кавычек).

D. Гарри Поттер и Распределяющая Шляпа

Перебор поиск в глубину и подобное хэши *2200

Как известно, в Хогвартсе четыре факультета: Гриффиндор, Пуффендуй, Когтевран и Слизерин (Gryffindor, Hufflepuff, Ravenclaw, Slytherin). Распределение первокурсников по факультетам происходит с помощью Распределяющей Шляпы. Ученики вызываются по очереди, в алфавитном порядке, каждый из них должен надеть на голову Шляпу и, после некоторых размышлений, Шляпа торжественно объявляет название факультета, на который следует поступить этому ученику.

Считается, что при этом Шляпа исходит из личных качеств ученика: храбрых и благородных она отправляет в Гриффиндор, умных и сметливых — в Когтевран, упорных и честных — в Пуффендуй, а хитрых и изворотливых — в Слизерин. Однако очень обеспокоенная предстоящим распределением первокурсница Гермиона Грейнджер изучила всю литературу, касающуюся Распределяющей Шляпы, и пришла к выводу, что дело обстоит гораздо проще. В случае если родственники первокурсника уже учились в Хогвартсе, то Шляпа определяет ученика на тот же факультет, где учились его родственники. В спорных ситуациях, когда родственники учились на разных факультетах или когда они все были маглами, как у Гермионы, Шляпа определяет ученика на факультет, на который в данный момент отправлено меньше всего первокурсников. Если таких факультетов несколько, то выбор предоставляется самому ученику. Тогда ученик может выбрать любой из факультетов, на которых пока отправлено наименьшее количество первокурсников.

Гермиона уже опросила всех предшествующих ей по списку учеников об их родственниках. Теперь она и ее новые друзья Гарри Поттер и Рон Уизли хотят узнать, на какой факультет Шляпа определит Гермиону.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 10000) — количество учеников, идущих в списке раньше Гермионы. Следующая строка содержит n символов. Если все родственники ученика учились на одном и том же факультете, то i-й символ в строке совпадает с первой буквой названия этого факультета. Иначе i-й символ равен «?».

Выходные данные

Выведите все возможные факультеты, на которые может быть отправлена Гермиона. Названия факультетов следует выводить в алфавитном порядке, по одному в строке.

Примечание

Рассмотрим второй пример. Раньше Гермионы только два ученика. Первый ученик отправляется на Пуффендуй (Hufflepuff). Второму ученику предоставляется выбор между факультетами, на которые было отправлено наименьшее количество учеников, т.е. Гриффиндором, Когтевраном и Слизерином. Если он выберет Гриффиндор, то Гермионе придется выбирать между Когтевраном и Слизерином, если Когтевран — между Гриффиндором и Слизерином, если Слизерин — между Гриффиндором и Когтевраном. В итоге возможно такое стечение обстоятельств (зависящее от выбора второго ученика и самой Гермионы), что Гермиона окажется 1) на Гриффиндоре, 2) на Когтеврание, 3) на Слизерине. Отметим, что несмотря на то, что ни в одном случае Гермионе не будет предоставлен выбор между всеми тремя вариантами, они все возможны и их все нужно выводить в ответ. На Пуффендуй в данном примере Гермиона не попадет ни при каких обстоятельствах.

B. Просмотр фотографий

Бинарный поиск дп Перебор *1900

В телефоне Васи есть n фотографий. На экране телефона в текущей момент открыта фотография номер 1. Можно перемещаться влево и вправо на соседнюю фотографиями с помощью одного движения пальца по экрану (пролистывания). Если после первой фотографии пролистнуть влево, откроется фотография номер n. Аналогично, если с фотографии n пролистнуть вправо, то откроется фотография номер 1. На пролистывание до соседней фотографии тратится a секунд.

Про каждую фотографию известно в какой она ориентации — горизонтальной и вертикальной она находится. Телефон находится в вертикальной ориентации и не может быть повёрнут. На смену ориентации картины тратится b секунд.

У Васи есть T секунд, чтобы посмотреть фотографии. За это время он хочет посмотреть как можно больше фотографий. Если Вася видит фотографию в первый раз, то он обязательно захочет её рассмотреть, потратив на это 1 секунду, при необходимости потратив b секунд на поворот фотографии в нужную ориентацию. Если Вася видит фотографию не в первый раз, он ее просто пролистывает (секунда на просмотр не тратится, менять ориентацию фотографии тоже не требуется). Пропускать не просмотренные фотографии не разрешается.

Помогите Васе определить максимальное количество фотографий, которые он успеет просмотреть за T секунд.

Входные данные

В первой строке входных данных следуют четыре целых положительных числа n, a, b, T (1 ≤ n ≤ 5·105, 1 ≤ a, b ≤ 1000, 1 ≤ T ≤ 109) — количество фотографий, время, которое тратится на переход между соседними фотографиями, время, которое тратится на изменение ориентации фотографии и общее время, которое есть у Васи на просмотр фотографий.

Во второй строке следует строка длины n, состоящая из символов 'w' и 'h'.

Если на i-й позиции в строке стоит символ 'w', то фотографию с номером i нужно смотреть в горизонтальной ориентации.

Если на i-й позиции в строке стоит символ 'h', то фотографию с номером i нужно смотреть в вертикальной ориентации.

Выходные данные

Выведите единственное целое число — максимальное количество фотографий, которое успеет рассмотреть Вася за T секунд.

Примечание

В первом тесте из условия можно повернуть первую фотографию (3 секунды), просмотреть первую фотографию (1 секунда), сдвиуться влево (2 секунда), повернуть четвёртую фотографию (3 секунды), просмотреть четвёртую фотографию (1 секунда). На весь процесс уйдёт ровно 10 секунд.

Обратите внимание, в последнем тесте из условия времени не хватает даже на просмотр первой фотографии, при этом её нельзя пропустить.

A. Медвежонок и три мячика

Перебор реализация сортировки *900

У полярного медвежонка Лимака есть n мячиков. Размер i-го мячика равен ti.

Лимак хочет подарить по одному мячику каждому из трёх своих друзей. Дарить подарки нелегко — Лимак должен следовать двум правилам:

  • Никакие два друга не должны получить мячики одинакового размера.
  • Никакие два друга не должны получить мячики, размеры которых отличаются больше чем на 2.

Например, Лимак может выбрать мячики размеров 4, 5 и 3 или мячики размера 90, 91 и 92. При этом он не может выбрать мячики размера 5, 5 и 6 (два друга получат одинаковые мячики) и не может выбрать 30, 31 и 33 (30 и 33 отличаются больше чем на 2).

Помогите Лимаку определить, сможет ли он выбрать подарки своим друзьям и не нарушить ни одного из правил.

Входные данные

В первой строке входных данных записано число n (3 ≤ n ≤ 50) — количество мячиков у Лимака.

Во второй строке записано n целых чисел t1, t2, ..., tn (1 ≤ ti ≤ 1000), где ti означает размер i-го мячика.

Выходные данные

Если Лимак может выбрать три мячика разного размера, так что никакие два не будут отличаться больше чем на 2, то выведите "YES" (без кавычек). В противном случае выведите "NO".

Примечание

В первом примере у Лимака есть 4 мячика, и он может выбрать из них три, не нарушая ни одного правила. Для этого необходимо взять мячики с размерами 18, 16 и 17.

Во втором примере не существует способа раздать друзьям подарки, не нарушая при этом правил.

В третьем примере выбрать подарки можно двумя способами:

  1. Выбрать мячики размера 3, 4 и 5.
  2. Выбрать мячики размера 972, 970 и 971.

B. Медвежонок и сжатие

дп Перебор поиск в глубину и подобное Строки *1300

Полярный медвежонок Лимак терпеть не может длинные строки, поэтому предпочитает сжимать их. К тому же он ещё маленький и знает только первые шесть букв английского алфавита: 'a', 'b', 'c', 'd', 'e' и 'f'.

Имеется q операций сжатия строк. Операции можно применять в любом порядке и каждую можно применить произвольное количество раз. Операция с номером i задаётся строкой ai длины два и строкой bi длины один. Все строки ai различны.

Если у Лимака есть строка s, то он может применить к ней i-ю операцию, только если первые два символа этой строки совпадают со строкой ai. Применение операции заключается в отбрасывании этих двух символов и приписывании в начало строки bi. Для пояснения посмотрите примечание.

Несложно заметить, что применение любой операции уменьшает длину строки s ровно на 1. Также для некоторых наборов операций возможно существование строки, сжатие которой невозможно, потому что первые две буквы не совпадают ни с одной из строк ai.

Лимак хочет начать со строки длины n и применить n - 1 операцию, чтобы в итоге получить строку «a». Сколько существует подходящих строк, из которых можно получить «a»? Не забывайте, что Лимак может использовать только те буквы, которые ему знакомы.

Входные данные

В первой строке записаны два числа n и q (2 ≤ n ≤ 6, 1 ≤ q ≤ 36) — начальная длина строки и количество доступных операций соответственно.

В следующих q строках даны описания операций. В i-й из них записаны строки ai и bi (|ai| = 2, |bi| = 1). Гарантируется, что ai ≠ aj для всех i ≠ j и что все ai и bi состоят только из первых шести строчных букв английского алфавита.

Выходные данные

Выведите количество строк длины n, таких что Лимак сможет перевести в строку «a», используя только имеющиеся q операций.

Примечание

В первом примере существует 4 строки длины 3, из которых Лимак сможет получить строку «a»: "abb", "cab", "cca", "eea".

Для сжатия первой строки Лимаку достаточно два раза применить первую операций (замена «ab» на «a»). Первое применение превратит строку «abb» в «ab», а второе превратит «ab» в «a».

Остальные строки можно превратить в «a» следующим образом:

  • "cab" "ab" "a"
  • "cca" "ca" "a"
  • "eea" "ca" "a"

Во втором примере единственной подходящей строкой является «eb».

C. Медвежонок, взлёты и падения

Перебор реализация *1900

В жизни всё время чередуются взлёты и падения, прямо как в забавных последовательностях. Последовательность t1, t2, ..., tn называется забавной, если выполнены следующие два условия:

  • ti < ti + 1 для всех нечётных i < n;
  • ti > ti + 1 для всех чётных i < n.

Например, последовательности (2, 8), (1, 5, 1) и (2, 5, 1, 100, 99, 120) являются забавными, а (1, 1), (1, 2, 3) и (2, 5, 3, 2) нет.

У полярного медвежонка Лимака есть последовательность целых положительных чисел t1, t2, ..., tn. Это последовательность не является забавной, и Лимак хочет это исправить. Он ровно один раз выберет какие-то два элемента и поменяет их местами. Посчитайте число таких пар индексов i < j, что если поменять местами соответствующие элементы ti и tj, то последовательность станет забавной.

Входные данные

В первой строке входных данных записано число n (2 ≤ n ≤ 150 000) — длина последовательности t.

Во второй строке записаны n целых чисел t1, t2, ..., tn (1 ≤ ti ≤ 150 000) — исходная последовательность. Гарантируется, что она не является забавной.

Выходные данные

Выведите количество способов поменять два элемента ровно один раз, чтобы сделать имеющуюся последовательность забавной.

Примечание

В первом примере получить забавную последовательность можно двумя способами:

  1. Поменять местами t2 = 8 и t4 = 7.
  2. Поменять местами t1 = 2 и t5 = 7.

Во втором примере есть только один способ получить забавную последовательность: поменять местами t1 = 200 и t4 = 50.

B. Петя и деревня

Перебор реализация *1100

Маленький Петя часто ездит к бабушке в деревню. У бабушки есть большой огород, который, если смотреть сверху, можно представить в виде прямоугольника размером 1 × n, разбитого на n одинаковых квадратных участков. Особенностью огорода является то, что каждый из квадратных участков имеет свою фиксированную высоту и над каждым из участков при помощи новейшей системы водоснабжения может быть создан искусственный дождь над этим участком.

Создание искусственного дождя — дорогостоящая операция, поэтому мы ограничимся тем, что искусственный дождь будет создан лишь над одним участком. При этом вода с каждого затопленного участка будет попадать на соседние с ним участки, если их высота не превосходит высоту данного участка. То есть, к примеру, если огород представляет собой прямоугольник 1 × 5, где высоты участков равны 4, 2, 3, 3, 2, то создав искусственный дождь над любым из участков с высотой 3 — вода разольется по всем участкам, кроме участка с высотой 4. Картинка, поясняющая этот пример:

Петя увлекается программированием, поэтому он решил найти такой участок, что если мы создадим над этим участком искусственный дождь, то количество участков, на которые попадет вода, будет максимальным. Помогите ему.

Входные данные

В первой строке записано натуральное число n (1 ≤ n ≤ 1000) — количество участков. Во второй строке записано n натуральных чисел — высоты участков. Все числа во входном файле не менее 1 и не более 1000.

Выходные данные

Выведите одно число — максимальное число участков, на которые попадет вода, если мы создадим искусственный дождь ровно над одним участком.

C. Двоичная табличка

битмаски бпф дп математика Перебор разделяй и властвуй *2600

Дана таблица из n строк и m столбцов. В каждой ячейке таблицы записано число 0 или 1. За один ход разрешается выбрать произвольную строку или столбец и инвертировать все значения, то есть 0 заменить на 1, а 1 на 0. Какого минимального количества единиц в таблице можно добиться, выполняя данные действия?

Входные данные

В первой строке входных данных записаны два числа n и m (1 ≤ n ≤ 20, 1 ≤ m ≤ 100 000) — количество строк в таблице и количество столбцов соответственно.

Следующие n строк описывают строки таблицы. Все они имеют длину m и состоят только из цифр «0» и «1».

Выходные данные

Выведите одно число — минимальное возможное количество единиц после выполнения произвольной последовательности ходов.

E. Взламывать или не взламывать

дп жадные алгоритмы Перебор *3100

Рассмотрим раунд Codeforces, состоящий из трёх задач и использующий динамическую разбалловку.

Дана почти финальная таблица. Для каждого участника (включая вас) известно время, когда он сдал каждую из задач (или не сдал вовсе). Также про каждое из решений известно, можете вы его взломать или нет. Считаем, что единственные изменения до конца раунда — это ваши взломы.

Какое наивысшее место вы можете занимать в конце раунда?

Более формально: в раунде участвуют n человек, включая вас. Если некоторую задачу в конце раунда (после ваших взломов) решило k человек, то максимальный балл за эту задачу определяется следующим образом:

  1. Если n < 2k ≤ 2n, то максимальный балл — 500;
  2. Если n < 4k ≤ 2n, то максимальный балл — 1000;
  3. Если n < 8k ≤ 2n, то максимальный балл — 1500;
  4. Если n < 16k ≤ 2n, то максимальный балл — 2000;
  5. Если n < 32k ≤ 2n, то максимальный балл — 2500;
  6. Если 32k ≤ n, то максимальный балл — 3000.

Пусть максимальный балл за некоторую задачу равен s, тогда если человек не решил эту задачу (или вы взломали его решение), то он получает 0 баллов за эту задачу. Если человек решил данную задачу через t минут после начала раунда (и его решение не было взломано), то его балл за эту задачу равен .

Суммарный балл участника равен сумме его баллов по всем трём задачам плюс по 100 баллов за каждый успешный взлом (взломы делаете только вы).

Ваше место в конце раунда будет определяться как один плюс количество участников, суммарный балл которых строго больше вашего суммарного балла.

Входные данные

В первой строке входных данных задано число n (1 ≤ n ≤ 5000) — количество участников. Вы являетесь участником под номером 1.

Следующие n строк содержат по три целых числа ai, bi и ci. Здесь ai = 0 означает, что участник под номером i не решил первую задачу. 1 ≤ ai ≤ 120 означает, что участник под номером i решил первую задачу через ai минут после начала контеста, и вы не можете взломать его решение.  - 120 ≤ ai ≤  - 1 означает, что участник под номером i решил первую задачу через  - ai минут после начала контеста и вы можете взломать его решение. bi и ci описывают вторую и третью задачи в аналогичном формате.

Гарантируется, что все три числа a1, b1 и c1 неотрицательны.

Выходные данные

Выведите одно число — самое высокое место, которые Вы можете занять, взломав некоторые решения.

Примечание

Рассмотрим первый пример. Если не взламывать ни одно решение, то вы займете первое место (таблица слева). Если же взломать решение третьего участника по первой задаче (единственное, которое вы можете взломать), то максимальный балл за первую задачу изменится, и вы займете второе место (таблица справа).

B. Покупки

Перебор *1400

Аюш работает кассиром в торговом центре. Недавно его отдел открыл сервис "нажми и получи", который позволяет делать покупки через интернет.

Всего в магазине имеется k различных наименований товаров. При этом, n покупателей уже успели воспользоваться новым сервисом, оплатив по m товаров каждый. Обозначим как aij товар под номером j в списке i-го покупателя.

Из-за ограничений площади помещений все товары в магазине расположены в один ряд. Когда Аюш получает заказ от i-го покупателя, он по очереди ищет каждый товар aij (1 ≤ j ≤ m). Пусть pos(x) это позиция товара x в ряду на момент его взятия. Тогда время обслуживания i-го покупателя будет равно pos(ai1) + pos(ai2) + ... + pos(aim).

Когда Аюш обрабатывает очередной товар, он забирает его из ряда и упаковывает для покупателя, а в начало ряда кладёт точно такой же, только новый. Таким образом, значения pos постоянно меняются.

Ваша задача посчитать суммарное время, необходимое Аюшу для обработки всех заказов.

Запасы новых товаров на складе неограничены.

Входные данные

В первой строке находятся три целых числа n, m и k (1 ≤ n, k ≤ 100, 1 ≤ m ≤ k) — количество покупателей, количество товаров в списке каждого покупателя и количество товаров продающихся в магазине.

В следующей строке находятся k различных целых чисел pl (1 ≤ pl ≤ k) — изначальный порядок товаров в ряду. Товары пронумерованы целыми числами от 1 до k.

В каждой из следующих n строк находятся m различных целых чисел aij (1 ≤ aij ≤ k) — список товаров из заказа i-го покупателя.

Выходные данные

Выведите одно целое число t — суммарное время, необходимое Аюшу для обработки всех поступивших заказов.

Примечание

Первый покупатель хочет приобрести товары 1 и 5.

pos(1) = 3, поэтому теперь ряд выглядит так: [1, 3, 4, 2, 5].

pos(5) = 5, поэтому теперь ряд выглядит так: [5, 1, 3, 4, 2].

Время, потраченное на первого покупателя равно 3 + 5 = 8.

Второй покупатель хочет приобрести товары 3 и 1.

pos(3) = 3, поэтому теперь ряд выглядит так: [3, 5, 1, 4, 2].

pos(1) = 3, поэтому теперь ряд выглядит так: [1, 3, 5, 4, 2].

Время, потраченное на второго покупателя равно 3 + 3 = 6.

Суммарное время равно 8 + 6 = 14.

Формально pos(x) — это индекс x в ряду.

D. Цепная реакция

геометрия Перебор *3000

Группа берляндских учёных, с которыми вы имеете тесные деловые отношения, ведут исследования в области мирного атома. В частности, ими было обнаружено, что группа из четырёх наноботов, помещённая на поверхность флеботиновой пластинки, способна запустить мощную цепную реакцию при определённых условиях.

Если быть точным, учёные ввели прямоугольную декартову систему координат на плоской пластинке и определили четыре различные точки с целыми координатами, в которые изначально будут помещены боты. Далее для каждого бота будет выбрано одно из четырёх направлений (вверх, вниз, влево, вправо), параллельных осям координат. После этого каждый бот сдвигается на некоторое целочисленное расстояние (возможно, не одинаковое для разных ботов) вдоль своего направления. Цепная реакция запустится, если в итоге боты окажутся в вершинах квадрата положительной площади со сторонами, параллельными осям координат. В каждой вершине квадрата должен оказаться один нанобот. При этом реакция будет тем сильнее, чем меньшее время боты затратили на перемещение. Можно считать, что боты перемещаются со скоростью единица расстояния в единицу времени. Иначе говоря, реакция тем сильнее, чем меньше максимальный из путей, пройденных ботами.

Учёные заготовили множество пластинок и для каждой из них задали своё начальное положение для ботов. Теперь они просят вас помочь определить для каждой пластинки, куда следует двигаться ботам после «высадки».

Входные данные

В первой строке находится целое число t (1 ≤ t ≤ 50) — количество пластинок.

Далее следуют описания пластинок. Описание каждой пластинки состоит из четырёх строк. В каждой строке находится пара целых числа xi, yi ( - 108 ≤ xi, yi ≤ 108) — координаты очередного бота. Все боты находятся в различных точках.

Обратите внимание, несмотря на то, что в задаче может быть несколько пластинок в одном тесте, взламывать чужие решения вы можете только тестами с одной пластинкой, то есть параметр t во взломе должен быть равен 1.

Выходные данные

Для каждой пластинки в первой строке выведите одно целое число. Если учёные совершили досадную ошибку и наноботы не смогут переместиться так, чтобы в итоге образовать искомый квадрат, выведите -1. Иначе выведите минимальную возможную длину самого длинного из путей ботов.

Если решение существует, в последующих четырёх строках выведите по два целых числа — позиции каждого бота после перемещения. Позиции ботов выводите в порядке, в котором они заданы во входных данных.

Если существует несколько решений, можете вывести любое из них.

A. Выходные

жадные алгоритмы Конструктив математика Перебор *900

На планете Марс год длится ровно n дней (високосных годов на Марсе не бывает). При этом недели у марсиан такие же, как у землян — 5 рабочих дней и затем 2 выходных.

Перед вами стоит задача — определить минимально и максимально возможное количество выходных дней в году на Марсе.

Входные данные

В первой строке входных данных следует целое положительное число n (1 ≤ n ≤ 1 000 000) — количество дней в году на Марсе.

Выходные данные

Выведите два целых числа — минимально и максимально возможное количество выходных дней в году на Марсе.

Примечание

В первом тестовом примере год на Марсе состоит из 14 дней, а значит независимо от того, с какого дня начинается год, в нём в любом случае будет ровно 4 выходных.

Во втором тестовом примере дней в году на Марсе всего 2, и они оба могут быть как рабочими днями, так и выходными.

D1. Волшебный порошок - 1

Бинарный поиск Перебор реализация *1400

Эта задача предлагается в двух вариантах, которые отличаются только ограничениями. Если вы можете решить эту задачу в больших ограничениях, то вы можете сразу написать одно решение на оба варианта. Если же решение в больших ограничениях вызывает затруднение, вы можете решить только упрощённый вариант.

Проснувшись с утра, Аполлинария решила испечь печенек. Для того чтобы испечь одну печеньку, нужно n ингредиентов, причем про каждый ингредиент известно число ai — сколько грамм этого ингредиента необходимо для того, чтобы испечь одну печеньку. Для приготовления одной печеньки необходимо использовать все n ингредиентов в нужных пропорциях.

У Аполлинарии есть bi грамм i-го ингридиента. Кроме того, у неё есть k грамм волшебного порошка. Каждый грамм волшебного порошка можно превратить ровно в 1 грамм любого из n ингредиентов и использовать для приготовления печенек.

Перед вами стоит задача — определить максимальное количество печенек, которое сможет испечь Аполлинария при помощи имеющихся у неё ингредиентов и волшебного порошка.

Входные данные

В первой строке следуют два целых положительных числа n и k (1 ≤ n, k ≤ 1000) — количество ингредиентов и количество грамм волшебного порошка.

Во второй строке следует последовательность a1, a2, ..., an (1 ≤ ai ≤ 1000), где i-е число равно количеству грамм i-го ингредиента, необходимых для приготовления одной печеньки.

В третьей строке следует последовательность b1, b2, ..., bn (1 ≤ bi ≤ 1000), где i-е число равно количеству грамм i-го ингредиента, которые есть у Аполлинарии.

Выходные данные

Выведите целое число — максимальное количество печенек, которые сможет испечь Аполлинария при помощи имеющихся у неё ингредиентов и волшебного порошка.

Примечание

В первом тестовом примере Аполлинарии выгодно превратить 1 имеющийся у неё грамм волшебного порошка в ингредиент номер 2, тогда она сможет испечь 4 печеньки.

Во втором тестовом примере Аполлинарии выгодно превратить 1 грамм волшебного порошка в ингредиент номер 1 и 1 грамм волшебного порошка в ингредиент номер 3. Тогда она сможет испечь 3 печеньки. Оставшийся 1 грамм волшебного порошка можно оставить, так как с помощью него ответ увеличить невозможно.

F. Восстанови число

Конструктив Перебор Строки *2300

Вася решил передать Кате очень большое число n. Для этого он сначала записал это число как строку, а затем дописал справа аналогичным образом число k, которое равно количеству цифр в числе n.

Магическим образом при передаче этой записи Кате все цифры перемешались произвольным образом. Единственное, что помнит Вася, это некоторая непустая подстрока числа n (под подстрокой числа n следует понимать последовательность подряд идущих цифр из числа n).

Вася понимает, что не всегда возможно однозначно восстановить число n, поэтому просит вас найти минимально возможное число, которое он мог передавать. Обратите внимание, что запись числа, которое Вася передал Кате, не могла начинаться с нуля, кроме случая, когда передаваемое число и было нулём (в этом случае оно записывалось как единственная цифра 0).

Входные данные

В первой строке входных данных следует непустая строка, полученная Катей. Длина этой строки не превосходит 1 000 000.

Во второй строке следует непустая строка, которую запомнил Вася. Эта строка может содержать вначале один или несколько нулей.

Гарантируется, что входные данные корректны и что ответ всегда существует.

Выходные данные

Выведите минимальное число, которое мог передавать Вася.

B. Восстановление картины

Конструктив математика Перебор *1400

Вася подрабатывает сторожем в галерее. К сожалению, во время его дежурства была украдена одна из самых дорогих картин. Вася не хочет быть уволен, поэтому ему нужно срочно восстановить картину, но он помнит только несколько фактов о ней.

  • Картина представляет собой квадрат 3 × 3, в каждой клетке которого стоит целое число от 1 до n, при этом в различных клетках могут находиться как различные, так и одинаковые числа.
  • Сумма чисел в любом из четырёх квадратов 2 × 2 равна сумме чисел в верхнем левом квадрате 2 × 2.
  • Четыре известных числа a, b, c и d были расставлены так, как показано на рисунке ниже.

Помогите Васе определить количество различных квадратов, не противоречащих ни одному из этих фактов. Заметим, что это количество может быть равно нулю, если Вася что-то перепутал.

Два квадрата считаются различными, если существует клетка, в которой в разных квадратах стоят различные числа.

Входные данные

В первой строке входных данных записаны пять целых чисел n, a, b, c и d (1 ≤ n ≤ 100 000, 1 ≤ a, b, c, d ≤ n) — максимально возможное значение целого числа в любой клетке квадрата и четыре числа, которые Вася помнит.

Выходные данные

Выведите одно целое число — количество возможных квадратов, не противоречащих ничему, что помнит Вася.

Примечание

Все возможные квадраты в первом тесте

Все возможные квадраты во втором тесте

E. Ваня и шарики

Бинарный поиск дп Перебор реализация *2300

Ваня играет в игру, в которой на поле размером n × n в каждой клетке находится шарик со значением 0, 1, 2 или 3. Требуется за один ход уничтожить крест из шариков, такой что произведение значений составляющих его шариков максимально. Кресты из шариков могут быть обычные и повёрнутые. Например:


**o**
**o**
ooooo
**o**
**o**

или


o***o
*o*o*
**o**
*o*o*
o***o

Формально, крест задаётся тремя целыми числами r, c и d, такими что d ≤ r, c ≤ n - d + 1. При этом обычный крест состоит из шариков с координатами (x, y) (здесь x означает номер строки, а y — столбца), такими что выполнено |x - r|·|y - c| = 0 и |x - r| + |y - c| < d. Повёрнутый крест состоит из шариков с координатами (x, y), такими что |x - r| = |y - c| и |x - r| < d.

Ваня хочет узнать максимально возможное произведение значений шариков, образующих один крест. Поскольку ответ может быть слишком большим, Ваня хочет знать это число по модулю 109 + 7.

Входные данные

В первой строке входных данных находится число n (1 ≤ n ≤ 1000) — размерность таблицы с шариками.

В каждой из следующих n строк записано n символов «0», «1», «2» или «3», описывающих значения, записанные в шариках.

Выходные данные

Выведите самое большое возможное произведение по модулю 109 + 7. Обратите внимание, что требуется не максимизировать остаток от деления, а найти максимальное число и вывести его по модулю 109 + 7.

Примечание

В первом примере максимальное произведение достигается на повёрнутом кресте с центром в точке (3, 3) и радиусом 1: 2·2·3·3·3 = 108.

D. Медведь и преследование

графы математика Перебор поиск в глубину и подобное реализация Теория вероятностей *2900

В Беарляндии n городов, пронумерованных целыми числами от 1 до n. Они соединены m двунаправленными дорогами. Дорога номер i соединяет два различных города ai и bi, и никакие две дороги не соединяют одну и ту же пару городов. От любого города можно добраться до любого другого, используя только данные дороги.

Расстоянием между городами a и b называется минимальное количество дорог, которыми придётся воспользоваться, чтобы попасть из a в b.

Лимак — медведь гризли. Он преступник, и ваша задача его поймать, или, по крайней мере, попытаться. У вас осталось только два дня (сегодня и завтра), а затем он улизнёт навсегда.

Ваше главное оружие — БВД (Беарляндский Высокоточный Детектор). Когда вы используете БВД, находясь при этом в каком-нибудь городе, он сообщает вам расстояние между городом, где вы находитесь, и городом, где сейчас находится Лимак. К сожалению, БВД может быть использован только один раз в день.

Вам мало что известно о местоположении Лимака, поэтому вы предполагаете, что он находится в одном из n городов страны, выбранном случайно и с равной вероятностью (то есть Лимак изначально находится в каждом городе с вероятностью ). Вы разработали следующий план:

  1. Выбрать один из городов и применить там БВД.
    • Сразу после применения БВД можно попытаться поймать Лимака (но это может быть плохой идеей). В этом случае вы выбираете какой-то город и ищете Лимака там. Если Лимак действительно в этом городе, то вы выигрываете, в противном случае Лимак становится осторожнее, и его уже никогда не поймать (вы проигрываете).
  2. Подождать 24 часа и снова применить БВД. Вы знаете, что за это время Лимак обязательно изменит своё местоположение, а именно, он выберет случайно и равновероятно одну дорогу ведущую из его текущего города и пройдёт по ней в соседний город.
  3. На следующий день вы можете снова выбрать любой город и применить БВД там.
  4. Теперь уже обязательно попробовать поймать Лимака. Для этого вы выбираете какой-то город и ищете в нём Лимака. Если он там, то вы побеждаете, если нет — проигрываете.

Каждый раз, когда вам требуется выбрать город, вы можете выбирать любой из n городов, то есть мгновенное перемещение не является для вас проблемой.

Чему равна вероятность поймать Лимака, если вы будете действовать оптимально?

Входные данные

В первой строке входных данных записаны два числа n и m (2 ≤ n ≤ 400, ) — количество городов и количество дорог соответственно.

Затем следуют m строк, описывающих дороги. В i-й из этих строк записаны два числа ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi) — номера городов, соединённых i-й дорогой.

Гарантируется, что никакая пара городов не соединена более чем одной дорогой и что от любого города можно добраться до любого другого, используя только данные дороги.

Выходные данные

Выведите одно вещественное число — вероятность обнаружить Лимака, если действовать оптимально. Ваш ответ будет считаться правильным, если его абсолютная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если |a - b| ≤ 10 - 6.

Примечание

В первом примере Беарляндия состоит из трёх городов, и между каждой парой этих городов есть дорога. Рассмотрим один из оптимальных сценариев.

  1. Использовать БВД в городе 1.
    • С вероятностью Лимак окажется в этом городе, и БВД выдаст расстояние 0. В таком случае нужно сразу хватать Лимака — мы точно не ошибёмся.
    • С вероятностью расстояние равно 1, потому что Лимак находится в городе 2 или городе 3. В этом случае оптимально будет дождаться следующего дня.
  2. Вы ждёте, а Лимак переходит в соседний город.
    • С вероятностью Лимак находился в городе 2 и перешёл в город 3.
    • он перешёл из 2 в 1.
    • он перешёл из 3 в 2.
    • он перешёл из 3 в 1.
  3. Снова использовать БВД в городе 1 (хотя разрешено сделать это и в любом другом городе).
    • Если расстояние 0, то Лимак находится в городе 1 (вы побеждаете).
    • Если расстояние 1, то Лимак либо в городе 2, либо в городе 3. Тогда попробуем поискать его в городе 2 (или 3, не имеет значения).

Пользуясь такой стратегией, вы проиграете, только если Лимак был изначально в городе 2 и перешёл в город 3. Вероятность проигрыша равна . Ответ равен .

C. Синхрофазотрон

Перебор *2200

Для неких экспериментов маленькому Пете срочно понадобился синхрофазотрон. Сам прибор у Пети уже есть, осталось настроить подачу топлива к нему. Топливо поступает по системе узлов, пронумерованных числами от 1 до n, соединённых трубами. Трубы идут из каждого узла с меньшим номером в каждый узел с большим, топливо может идти по трубе только в направлении от узла с меньшим номером к узлу с большим. В первый узел может поступить любое количество топлива, а из последнего узла топливо поступает прямо в синхрофазотрон. Известно, что каждая из труб имеет три характеристики: минимальное количество топлива, которое должно по ней течь, максимальное число топлива, которое может по ней течь, и стоимость активации трубы. Если по трубе из узла i в узел j течет cij единиц топлива (cij > 0), то заплатить за это надо будет aij + cij2 тугриков (aij — стоимость активации этой трубы). Если же по трубе не течет топливо, то платить ничего нельзя. По трубам может течь только целое число единиц топлива.

Минимальное и максимальное ограничение на трубу действует всегда, а не только тогда когда она активирована. Считается, что труба активна тогда и только тогда, когда поток через это трубу строго больше нуля.

Петя не хочет, чтобы система труб была слишком перегружена, поэтому он хочет найти минимальное количество топлива, которое, поступив в первый узел, сможет достигнуть синхрофазатрона. При этом он хочет впечатлить спонсоров, поэтому суммарная стоимость, которую нужно будет заплатить за прохождение топлива по всем трубам, должна быть максимальна.

Входные данные

В первой строке находится целое число n (2 ≤ n ≤ 6) — количество узлов. В следующих n(n - 1) / 2 строках находятся пятерки целых чисел, s, f, l, h, a, описывающие трубы — начальный узел трубы, конечный узел трубы, минимальное и максимальное количество топлива, которое может течь по трубе, и стоимость активации трубы, соответственно. (1 ≤ s < f ≤ n, 0 ≤ l ≤ h ≤ 5, 0 ≤ a ≤ 6). Гарантируется, что во входных данных для каждой пары узлов с различными номерами будет описана ровно одна труба между ними.

Выходные данные

Выведите в первую строку два числа через пробел: минимальное возможное количество топлива, которое может течь в синхрофазотрон, и максимальную возможную сумму, которую надо будет потратить на то, чтобы это количество топлива достигло синхрофазотрона. Если не существует количества топлива, которое могло бы достичь синхрофазотрона, выведите "-1 -1".

Количество топлива, которое достигнет синхрофазотрона, не обязано быть положительным — оно может равняться нулю, если минимальные ограничения на количество топлива у всех труб равны нулю.

Примечание

В первом тесте мы можем пустить 1 или 2 единицы топлива по трубе из 1 в 2. Минимальное возможное количество — 1, пустить его стоит a12 + 12 = 4.

Во втором тесте, мы можем пустить максимум 2 единицы из узла 1 в узел 2, и нам нужно пустить как минимум 3 единицы из узла 2 в узел 3. Это невозможно.

В третьем тесте минимальное возмножное количество равно 2. Мы можем пустить каждую единицу топлива по одному из двух путей: 1->2->3->4 или 1->3->4. Если мы дважды воспользуемся первым путем, это будет стоить a12 + 22 + a23 + 22 + a34 + 22=14. Если мы дважды воспользуемся вторым путем, это будет стоить a13 + 22 + a34 + 22=14. Однако если мы воспользуемся каждым путем (разрешив 1 единице топлива течь по трубам 1->2, 2->3, 1->3 и двум единицам по трубе 3->4), это будет стоить a12 + 12 + a23 + 12 + a13 + 12 + a34 + 22=15 и это максимальная возможная цена.

Заметим также, что по ребру 1->4 ничего не течет, по-этому стоимость его активации к ответу не прибавляется.

B. Экономическая игра

Перебор *1300

Коля разрабатывает интересную игру — экономический симулятор. Разумеется, его любимая часть разработки — это внутриигровое тестирование. Однажды он так увлекся этим процессом, что не заметил, как у него на счету осталось ровно 0 игровых монет.

Коля точно помнит, что в начале игры у него было n монет и что в процессе игры он покупал только дома за 1 234 567 монет, машины за 123 456 монет и компьютеры за 1234 монет.

Теперь он заинтересовался, мог ли он, покупая только дома, машины и компьютеры, потратить все свои игровые монеты, или же в игре есть баг? Формально: существуют ли целые неотрицательные числа a, b и c, такие что a × 1234567 + b × 123456 + c × 1234 = n?

Помогите Коле ответить на этот вопрос.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 109) — количество монет в начале игры.

Выходные данные

Выведите «YES» (без кавычек), если Коля мог потратить все свои монеты, и «NO» (без кавычек) в противном случае.

Примечание

В первом примере Коля мог купить один дом, одну машину и один компьютер и потратить в сумме 1 234 567 + 123 456 + 1234 = 1 359 257 монет.

A. Разбойничьи часы

дп Комбинаторика математика Перебор *1700

Разбойники, напавшие на карету Герды, уже давным-давно успешно скрываются от королевских преследователей. Чтобы последним было сложнее догадаться о времени очередного нападения, разбойники используют собственные альтернативные часы.

Во-первых, так как королевские воины плохо разбираются в математике, разбойники используют в своих цифровых часах семеричную систему счисления. Во-вторых, они делят сутки на n часов, а час — на m минут. Личные часы каждого разбойника поделены на две части: в первой из них ровно столько разрядов, чтобы показать все возможные значения часа (от 0 до n - 1), а во второй — все возможные значения минут (от 0 до m - 1). В-третьих, если значение часа или минуты умещается в меньшее число разрядов, чем есть в соответствующей части часов, то запись дополняется нулями слева.

Обратите внимание, для записи числа 0 требуется один разряд.

Маленькой разбойнице интересно, сколько в течение дня существует таких моментов времени (то есть фиксированных значений часов и минут), что все цифры на часах в этот момент различны. Помогите ей посчитать это значение.

Входные данные

В первой строке входных данных находятся два целых числа, записанных в десятичной системе счисления, n и m (1 ≤ n, m ≤ 109) — число часов в одном дне и минут в одном часе соответственно.

Выходные данные

В первой строке выходного файла должно содержаться единственное число, записанное в десятичной системе счисления — количество пар значений часа и минуты, таких что все отображаемые на часах цифры различны.

Примечание

Для первого теста все возможные пары будут такими: (0: 1), (0: 2), (1: 0), (1: 2).

Для второго теста все возможные пары будут такими: (02: 1), (03: 1), (04: 1), (05: 1), (06: 1).

A. Разбойничьи часы

дп Комбинаторика математика Перебор *1700

Разбойники, напавшие на карету Герды, уже давным-давно успешно скрываются от королевских преследователей. Чтобы последним было сложнее догадаться о времени очередного нападения, разбойники используют собственные альтернативные часы.

Во-первых, так как королевские воины плохо разбираются в математике, разбойники используют в своих цифровых часах семеричную систему счисления. Во-вторых, они делят сутки на n часов, а час — на m минут. Личные часы каждого разбойника поделены на две части: в первой из них ровно столько разрядов, чтобы показать все возможные значения часа (от 0 до n - 1), а во второй — все возможные значения минут (от 0 до m - 1). В-третьих, если значение часа или минуты умещается в меньшее число разрядов, чем есть в соответствующей части часов, то запись дополняется нулями слева.

Обратите внимание, для записи числа 0 требуется один разряд.

Маленькой разбойнице интересно, сколько в течение дня существует таких моментов времени (то есть фиксированных значений часов и минут), что все цифры на часах в этот момент различны. Помогите ей посчитать это значение.

Входные данные

В первой строке входных данных находятся два целых числа, записанных в десятичной системе счисления, n и m (1 ≤ n, m ≤ 109) — число часов в одном дне и минут в одном часе соответственно.

Выходные данные

В первой строке выходного файла должно содержаться единственное число, записанное в десятичной системе счисления — количество пар значений часа и минуты, таких что все отображаемые на часах цифры различны.

Примечание

Для первого теста все возможные пары будут такими: (0: 1), (0: 2), (1: 0), (1: 2).

Для второго теста все возможные пары будут такими: (02: 1), (03: 1), (04: 1), (05: 1), (06: 1).

D. Кай и вечность

Перебор реализация сортировки *2600

Снежная королева, уходя, дала Каю задание выложить из льдинок слово «вечность». Кай очень серьёзно взялся за задание, поскольку если Кай сумеет это сделать, то он станет сам себе господин, и ему подарят весь мир и пару коньков.

Под дворцом Снежной королевы расположено бесконечное клеточное поле. На нём хаотично разбросаны n льдинок, причём каждая льдинка лежит в центре ячейки клеточного поля и никакие две льдинки не лежат в одной ячейке. Для оценки сложности задания Кай смотрит на некоторые квадраты размера k × k с углами, лежащими в узлах поля, и сторонами, параллельными осям координат, и считает количество льдинок внутри квадрата.

Однако так Кай смотрит только на сложность какого-то фрагмента поля. Для того чтобы правильно оценить сложность всего поля в целом, Кай придумал такой критерий: для каждого x (1 ≤ x ≤ n) он хочет узнать количество квадратов k × k с углами, лежащими в узлах поля, и сторонами, параллельными осям координат, в которых содержится ровно x льдинок.

Помогите Каю оценить сложность задания, полученного от Снежной королевы.

Входные данные

В первой строке вводятся числа n и k (1 ≤ n ≤ 100 000, 1 ≤ k ≤ 300) — количество льдинок и параметр k соответственно. В следующих n строках вводятся по два целых числа xi и yi ( - 109 ≤ xi, yi ≤ 109) — координаты ячеек, в которых лежат льдинки. Гарантируется, что никакие две льдинки не лежат в одной ячейке.

Выходные данные

Выведите n чисел: количество квадратов k × k, содержащих ровно 1, 2, ..., n льдинок соответственно.

E. Путешествие по царству Снежной королевы

битмаски графы Перебор разделяй и властвуй *2800

Герда пустилась в путь по царству Снежной королевы.

Дорожная сеть, по которой направляется Герда, представляет собой n перекрёстков, соединённых m дорогами. Дороги пронумерованы числами от 1 до m. Снежная королева догадывалась, что Кая могут найти, и наложила на них могучее заклятие. Теперь погодные условия на дороге с номером i таковы, что в какой бы момент времени, не превосходящий i, Герда ни оказалась на ней, она выедет с неё только в момент времени i. Если же она ступит на дорогу позже, чем в момент времени i, она так и не сможет с неё выехать.

Герда выезжает в момент времени l с перекрёстка с номером s и едет во дворец Снежной королевы, расположенный на перекрёстке с номером t. Кроме того, в момент времени r + 1 Снежная королева возвращается в свой дворец и уже не пустит Герду внутрь, поэтому Герда должна добраться до дворца не позже, чем в момент времени r.

Вам требуется по заданной сети для каждого из q запросов li, ri, si и ti ответить, сможет ли Герда добраться до дворца Снежной королевы.

Входные данные

В первой строке входных данных находятся числа n, m и q (2 ≤ n ≤ 1000, 1 ≤ m, q ≤ 200 000) — количество перекрёстков в дорожной сети царства Снежной королевы, дорог в ней, случаев расположения Герды, дворца Снежной королевы и времён выезда Герды и возвращения Снежной королевы соответственно.

В i-й из следующих m строк дано описание дороги с номером i. Описание состоит из целых чисел vi и ui (1 ≤ vi, ui ≤ n, vi ≠ ui) — номеров перекрёстков, соединённых этой дорогой. По дороге можно добраться как из перекрёстка vi на перекрёсток ui, так и из перекрёстка ui в перекрёсток vi. Каждая пара перекрёстков может встречаться более одного раза, это значит, что между ними есть несколько разных дорог.

Затем следуют описания тестовых случаев. В каждой из следующих q строк содержатся четыре числа li, ri, si и ti (1 ≤ li ≤ ri ≤ m, 1 ≤ si, ti ≤ n, si ≠ ti) — момент времени, когда Герда выезжает, самый поздний момент времени, когда она может приехать во дворец, номер перекрёстка, с которого выезжает Герда, и номер перекрёстка, на котором расположен дворец Снежной Королевы.

Выходные данные

Для каждого тестового случая выведите «Yes» (без кавычек) или «No» (без кавычек) — сможет Герда добраться до дворца Снежной королевы или нет.

D. Разделение королевства II

графы Перебор снм сортировки Структуры данных *2500

Давным-давно существовало великое королевство, которым правили Великий Арий и Пари Великая. У этих двоих были некоторые разногласия по вопросу любимых чисел, поэтому они решили разделить королевство между собой.

Великое королевство состояло из n городов, пронумерованных целыми числами от 1 до n, и m двунаправленных дорог, пронумерованных от 1 до m. Длина i-й из этих дорог равняется wi. Великий Арий и Пари Великая договорились уничтожить некоторый префикс дорог (все дороги с номером меньше некоторого x) и некоторый суффикс дорог (все дороги с номером больше некоторого x), оставив таким образом дороги с номерами l, l + 1, ..., r - 1 и r.

После этого они разделят королевство на две части (каждый город отойдёт ровно к одной из двух частей), такие что трудность разделения будет минимальна. Трудностью разделения называется максимальная длина дороги, такой что оба её конца принадлежат одной части. В случае если таких дорог вообще нет, трудность разделения полагается равной  - 1.

Историки обнаружили карту великого королевства и теперь обсуждают q возможных сценариев выбора параметров l и r великими правителями. По имеющимся данным для каждой гипотезы li, ri определите минимально возможную трудность разделения королевства.

Входные данные

В первой строке входных данных записаны три целых числа n, m и q (1 ≤ n, q ≤ 1000, ) — количество городов и дорог в великом королевстве и количество гипотез историков соответственно.

В i-й из последующих m строк записаны три целых числа ui, vi и wi (1  ≤  ui,  vi  ≤  n, 0 ≤ wi ≤ 109), обозначающих, что дорога с номером i соединяет города ui и vi и имеет длину wi. Гарантируется, что никакая дорога не соединяет город с самим собой и никакие две дороги не соединяют одну и ту же пару городов.

В каждой из последующих q строк записаны два целых числа li и ri (1  ≤ li ≤ ri ≤ m) — догадка историков об оставшихся в королевстве дорогах.

Выходные данные

Для каждой догадки историков выведите минимально возможную трудность разделения королевства.

A. Майк и телефон

Конструктив Перебор реализация *1400

Купаясь на пляже, Майк случайно уронил свой телефон в воду. Сильно не беспокоясь, Майк купил дешевый телефон с кнопочной клавиатурой в качестве замены. Клавиатура состоит из десяти цифровых кнопок одинакового размера, расположенных привычным образом:

Вместе со старым телефоном Майк потерял и весь список контактов, и теперь он может вспомнить только как двигались его пальцы при наборе того или иного номера. Формально, движениями пальцев следует считать последовательность векторов, соединяющих центры кнопок, последовательно нажимаемых в процессе набора номера. К примеру, движения пальцев для номеров "586" и "253" совпадают:

Майк уже успел набрать номер по "памяти пальцев" и начать вызов, поэтому ему очень важно знать, может ли он быть уверен в том, что звонит по правильному номеру? Другими словами, существует ли какой-нибудь номер отличный от данного, с такими же движениями пальцев?

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 9) — количество цифр в номере, который Майк уже успел набрать.

Во второй строке содержится сам номер, состоящий из n цифр от «0» до «9».

Выходные данные

Если другого номера, соответствующего движениям пальцев Майка для набранного им номера, не существует и он может быть уверен в правильности номера, выведите «YES» (без кавычек).

В противном случае, в первой строке выведите «NO» (без кавычек).

Примечание

В качестве пояснения к первому примеру входных данных используйте картинки из условия выше.

F. Couple Cover

дп Перебор теория чисел *2200

"Couple Cover" — популярная игра на удачу, скоро начнётся! Два игрока должны работать сообща, чтобы построить прямоугольник. В мешке, находящемся на столе, лежит n шаров и на каждом из них записано целое число. Первый игрок случайным образом вытаскивает из мешка шар (все шары могут быть выбраны равновероятно). Число записанное на этом шаре будет шириной построенного прямоугольника в метрах. Этот шар не возвращается в мешок и второй игрок достает ещё один шар. Число записанное на этом шаре будет длиной построенного прямоугольника в метрах. Если площадь прямоугольника окажется больше или равна некоторой величины p квадратных метров, то игроки побеждают. В противном случае они проигрывают.

Организаторы игры хотят подобрать подходящее значение p так, что вероятность победы пары будет не очень большой и не очень маленькой, но они считают совсем медленно, поэтому они наняли вас, чтобы ответить на несколько запросов. Вам задан список чисел записанных на шарах и организаторы хотят узнать для нескольких значений p сколько выигрышных пар существует. Обратите внимание, что пары считаются различными, если различается первый или второй шар, и два шара с одинаковым числовым значением считаются различными.

Входные данные

В первой строе находится целое число n (1 ≤ n ≤ 106).

Во второй строке находятся n положительных целых чисел: i-е число равно ai (1 ≤ ai ≤ 3·106) — число, записанное на i-м шаре.

В следующей строке находится целое число m (1 ≤ m ≤ 106) — количество запросов.

Затем следует строка, содержащая m положительных целых чисел: j-е из них равно значению p (1 ≤ p ≤ 3·106) в j-м запросе.

Выходные данные

Для каждого запроса выведите в отдельной строке количество выигрышных пар шаров, существующих для заданного значения p.

A. Лоренцо Фон Маттерхорн

Деревья Перебор реализация Структуры данных *1500

Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

Входные данные

Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

Выходные данные

Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

Примечание

В запросах первого примера:

  1. Перекрестки на пути — 3, 1, 2 и 4.
  2. Перекрестки на пути — 4, 2 и 1.
  3. Перекрестки на пути — 3 и 6.
  4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
  5. Перекрестки на пути — 6, 3 и 1.
  6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
  7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

A. Лоренцо Фон Маттерхорн

Деревья Перебор реализация Структуры данных *1500

Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

Входные данные

Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

Выходные данные

Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

Примечание

В запросах первого примера:

  1. Перекрестки на пути — 3, 1, 2 и 4.
  2. Перекрестки на пути — 4, 2 и 1.
  3. Перекрестки на пути — 3 и 6.
  4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
  5. Перекрестки на пути — 6, 3 и 1.
  6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
  7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

A. Лоренцо Фон Маттерхорн

Деревья Перебор реализация Структуры данных *1500

Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

Входные данные

Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

Выходные данные

Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

Примечание

В запросах первого примера:

  1. Перекрестки на пути — 3, 1, 2 и 4.
  2. Перекрестки на пути — 4, 2 и 1.
  3. Перекрестки на пути — 3 и 6.
  4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
  5. Перекрестки на пути — 6, 3 и 1.
  6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
  7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

A. Лоренцо Фон Маттерхорн

Деревья Перебор реализация Структуры данных *1500

Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

Входные данные

Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

Выходные данные

Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

Примечание

В запросах первого примера:

  1. Перекрестки на пути — 3, 1, 2 и 4.
  2. Перекрестки на пути — 4, 2 и 1.
  3. Перекрестки на пути — 3 и 6.
  4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
  5. Перекрестки на пути — 6, 3 и 1.
  6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
  7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

A. Лоренцо Фон Маттерхорн

Деревья Перебор реализация Структуры данных *1500

Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

Входные данные

Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

Выходные данные

Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

Примечание

В запросах первого примера:

  1. Перекрестки на пути — 3, 1, 2 и 4.
  2. Перекрестки на пути — 4, 2 и 1.
  3. Перекрестки на пути — 3 и 6.
  4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
  5. Перекрестки на пути — 6, 3 и 1.
  6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
  7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

A. Лоренцо Фон Маттерхорн

Деревья Перебор реализация Структуры данных *1500

Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

Входные данные

Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

Выходные данные

Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

Примечание

В запросах первого примера:

  1. Перекрестки на пути — 3, 1, 2 и 4.
  2. Перекрестки на пути — 4, 2 и 1.
  3. Перекрестки на пути — 3 и 6.
  4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
  5. Перекрестки на пути — 6, 3 и 1.
  6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
  7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

A. Лоренцо Фон Маттерхорн

Деревья Перебор реализация Структуры данных *1500

Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

Входные данные

Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

Выходные данные

Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

Примечание

В запросах первого примера:

  1. Перекрестки на пути — 3, 1, 2 и 4.
  2. Перекрестки на пути — 4, 2 и 1.
  3. Перекрестки на пути — 3 и 6.
  4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
  5. Перекрестки на пути — 6, 3 и 1.
  6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
  7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

A. Лоренцо Фон Маттерхорн

Деревья Перебор реализация Структуры данных *1500

Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

Входные данные

Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

Выходные данные

Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

Примечание

В запросах первого примера:

  1. Перекрестки на пути — 3, 1, 2 и 4.
  2. Перекрестки на пути — 4, 2 и 1.
  3. Перекрестки на пути — 3 и 6.
  4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
  5. Перекрестки на пути — 6, 3 и 1.
  6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
  7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

B. Барникл

математика Перебор реализация Строки *1400

Барни, находясь в баре, загляделся на красивую девушку. Он хочет точным выстрелом пронзить ее стрелой любви, и поэтому ему нужно знать расстояние между ним и девушкой.

Барни попросил бармена Карла сообщить ему, чему равно это расстояние, но тот был так занят разговорами с другими посетителями, что написал значение расстояния (а это вещественное число) на салфетке. Однако, для этого Карл использовал экспоненциальную запись числа. Экспоненциальная запись некоторого вещественного числа x это запись в форме AeB, где A — некоторое вещественное число, B — целое число, а x равняется A × 10B. В нашей задаче A может принимать вещественные значения от 0 до 9, а B неотрицательно.

Барни плохо знаком с экспоненциальной записью, поэтому он просит вас сообщить ему, чему равно расстояние в его обычной десятичной записи с минимально возможным количеством знаков после десятичной точки (или без десятичной точки, если его значение целое). Смотрите формат выходных данных для более подробной информации.

Входные данные

Первая и единственная строка входных данных содержит экспоненциальную запись числа в виде a.deb, где a, d и b — целые числа, а e соответствует обычному символу 'e' (0 ≤ a ≤ 9, 0 ≤ d < 10100, 0 ≤ b ≤ 100) — экспоненциальную запись искомого расстояния.

a и b не содержат ведущих нулей, а d не содержит нулей в конце своей записи (но может быть равно 0). Также, b не может быть отличным от 0, если a равно 0.

Выходные данные

В единственной строке выведите вещественное число x (искомое расстояние) в его десятичной записи.

То есть, если x — целое число, выведите его значение без дробной части и десятичной точки и без ведущих нулей.

В противном случае, выведите x в виде p.q, где p и q — целые числа, p не содержит ведущих нулей (но может быть равным нулю), а q не содержит нулей в конце своей записи (и не может быть равным нулю).

A. Калевич и шахматы

Конструктив Перебор *1100

Известный в Берляндии художник Калевич любит эпатировать общественность. Его последняя идея фикс — шахматы. Вот уже более тысячи лет люди играют в эту древнюю игру на неинтересных, однообразных досках. Калевич решил разрушить эту традицию, представив новый взгляд на шахматные доски.

Как и прежде, шахматная доска это квадратное поле 8 × 8 клеток, каждая из которых покрашена в черный или белый цвет. Калевич предлагает красить шахматные доски, выбирая на поле горизонтальный или вертикальный ряд из 8-ми клеток (т.е. строку или столбец) и закрашивая его в черный цвет. Изначально вся доска белая, а такие покраски можно делать один или более раз. Многократная покраска клетки допустима, но после первой покраски цвет клетки не меняется и остается черным. Калевич красит доски очень аккуратно и по любой отдельно взятой клетке невозможно понять, была она покрашена вертикальным или горизонтальным мазком.

Калевич надеется, что такие доски станут популярны, и ему будут поступать заказы на покраску досок, обеспечив его безбедную старость. Клиенты будут предоставлять ему информацию о том, какую доску они хотят иметь, а художник будет красить белую доску, реализуя идею клиента.

Конечно, в таком бизнесе надо экономить на всем — для каждого заказа Калевич хочет знать наименьшее количество мазков, которое ему надо совершить, чтобы выполнить требование клиента. Помогите Калевичу с этой несложной задачей.

Входные данные

Входные данные состоят ровно из 8-ми строк, каждая из которых содержит по 8 символов. Заданная матрица обозначает требование клиента, символ W обозначает, что соответствующая клетка доски должна остаться белой, а B — что клетка должна быть покрашена в черный цвет.

Гарантируется, что требование клиента может быть выполнено с помощью последовательных покрасок строк или столбцов доски в черный цвет.

Выходные данные

Выведите единственное число — минимальное количество строк или столбцов, которые надо покрасить Калевичу, чтобы белая доска совпала с требованиями.

B. Степени двойки

математика Перебор реализация Структуры данных *1500

Вам задано n чисел a1, a2, ..., an. Найдите количество пар индексов i, j (i < j) таких, что ai + aj является степенью двойки (то есть найдется такое целое число x, что ai + aj = 2x).

Входные данные

В первой строке следует целое положительное число n (1 ≤ n ≤ 105) — количество чисел.

Во второй строке следует n целых положительных чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

Выведите количество пар индексов i, j (i < j) таких, что ai + aj является степенью числа 2.

Примечание

В первом примере в ответ входят следующие пары индексов: (1, 4) и (2, 4).

Во втором примере каждая пара индексов (i, j) (где i < j) входит в ответ.

A. Тор

Перебор реализация Структуры данных *1600

Тор постепенно привыкает к жизни на земле. Недавно Локи подарил ему смартфон, на котором уже установлены n приложений. Тору очень нравится новый телефон, но ему не хватает информации о количестве непрочитанных оповещений от приложений (возможно, это Локи наложил на телефон проклятье, кто знает).

Последовательно произойдёт q событий, каждое из которых будет одного из трёх типов:

  1. Приложение x порождает новое оповещение (которое, разумеется, изначально не прочитано).
  2. Тор просматривает все оповещения от приложения x (в том числе перечитывает уже прочитанные).
  3. Тор просматривает первые t оповещений, сгенерированных какими-либо приложениями (то есть первые t событий первого типа). Гарантируется, что к этому моменту уже произошло хотя бы t событий первого типа. Обратите внимание, что Тор читает не первые t непросмотренных оповещений, а просто первые t оповещений, в том числе просматривая какие-то заново.

Помогите Тору определить количество непросмотренных оповещений после каждого события. Считайте, что изначально никаких оповещений в телефоне не было.

Входные данные

В первой строке входных данных записаны целые числа n и q (1 ≤ n, q ≤ 300 000) — количество приложений и количество событий соответственно.

Следующие q строк содержат описания событий, в i-й из них будет сначала записано целое число typei — тип события. Если typei = 1 или typei = 2, то далее следует целое число xi. А если typei = 3, то далее следует целое число ti (1 ≤ typei ≤ 3, 1 ≤ xi ≤ n, 1 ≤ ti ≤ q).

Выходные данные

Выведите количество непрочитанных оповещений после каждого события.

Примечание

В первом примере:

  1. Приложение 3 создаёт оповещение (количество непрочитанных оповещений равно 1).
  2. Приложение 1 создаёт оповещение (количество непрочитанных оповещений равно 2).
  3. Приложение 2 создаёт оповещение (количество непрочитанных оповещений равно 3).
  4. Тор читает все оповещения, созданные приложением 3, остаётся 2 непрочитанных оповещения.

Во втором примере:

  1. Приложение 2 создаёт оповещение (количество непрочитанных оповещений равно 1).
  2. Приложение 4 создаёт оповещение (количество непрочитанных оповещений равно 2).
  3. Приложение 2 создаёт оповещение (количество непрочитанных оповещений равно 3).
  4. Тор читает первые три оповещения, и непрочитанных оповещений становится 0.
  5. Приложение 3 создаёт оповещение (количество непрочитанных оповещений равно 1).
  6. Приложение 3 создаёт оповещение (количество непрочитанных оповещений равно 2).

A. Beru-такси

геометрия Перебор реализация *900

Рабочий Василий живёт в точке (a, b) координатной плоскости. Он очень торопится на работу, поэтому ему нужно как можно быстрее уехать из дома. В новом приложении он нашёл n свободных Beru-такси, про каждое из которых известны координаты на плоскости (xi, yi), а также скорость vi.

Считая, что каждый из n водителей сразу поедет к Василию по прямой и с максимальной скоростью, определите, через какое минимальное время Василий сможет сесть в Beru-такси.

Входные данные

В первой строке входных данных содержится два целых числа a и b ( - 100 ≤ a, b ≤ 100) — координаты дома Василия.

Во второй строке входных данных содержится число n (1 ≤ n ≤ 1000) — количество свободных Beru-такси.

В i-й из последующих n строк записаны три целых числа xi, yi и vi ( - 100 ≤ xi, yi ≤ 100, 1 ≤ vi ≤ 100) — координаты i-й машины и её скорость соответственно.

Несколько машин могут находиться в одной точке. Координаты машин могут совпадать с координатами дома Василия.

Выходные данные

Выведите единственное число — минимальное время, через которое какая-нибудь из машин такси окажется в точке (a, b). Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

В первом примере первое такси доедет за время 2, а второе за время 1, значит ответом будет число 1.

Во втором примере такси 2 и 3 приедут одновременно.

D. Пасьянс

Перебор реализация *2200

У Васи есть колода карт в 54 листа (52 стандартных карты и 2 различных джокера). Это все, что у него есть на данный момент. Чтобы не умереть со скуки, Вася раскладывает из них пасьянс.

Вася раскладывает nm карт в виде прямоугольника n × m. Если среди них есть джокеры, то Вася должен заменить их на некоторые из 54 - nm оставшихся (т. е. не лежащих на столе) карт так, чтобы джокеров не осталось. Вася может выбирать карты для замены произвольным образом. Помните, что каждая карта присутствует в колоде в единственном экземпляре. Вася старается сделать замену таким образом, чтобы пасьянс сошелся.

Вася считает, что пасьянс сошелся, если после замены джокеров существует два не пересекающихся квадрата 3 × 3, внутри каждого из которых все карты имеют либо одинаковую масть, либо попарно различные достоинства.

Определите по начальной позиции — может ли пасьянс сойтись или нет. И если да — укажите способ, которым это можно сделать.

Входные данные

В первой строке находятся целые числа n и m (3 ≤ n, m ≤ 17, n × m ≤ 52). В следующих n строках находятся по m слов в каждой. Каждое слово состоит из двух букв. Джокеры обозначаются «J1» и «J2» соответственно. Для всех остальных карт первая буква обозначает достоинство, а вторая — масть. Возможные достоинства: «2», «3», «4», «5», «6», «7», «8», «9», «T», «J», «Q», «K» и «A». Возможные масти: «C», «D», «H» и «S». Все карты различны.

Выходные данные

Если пасьянс может сойтись — в первой строке выведите «Solution exists.» без кавычек. Во второй строке выведите каким образом нужно заменить джокеры. Возможны три варианта:

  • «There are no jokers.» — если джокеров во входных данных нет.
  • «Replace Jx with y.» — если джокер один. x — его номер, а y — карта, на которую его следует заменить.
  • «Replace J1 with x and J2 with y.» — если оба джокера присутствуют во входных данных. x и y здесь — различные карты, на которые нужно заменить первого и второго джокеров соответственно.

В третьей строке выведите координаты левого верхнего угла первого квадрата 3 × 3 в формате «Put the first square to (r, c).», где r и c — строка и столбец соответственно. Аналогичным образом в четвертой строке выведите координаты второго квадрата 3 × 3 в формате «Put the second square to (r, c).».

Если решений несколько — выведите любое.

Если решений нет — в единственной строке выведите «No solution.» без кавычек.

Смотрите примеры для более точного понимания формата вывода.

Примечание

Претесты покрывают все возможные форматы вывода.

B. Оптимальная точка на прямой

Перебор сортировки *1400

Вам задано n точек на прямой своими координатами xi. Найдите точку x такую, что сумма расстояний от неё до остальных точек минимальна.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 3·105) — количество точек на прямой.

Во второй строке находятся n целых чисел xi ( - 109 ≤ xi ≤ 109) — координаты заданных n точек.

Выходные данные

Выведите одно целое число x — положение оптимальной точки на прямой. Если существует несколько оптимальных точек выведите положение самой левой из них. Гарантируется, что ответ всегда является целым числом.

F. Операции над множеством строк

интерактив Перебор Строки строковые суфф. структуры Структуры данных хэши *2400

Вам нужно обработать m запросов над множеством строк D. Каждый запрос одного из трёх типов:

  1. Добавить строку s в множество D. Гарантируется, что эта строка ранее не добавлялась в множество.
  2. Удалить строку s из множества D. Гарантируется, что эта строка находится в множестве D.
  3. Для заданной строки s найти количество вхождений строк из множества D. Если некоторая строка p из множества D имеет несколько вхождений в s вы должны посчитать их все.

Заметим, что вам требуется решить задачу в режиме online. Это значит, что вы не можете сразу считать все входные данные. Вы можете считать очередной запрос только после того как выведите ответ на последний запрос третьего типа. Используйте функции fflush в языке C++ и BufferedWriter.flush в языке Java после каждого вывода вашей программы.

Входные данные

В первой строке находится целое число m (1 ≤ m ≤ 3·105) — количество запросов.

В каждой из следующих m строк находится целое число t (1 ≤ t ≤ 3) и непустая строка s — тип запроса и строка запроса. Все строки состоят только из строчных букв английского алфавита.

Сумма длин всех строк во входных данных не превосходит 3·105.

Выходные данные

Для каждого запроса третьего типа выведите одно целое число c — требуемое количество вхождений в строку s.

A. Автобус в Удайлэнд

Перебор реализация *800

Кодер ZS и Бабуин Крис едут в Удайлэнд! Чтобы туда добраться, им нужно сесть в специальный автобус IOI. В автобусе IOI всего n рядов мест. В каждом ряду присутствуют четыре места, разделенные на пары проходом. К моменту прихода ZS'а и Криса некоторые места в автобусе оказались уже занятыми.

ZS и Крис — закадычные друзья. Они непременно хотят занять пару соседних незанятых мест. Два места считаются соседними, если они находятся в одном ряду и в одной паре. Сможете ли вы помочь ZS'у и Крису определить по заданной конфигурации автобуса, где им следует сесть?

Входные данные

Первая строка содержит единственное число n (1 ≤ n ≤ 1000) — количество рядов мест в автобусе.

Далее следуют n строк. Каждая из них содержит ровно 5 символов, первые два из которых означают первую пару мест в ряду, третий символ означает проход (он всегда равен '|'), а последние два из них означают вторую пару мест в ряду.

Каждый символ, исключая проход, равен 'O' или 'X', причём 'O' означает пустое место, а 'X' означает занятое место. Изучите тестовые примеры для лучшего понимания задачи.

Выходные данные

Если Крис и ZS могут занять пару соседних незанятых мест, выведите в первой строке «YES» (без кавычек). В следующих n строках выведите конфигурацию автобуса, где символы, соответствующие местам ZS'а и Криса заменены символами '+'. Таким образом, конфигурация должна отличаться от конфигурации входных данных ровно в двух символах (во входных данных они равны 'O', в выходных данных — '+').

Если подходящей для Криса и ZS'а пары мест не существует, выведите в первую строку «NO» (без кавычек).

Если ответов несколько, выведите любой из них.

Примечание

Обратите внимание, что следующая конфигурация является некорректной для первого примера из условия, так как места должны быть в одной паре.

O+|+X

XO|XX

OX|OO

XX|OX

OO|OO

OO|XX

E. Али идет за покупками

*особая задача Перебор Строки *1800

Али Кучулу собирается пойти за подарками к Наврузу, древнему персидскому празднику, иранскому новому году.

Когда Али вошел в магазин, он сразу понял, что когда-то хозяин магазина тоже был программистом. Но программистом много денег не заработаешь, и ему пришлось сменить работу. Хозяин сказал Али, что тот может взять бесплатно что угодно, если ответит на простой вопрос за 10 секунд. Правда, чтобы увидеть вопрос, нужно было заплатить 3 томана.

Али сразу же согласился, и хозяин магазина дал ему листок бумаги, на котором было задание. Оно было очень простым:

Пусть строка Aababababababab. Какая непустая подстрока A встречается в ней чаще всего?

Али тут же ответил: a. Но хозяин сказал, что это неправильно, и попросил его дочитать условие до конца:

Если есть несколько таких подстрок, выберите самую длинную из них. Если их все равно несколько, выберите ту из них, что идет позже других в алфавитном порядке.

Правильный ответ был ab.

Сейчас Али просит вас решить эту задачу для других строк. А у вас есть для этого компьютер и странный язык.

Входные данные

В первой строке входных данных записана строка A. Эта строка непуста, состоит из маленьких латинских букв и содержит не более 30 символов.

Выходные данные

В первую строку выведите ответ.

A. Сломанные часы

Перебор реализация *1300

У вас есть сломанные часы, про которые известно, в 12- или 24-часовом формате HH:MM они должны показывать время. В 12-часовом формате часы изменяются в пределах от 1 до 12, а в 24-часовом — от 0 до 23. И в том, и в другом формате минуты изменяются от 0 до 59.

Вам задано время в формате HH:MM, которое показывают сломанные часы. Исправьте в нём минимальное количество цифр так, чтобы часы стали показывать верное время в заданном формате.

Например, если часы показывают 00:99, то, чтобы сделать время корректным в 24-часовом формате, достаточно заменить первую цифру 9 на цифру 3 и получить 00:39. Однако, чтобы получить корректную запись времени в 12-часовом формате, придётся дополнительно исправить как минимум две цифры, например дополнительно заменить второй 0 на 1 и получить 01:39.

Входные данные

В первой строке входных данных находится одно из чисел 12 или 24, обозначающее соответственно 12- или 24-часовой формат, в котором должны работать часы.

Во второй строке входного файла дано время, которое показывают часы, в формате HH:MM, то есть первые два символа описывают количество часов, а вторые два — количество минут.

Выходные данные

В единственной строке выходного файла выведите время в формате HH:MM, которое удовлетворяет условиям задачи и отличается от исходного в минимальном количестве позиций. Если подходящих решений несколько, можете вывести любое.

B. Пакетная сортировка

жадные алгоритмы математика Перебор реализация *1500

Вам задана таблица, состоящая из n строк и m столбцов.

Числа в каждой строке образуют перестановку от чисел 1 до m.

Разрешается не более одного раза для каждой строки поменять в ней два числа местами. Также разрешается не более одного раза поменять местами два столбца целиком. Таким образом, суммарно можно совершить от 0 до n + 1 действия. Описанные действия можно выполнять в любом порядке.

Проверьте, можно ли с помощью указанных действий добиться ситуации, чтобы в каждой строке была записана тождественная перестановка 1, 2, ..., m. Другими словами, существует ли такая последовательность действий, в результате которой числа в каждой из строк будут отсортированы по возрастанию.

Входные данные

В первой строке входных данных записаны два числа n и m (1 ≤ n, m ≤ 20) — количество строк и столбцов в заданной таблице.

В следующих n строках записаны по m чисел — содержимое таблицы. Гарантируется, что числа в каждой строке образуют перестановку чисел от 1 до m.

Выходные данные

Выведите «YES» (без кавычек), если с помощью указанных действий можно получить тождественную перестановку одновременно во всех строках таблицы. В противном случае выведите «NO» (без кавычек).

Примечание

В первом примере можно действовать следующим образом:

  1. Сначала поменять местами второй и третий столбец. После этого действия таблица будет выглядеть так:
    1 2 3 4
    1 4 3 2
  2. Затем во второй строке поменять местами числа на второй и четвёртой позиции. После этого действия таблица будет выглядеть так:
    1 2 3 4
    1 2 3 4

C. Спрятанное слово

Конструктив Перебор реализация Строки *1600

Определим игровое поле как таблицу из 2 рядов и 13 столбцов. В каждой клетке таблицы записана заглавная буква английского алфавита. Некоторые клетки могут содержать одинаковые буквы. Рассмотрим пример таблицы:


ABCDEFGHIJKLM
NOPQRSTUVWXYZ

Назовём две клетки соседними, если у них есть общая сторона или общий угол. В приведённом примере клетка «A» является соседней с клетками с буквами «B», «N» и «O». Клетка не является соседней сама себе.

Последовательность клеток называется путём, если любые две соседние клетки последовательности являются соседними клетками поля. В приведённом примере «ABC» является путём, также как и «KXWIHIJK». Последовательность клеток «MAB» путём не является, так как «M» не соседняя с «A». Одна клетка может входить в путь несколько раз (но не может занимать две соседние позиции в пути, так как клетка не является соседней сама себе).

Вам дана строка s, состоящая из 27 заглавных букв английского алфавита. Каждая заглавная буква английского алфавита встречается в s хотя бы один раз. Требуется построить какую-нибудь таблицу, содержащую какой-нибудь путь, такой что если выписать буквы в клетках вдоль этого пути, получится строка s. Если решения не существует выведите «Impossible».

Входные данные

В единственной строке входных данных записана строка s, состоящая из 27 заглавных букв английского алфавита. Каждая буква встречается в строке s хотя бы один раз.

Выходные данные

Выведите две строки, каждая из которых содержит 13 заглавных букв английского алфавита, определяющие строки таблицы. Если правильных решений несколько, выведите любое из них. Если решений не существует, выведите «Impossible».

E. Слишком много денег

жадные алгоритмы Перебор *2600

Альфред хочет купить игрушечного лося, который стоит c долларов. В магазине совсем нет сдачи, поэтому ему необходимо набрать ровно c долларов, ни больше и ни меньше. У него есть n монет. Чтобы набрать c долларов он использует следующий алгоритм: обозначим через S множество используемых сейчас монет. Изначально множество S пусто. Альфред последовательно добавляет в множество S новые монеты, каждый раз выбирая такую, что после её добавления суммарная стоимость монет не превышает c. Среди всех таких монет он выбирает наиболее дорогую. Если таких монет не существует, а суммарная стоимость множества S всё ещё меньше c, то Альфред сдаётся и уходит. Обратите внимание, что Альфред только добавляет монеты в множество S и никогда их оттуда не убирает.

Как программист, вы, скорее всего, знаете, что алгоритм Альфреда может не набрать множество монет с нужной суммой c, даже если оно существует. Например, пусть у Альфреда есть одна монета достоинством $3, одна монета достоинством $4 и две монеты достоинством $5 долларов, а игрушечный лось стоит $12. Следуя своему алгоритму, Альфред возьмёт обе монеты достоинством $5 и на этом остановится, так и не набрав нужную сумму. С другой стороны, набрать $12 долларов можно было, взяв по одной монете достоинством $3, $4 и $5.

Боб попытался убедить Альфреда в недостатках его алгоритма, но тот отказывается в это верить. Боб решил дать Альфреду ещё монет (в дополнение к тем, что уже есть у Альфреда), чтобы его алгоритм перестал работать. Боб может дать Альфреду любое количество монет любой стоимости (единственное условие, что каждая монета должна стоить целое положительное число долларов). Разрешается дать несколько монет одинаковой стоимости. Боб просит вас найти подходящее множество монет минимальной суммарной стоимости. Если решения не существует, выведите «Greed is good». Можете считать, что если ответ существует, то он положительный, то есть без дополнительных монет алгоритм Альфреда работает на данном множестве монет и для данной стоимости лося.

Входные данные

В первой строке входных данных записано целое число c (1 ≤ c ≤ 200 000) — стоимость игрушечного лося, которую надо заплатить Альфреду. Во второй строке записано число n (1 ≤ n ≤ 200 000) — изначальное количество монет у Альфреда. Далее следует n строк, в каждой из которых содержится одно целое число x (1 ≤ x ≤ c), означающее стоимость очередной монеты.

Выходные данные

Если решение существует, выведите минимальную суммарную стоимость монет, которые Боб должен дать Альфреду, чтобы его алгоритм перестал работать. В противном случае выведите «Greed is good» (без кавычек).

Примечание

В первом примере Боб должен дать Альфреду монету стоимости $5. После этого алгоритм Альфреда перестаёт набирать нужную сумму.

Во втором примере Боб ничего не может поделать, чтобы алгоритм Альфреда перестал работать.

A. Превращение: из A в B

математика Перебор поиск в глубину и подобное *1000

У Василия есть число a, которое он хочет превратить в число b. Для этого он может производить два типа операций:

  • умножить имеющееся у него число на 2 (то есть заменить число x числом x);
  • приписать к имеющемуся у него числу цифру 1 справа (то есть заменить число x числом 10·x + 1).

Вам надо помочь Василию получить из числа a число b с помощью описанных операций, либо сообщить, что это невозможно.

Обратите внимание, что в этой задаче не требуется минимизировать количество операций. Достаточно найти любой из способов получить из числа a число b.

Входные данные

В первой строке записаны два целых положительных числа a и b (1 ≤ a < b ≤ 109) — число, которое есть у Василия, и число, которое он хочет получить.

Выходные данные

Если получить число b из числа a невозможно, выведите «NO» (без кавычек).

В противном случае в первую строку выведите «YES» (без кавычек). Во вторую строку выведите число k — количество чисел в последовательности превращений. В третьей строке выведите последовательность превращений x1, x2, ..., xk, причём:

  • x1 должно быть равно a,
  • xk должно быть равно b,
  • число xi должно быть получено с помощью одной из двух операций из числа xi - 1 (1 < i ≤ k).

Если ответов несколько, разрешается вывести любой из них.

F. Plane of Tanks

геометрия Перебор *2900

Вася играет в Plane of Tanks. Танки в этой игре так и норовят друг друга переубивать. Но Ваш танк «Педальный» не такой... Ему всего лишь надо проехать по прямой из точки А в точку B на плоскости. К сожалению, на этой же плоскости находятся n вражеских танков. Будем считать, что все танки являются точками. В начальный момент времени Педальный находится в точке A. Вражеские танки рады бы его сразу уничтожить, но изначально их башни повернуты не в ту сторону. А именно, у каждого танка известны начальный поворот башни ai (угол в радианах относительно оси OX при повороте против часовой стрелки) и максимальная скорость поворота башни wi (рад/с). Если в какой-то момент времени башня танка будет повернута ровно на танк Педальный, то враг производит выстрел, и при этом всегда попадает. Педальный выдерживает не более k выстрелов. Перезарядка орудий занимает очень много времени, поэтому можно считать, что каждый враг произведет не более одного выстрела. Ваша задача определить, какой минимальной скоростью v должен обладать педальный, чтобы доехать до точки B. Считается, что педальный способен мгновенно развить скорость v, а первые k выстрелов по нему не снижают скорости и не меняют координаты танка.

Входные данные

В первой строке заданы 4 числа — координаты точек A и B (в метрах), точки не совпадают. Во второй строке задано число n (1 ≤ n ≤ 104) — количество вражеских танков. В каждой из следующих n строк заданы координаты соответствующего танка xi, yi и его параметры ai и wi (0 ≤ ai ≤ 2π, 0 ≤ wi ≤ 100). Числа ai и wi содержат не более 5 знаков после десятичной точки. Все координаты — целые числа, по модулю не превосходящие 105. Вражеские танки могут поворачивать башню как по часовой стрелке, так и против нее с угловой скоростью не более wi. Гарантируется, что каждому из вражеских танков необходимо минимум 0.1 секунды для наведения на какую-либо точку отрезка AB и что каждый из вражеских танков находится на расстоянии как минимум 0.1 метра от прямой AB. В последней строчке дано число k (0 ≤ k ≤ n).

Выходные данные

Вывести единственное число — минимальную необходимую скорость Педального в метрах в секунду с абсолютной или относительной погрешностью не более чем 10 - 4.

D. Археология 80-го уровня

жадные алгоритмы Перебор сортировки Структуры данных *2200

Археологи, найдя секретный ход в подземелье одной из пирамид в Цикляндии, столкнулись с необычным замком на двери в сокровищницу. На замке было написано n слов, каждое из которых состоит из нескольких иероглифов. Рядом с замком на стене был обнаружен необычный круглый рычаг, поворот которого меняет иероглифы, из которых состоят слова на замке, по некоторому принципу. Также рядом с иероглифом была найдена надпись на древнецикляндском, которая гласит, что замок откроется, только если слова, написанные на замке, станут идти в лексикографическом порядке (определение дано в пояснении).

Несмотря на то, что археологи отлично знали весь древнецикляндский алфавит, который состоял из c иероглифов, они никак не могли определить закономерность, по которой меняются буквы. Наконец кто-то догадался позвать вас, главного мыслителя современной Цикляндии. Вам хватило одного взгляда, чтобы понять, что поворот рычага на одну позицию по часовой стрелке заменяет каждый иероглиф на следующий за ним по алфавиту, то есть x-й (1 ≤ x ≤ c - 1) иероглиф превращается в (x + 1)-й, а c-й превращается в первый.

Помогите археологам определить, на сколько позиций по часовой стрелке надо повернуть рычаг, чтобы можно было открыть дверь, либо определите, что требуемого положения рычага не существует, и надо либо искать ещё какой-нибудь потайной рычаг, либо идти за динамитом.

Входные данные

В первой строке находится два числа n и c (2 ≤ n ≤ 500 000, 1 ≤ c ≤ 106) — количество слов, написанных на замке, и количество иероглифов в древнецикляндском алфавите.

Каждая из последующих n строк описывает одно слово, написанное на замке. В i-й из последующих строк сначала находится целое число li (1 ≤ li ≤ 500 000), обозначающее длину i-го слова, после чего следует li целых чисел wi, 1, wi, 2, ..., wi, li (1 ≤ wi, j ≤ c) — алфавитные номера иероглифов, составляющих i-е слово. Символ 1 является самым маленьким в древнецикляндском алфавите, а символ c — самым большим.

Гарантируется, что суммарная длина всех слов не превосходит 106.

Выходные данные

Если возможно открыть дверь, поворачивая рычаг, выведите число x (0 ≤ x ≤ c - 1), обозначающее, сколько раз его надо повернуть по часовой стрелке. Если подходящих значений x несколько, выведите любое из них.

Если, поворачивая рычаг, дверь открыть невозможно, выведите  - 1.

Примечание

Слово a1, a2, ..., am длины m лексикографически не превосходит слова b1, b2, ..., bk длины k, если выполняется одно из двух:

  • либо в первой позиции i, такой что ai ≠ bi, символ ai идёт раньше по алфавиту, чем символ bi, то есть в первой различающейся позиции символ слова a меньше символа слова b;
  • либо (если такой позиции нет) m ≤ k, то есть второе слово начинается с первого либо совпадает с ним

Про последовательность слов говорят, что они идут в лексикографическом порядке, если каждое слово в нём (кроме последнего) лексикографически не превосходит следующего за ним.

В первом примере после поворота рычага на 1 позицию по часовой стрелке слова примут следующий вид:


1 3
2
3 1 2
3 1 2 3

Во втором примере слова уже идут в лексикографическом порядке.

Можно проверить, что в последнем примере, какой бы сдвиг мы ни применили, слова не станут идти в лексикографическом порядке.

F. Видеокарты

математика Перебор реализация Структуры данных теория чисел *1900

Маленький Влад обожает играть в популярную игру Bota-2 на своем компьютере. На днях разработчики сообщили о выходе её продолжения под названием Bota-3. Разумеется, Влад тут же её приобрёл, но оказалось, что компьютер Влада слишком старый для этой игры, поэтому он отправился в магазин за обновлением для него.

В магазине Влад увидел n видеокарт, i-я из которых имеет свою мощность ai, выражаемую целым положительным числом. Для того, чтобы игра точно заработала, Влад решил купить не одну, а несколько видеокарт и объединить их мощности по новейшей технологии. Для использования этой технологии одна из видеокарт выбирается в качестве ведущей, а все остальные видеокарты подключаются к ней в качестве вторичных. Для корректной работы этой конструкции необходимо, чтобы мощность каждой видеокарты была кратна мощности ведущей видеокарты. Для обеспечения совместимости мощность каждой вторичной видеокарты может быть понижена до любого меньшего целого положительного значения. При этом мощность опорной видеокарты должна оставаться оригинальной, то есть не может быть уменьшена.

У Влада очень много денег, поэтому он может купить любые видеокарты. Помогите ему выбрать такие видеокарты, чтобы после необходимого понижения их мощностей и соединения их по новой технологии суммарная итоговая мощность видеокарт была максимальной.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 200 000) — количество видеокарт в магазине.

Во второй строке находится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 200 000), обозначающих мощности видеокарт.

Выходные данные

В единственной строке выведите целое число — максимальную возможную суммарную итоговую мощность видеокарт.

Примечание

В первом примере выгодно купить видеокарты с мощностями 3, 15 и 9. В таком случае можно выбрать видеокарту с мощностью 3 ведущей, а все остальные видеокарты будут с ней совместимы. Суммарная мощность в таком случае будет равна 3 + 15 + 9 = 27. Если же купить все видеокарты и выбрать видеокарту с мощностью 2 ведущей, то мощности каждой из остальных трёх видеокарт придётся понизить на 1, чтобы они стали кратны 2, а значит итоговая мощность будет 2 + 2 + 14 + 8 = 26, что менее выгодно. Обратите внимание, что не разрешается понижать мощность ведущей видеокарты, то есть получить сумму мощностей 3 + 1 + 15 + 9 = 28 нельзя.

Во втором примере выгодно купить все видеокарты, а в качестве ведущей выбрать видеокарту с мощностью 2. Видеокарта с мощностью 7 с ней несовместима, поэтому её мощность придется понизить до 6. Суммарная мощность будет равна 8 + 2 + 2 + 6 = 18.

A. Куплю лопату

Конструктив математика Перебор реализация *800

Поликарпу срочно понадобилась лопата! Он пришёл в магазин и выбрал подходящую. Лопата, которая подошла Поликарпу, продается по цене k бурлей. Считайте, что в магазине неограниченное количество таких лопат.

В кармане у Поликарпа есть неограниченное количество «дестюльников» (монет номиналом в 10 бурлей) и ровно одна монета номинала r (1 ≤ r ≤ 9).

Какое наименьшее количество лопат придётся купить Поликарпу, чтобы он смог расплатиться за покупку без сдачи? Очевидно, что за 10 лопат он сможет расплатиться без сдачи (заплатив требуемую сумму «дестюльниками», не используя монету номинала r), но, возможно, он сможет купить меньшее количество лопат и расплатиться без сдачи. Обратите внимание, что Поликарп должен купить хотя бы одну лопату.

Входные данные

В единственной строке входных данных записаны два целых числа k и r (1 ≤ k ≤ 1000, 1 ≤ r ≤ 9) — цена одной лопаты и номинал монеты в кармане Поликарпа, отличной от «дестюльника».

Помните, что ещё у него в кармане неограниченное количество монет номинала 10, то есть их хватит на покупку любого количества лопат.

Выходные данные

Выведите искомое минимальное количество лопат, которые нужно купить Поликарпу, чтобы расплатиться без сдачи.

Примечание

В первом примере Поликарп может купить 9 лопат, заплатив 9·117 = 1053 бурлей. В самом деле, эту сумму он может заплатив используя монеты номиналом 10 бурлей и одну монету номиналом 3 бурля. Купить меньшее количество лопат (и при этом расплатиться без сдачи), он не может.

Во втором примере Поликарпу достаточно купить одну лопату.

В третьем примере Поликарп должен купить 2 лопаты, заплатив 2·15 = 30 бурлей. Эту сумму он, очевидно, может заплатить без сдачи.

B. Антон и цифры

жадные алгоритмы математика Перебор реализация *800

Недавно Антон нашёл у себя дома коробку с цифрами. В коробке было k2 цифр 2, k3 цифр 3, k5 цифр 5 и k6 цифр 6.

Любимые числа Антона — 32 и 256. Поэтому он, конечно же, решил составить из цифр, находившихся в коробке, свои любимые числа. При этом он хочет, чтобы сумма составленных чисел была как можно больше. Помогите Антону найти эту сумму!

Каждую цифру можно использовать не более одного раза, то есть в составленных Анотоном числах должно быть не больше k2 цифр 2, k3 цифр 3 и так далее. Неиспользованные цифры в сумме не учитываются.

Входные данные

В единственной строке входных данных находятся четыре целых числа k2, k3, k5, k6 — количество цифр 2, 3, 5 и 6 соответственно (0 ≤ k2, k3, k5, k6 ≤ 5·106).

Выходные данные

В единственной строке выходных данных выведите единственное число — максимальную сумму любимых чисел Антона, которые можно составить с помощью цифр из коробки.

Примечание

В первом примере есть пять цифр 2, одна цифра 3, три цифры 5 и четыре цифры 6. Антон может из этих цифр составить три числа 256 и одно число 32. Тогда ответ будет равен 256 + 256 + 256 + 32 = 800. Заметьте, что после составления чисел осталась одна цифра 2 и одна цифра 6. В ответе они никак не учитываются.

Во втором примере выгоднее всего составить одно число 256. Поэтому ответ равен 256.

E. Гоша выходит на охоту

дп математика Перебор Потоки сортировки Структуры данных Теория вероятностей *3000

Гоша выходит на охоту. Его цель — поймать как можно больше покемонов. У Гоши есть a покеболов и b ультраболов. Всего покемонов n. Они пронумерованы числами от 1 до n. Про i-го покемона Гоша знает, что если бросить в него покеболом, то с вероятностью pi данный покемон будет пойман. Если бросить в i-го покемона ультраболом, то он будет пойман с вероятностью ui. В каждого покемона можно бросить не более чем одним болом каждого типа.

Охота происходит следующим образом: Гоша сначала выбирает не более чем a покемонов, в которых он будет бросать покеболами, и не более чем b покемонов, в которых он будет бросать ультраболами. После этого Гоша бросает в выбранных покемонов выбранными болами. Если он бросает в покемона и покеболом, и ультраболом, то данный покемон будет пойман, если он будет пойман хотя бы одним из двух болов. Результаты бросков независимы.

Гоша хочет узнать, чему равно математическое ожидание количества пойманных покемонов, если он будет действовать оптимально. Иными словами, он хочет узнать максимально возможное математическое ожидание.

Входные данные

В первой строке входных данных записано три целых числа n, a и b (2 ≤ n ≤ 2000, 0 ≤ a, b ≤ n) — количество покемонов, количество покеболов и количество ультраболов.

Во второй строке записано n вещественных чисел p1, p2, ..., pn (0 ≤ pi ≤ 1), где pi — вероятность, что Гоша поймает i-го покемона, если бросит в него покеболом.

В третьей строке записано n вещественных чисел: u1, u2, ..., un (0 ≤ ui ≤ 1), где ui — вероятность, что Гоша поймает i-го покемона, если бросит в него ультраболом.

Все вероятности заданы ровно с тремя знаками после десятичного разделителя.

Выходные данные

Выведите максимально возможное математическое ожидание количества пойманных покемонов. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превышает 10 - 4.

A. Алёна и тетрадки

Перебор реализация *1300

Маленькая девочка Алёна пошла в канцелярский магазин, чтобы купить тетрадки для школы. В школе они изучают всего четыре предмета, следовательно девочка хочет, чтобы по каждому предмету у нее было одинаковое количество тетрадок. В магазине продаются три вида комплектов тетрадок: можно купить комплект из одной тетрадки за a рублей, комплект из двух тетрадок за b рублей и комплект из трех тетрадок за c рублей. У девочки уже куплены n тетрадок.

Какое минимальное количество денег девочке нужно будет потратить в магазине для покупки такого количество тетрадок k, чтобы n + k делилось на 4? Количество комплектов каждого вида в магазине не ограничено. Алёна может покупать комплекты разных типов одновременно.

Входные данные

В единственной строке вам заданы 4 числа n, a, b, c через пробел (1 ≤ n, a, b, c ≤ 109).

Выходные данные

В единственное строке выведите минимальное количество рублей, которое нужно потратить на покупку такого количества k тетрадей, чтобы n + k делилось на 4.

Примечание

В первом тесте из условия Алёна может купить 3 комплекта по 1 тетрадке, потратив 3a = 3 рубля. Итого она получит 4 тетрадки и сможет их распределить по предметам поровну.

Во втором тесте из условия Алёна может купить комплект из 2 тетрадок за b = 1 рубль. Итого у нее будет 8 тетрадок.

В третьем тесте Алёна может распределить тетрадки, которые у нее уже есть, между 4 предметами поровну, поэтому она может ничего не покупать.

В четвертом тесте Алёна должна купить один комплект из одной тетрадки.

B. Очевидная задача Arpa и ужасающее решение Mehrdad

математика Перебор теория чисел *1500

В стране Arpa живут прекрасные девушки, как мы уже отмечали раньше.

Однажды Arpa задумался над очевидной задачей:

Дан массив и целое число x. Посчитайте число пар индексов i, j (1 ≤ i < j ≤ n) таких, что , где  — операция побитовый xor (в примечаниях дано определение).

Mehrdad тут же придумал ужасающее решении, в которое никто не мог поверить. Теперь Arpa нужна ваша помощь в написании решения к этой задаче.

Входные данные

Первоя строка содержит два целых числа n и x (1 ≤ n ≤ 105, 0 ≤ x ≤ 105) — число элементов в массиве и число x.

Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 105) — элементы массива.

Выходные данные

Выведите одно целое число: ответ на задачу.

Примечание

В первом примере существует только одна пара индексов i = 1 и j = 2. , поэтому ответ равен 1.

Во втором примере две подходящие пары это i = 3, j = 4 (т. к. ) и i = 1, j = 5 (т. к. ).

Операция побитовый xor принимает два целых битовых числа одинаковой длины и выполняет логическую операцию xor на каждой паре соответсвующих бит. Результат в позиции равен 1, если и только если только первый бит 1 или только второй бит 1, и результат равен 0 если оба бита 0 или оба бита 1. Больше информации о побитовом xor можно найти здесь: https://ru.wikipedia.org/wiki/Битовые_операции#.D0.98.D1.81.D0.BA.D0.BB.D1.8E.D1.87.D0.B0.D1.8E.D1.89.D0.B5.D0.B5_.D0.98.D0.9B.D0.98_.28XOR.29.

C. Владик и дроби

Конструктив математика Перебор теория чисел *1500

Владик и Хлоя решили определить, кто из них лучше разбирается в математике. Владик заявил, что сможет для любого положительного целого n представить дробь вида в виде суммы трех попарно различных положительных дробей вида .

Помогите Владику сделать это, то есть найти для заданного n три различных положительных целых числа x, y и z такие, что . Так как Хлоя не сможет проверить ответ Владика, если эти числа будут слишком большие, он просит вас вывести числа не превосходящие 109.

Если подходящего ответа не существует, выведите -1.

Входные данные

В единственной строке содержится одно целое число n (1 ≤ n ≤ 104).

Выходные данные

Если решение существует, выведите 3 различных целых числа x, y и z (1 ≤ x, y, z ≤ 109, x ≠ y, x ≠ z, y ≠ z). Иначе выведите -1.

Если существует несколько решений, выведите любое из них.

E. Владик и карты

Бинарный поиск битмаски дп Перебор *2200

Владик заскучал по дороге домой и решил сыграть в следующую игру. Он взял n карт и положил их в ряд перед собой. На каждой карте Владика написано целое положительное число, не превосходящее 8. Он решил найти самую длинную подпоследовательность карт, для которой выполняются следующие условия:

  • количество вхождений каждого числа от 1 до 8 в подпоследовательности отличается не более, чем на 1 от количества вхождений любого другого числа. Более формально, если в подпоследовательности ck карт с числом k на них, то для всех выполняется |ci - cj| ≤ 1.
  • если в подпоследовательности имеется карта с числом x, то все карты с числом x должны составлять непрерывный отрезок в этой подпоследовательности (но не обязательно быть непрерывным отрезком в исходной последовательности). Например, последовательность карт [1, 1, 2, 2] удовлетворяет данному условию, а [1, 2, 2, 1] — нет. Обратите внимание, что [1, 1, 2, 2] не удовлетворяет первому условию.

Помогите Владику и найдите максимальную длину подходящей подпоследовательности.

Входные данные

В первой строке входных данных содержится число n (1 ≤ n ≤ 1000) — количество карт в последовательности Владика.

Во второй строке входных данных содержится n целых положительных чисел, не превосходящих 8 — описание последовательности Владика.

Выходные данные

Выведите одно целое число — длину максимальной подпоследовательности, в которой выполняются все условия.

Примечание

В первом примере числа на всех карточках равны, поэтому мы не сможем взять больше, чем одну карточку, поскольку нарушим первое условие.

C. Коровоконг покупает колоду карт

битмаски дп Перебор *2400

У Коровоконга уже есть много колод карт, но в этот раз он увидел в магазине совершенно новую колоду из n красных и синих карт и сразу захотел её купить. Чтобы это сделать, придётся сыграть в игру с владельцем магазина.

Игра состоит из последовательных ходов Коровоконга, на каждом ходу он совершает ровно одно из двух действий:

  • Взять фишки. Коровоконг получает 1 красную фишку и 1 синюю фишку (таким образом, в сумме он получает 2 фишки за одно действие).
  • Покупка одной карты. Коровоконг выбирает какую-то карту и покупает её за фишки по правилам, описанным ниже.

Базовая стоимость i-й карты составляет ri красных фишек и bi голубых фишек. Допустим, у Коровоконга сейчас есть A красных карт и B синих карт, тогда покупка i-й карты потребует от Коровоконга max(ri - A, 0) красных фишек и max(bi - B, 0) синих фишек. Обратите внимание, при покупке у Коровоконга забирают соответствующее количество фишек, но сами карты всегда остаются с ним. Каждую карту можно купить ровно один раз.

По данному описанию всех карт в колоде определите минимальное количество ходов, за которое Коровоконг может купить их все.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 16).

В следующих n строках записаны параметры ci, ri и bi, где ci является символом «R» или «B», означающих красный или синий цвет карты соответственно. ri и bi (0 ≤ ri, bi ≤ 107) означают количество красных и синих фишек (соответственно) в базовой стоимости i-й карты.

Выходные данные

Выведите одно целое число, означающее минимальное количество ходов, за которое можно получить все карты колоды.

Примечание

В первом примере Коровоконгу потребуется совершить четыре хода:

  1. Взять фишки.
  2. Приобрести карту 1.
  3. Приобрести карту 2.
  4. Приобрести карту 3.
Обратите внимание, что на четвёртом ходу Коровоконг может купить карту 3, потому что у него уже есть одна красная и одна синяя карты и ему вообще не нужны фишки.

Во втором примере следующая стратегия будет одной из оптимальных:

  1. Взять фишки.
  2. Взять фишки.
  3. Приобрести карту 2.
  4. Взять фишки.
  5. Приобрести карту 3.
  6. Приобрести карту 1.
На пятом ходу, хотя у Коровоконга есть в запасе красная фишка, нет необходимости её тратить, потому что у него уже имеется красная карта.

A. Размер монитора

математика Перебор *800

Крупная компания решила запустить новую серию прямоугольных мониторов, при этом решив, что на мониторе должно быть ровно n пикселей.

Перед вами стоит задача определить размеры прямоугольного монитора — количество a строк (рядов) из пикселей и количество b столбцов из пикселей, чтобы:

  • на мониторе было ровно n пикселей,
  • количество строк не превышало количество столбцов, то есть a ≤ b,
  • разница b - a была минимально возможной.
Входные данные

В первой строке следует целое положительное число n (1 ≤ n ≤ 106) — количество пикселей, которые должны быть на мониторе.

Выходные данные

Выведите два числа — количество рядов и количество столбцов, которые должны быть на мониторе.

Примечание

В первом примере минимальная возможная разница равна 2, тогда на мониторе должно быть 2 ряда по 4 пикселя.

Во втором примере минимальная возможная разница равна 0, тогда на мониторе должно быть 8 рядов по 8 пикселей.

В третьем примере минимальная возможная разница равна 4, тогда на мониторе должен быть 1 ряд, состоящий из 5 пикселей.

F. Игорь и интересные числа

дп Комбинаторика математика Перебор *2500

Игорь очень любит 16-ричную систему счисления и считает целое положительное число в 16-ричной системе счисления интересным, если каждая цифра и буква в нём встречается не более t раз. Например, если t = 3, то числа 13a13322, aaa, abcdef0123456789 — интересные, а числа aaaa, abababab и 1000000 — нет.

Перед вами стоит задача найти k-е по счёту интересное для Игоря число в 16-ричной системе счисления. Число не должно содержать лидирующих нулей.

Входные данные

В первой строке следует два целых числа k и t (1 ≤ k ≤ 2·109, 1 ≤ t ≤ 10) — номер искомого числа и максимальное число раз, которое может встречаться цифра или буква в интересном числе.

Можно показать, что при таких ограничениях ответ всегда существует.

Выходные данные

Выведите единственное целое число в 16-ричной системе счисления, которое является k-м по счёту интересным для Игоря числом в 16-ричной системе счисления.

Примечание

Первые 20 чисел, которые является интересными, если t = 1: 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, 10, 12, 13, 14, 15. Поэтому ответ на первый пример равен 12.

B. Параллелограмм возвращается

геометрия Конструктив Перебор *1200

Давным-давно Лёша придумал задачу про параллелограмм. Входными данными в этой задаче являлись четыре целочисленные точки на плоскости, определяющие множество вершин некоторого параллелограмма ненулевой площади, не обязательно в порядке обхода.

У Лёши был очень хороший тест на эту задачу, но так получилось, что в файле с этим тестом была стёрта последняя строчка, так что вместо четырех точек осталось всего три. Но тест был настолько хороший, и он так сильно нужен Лёше, что он просит вас восстановить его.

Входные данные

Входные данные содержат три строки, в каждой из которых записаны два целых числа — координаты xi и yi ( - 1000 ≤ xi, yi ≤ 1000). Эти три точки не лежат на одной прямой, и никакие две из них не совпадают.

Выходные данные

В первой строке выведите число k — количество вариантов добавить к данным трём точкам четвёртую точку с целочисленными координатами так, чтобы получившееся множество точек определяло вершины некоторого параллелограмма ненулевой площади (точки не обязательно должны следовать в порядке обхода).

Далее выведите k строк, в каждой по два целых числа — координаты четвёртой точки.

Примечание

Если вам требуется пояснение о том, что такое параллелограмм, посмотрите соответствующую статью в Википедии:

https://ru.wikipedia.org/wiki/Параллелограмм

A. Новый год и спешка

Бинарный поиск математика Перебор реализация *800

В последний день уходящего 2016 года Лимак собирается принять участие в соревновании по спортивному программированию. Соревнование начнётся в 20:00 и будет продолжаться четыре часа, то есть ровно до полуночи. Участникам будет предложено n задач, упорядоченных по возрастанию сложности, то есть задача 1 будет самой лёгкой, а задача номер n — самой сложной. Лимак знает, что ему потребуется i минут на решение i-й задачи.

Друзья Лимака планирую устроить роскошную новогоднюю вечеринку и Лимак хочет прибыть в полночь или ранее. Он знает, что ему требуется ровно k минут чтобы добрать до места проведения вечеринки от своего дома, где он собирается участвовать в соревновании.

Сколько максимум задач может успеть решить Лимак, так чтобы не опоздать на новогоднюю вечеринку?

Входные данные

В первой строке входных данных записаны два целых числа n и k (1 ≤ n ≤ 10, 1 ≤ k ≤ 240) — количество задач в соревновании и количество минут, за которое Лимак доберётся от дома до места проведения вечеринки.

Выходные данные

Выведите одно целое число, равное максимальному количеству задач, которое может решить Лимак, так чтобы прибыть на новогоднюю вечеринку ровно в полночь или раньше.

Примечание

В первом примере на соревновании участникам предложено 3 задачи и Лимаку требуется 222 минуты, чтобы доехать до места проведения вечеринки. Для решения задач требуется 5, 10 и 15 минут соответственно. Лимак может решить первые две задачи, потравив на это 5 + 10 = 15 минут, после чего выехать в 20:15 и приехать на вечеринку в 23:57 (через 222 минуты). Таким образом он решит две задачи, но на решение третьей времени уже не хватит и ответ равен 2.

Во втором примере Лимак может решить все 4 задачи за 5 + 10 + 15 + 20 = 50 минут. В 20:50 он сможет выехать из дома и прибыть на вечеринку ровно в полночь.

В третьем примере Лимаку нужна только 1 минута, чтобы оказаться на вечеринке, так что ему хватит времени для решения всех 7 задач.

D. Новый год и фейерверки

дп Перебор поиск в глубину и подобное реализация Структуры данных *1900

Одной из популярных традиций встречи нового года является запуск в небо фейерверков. Обычно фейерверк взлетает вертикально вверх в течение некоторого времени, после чего взрывается и разделяется на несколько частей, летящих в разных направлениях. Иногда эти части через некоторое время снова взрываются, также разделяясь на несколько частей и так далее.

Лимак живёт на бесконечном клетчатом поле и у него есть один фейерверк. Поведение этого фейерверка после запуска описывается рекурсией глубины n и продолжительностью каждого из уровней рекурсии t1, t2, ..., tn. Как только Лимак запустит фейерверк в какой-нибудь клетке поля, тот начнёт двигаться вверх. После прохождения t1 клеток (включая стартовую) он взрывается и разделяется на две части, каждая из которых двигается в направлении, изменённом на 45 градусов (для лучшего понимания посмотрите картинки ниже). Таким образом, одна часть будет двигаться в направлении вверх и влево, а другая в направлении вверх и вправо. Каждая из этих частей пройдёт t2 клеток, после чего также разделится на две части, каждая из которых также изменит траекторию на 45 градусов. Процесс будет продолжаться до n-го уровня рекурсии, после чего все 2n - 1 частей взорвутся и исчезнут не создавая новых частей.

После нескольких уровней рекурсивного разделения частей фейерверка может так оказаться, что две или более частей находятся в одной и той же клетке в один и тот же момент времени — такая ситуация разрешена и эти части не сталкиваются.

Перед тем как запустить данный фейерверк Лимак хочет убедиться в безопасности этого запуска. Сможете ли вы посчитать количество клеток, которые хотя бы один раз будут посещены какой-либо частью фейерверка?

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 30) — глубина рекурсии разделения фейерверка на части.

Во второй строке записаны n целых чисел t1, t2, ..., tn (1 ≤ ti ≤ 5). На i-м уровне каждая из 2i - 1 частей фейерверка пройдёт ti клеток перед тем как взорвётся.

Выходные данные

Выведите одно целое число, равное количеству клеток которые будут посещены хотя бы одной частью фейерверка хотя бы один раз.

Примечание

Рассмотрим первый пример. Рисунки ниже показывают как будет выглядеть процесс работы фейерверка после каждого уровня рекурсии. Лимак запускает фейерверк из самой нижней красной клетки. После прохождения t1 = 4 клеток (отмеченных красным) он взрывается и делится на две части (их дальнейшее движение показано зелёным). Все взрывы отмечены символом «X». На последнем рисунке присутствуют 4 красных, 4 зелёных, 8 оранжевых и 23 розовых клетки. Таким образом, итоговое количество посещённых клеток равняется 4 + 4 + 8 + 23 = 39.

Для второго примера рисунки демонстрируют ситуацию на 4, 5 и 6 уровнях рекурсии. На рисунке посередине показаны направления всех частей, которые будут двигаться на следующем уровне.

G. Новый год и пути в двоичном дереве

битмаски дп Комбинаторика Перебор *3200

Новогоднее дерево является бесконечным полным двоичным деревом, корнем которого является вершина с номером 1. У каждой вершины v есть ровно два сына: вершина с номером (2·v) и вершина с номером (2·v + 1).

Полярные медведи очень любят украшать новогоднее дерево и Лимак конечно же не исключение. Поскольку он ещё только маленький медвежонок, ему разрешили украсить только некоторый простой путь между какой-то парой вершин. С другой стороны, ему разрешили самому выбрать какой именно путь украсить! Теперь он хочет знать количество неупорядоченных пар индексов (u, v) (u ≤ v), таких что сумма индексов на пути между u и v (включая крайние вершины) равняется s. Сможете ли вы помочь ему вычислить это количество?

Входные данные

В единственной строке входных данных записано целое число s (1 ≤ s ≤ 1015).

Выходные данные

Выведите одно целое число, равное количеству неупорядоченных пар индексов вершин, определяющих простой путь с суммой индексов равной s.

Примечание

В примере из условия существует 4 пути с суммой индексов равной 10:

B. Интерактивные быки и коровы (простая версия)

Конструктив Перебор реализация *1600

Эта задача слегка необычна, она интерактивная. В ней вы должны реализовать взаимодействие с тестирующей системой. Это означает, что ваша программа может осуществлять запросы и получать ответы в режиме онлайн. Пожалуйста, используйте операции отчистки буфера вывода после вывода каждого вашего запроса. Например, в C++ можно использовать fflush(stdout), в Java вызов System.out.flush(), а в Pascal — flush(output).

«Быки и коровы» — это логическая игра для двух игроков, вариация коммерческой настольной игры Mastermind.

Первый игрок загадывает секретную строку, которая состоит из 4 различных цифр. Строка может начинаться с 0.

Затем второй игрок отгадывает загаданную секретную строку, делая попытки. Каждая попытка — это строка из четырех цифр. Если совпадение произошло и в позиции и по значению, то говорят, что встретился «бык», а если совпадение произошло по значению, но не по позиции, то встретилась «корова». Попытка может содержать одинаковые цифры.

Формально, допустим секретная строка это s, а попытка — это строка x. Тогда количество быков равно количеству таких позиций i (1 ≤ i ≤ 4), что s[i] = x[i]. Количество коров — это количество таких цифр c, что s содержит c в позиции i (то есть s[i] = c), x содержит c, но x[i] ≠ c.

Например, если секретная строка это «0427», а попытка второго игрока это «0724», то результат это 2 быка и 2 коровы (быки это "0" и "2", а коровы это "4" и "7"). Если секретная строка это «0123», а попытка второго игрока равна «0330», тогда результат это 1 бык и 1 корова.

В этой задаче вам надо отгадать секретную строку s, которая была загадана тестирующей системой. Загаданная строка состоит из 4 цифр, все цифры в ней различны.

Вы можете делать попытки, посылая строки из 4 цифр (не обязательно различных). Результатом на запрос является количество быков и коров. Если ответ системы равен "4 0", то значит вы отгадали секретную строку и ваша программа должна завершить своё исполнение обычным образом. Кроме того, в вашу программу будет отправлено "4 0", если вы слелали некорректный ход. В этом случае программу также надо завершить обычным образом, а вердикт на этот тест будет «неправильный ответ».

Ваша программа должна совершить не более 50 запросов.

Вы можете взламывать решения других участников, задавая 4-цифренную секретную строку (все цифры должны быть различны).

Входные данные

Для того, чтобы читать ответы на запросы ваша программа должна использовать стандартный ввод.

Программа будет получать пары неотрицательных целых чисел, по одной паре в строке. Первое число в паре — количество быков, второе — коров. Если пришла пара "4 0", то ваша программа должна завершить исполнение.

Тестирующая система даст прочитать очередную пару только после записи в стандартный вывод соответствующего запроса (не забудьте после вывода запроса сделать flush).

Выходные данные

Программа должна использовать стандартный вывод, чтобы осуществлять запросы.

Каждый запрос — это строка из 4 цифр. После вывода строки осуществите операцию flush. После вывода запроса программа должна прочитать результат из стандартного ввода.

Программа может сделать не более 50 запросов.

Примечание

Секретная строка s в примере это «0123».

C. Интерактивные быки и коровы (усложненная версия)

интерактив Конструктив Перебор *2500

Единственное отличие этой задачи от предыдущей — это ограничение на количество запросов. В этой задаче оно равно 7.

Эта задача слегка необычна, она интерактивная. В ней вы должны реализовать взаимодействие с тестирующей системой. Это означает, что ваша программа может осуществлять запросы и получать ответы в режиме онлайн. Пожалуйста, используйте операции отчистки буфера вывода после вывода каждого вашего запроса. Например, в C++ можно использовать fflush(stdout), в Java вызов System.out.flush(), а в Pascal — flush(output).

«Быки и коровы» — это логическая игра для двух игроков, вариация коммерческой настольной игры Mastermind.

Первый игрок загадывает секретную строку, которая состоит из 4 различных цифр. Строка может начинаться с 0.

Затем второй игрок отгадывает загаданную секретную строку, делая попытки. Каждая попытка — это строка из четырех цифр. Если совпадение произошло и в позиции и по значению, то говорят, что встретился «бык», а если совпадение произошло по значению, но не по позиции, то встретилась «корова». Попытка может содержать одинаковые цифры.

Формально, допустим секретная строка это s, а попытка — это строка x. Тогда количество быков равно количеству таких позиций i (1 ≤ i ≤ 4), что s[i] = x[i]. Количество коров — это количество таких цифр c, что s содержит c в позиции i (то есть s[i] = c), x содержит c, но x[i] ≠ c.

Например, если секретная строка это «0427», а попытка второго игрока это «0724», то результат это 2 быка и 2 коровы (быки это "0" и "2", а коровы это "4" и "7"). Если секретная строка это «0123», а попытка второго игрока равна «0330», тогда результат это 1 бык и 1 корова.

В этой задаче вам надо отгадать секретную строку s, которая была загадана тестирующей системой. Загаданная строка состоит из 4 цифр, все цифры в ней различны.

Вы можете делать попытки, посылая строки из 4 цифр (не обязательно различных). Результатом на запрос является количество быков и коров. Если ответ системы равен "4 0", то значит вы отгадали секретную строку и ваша программа должна завершить своё исполнение обычным образом. Кроме того, в вашу программу будет отправлено "4 0", если вы слелали некорректный ход. В этом случае программу также надо завершить обычным образом, а вердикт на этот тест будет «неправильный ответ».

Ваша программа должна совершить не более 7 запросов.

Вы можете взламывать решения других участников, задавая 4-цифренную секретную строку (все цифры должны быть различны).

Входные данные

Для того, чтобы читать ответы на запросы ваша программа должна использовать стандартный ввод.

Программа будет получать пары неотрицательных целых чисел, по одной паре в строке. Первое число в паре — количество быков, второе — коров. Если пришла пара "4 0", то ваша программа должна завершить исполнение.

Тестирующая система даст прочитать очередную пару только после записи в стандартный вывод соответствующего запроса (не забудьте после вывода запроса сделать flush).

Выходные данные

Программа должна использовать стандартный вывод, чтобы осуществлять запросы.

Каждый запрос — это строка из 4 цифр. После вывода строки осуществите операцию flush. После вывода запроса программа должна прочитать результат из стандартного ввода.

Программа может сделать не более 7 запросов.

Примечание

Секретная строка s в примере это «0123».

B. Илья и игра в крестики-нолики

Перебор реализация *1100

Илья заядлый игрок в крестики-нолики на поле 4 × 4. Илья всегда начинает ходить первым и ходит крестиком. Сегодня он сыграл очень много игр со своим другом Арсением. Друзья очень устали и не доиграли одну игру. Следующий ход в недоигранной игре за Ильей. Помогите определить, можно ли было Илье, сделав ровно один ход, выиграть Арсения.

Напомним правила игры в крестики-нолики на поле 4 × 4. Перед первым ходом все клетки поля пустые. Игроки по-очереди ставят свои знаки (первый игрок крестики, второй игрок нолики) на свободные клетки. Первый ход делает игрок, который ходит крестиком. Второй игрок ходит ноликом. Выигрывает тот игрок, который смог первым поставить три своих знака в ряд рядом друг с другом (по горизонтали, вертикали или диагонали).

Входные данные

Состояние игры в крестики-нолики задано в четырех строках входных данных.

Каждая из строк содержит по четыре подряд идущих символа. Каждый из символов равен '.' (свободная клетка), 'x' (маленькая латинская буква x) либо 'o' (маленькая латинская буква o). Гарантируется, что во входных данных дано состояние, которое может получиться при игре в крестики-нолики, и следующий ход за Ильей (в частности, это означает, что игра не окончена). Также во входных данных может быть задано пустое поле игры в крестики-нолики. Это значит, что друзья устали не сделав ни хода.

Выходные данные

В единственную строку выходных данных необходимо вывести «YES», если Илья мог бы выиграть ровно за один ход. Иначе следует вывести «NO».

Примечание

В первом примере у Ильи было два возможных хода для победы — это ход в самую левую свободную клетку и ход в самую левую свободную клетку в первой строке.

Во втором тестовом примере победить за один ход невозможно.

В третьем тестовом примере существует всего один возможный ход для победы Ильи — ход в самую нижнюю свободную клетку между двумя крестиками.

В четвертом тестовом примере победить за один ход невозможно.

C. Владик и чат

дп Конструктив Перебор реализация Строки *2200

Недавно Владик нашел себе новое увлечение — написание ботов для социальных сетей. Ботов он хочет писать не простых, а с использованием машинного обучения. Поэтому он собрался обучать ботов на данных.

Первым делом он решил выкачать t чатов. Владик написал скрипт, который должен был выкачать все чаты. По каким-то неизвестным причинам переписки выкачались неполными, а точнее у некоторых сообщений оказался неизвестен отправитель. Зато известно, что если пользователь отсылал несколько сообщений подряд, то они объединялись в одно. То есть нет двух подряд сообщений в одном чате с одним и тем же автором. Ещё известно, что отправитель сообщения не упоминал себя в сообщении.

Владик хочет восстановить отправителя для каждого сообщения с неизвестным отправителем, так чтобы у любых двух последовательных сообщений одного чата были разные отправители, и никакой отправитель не упоминал бы себя в своих сообщениях.

Он не придумал как это делать, поэтому просит вас помочь ему. Помогите Владику восстановить отправителей сообщений для каждого чата!

Входные данные

В первой строке входных данных находится единственное целое число t (1 ≤ t ≤ 10) — количество выкачанных чатов. Далее задано t чатов. Каждый чат задан в следующем формате.

В первой строке каждого описания записано целое число n (1 ≤ n ≤ 100) — количество пользователей в чате.

В следующей строке находятся n различных имен пользователей разделенных пробелом. Каждое имя пользователя состоит из прописных и строчных латинских букв и цифр, причем имя не может начинаться на цифру. Два имени пользователя различаются даже тогда, когда они различаются только регистром букв. Длина имени положительна и не превышает 10 символов.

В следующей строке дано целое число m (1 ≤ m ≤ 100) — количество сообщений в чате. В следующих m строках находятся сообщения в одном из следующих форматов, по одному на строке:

  • <имя отправителя>:<текст сообщения> — формат сообщения, для которого известен отправитель. Имя отправителя должно присутствовать в списке имен пользователей чата.
  • <?>:<текст сообщения> — формат сообщения, для которого неизвестен отправитель.

Текст сообщения может состоять из маленьких и больших латинских букв, цифр, '.' (точка), ',' (запятая), '!' (восклицательный знак), '?' (вопросительный знак) или ' ' (пробел). Текст сообщения не содержит пробелов в конце. Длина текста сообщения положительна и не превышает 100 символов.

Определим, что значит упоминание пользователя в сообщении. Пользователь упоминается в сообщении, если он содержится в сообщении в качестве слова. Иными словами так, что соседний слева и соседний справа от имени символы либо отсутствуют либо не равны латинской букве и цифре. Например, сообщение «Vasya, masha13 and Kate!» может содержать упоминания пользователей «Vasya», «masha13», «and» и «Kate», но не «masha».

Гарантируется, что в каждом чате, заданном во входных данных, для всех известных пользователей выполняется, что пользователь не упоминает сам себя в сообщении и нет двух подряд идущих сообщений с одним и тем же известным отправителем.

Выходные данные

Во входные данные следует вывести информацию о t чатах в следующем формате:

Если нет ни одного способа восстановить неизвестных отправителей в чате, то для такого чата следует вывести «Impossible». Иначе следует вывести m сообщений в формате:

<имя отправителя>:<текст сообщения>

Если возможных ответов несколько, следует вывести любой.

E. Даша и циклическая таблица

битмаски бпф Деревья Перебор Строки *2600

Даша увлекается всякими сложными головоломками — кубик Рубика 3 × 3 × 3, 4 × 4 × 4, 5 × 5 × 5 и тому подобное. На этот раз у неё есть циклическая таблица размера n × m клеток из строчных букв латинского алфавита. Каждая клетка таблицы имеет координаты (i, j) (0 ≤ i < n, 0 ≤ j < m). Цикличность этой таблицы заключается в том, что правее клетки (i, j) находится клетка , а ниже находится клетка .

Также у Даши есть шаблон. Шаблоном является нециклическая таблица размера r × c клеток. Каждая клетка шаблона является либо строчной буквой латинского алфавита либо символом вопроса. Каждая клетка шаблона имеет координаты (i, j) (0 ≤ i < r, 0 ≤ j < c).

Задачей головоломки является определение всех позиций вхождения шаблона в циклическую таблицу.

Определим позицию вхождения шаблона в циклическую таблицу. Позиция (i, j) циклической таблицы является позицией вхождения, если для каждого (x, y), что 0 ≤ x < r и 0 ≤ y < c, выполняется одно из двух условий:

  • Клетка шаблона с координатами (x, y) является символом вопроса.
  • Клетка циклической таблицы с координатами равняется клетке шаблона с координатами (x, y).

Даша прекрасно справилась с решением этой головоломки, впрочем как и со всеми остальными головоломками. Посмотрим, сможете ли вы это сделать.

Входные данные

В первой строке входных данных записаны два целых числа n, m (1 ≤ n, m ≤ 400) — размеры циклической таблицы.

В каждой из следующих n строк входных данных находится строка из m строчных букв латинского алфавита — описание циклической таблицы.

В следующей строке входных данных записаны два целых числа r, c (1 ≤ r, c ≤ 400) — размеры шаблона.

В каждой из следующих r строк входных данных находится строка из c строчных букв латинского алфавита и/или символов '?' — описание шаблона.

Выходные данные

Выведите n строк. Каждая из этих n строк должна содержать по m символов. Каждый из этих символов должен быть равен '0' или '1'.

На позиции j строки i (0-индексация) выходных данных должен находиться символ '1', если позиция (i, j) является позицией вхождения, иначе символ '0'.

A. Польшар и Гипотеза

графы математика Перебор теория чисел *800

Польшар — юный, умный шар. Он заинтересовался простыми числами. Он придумал следующую гипотезу: «Существует натуральное число n такое, что для любого натурального m число n·m + 1 является простым».

К сожалению, Польшар еще неопытен и не знает, что его гипотеза неверна. Можете опровергнуть ее? Напишите программу, которая найдет контрпример для любого n.

Входные данные

Ввод состоит из одного целого числа из гипотезы Польшара n (1 ≤ n ≤ 1000).

Выходные данные

Выведите такое m, что n·m + 1 не является простым. Ваш ответ будет считаться правильным, если вы выведете любое подходящее m такое, что 1 ≤ m ≤ 103. Гарантируется, что ответ существует.

Примечание

Натуральное число большее 1 называется простым, если у него нет натуральных делителей кроме 1 и его самого.

В первом примере 3·1 + 1 = 4. Можно вывести 1.

Во втором примере 4·1 + 1 = 5. Вывести 1 нельзя, т. к. 5 — простое. Однако, m = 2 подойдет, т. к. 4·2 + 1 = 9, что не является простым числом.

D. Война бактерий

дп Комбинаторика Перебор строковые суфф. структуры *2400

Юля проводит эксперимент в своей лаборатории. Она поместила несколько колоний светящихся бактерий в горизонтальную пробирку. Бактерии разного типа можно отличить по цвету. Юля обозначает типы бактерий маленькими латинскими буквами «a», ..., «z».

Пробирка разделена на n областей, расположенных в ряд друг за другом. В каждый момент времени любая область занята ровно одной колонией бактерий определенного типа. Таким образом, популяцию пробирки в любой момент можно описать строкой из n латинских букв.

Иногда какая-то из колоний может решить захватить другую колонию в одной из соседних областей. В этом случае атакованная колония немедленно уничтожается и заменяется колонией того же типа, что и атакующая колония, при этом атакующая колония сохраняет свой тип. Колония может атаковать только соседей внутри пробирки. Одновременно может происходить не более одного нападения.

В качестве примера рассмотрим пробирку с популяцией «babb». Для следующей атаки существует шесть вариантов:

  • первая колония атакует вторую (1 → 2), в результате популяция будет выглядеть как «bbbb»;
  • 2 → 1, результат «aabb»;
  • 2 → 3, результат «baab»;
  • 3 → 2, результат «bbbb» (в данном случае результат такой же, как и в первом варианте);
  • 3 → 4 или 4 → 3, популяция не меняется.

Предсказать последовательность нападений довольно трудно. Юля интересуется, сколько способов расположения бактерий в пробирке может получится после некоторой последовательности нападений (при этом возможно, что нападений не будет совсем). Поскольку ответ может быть большим, найдите его по модулю 109 + 7.

Входные данные

Первая строка содержит целое число n — количество областей в пробирке (1 ≤ n ≤ 5 000).

Вторая содержит n маленьких латинских букв, описывающих исходную популяцию бактерий в пробирке.

Выходные данные

Выведите одно число — ответ на задачу по модулю 109 + 7.

Примечание

В первом примере популяция не может измениться, поскольку все колонии имеют один и тот же тип.

Во втором примере возможны три конфигурации: «ab» (нападений не было), «aa» (первая колония захватила вторую) и «bb» (вторая колония захватила первую).

Для получения ответа на третий пример, помните, что могло произойти больше одного нападения.

E. Баш играет с функциями

дп Комбинаторика Перебор теория чисел *2500

Баш решил сделать перерыв в своем пути к становлению величайшим мастером покемонов, и поиграть с функциями.

Баш определил функцию f0(n), которая равна числу способов разложить число n на два множителя p и q такие, что gcd(p, q) = 1. Другими словами, f0(n) — число упорядоченных пар натуральных чисел (p, q) таких, что p·q = n и gcd(p, q) = 1.

Но Баш почувствовал, что эту функцию слишком просто посчитать. Поэтому он определил набор функций, где fr + 1 определена как:

где (u, v) — упорядоченная пара натуральных чисел, при этом они не обязательно взаимно простые.

Теперь Баш хочет узнать некоторые значения fr(n) для различных r и n. Так как эти значения могут быть большими, он хочет узнать остаток от деления этих значений на 109 + 7. Помогите ему!

Входные данные

Первая строка содержит целое число q (1 ≤ q ≤ 106) — число значений, которые хочет знать Баш.

Каждая из следующих q строк содержит два целых числа r и n (0 ≤ r ≤ 106, 1 ≤ n ≤ 106), что значит, что Баш хочет знать значение fr(n).

Выходные данные

Выведите q чисел. Для каждой данной пары r и n выведите остаток от деления fr(n) на 109 + 7 на отдельной строке.

B. Сломанная гирлянда

Перебор реализация теория чисел *1100

Ничто не вечно в этом мире, понял Костя утром 7-го января, увидев частично перегоревшую четырехцветную гирлянду. Он сразу задался целью заменить сломанные лампочки, однако он не знает сколько лампочек каждого цвета требуется. Гарантируется, что для каждого из четырех цветов хотя бы одна лампочка осталась рабочей.

Известно, что гирлянда состоит из лампочек четырёх цветов: красного, синего, жёлтого и зелёного. Гирлянда сделана следующим образом: если вы возьмёте четыре любые подряд идущие лампочки, то среди них нет лампочек одинакового цвета. Например, гирлянда может иметь вид «RYBGRYBGRY», «YBGRYBGRYBG», «BGRYB», но не может «BGRYG», «YBGRYBYGR» или «BGYBGY». Буквы обозначают цвета: 'R' — красный, 'B' — синий, 'Y' — жёлтый, 'G' — зелёный.

Используя то, что для каждого цвета хотя бы одна лампочка всё еще горит, посчитайте количество перегоревших лампочек каждого из четырёх цветов.

Входные данные

В первой и единственной строке входных данных содержится строка s (4 ≤ |s| ≤ 100), описывающая гирлянду, i-й символ которой описывает цвет i-й по порядку от начала гирлянды лампочки:

  • 'R' — лампочка горит красным,
  • 'B' — лампочка горит синим,
  • 'Y' — лампочка горит жёлтым,
  • 'G' — лампочка горит зелёным,
  • '!' — лампочка перегорела.

Других символов, кроме описанных пяти, строка s содержать не может.

Гарантируется, что в заданной строке присутствует хотя бы раз каждая из четырех букв 'R', 'B', 'Y' и 'G'.

Гарантируется, что строка s представляет собой корректную гирлянду с некоторыми перегоревшими лампочками, то есть например строка «GRBY!!!B» не может находится во входных данных.

Выходные данные

В единственную строку выходных данных выведите четыре целых числа kr, kb, ky, kg — количество перегоревших лампочек красного, синего, жёлтого и зелёного цветов соответственно.

Примечание

В первом тесте из примеров нет перегоревших лампочек.

Во втором примере очевидно, что перегорела одна синяя лампочка, так как лампочки другого цвета на её месте не могло быть по условию.

F. Геометрические прогрессии

математика Перебор теория чисел *2400

Для заданных n, l и r найдите количество различных геометрических прогрессий, каждая из которых состоит из n различных целых чисел не меньших l и не больших r. Иными словами, для каждой прогрессии должно выполняться: l ≤ ai ≤ r и ai ≠ aj , где a1, a2, ..., an —геометрическая прогрессия, 1 ≤ i, j ≤ n и i ≠ j.

Геометрическая прогрессия — последовательность чисел a1, a2, ..., an, в которой каждое последующее число, начиная со второго, получается из предыдущего умножением его на определённое, не равное нулю, число d — знаменатель прогрессии. Заметим что в рамках нашей задачи d может быть не целым, например в прогрессии 4, 6, 9, знаменатель прогрессии .

Две прогрессии a1, a2, ..., an и b1, b2, ..., bn различны, если найдётся такое i (1 ≤ i ≤ n), что ai ≠ bi.

Входные данные

Первая и единственная строка содержит три целых числа n, l и r (1 ≤ n ≤ 107, 1 ≤ l ≤ r ≤ 107).

Выходные данные

Выведите одно целое число K — ответ на задачу.

Примечание

Возможные прогрессии для первого теста из примеров:

  • 1;
  • 2;
  • 3;
  • 4;
  • 5;
  • 6;
  • 7;
  • 8;
  • 9;
  • 10.

Возможные прогрессии для второго теста из примеров:

  • 6, 7;
  • 6, 8;
  • 6, 9;
  • 7, 6;
  • 7, 8;
  • 7, 9;
  • 8, 6;
  • 8, 7;
  • 8, 9;
  • 9, 6;
  • 9, 7;
  • 9, 8.

Возможные прогрессии для третьего теста из примеров:

  • 1, 2, 4;
  • 1, 3, 9;
  • 2, 4, 8;
  • 4, 2, 1;
  • 4, 6, 9;
  • 8, 4, 2;
  • 9, 3, 1;
  • 9, 6, 4.

Возможные прогрессии для четвёртого теста из примеров:

  • 4, 6, 9;
  • 9, 6, 4.

A. Даша и лестница

Конструктив математика Перебор реализация *1000

По пути на занятия по программированию тигра Дашу ждало первое испытание — огромная лестница!

Ступеньки лестницы были пронумерованы, начиная с единицы до бесконечности. Как известно, тигры очень любят все чередующееся, не исключено, что это как-то связано с их окраской. Поэтому на некотором отрезке своего пути она посчитала два числа — количество ступенек с чётными и нечётными номерами.

Вам необходимо проверить, существует ли такой промежуток ступенек c l-й по r(1 ≤ l ≤ r), для которого числа, посчитанные Дашей, верны.

Входные данные

В единственной строке вам заданы два целых числа a, b (0 ≤ a, b ≤ 100) — количество чётных и нечётных ступенек соответственно.

Выходные данные

В единственной строке выходных данных выведите «YES», если отрезок ступенек, описанный входными данными существует, и «NO» в противном случае.

Примечание

В первом примере один из подходящих промежутков от 1 до 5. В этом интервале две четные ступеньки — 2 и 4, и три нечетных: 1, 3 и 5.

B. Даша и друзья

математика Перебор реализация *1300

Бег с препятствиями на кольцевом треке очень популярен в стране, в которой живет Даша, поэтому немудрено, что по пути на занятия она смогла застать следующую картину:

Трек представляет собой окружность длины L, в различных точках которой находятся n препятствий. Спортсмены всегда пробегают трек против часовой стрелки, если смотреть на него сверху. Все препятствия расположены на целочисленном расстоянии друг от друга вдоль трека.

Ее друзья попугай Кефа и леопард Саша участвовали в соревнованиях и каждый из них пробежал один круг. Каждый из друзей стартовал из некоторой целочисленной точки трека. Оба друга, для каждого из n препятствий записали расстояние от своего старта вдоль трека. Таким образом, каждый из них записал n чисел в порядке возрастания, каждое из этих чисел было в пределах от 0 до L - 1 включительно.

Рассмотрим пример. Пусть L = 8, синие кружки — препятствия, а зеленые точки — старты Кефы (A) и Саши (B). Тогда Кефа выпишет последовательность [2, 4, 6], а Саша — [1, 5, 7].

В стране есть разные треки, у всех из них совпадает общая длина и количество препятствий, но положения препятствий могут быть разные. Даше интересно, пробежали ли Саша и Кефа они один и тот же трек, или они участвовали на разных треках.

Напишите программу, которая проверит, что трек Кефы и трек Саши совпадают (то есть один может быть получен из другого изменением точки старта). Обратите внимание, что они всегда пробегают трек в одинаковом направлении — против часовой стрелки, если смотреть на него сверху.

Входные данные

В первой строке записаны два целых числа n и L (1 ≤ n ≤ 50, n ≤ L ≤ 100) — количество препятствий на треке и его длина.

Во второй строке записаны n различных целых чисел в порядке возрастания — расстояния от старта Кефы до каждого из препятствий в порядке их преодоления. Все числа целые, лежат в границах от 0 до L - 1 включительно.

Во второй строке записаны n различных целых чисел в порядке возрастания — расстояния от старта Саши до каждого из препятствий в порядке их преодоления. Все числа целые, лежат в границах от 0 до L - 1 включительно.

Выходные данные

Выведите «YES» (без кавычек), если Кефа и Саша пробежали совпадающие треки (то есть такие, что положения всех препятствий совпадают, если начать из одинаковых точек трека). Выведите «NO» (без кавычек) в противном случае.

Примечание

Первый пример разобран в условии.

C. Даша и пароль

дп Перебор реализация *1500

Преодолев лестницу, Даша оказалась на занятиях. Чтобы начать заниматься, ей необходимо ввести пароль. Пароль — это строка длины n, удовлетворяющая следующим требованиям:

  • В строке присутствует как минимум одна цифра,
  • В строке присутствует как минимум одна строчная (маленькая) буква латинского алфавита,
  • В строке присутствует как минимум один из трёх перечисленных символов — '#', '*', '&'.

Учитывая, что это занятия по программированию, просто так записать пароль не получится.

Для каждого символа пароля закреплена некоторая строка длины m, на каждой из этих n строк стоит указатель на некоторый символ в этой строке. Символ номер i на экране это символ, на который указывает указатель в i-ой строке. Изначально все указатели стоят на символе с индексом 1 (все позиции в этой задаче нумеруются с единицы).

За одну операцию Даша может передвинуть указатель любой одной строки на один символ влево или вправо. Строки цикличны, то есть при сдвиге указателя, который стоит на символе с индексом 1, влево, он перемещается на символ с индексом m, а при сдвиге вправо с позиции m он переместится на позицию 1.

Вам необходимо определить минимальное количество операций, необходимых для того, чтобы строка, отображаемая на экране, стала паролем.

Входные данные

В первой строке находятся два целых числа n, m (3 ≤ n ≤ 50, 1 ≤ m ≤ 50) — длина пароля и длина строк закрепленных за символами пароля.

В каждой из следующих n строк находится строка, закрепленная за i-м символом строки-пароля, длины m, состоящая из цифр, строчных латинских букв и символов '#', '*', '&'.

Входные данные таковы, что всегда можно получить строку-пароль.

Выходные данные

Выведите одно целое число — минимальное количество операций, необходимых для того, чтобы строка, отображаемая на экране, стала паролем.

Примечание

В первом примере для получения оптимального ответа нужно передвинуть указатель третьего символа на один влево.

Во втором примере одной из возможных последовательностей действий будет:

  • сдвинуть указатель второго символа вправо.
  • сдвинуть указатель третьего символа дважды вправо.

D. Даша и очень сложная задача

Бинарный поиск жадные алгоритмы Конструктив Перебор сортировки *1700

Войдя в систему, Даша принялась решать задачи. Одна из них звучала следующим образом:

По данным двум последовательностям a и b длины n необходимо построить последовательность c длины n, i-й элемент которой вычисляется следующим образом: ci = bi - ai.

Об a и b также известно, что их элементы лежат в интервале от l до r. Более формально, выполняются равенства l ≤ ai ≤ r и l ≤ bi ≤ r. Про последовательность c известно, что все ее элементы различны.

Решение задачи Даша написала быстро, но вот проверить ее работу на стандартном тесте оказалось не так просто. Из-за ошибки в системе тестирования из теста была известна только последовательность a и сжатая последовательность последовательности c.

Дадим определение сжатой последовательности. Сжатой последовательностью последовательности c длины n будем считать такую последовательность p длины n, что pi равно количеству чисел, меньше либо равных чем ci, в последовательности c. К примеру, для последовательности c = [250, 200, 300, 100, 50] сжатой последовательностью является p = [4, 3, 5, 2, 1]. Обратите внимание, что в c все числа различны. Следовательно, сжатая последовательность содержит все числа от 1 до n включительно.

Помогите Даше найти любую последовательность b, для которой посчитанная сжатая последовательность последовательности c верна.

Входные данные

В первой строке находятся три целых числа n, l, r (1 ≤ n ≤ 105, 1 ≤ l ≤ r ≤ 109) — длина последовательностей и границы отрезка, в котором лежат элементы a и b.

В следующей строке входных данных находятся n целых чисел a1,  a2,  ...,  an (l ≤ ai ≤ r) — элементы последовательности a.

В следующей строке входных данных находятся n различных целых чисел p1,  p2,  ...,  pn (1 ≤ pi ≤ n)сжатая последовательность последовательности c.

Выходные данные

Если подходящей последовательности b не существует, то в единственной строке выходных данных выведите «-1».

Иначе в единственной строке выходных данных должно содержаться n целых чисел — элементы любой подходящей последовательности b.

Примечание

Найденная во втором примере последовательность b является подходящей, потому что построенная последовательность c = [2 - 3, 2 - 4, 2 - 8, 9 - 9] = [ - 1,  - 2,  - 6, 0] (напомним, что ci = bi - ai) имеет сжатую последовательность равную p = [3, 2, 1, 4].

F. Даша и фотографии

дп Перебор реализация Структуры данных *2600

Даша решила немного отдохнуть после решения задачи D и стала просматривать фотографии с прошедших олимпиад.

Назовем фотографией матрицу размера n × m, состоящую из строчных латинских букв.

Некоторые k фотографий особенно заинтересовали её, так как их можно было получить из фотографии-шаблона путем покраски прямоугольной области в некоторый цвет. Назовем такие фотографии особенными.

Более формально i-я особенная фотография получается из фотографии-шаблона путем замены всех символов на некотором прямоугольнике с левым верхним углом в клетке с координатами (ai, bi) и с правым нижним углом в клетке с координатами (ci, di) на символ ei.

Даша просит вас найти особенную фотографию, суммарное расстояние от которой до всех остальных особенных фотографий минимально. И вычислить это расстояние.

Определим расстояние между двумя фотографиями, как сумму расстояний между всеми соответствующими буквами. Расстоянием между двумя буквами является модуль разницы их позиций в алфавите. Например, расстояние между буквами 'h' и 'm' равно |8 - 13| = 5, потому что буква 'h' 8-я в алфавите, а буква 'm' — 13-я.

Входные данные

Первая строка содержит три целых числа n, m, k (1 ≤ n, m ≤ 103, 1 ≤ k ≤ 3·105) — количество строк в фотографии-шаблоне, количество столбцов и количество особенных фотографий заинтересовавших Дашу.

Следующие n строк содержат строку длины m состоящую из маленьких латинских символов — описание фотографии-шаблона.

Каждая из следующих k строк содержат описание особенной фотографии в следующем формате, «ai bi ci di ei» (1 ≤ ai ≤ ci ≤ n, 1 ≤ bi ≤ di ≤ m), где (ai, bi) — координата левого верхнего угла прямоугольника, (ci, di) — правого нижнего, а ei — маленькая латинская буква на которую происходит замена в описанном прямоугольнике фотографии-шаблона.

Выходные данные

В единственную строку выходных данных необходимо вывести минимальное суммарное расстояние от найденной особенной фотографии до всех остальных особенных фотографий.

Примечание

В первом примере фотографии выглядят так:


bba aaa
bba acc
aaa acc

Расстояние между ними равно 10.

C. Тимофей и перемодулирование

математика Перебор реализация теория чисел *2600

Тимофей очень любит числа, но, к сожалению, он еще не умеет работать с большими числами, поэтому он выполняет все операции по своему любимому простому модулю m. А еще Тимофей любит арифметические прогрессии и всюду их ищет.

На день рождения ему подарили последовательность различных целых чисел a1, a2, ..., an. Тимофею стало интересно, можно ли переставить элементы последовательности так, чтобы она стала арифметической прогрессией по модулю m.

Арифметическая прогрессия по модулю m длины n с первым элементом x и разницей d — это последовательность целых чисел x, x + d, x + 2d, ..., x + (n - 1)·d, где каждый элемент взят по модулю m.

Входные данные

В первой строке находятся два целых числа m и n (2 ≤ m ≤ 109 + 7, 1 ≤ n ≤ 105, m — простое) — любимый простой модуль Тимофея и число элементов в последовательности.

Во второй строке даны n различных целых чисел a1, a2, ..., an (0 ≤ ai < m) — элементы последовательности.

Выходные данные

Выведите -1, если невозможно переставить элементы последовательности так, чтобы она стала арифметической прогрессией по модулю m.

Иначе, выведите два целых числа — первый элемент получившейся прогрессии x (0 ≤ x < m) и ее разницу d (0 ≤ d < m).

Если ответов несколько, выведите любой.

A. Вас вызывает Таймыр

математика Перебор реализация *800

Товарищ Дюжиков занимается подбором артистов для дня рождения Тимофея и заодно принимает поздравления с Таймыра.

Итак, товарища Дюжикова раз в n минут вызывает с Таймыра Илюша-альпинист, то есть в минуты n, 2n, 3n и так далее. Раз в m минут приходят артисты и выступают, то есть в минуты m, 2m, 3m и так далее. Поскольку связь работает плохо, ни одного звонка пропустить нельзя, зато вот артистов очень много. Если день длится z минут (то есть состоит из минут 1, 2, ..., z), сколько артистов надо утопить, чтобы во время звонков не было артистов? Считайте, что и звонок, и выступление артиста длятся ровно одну минуту.

Входные данные

Единственная строка содержит три целых числа — n, m, z (1 ≤ n, m, z ≤ 104)

Выходные данные

Выведите единственное число — минимальное количество артистов, которых надо утопить, чтобы во время звонков не было артистов.

Примечание

В первом тесте артисты приходят ежеминутно, так же звонит и Илья, поэтому всех артистов надо утопить.

Во втором тесте артисты со звонком пересекаются на 2-ой и 4-ой минутах.

В третьем тесте они пересекаются только на 6-ой минуте.

G. МАТЕМАТNКА

meet-in-the-middle дп математика Перебор теория чисел *3200

Если вы дошли до этой задачи, вы всё равно вряд ли станете читать легенду...

Вам дана бинарная строка и целое число . Найдите количество целых k, 0 ≤ k < N, таких что для всех i = 0, 1, ..., m - 1

Выведите ответ по модулю 109 + 7.

Входные данные

В первой строке входного файла содержится строка s, состоящая из символов 0 и 1 (1 ≤ |s| ≤ 40).

В следующей строке содержится целое число n (1 ≤ n ≤ 5·105).

В каждой из следующих n строк содержатся два разделённых пробелом целых числа pi, αi (1 ≤ pi, αi ≤ 109, pi простое). Все pi различны.

Выходные данные

Едиственное число — ответ на задачу.

C. Махмуд и сообщение

дп жадные алгоритмы Перебор Строки *1700

Махмуд написал сообщение s длины n. Он хочет послать его своему другу Моазу как подарок на день рождения, потому что тот очень любит строки. Он написал сообщение на магической бумаге, но был очень удивлен, когда увидел, что некоторые буквы исчезли после написания. А все потому, что эта магическая бумага не разрешает символу номер i латинского алфавита находится в строке длиной более чем ai. Например, если a1 = 2, то невозможно использовать символ 'a' на этой бумаге в строке длиной 3 или более. Строку «aa» возможно написать, в то время как строку «aaa» — нет.

Махмуд решил разбить сообщение не несколько подстрок, и написать каждую из них на отдельном листке магической бумаги так, чтобы каждая подстрока удовлетворяла ограничению бумаги. Сумма длин подстрок должна быть равна n, и подстроки не должны накладываться друг на друга. Например, если a1 = 2, и Махмуд хочет отправить строку «aaa», он может разбить ее на подстроки «a» и «aa» и использовать 2 магических листка, или, например, на «a», «a» и «a» и использовать 3 магических листка бумаги. Он не может разбить сообщение на «aa» и «aa», т. к. сумма длин этих строк больше, чем n. Он может разбить сообщение на единственную подстроку, если она удовлетворяет ограничениям.

Подстрока строки s — это строка, состоящая из нескольких последовательных букв из строки s, например, строки «ab», «abc» и «b» являются подстроками строки «abc», в то время как «acb» и «ac» — не являются. Любая строка является подстрокой самой себя.

Пока Махмуд думал о том, как же разбить сообщение, Ехаб сказал ему, что существует много способов сделать это. После этого Махмуд задал вам три вопроса:

  • Сколько существует способов разбить сообщение на подстроки, при условии, что все подстроки удовлетворяют ограничениям магической бумаги, сумма их длин равна n, и они не накладываются? Вы должны вычислить ответ по модулю 109 + 7.
  • Какая наибольшая длина может быть у какой-то подстроки какого-то корректного разбиения?
  • На какое минимальное число подстрок можно разбить сообщение?

Два разбиения считаются различными, если множества позиций разбиений различаются. Например, разбиения «aa|a» и «a|aa» считаются различными разбиениями сообщения «aaa».

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 103) — длина сообщения.

Вторая строка содержит сообщение s длиной n, состоящее из строчных букв латинского алфавита.

Третья строка содержит 26 целых чисел a1, a2, ..., a26 (1 ≤ ax ≤ 103) — для каждой буквы максимальная длина подстроки, в которой может встречаться эта буква.

Выходные данные

Выведите три строки.

В первой строке выведите число способов разбить сообщение на подстроки и удовлетворить всем ограничениям по модулю 109  +  7.

Во второй строке выведите наибольшую длину подстроки среди всех подстрок всех возможных разбиений.

В третьей строке выведите минимальное число подстрок, на которое можно разбить сообщение.

Примечание

В первом примере можно разбить сообщение тремя способами:

  • a|a|b
  • aa|b
  • a|ab

Самые длинные подстроки — «aa» и «ab» длины 2.

Наименьшее число подстрок — 2 в разбиениях «a|ab» и «aa|b».

Заметьте, что «aab» — некорректное разбиение, потому что буква 'a' встречается в подстроке длины 3, в то время как a1 = 2.

B. Очередь

жадные алгоритмы Перебор *2100

Наконец-то! Васе исполнилось 14 лет, а значит, пора получать паспорт! Для этого ему необходимо обратиться в паспортный стол. Но не все так просто. В паспортном столе работает только одно окно по приему документов, а очередь в него иногда занимают задолго до его открытия. Вася хочет подать документы завтра.

Он знает, что окно начинает работать спустя ts минут после полуночи, а закрывается спустя tf после полуночи (то есть (tf - 1) — последняя минута, когда окно еще работает). На прием документов от одного человека тратится ровно t минут. Если до закрытия окна остается меньше t минут, то обслуживание новых посетителей прекращается.

Ещё Вася знает, что завтра придет ровно n посетителей. Для каждого посетителя Вася знает время, в которое он придет. Каждый приходящий посетитель занимает очередь в окно, и не уходит, пока его не обслужат (или пока окно по приему документов не закроется). Если в момент прихода посетителя окно свободно (в частности, если в этот же момент закончили обслуживать предыдущего посетителя), то пришедшего посетителя начинают сразу же обслуживать.

Времена приходов всех посетителей положительны, Вася, если надо, может прийти и в нулевой момент времени (т. е. ровно в полночь), однако он не может прийти в момент времени, выражающийся нецелым числом минут после полуночи. Если Вася приходит одновременно с несколькими посетителями, то он пропускает их вперед и встает в конец очереди.

Вася, безусловно, хочет прийти так, чтобы успеть подать документы до закрытия окна. Но из всех таких вариантов он хочет выбрать такой, чтобы стоять в очереди как можно меньше. Помогите ему.

Входные данные

В первой строке входных данных находятся три положительных целых числа: время открытия окна ts, время закрытия окна tf и время обслуживания одного человека t. В следующей строке дано одно целое число n — количество посетителей (0 ≤ n ≤ 100 000). В третьей строке перечислены положительные целые числа в порядке неубывания — времена, в которые посетители приходят в паспортный стол.

Все времена заданы в минутах и не превосходят 1012; гарантируется, что ts < tf. Также гарантируется, что Вася может прийти так, чтобы успеть подать документы до закрытия окна.

Выходные данные

В выходной файл выведите одно целое неотрицательное число — время, когда должен прийти Вася. Если Вася приходит одновременно с несколькими посетителями, то он пропускает их вперед и встает в конец очереди. Если оптимальных решений несколько, выведите любое.

Примечание

В первом примере первый посетитель приходит точно к открытию окна, и его обслуживают две минуты. В момент времени 12 минут окно освобождается, и, если Вася подойдет к этому моменту, то его обслужат без очереди, т.к. следующий посетитель подойдет только в момент времени 13 минут.

Во втором примере, чтобы успеть подать документы, Васе надо прийти раньше всех.

C. Джон Сноу и его любимое число

дп Перебор реализация сортировки *1800

Джон Сноу сражается с белыми ходоками. У него есть n рейнджеров, каждый из которых имеет свою силу. Также у Джона Сноу есть любимое число x. Каждый рейнджер может сражаться с белым ходоком, если сила этого белого ходока равна его силе. Однако он думает, что его рейнджеры слабые и нуждаются в улучшении. Джон думает, что если он возьмет побитовый XOR сил некоторых рейнджеров с его любимым числом x, то он может получить солдат с более высокой силой. Итак, он решил сделать следующую операцию k раз:

  1. Расставить всех рейнджеров в ряд в порядке возрастания сил.
  2. Взять побитовый XOR (пишется как ) силы каждого второго рейнджера в ряду, начиная с самого первого, с числом x и обновить его силу.

    Предположим, что у Джона есть 5 рейнджеров с силами [9, 7, 11, 15, 5], и он выполняет операцию 1 раз с x = 2. Сначала он упорядочивает рейнджеров в порядке их сил, [5, 7, 9, 11, 15]. Далее он делает следующее:

    1. Сила первого рейнджера обновляется значением , то есть 7.
    2. Сила второго рейнджера остается прежней, то есть равной 7.
    3. Сила третьего рейнджера обновляется значением , то есть 11.
    4. Сила четвертого рейнджера остается прежней, то есть равной 11.
    5. Сила пятого рейнджера обновляется значением , то есть 13.

    Новые силы 5 рейнджеров [7, 7, 11, 11, 13].

    Теперь Джон хочет знать максимальную и минимальную силу рейнджеров после выполнения операций, описанных выше, k раз. Он хочет вашей помощи по этой задаче. Можете ли вы помочь ему?

Входные данные

Первая строка содержит три целых числа n, k, x (1 ≤ n ≤ 105, 0 ≤ k ≤ 105, 0 ≤ x ≤ 103) — количество рейнджеров у Джона, количество раз, которое Джон выполнит операцию, описанную выше, и любимое число Джона соответственно.

Вторая строка содержит n целых чисел, обозначающих силы рейнджеров, a1, a2, ..., an (0 ≤ ai ≤ 103).

Выходные данные

Выведите два целых числа — максимальная и минимальная силы рейнджеров после выполнения k операций.

F. Бочки и коробки

Комбинаторика математика Перебор Теория вероятностей теория чисел *2300

Тарли имеет два различных типа предметов, коробки еды и бочки вина. Есть f коробок с едой и w бочек вина. Тарли хранит их в разных стеках, и каждый стек может содержать только либо коробки еды, либо бочки вина, но не оба типа предметов сразу. Стеки расположены в ряд так, что нет двух стеков еды рядом, и нет двух стеков вина рядом.

Высота стека определена, как количество предметов в стеке. Два стека различны, если их высоты различны или один стек содержит еду, а другой вино.

Джону Сноу не нравится когда, какой-нибудь стек с вином имеет высоту меньше либо равную h. Какова вероятность, что Джону Сноу понравится расстановка в стеки, если все расстановки равновероятны?

Две расстановки стеков считаются разными, если существует такое i, что i-й стек одной расстановки не равен i-у стеку другой расстановки.

Входные данные

Первая строка входных данных содержит три целых числа f, w, h (0 ≤ f, w, h ≤ 105) — количество коробок с едой, количество бочек с вином и число h описанное выше. Гарантируется, что есть хотя бы одна коробка еды или хотя бы одна бочка вина.

Выходные данные

Выведите вероятность того, что Джон Сноу понравится расстановка. Вероятность этого имеет форму , вам необходимо вывести единственное целое число равное p·q - 1 mod (109 + 7).

Примечание

В первом тестовом примере f  =  1, w = 1 и h = 1, здесь две возможных расстановки, и ни одна из них не нравится Джону Сноу.

Во втором тестовом примере f = 1, w = 2 и h = 1, здесь три возможных расстановки. Джону нравятся расстановки (1) и (3). Поэтому вероятность равна .

D. k-Интересные пары чисел

*особая задача meet-in-the-middle битмаски Перебор *1700

У Васи есть последовательность, состоящая из n целых чисел. Вася считает пару чисел x и y k-интересной, если их двоичное представление отличается друг от друга ровно в k битах. Например, если k = 2, то пара чисел x = 5 и y = 3 является k-интересной, так как двоичные представления x=101 и y=011 отличаются ровно в двух битах.

Васе стало интересно, сколько в его последовательности существует пар индексов (i, j) таких, что i < j и пара чисел ai и aj является k-интересной. Перед вами стоит задача помочь Васе и определить это количество.

Входные данные

В первой строке следует два целых числа n и k (2 ≤ n ≤ 105, 0 ≤ k ≤ 14) — количество чисел в последовательности Васи и количество битов, в которых должны отличаться числа в k-интересной паре.

Во второй строке следует последовательность a1, a2, ..., an (0 ≤ ai ≤ 104), которая есть у Васи.

Выходные данные

Выведите количество пар (i, j) таких, что i < j и пара чисел ai и aj является k-интересной.

Примечание

В первом примере существует 4 k-интересные пары:

  • (1, 3),
  • (1, 4),
  • (2, 3),
  • (2, 4).

Во втором примере k = 0. Следовательно, числа в любой k-интересной паре должны быть равны между собой. Таким образом, для второго примера существует 6 k-интересных пар:

  • (1, 5),
  • (1, 6),
  • (2, 3),
  • (2, 4),
  • (3, 4),
  • (5, 6).

A. Герои

Перебор реализация *1400

Грядёт 2012-ый год...

Согласно древней хорадрической легенде, именно в этом, 2012-м году, Диабло со своими братьями Мефисто и Баалом вырвется из ада, и неисчислимые орды демонов поработят человеческий мир. Но семеро отважных героев уже собрались на вершине горы Арреат, чтобы защитить нас, простых смертных, от влияния этого ужасного зла.

Семеро великих, вот они: амазонка Anka, варвар Chapay, волшебница Cleo, друид Troll, некромант Dracul, паладин Snowy и профессиональная девушка-киллер Hexadecimal. Герои уже знают, сколько опыта дадут за каждого из трёх мегабоссов: a — за Мефисто, b — за Диабло и c — за Баала.

Вот беда: героев аж целых семь, а мегабоссов всего трое! Тогда наши герои решили разделиться на три группы, где каждая группа пойдёт уничтожать своего мегабосса. Каждый член группы получит опыта, округлённое вниз, где x — количество опыта за убитого мегабосса, а y — количество людей в группе.

Герои не хотят обижать друг друга, поэтому хотят разделиться на группы так, чтобы разница между персонажем, получившим максимальное число опыта и персонажем, получившим минимальное число опыта, была минимальна. Поскольку разделений на группы может быть несколько, то нужно найти такое, при котором суммарное количество симпатий в группах максимально.

Известно, что одни герои вызывают симпатию у других. Но если персонажу p нравится персонаж q, то это вовсе не значит, что персонажу q нравится персонаж p. Никакой герой не нравится сам себе.

Суммарное количество симпатий в группах — это количество таких упорядоченных пар (p, q), что герои p и q состоят в одной группе, и при этом герою p нравится герой q (но неважно, нравится ли герою q герой p). В случае, если герои p и q нравятся друг другу и состоят в одной группе, эта пара должна быть учтена дважды, как (p, q) и как (q, p).

Группа может состоять даже из одного персонажа, но важно, чтобы каждый мегабосс был уничтожен. Все герои должны быть задействованы в походе против зла. Ни один герой не может находиться более, чем в одной группе.

Гарантируется, что каждый герой в состоянии уничтожить любого мегабосса в одиночку.

Входные данные

В первой строке дано единственное неотрицательное целое число n (0 ≤ n ≤ 42) — количество симпатий между героями. В последующих n строках дано описание симпатий в формате «p likes q», означающих, что герою p нравится герой q (p  ≠  q). Каждая симпатия описана во входных данных ровно один раз, никакому герою не нравится он сам.

В последней строке даны три целых числа a, b и c (1 ≤ a, b, c ≤ 2·109), разделённые пробелом: опыт за Мефисто, опыт за Диабло и опыт за Баала.

Во всех претестах, за исключением примеров из условия, выполняется: a = b = c.

Выходные данные

Выведите два целых числа — минимальную разницу в опыте между персонажами, которые получат максимальное и минимальное количество очков опыта, и максимальное суммарное количество симпатий в группах (количество дружб между персонажами, оказавшимися в одной группе).

В этой задаче в первую очередь надо минимизировать разницу опыта, и среди всех таких разделений на группы выбрать такое, что суммарное количество симпатий максимально.

Примечание

Пояснение к первому примеру: первую группу могут сформировать Dracul, Troll и Anka, вторую группу — Hexadecimal и Snowy, а третью — Cleo и Chapay.

B. Динамическая стоимость задач

жадные алгоритмы Перебор *2000

Вася и Петя участвуют в раунде Codeforces. Раунд длится два часа и состоит из пяти задач.

В раунде используется динамическая стоимость задач. Если вам посчастливилось ни разу не участвовать в раундах Codeforces с динамической стоимостью задач, поясним, что это значит. Максимальная стоимость задачи зависит от отношения числа решивших данную задачу к общему числу участников раунда, причем участниками раунда считаются все сделавшие хотя бы одну попытку.

Обратите внимание на границы диапазонов. Например, если в раунде участвуют 40 человек, а задачу решили 10 из них, то доля решивших равна 1 / 4, а максимальная стоимость задачи равна 1500.

Если максимальная стоимость задачи равна x, то за каждую целую минуту, прошедшую от начала раунда до отправки участником верного решения по задаче, участник потеряет x / 250 баллов. Например, если максимальная стоимость задачи равна 2000, а участник отправил верное решение по ней спустя 40 минут после начала раунда, то этому участнику будет начислено 2000·(1 - 40 / 250) = 1680 баллов за эту задачу.

Всего в раунде n участников, считая Васю и Петю. Про каждого участника и каждую задачу известно, сколько целых минут прошло от начала раунда до отправки данным участником решения по данной задаче, или что участник не делал попыток по задаче.

За две секунды до конца раунда оказалось так, что все попытки участников прошли претесты, а также не было сделано ни одной попытки взлома. Вася полагает, что за оставшиеся две секунды никто не успеет отправить решение или попытаться взломать другое решение, а все уже сделанные попытки участников успешно пройдут системное тестирование.

К сожалению, Вася — обманщик и еще до начала раунда зарегистрировал на него 109 + 7 новых аккаунтов. Теперь Вася может отправить от имени новых аккаунтов любые из своих решений, чтобы изменить окончательные стоимости задач. Кроме того, Вася может отправлять неправильные решения на любые задачи. Обратите внимание, что Вася не может отправлять правильные решения на те задачи, которые он сам не решил.

Вася стремится к тому, чтобы набрать на текущем раунде строго больше баллов, чем Петя. Скрипты, позволяющие обфусцировать решения Васи и отправлять их в систему от имени любого из новых аккаунтов за доли секунды, у Васи уже готовы. Однако Вася не хочет делать свой обман слишком очевидным, поэтому он желает достичь своей цели, сделав попытки от имени как можно меньшего числа новых аккаунтов.

Найдите минимальное число новых аккаунтов, необходимое Васе для того, чтобы обогнать Петю (при условии, что предположения Васи верны), или сообщите, что Вася не сможет достичь своей цели.

Входные данные

Первая строка содержит целое число n (2 ≤ n ≤ 120) — количество участников раунда, считая Васю и Петю.

Каждая из следующих n строк содержит пять целых чисел ai, 1, ai, 2..., ai, 5 ( - 1 ≤ ai, j ≤ 119) — количество целых минут, прошедших от начала раунда до отправки участником i решения по задаче j, либо -1, если участник i не делал попыток по задаче j.

Гарантируется, что каждый участник сделал хотя бы одну попытку.

Вася — участник под номером 1, Петя — участник под номером 2, остальные участники даны в произвольном порядке.

Выходные данные

Выведите единственное число — минимальное число новых аккаунтов, необходимое Васе для того, чтобы обогнать Петю, или  - 1, если Вася не сможет достичь своей цели.

Примечание

В первом примере оптимальная стратегия Васи — отправить от имени двух новых аккаунтов решения последних трех задач. В таком случае первые две задачи будут иметь стоимость 1000, а последние три — 500. Общее число баллов Васи составит 980 + 940 + 420 + 360 + 270 = 2970, а Петя наберет лишь 800 + 820 + 420 + 440 + 470 = 2950 баллов.

Во втором примере Васе следует от имени двух новых аккаунтов отправить по одному неверному решению на любую из задач, а от имени еще одного нового аккаунта — отправить только верное решение по первой задаче. В этом случае максимальные стоимости задач составят 500, 1500, 1000, 1500, 3000. Вася наберет 2370 баллов, а Петя — 2294 балла.

В третьем примере Вася добьется желаемого, если отправит решения первых четырех задач от имени 27 новых аккаунтов. Тогда стоимости задач составят 500, 500, 500, 500, 2000. Благодаря высокой стоимости пятой задачи Вася сможет обойти Петю, очень быстро решившего первые четыре задачи, но не решившего пятую.

A. Серийный убийца

Перебор реализация Строки *900

Наш любимый детектив Шерлок занят поиском серийного убийцы, который убивает одного человека каждый день. Используя свой дедуктивный метод, он узнал, что у киллера есть стратегия для выбора следующей жертвы.

В первый день у убийцы есть две потенциальных жертвы. Он выбирает одну из них, убивает ее и заменяет ее новой потенциальной жертвой. Та же процедура повторяется каждый день. Таким образом, каждый день у убийцы есть две потенциальных жертвы, из которых он выбирает. Шерлок знает имена потенциальных жертв в первый день. Кроме этого, он знает, кого убили в каждый день и кто — новая потенциальная жертва, заменившая убитую.

Вам необходимо вычислить для каждого дня две потенциальные жертвы, из которых киллер выбирал в этот день, ведь Шерлок надеется найти в этой информации какую-то закономерность.

Входные данные

Первая строка содержит два имени (длина каждого не превосходит 10) потенциальных жертв в первый день.

Вторая строка содержит целое число n (1 ≤ n ≤ 1000) — число дней.

Каждая из следующих n строк содержит два имени (длина каждого не превосходит 10) — сначала имя человека, убитого в этот день, затем имя человека, ставшего новой потенциальной жертвой.

Входные данные согласованы, то есть гарантируется, что каждый убитый человек является одной из двух потенциальных жертв в этот день. Гарантируется, что имена всех людей различны и состоят из строчных букв латинского алфавита.

Выходные данные

Выведите n + 1 строку, i-я строка должна содержать имена двух людей, из которых убийца выбирает жертву в i-й день. (n + 1)-я строка должна содержать два имени, из которых будет выбрана следующая жертва. В каждой строке два имени могут быть выведены в любом порядке.

Примечание

В первом примере изначально потенциальные жертвы это ross и rachel.

  • После дня 1: ross убит, и появляется joey.
  • После дня 2: rachel убит, и появляется phoebe.
  • После дня 3: phoebe убит, и появляется monica.
  • После дня 4: monica убит, и появляется chandler.

C. Химикаты Молли

Бинарный поиск математика Перебор реализация Структуры данных *1800

У Молли Хупер есть n химикатов, расположенных в ряд. Каждый из химикатов имеет величину влиятельности, для химиката i эта величина равна ai.

Молли хочет, чтобы Шерлок в нее влюбился. Она собирается смешать все химикаты из некоторого отрезка так, чтобы сделать любовное зелье с величиной влиятельности, равной некоторой целой неотрицательной степени числа k. Величина влиятельности зелья равна сумме величин влиятельности химикатов на отрезке, из которого зелье составлено.

Помогите Молли найти количество отрезков, которые она может выбрать.

Входные данные

Первая строка содержит два целых числа n и k (1 ≤ n ≤ 105, 1 ≤ |k| ≤ 10) — количество химикатов и число k, неотрицательной степенью которого должна быть величина влиятельности зелья.

Вторая строка содержит n целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109) — величины влиятельности химикатов.

Выходные данные

Выведите единственное целое число — число пригодных отрезков.

Примечание

Помните, что k0 = 1.

В первом примере Молли может получить следующие величины влиятельности:

  • 2: отрезки [1, 1], [2, 2], [3, 3], [4, 4];

  • 4: отрезки [1, 2], [2, 3], [3, 4];

  • 6: отрезки [1, 3], [2, 4];

  • 8: отрезки [1, 4].

Среди них величины 2, 4 и 8 являются степенями k = 2. Таким образом, ответ 8.

Во втором примере Молли может выбрать отрезки [1, 2], [3, 3], [3, 4].

E. Ханойская фабрика

дп жадные алгоритмы Перебор сортировки Структуры данных *2000

Наверняка вы слышали об известной задаче про Ханойские башни, но мало кто знает, что существует целая фабрика, производящая кольца для этой замечательной игры. Однажды на эту фабрику пришел срочный заказ от властителя Египта — Солнцеликого. Солнцеликий требует немедленно прислать ему для игры как можно более высокую башню. Работники фабрики не были готовы к такому необычному заказу, поэтому им придётся собрать какую-то башню из уже произведённых колец.

На складах фабрики находятся n колец, i-е кольцо имеет внутренний радиус ai, внешний радиус bi и высоту hi. Требуется выбрать некоторые из этих колец и упорядочить их таким образом, чтобы выполнялись следующие условия:

  • Внешние радиусы колец образовывали невозрастающую последовательность, то есть кольцо j можно поставить на кольцо i только если bj ≤ bi.
  • Кольца не должны проваливаться друг в друга, то есть кольцо j можно поставить на кольцо i только если bj > ai.
  • Суммарная высота всех использованных колец должна быть максимальна.
Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 100 000) — количество колец на складах фабрики.

В i-й из последующих n строк записаны три числа ai, bi и hi (1 ≤ ai, bi, hi ≤ 109, bi > ai) — внутренний радиус, внешний радиус и высота i-го кольца соответственно.

Выходные данные

Выведите максимальную высоту башни, которую смогут получить работники фабрики.

Примечание

В первом примере выгодно поставить друг на друга все имеющиеся кольца в порядке 3, 2, 1.

Во втором примере можно либо поставить кольцо 3 на кольцо 4 и получить башню высоты 3, либо поставить кольцо 1 на кольцо 2 и получить башню высоты 4.

B. Побитовая формула

битмаски Перебор поиск в глубину и подобное Разбор выражений реализация *1800

Вася недавно прочитал о битовых операциях, которые используются в компьютерах: AND, OR и XOR. Он неплохо изучил их свойства и придумал новую игру. Изначально Вася выбирает разрядность m для своей игры, это значит, что все числа в игре будут состоять из m битов. Потом он просит Петю выбрать некоторое одно m-битное число. После этого Вася вычисляет значения n переменных. Каждой из переменных присваивается либо константное m-битное число, либо результат выполнения битовой операции, операндами которой могут являться уже определенные переменные или выбранное Петей число. После этого сумма очков, которую получает Петя, равна сумме значений всех переменных.

Вася хочет узнать, какое число должен выбрать Петя, чтобы получить минимально возможное число очков, и какое число он должен выбрать, чтобы получить максимальное число очков. В обоих случаях, если у Пети есть несколько способов получить такую сумму, найдите минимальное число, которое он может выбрать.

Входные данные

В первой строке содержатся два целых числа n и m — количество переменных и разрядность, соответственно (1 ≤ n ≤ 5000; 1 ≤ m ≤ 1000).

В следующих n строках содержится описание переменных. В каждой строке описывается ровно одна переменная. Описание имеет следующий вид: имя новой переменной, пробел, знак «:=», снова пробел, далее два варианта:

  1. Число в битовой записи длиной ровно m битов.
  2. Первый операнд, пробел, битовая операция («AND», «OR» или «XOR»), пробел, второй операнд. Каждый операнд — это либо имя уже определенной переменной, либо символ '?', обозначающий выбранное Петей число.

Имена переменных — строки из строчных латинских букв длиной не более 10 символов. Все имена переменных различны.

Выходные данные

В первой строке выведите минимальное число, которое должен выбрать Петя, чтобы сумма значений всех переменных была минимальна, во второй строке — минимальное число, которое должен выбрать Петя, чтобы сумма значений всех переменных была максимальна. Оба числа выведите в виде двоичного m-битного числа.

Примечание

В первом тесте если Петя выбирает число 0112, то a = 1012, b = 0112, c = 0002, сумма их значений равна 8. Если же он выберет число 1002, то a = 1012, b = 0112, c = 1112, сумма их значений равна 15.

Для второго теста минимальная и максимальная суммы переменных a, bb, cx, d и e равны 2 и не зависят от загаданного числа, поэтому минимальное число, которое может выбрать Петя — 0.

C. Петрович — полиглот

Деревья Перебор поиск в глубину и подобное снм Строки хэши *2500

Петрович обожает изучать новые языки, но самое любимое его увлечение — составление своих собственных. Языком Петрович называет множество слов, а словом — последовательность маленьких букв латинского алфавита.

Каждое утро Петрович составляет свой новый язык. Хранить все языки в явном виде очень сложно, поэтому Петрович придумал веник — специальную структуру данных для хранения языка, представляющую собой подвешенное дерево, на ребрах которого написаны буквы. Перед придумыванием языка веник представляет одну вершину — корень. При добавлении нового слова в язык Петрович встает в корень веника и обрабатывает буквы слова по одной. Пусть Петрович стоит в вершине u. Если из u есть ребро, на котором написана текущая буква, он переходит по нему. Иначе же, Петрович добавляет ребро из u в новую вершину v, пишет на нем текущую букву и переходит по этому ребру. Размером веника Петрович называет количество вершин в нем.

Вечером, приходя со смены, Петрович не может понять язык, придуманный утром: он ему кажется слишком сложным. Тогда Петрович старается упростить свой язык. Упрощением языка Петрович называет удаление букв из некоторых слов языка. Формально, Петрович фиксирует некоторое целое положительное число p, берет все слова, содержащие хотя бы p букв, и выкидывает из каждого из них букву с номером p. Буквы в слове Петрович предпочитает нумеровать, начиная с 1. Петрович считает, что при упрощении языка хотя бы одно слово должно измениться, то есть в языке должно быть хотя бы слово с длиной хотя бы p. Так как Петрович стремится сделать язык, придуманный утром, как можно проще, он старается подобрать число p таким образом, чтобы минимизировать размер веника, в котором он будет хранить язык.

Петровичу надоело заниматься одним и тем же каждый вечер, поэтому он обратился за помощью к вам. Напишите программу, которая будет находить минимальный размер веника, который может получиться в результате упрощения языка, придуманного Петровичем, и число p, которое нужно выбрать, чтобы получить такой размер.

Входные данные

В первой строке входного файла задано число n (2 ≤ n ≤ 3·105) — размер веника языка Петровича.

В следующих n - 1 строках задано описание веника. В i-й из них записаны числа ui, vi и буква xi, что соответствует ребру из ui в vi, на котором написана буква xi.

Вершины пронумерованы числами от 1 до n. Все xi являются маленькими буквами латинского алфавита. Вершина с номером 1 является корнем веника.

Гарантируется, что ребра описывают корректный веник, построенный по языку Петровича.

Выходные данные

В первой строке выведите минимальный возможный размер веника, который может получиться в результате упрощения языка. Во второй строке выведите число p, которое следует выбрать Петровичу для получения минимального размера. Если таких чисел p несколько, выведите минимальное из них.

Примечание

Веник из второго примера может быть составлен из множества слов «piece», «of», «pie», «pretty», «prefix». После упрощения языка с p = 2 получается язык из слов «pece», «o», «pe», «petty», «pefix». Этот язык и задаёт веник минимального возможного размера.

B. Странное округление

жадные алгоритмы Перебор *1100

Поликарп без ума от круглых чисел. Особенно ему нравятся числа, которые делятся на 10k.

В заданном числе n Поликарп хочет удалить наименьшее количество цифр, чтобы получилось число, которое делится на 10k. Например, если k = 3, то в числе 30020 достаточно удалить одну цифру (цифру 2). В таком случае результат будет равен 3000, что делится на 103 = 1000.

Напишите программу, которая выведет минимальное количество цифр, которые надо удалить из числа n, чтобы результат делился на 10k. Результат не должен начинаться с ненужного лидирующего нуля (то есть с нуля может начинаться только число 0, которое обязано быть записано ровно одной цифрой).

Гарантируется, что ответ существует.

Входные данные

В единственной строке входных данных записаны два целых числа n и k (0 ≤ n ≤ 2 000 000 000, 1 ≤ k ≤ 9).

Гарантируется, что ответ на задачу существует. Все числа во входных данных записаны в традиционной форме записи целых чисел, то есть без лишних лидирующих нулей.

Выходные данные

Выведите w — искомое минимальное количество цифр. После удаления подходящих w цифр из числа n должно получиться значение, которое делится на 10k и начинается с нуля в единственном случае (число равно нулю и записано ровно одной цифрой 0).

Примечание

В примере 2 вы можете удалить цифру 1 и любой из нулей. Тогда останется число 0, которое делится на любое другое число.

E. Запутанная схема

*особая задача Перебор реализация *2000

Входные данные

Входные данные состоят из четырех строк, каждая из которых содержит одну цифру - 0 или 1.

Выходные данные

Выведите одну цифру, 0 или 1.

E. Антон и перестановка

Перебор Структуры данных *2200

Антон обожает перестановки. Особенно ему нравится переставлять в них элементы местами. Напомним, что перестановкой из n элементов называется последовательность из чисел {a1, a2, ..., an}, в которой каждое из чисел от 1 до n встречается ровно по одному разу.

Однажды Антон получил новую перестановку и начал с ней играть. Он q раз делал следующую операцию: брал какие-то два элемента перестановки и менял их местами. После каждой операции он спрашивал своего друга Ваню: а сколько же инверсий в новой перестановке? Количеством инверсий в перестановке называется количество различных пар (i, j), таких, что 1 ≤ i < j ≤ n и ai > aj.

Ване надоело отвечать на глупые вопросы Антона и он попросил Вас написать программу, которая будет отвечать на эти вопросы за него.

Изначально перестановка Антона имела вид {1, 2, ..., n}, то есть ai = i для всех i таких, что 1 ≤ i ≤ n.

Входные данные

В первой строке входных данных находятся целые числа n и q (1 ≤ n ≤ 200 000, 1 ≤ q ≤ 50 000) — длина перестановки и количество операций, которые сделал Антон.

В каждой из следующих q строк находятся целые числа li и ri (1 ≤ li, ri ≤ n) — номера элементов, которые поменял местами Антон в ходе i-й операции. Обратите внимание, что позиции элементов, которые поменял местами Антон в ходе i-й операции могут совпадать. Элементы в перестановке нумеруются, начиная с единицы.

Выходные данные

Выведите q целых чисел, по одному числу в каждой строке — ответы на глупые вопросы Антона. i-е число в выходных данных должно обозначать количество инверсий в перестановке после выполнения i-й операции.

Примечание

Рассмотрим первый пример.

После первой операции Антона перестановка будет иметь вид {1, 2, 3, 5, 4}. В ней всего одна инверсия: (4, 5).

После второй операции Антона перестановка будет иметь вид {1, 5, 3, 2, 4}. В ней четыре инверсии: (2, 3), (2, 4), (2, 5) и (3, 4).

После третьей операции Антона перестановка будет иметь вид {1, 4, 3, 2, 5}. В ней три инверсии: (2, 3), (2, 4) и (3, 4).

После четвертой операции Антона перестановка не меняется. В ней по-прежнему остается три инверсии.

A. Монстр

математика Перебор теория чисел *1200

Монстр гонится за Риком и Морти на другой планете. Они настолько напуганы, что иногда кричат. Точнее, Рик кричит в моменты времени b, b + a, b + 2a, b + 3a, ..., а Морти кричит в моменты времени d, d + c, d + 2c, d + 3c, ....

Монстр поймает их, если в какой-то момент времени они закричат одновременно. Так что он хочет знать, когда он поймает их (первый момент времени, когда они закричат одновременно) или они никогда не закричат одновременно.

Входные данные

Первая строка входных данных содержит два целых числа a и b (1 ≤ a, b ≤ 100).

Вторая строка входных данных содержит два целых числа c и d (1 ≤ c, d ≤ 100).

Выходные данные

Выведите первый момент времени, когда Рик и Морти закричат одновременно, или  - 1, если они никогда не закричат одновременно.

Примечание

В первом тестовом примере 5-й крик Рика и 8-й крик Морти произойдут в момент времени 82.

Во втором тестовом примере все крики Рика будут в нечетные моменты времени и все крики Морти будут в четные моменты времени, поэтому они никогда не закричат одновременно.

B. Маша и геометрическая депрессия

математика Перебор реализация *1700

Маша очень любит алгебру. И вот на очередном уроке строгий учитель Двастан задал ей новое задание.

Дана геометрическая прогрессия b, определяемая двумя целыми числами b1 и q. Напомним, что геометрическая прогрессия — это такая последовательность чисел b1, b2, b3, ..., что для любого i > 1 выполняется bi = bi - 1·q, где q — знаменатель прогрессии. Но в Ужляндии все прогрессии особенные: как b1, так и q могут быть равными 0. Также Двастан задал m «плохих» целых чисел a1, a2, ..., am, и целое число l.

Маша по порядку выписывает все члены прогрессии (в том числе повторяющиеся) на доску, пока выполняется условие |bi| ≤ l (запись |x| означает модуль числа x). Есть одно исключение: если элемент прогрессии, который сейчас должен быть выписан, присутствует среди «плохих» чисел, то Маша его не выписывает, а пропускает, переходя к следующему элементу прогрессии.

Поскольку скоро урок подойдет к концу, Маше нужно быстро посчитать, сколько же чисел она выпишет. Чтобы не впасть в депрессию, она просит помощи у вас: помогите Маше посчитать, сколько же чисел она выпишет, или выведите «inf», если она выпишет бесконечное количество чисел.

Входные данные

В первой строке входных данных содержится четыре целых числа b1, q, l, m (-109 ≤ b1, q ≤ 109, 1 ≤ l ≤ 109, 1 ≤ m ≤ 105) — первый элемент прогрессии, знаменатель прогрессии, модуль максимального значения, которое может быть выписано и количество «плохих» чисел соответственно.

В второй строке задано m различных целых чисел a1, a2, ..., am (-109 ≤ ai ≤ 109) — числа, которые пропускают, если они будут в прогрессии.

Выходные данные

В единственной строке выведите количество чисел, которые выпишет Маша, или «inf» (без кавычек), если ей придется выписать бесконечное количество чисел.

Примечание

В первом примере Маша выпишет числа 3, 12, 24. Элемент прогрессии 6 она пропустит, так он есть среди «плохих» чисел. Элементы, большие 24, она выписывать не будет, так как они больше l по абсолютному значению.

Во втором примере Маша не выпишет ни одного числа, так как все элементы прогрессии равны 123, а это число является «плохим».

В третьем примере Маше придется выписать бесконечное количество чисел, равных 123.

A. Ограбление Банка

Перебор реализация *800

Преступник попытался ограбить банк, но не смог завершить свое дело. Однако, он смог открыть все сейфы.

Клиент банка Олег любит деньги (а кто нет?), поэтому он решил извлечь выгоду из этого неудачного ограбления и украсть часть денег из сейфов. В ряд расположено много сейфов, i-й слева сейф имеет номер номер i. В сейфах всего находятся n купюр. Купюра номер i лежит в сейфе xi. Сейчас Олег находится около сейфа a. Кроме того, есть два охранника, один из которых стоит около сейфа b такого, что b < a, то есть он стоит левее Олега. Второй охранник стоит около сейфа c такого, что c > a, то есть он стоит правее Олега.

Охранники ленивые, поэтому они не двигаются. В каждую секунду Олег может либо взять всю купюры из сейфа, перед которым он стоит, либо передвинуться к любому из соседних сейфов. Однако, он не может передвинуться к сейфу, около которого стоит охранник, так как в таком случае он будет обвинен в грабеже. Определите максимальное количество купюр, которое может собрать Олег.

Входные данные

В первой строке находятся три целых числа a, b и c (1 ≤ b < a < c ≤ 109) — позиции Олега, первого охранника и второго охранника, соответственно.

Вторая строка содержит целое число n (1 ≤ n ≤ 105) — число купюр.

Следующая строка содержит n целых чисел x1, x2, ..., xn (1 ≤ xi ≤ 109), которые означают, что i-я купюра лежит в сейфе xi. Заметьте, что xi не обязательно различные.

Выходные данные

Выведите одно число: максимальное число купюр, которое может взять Олег.

Примечание

В первом примере Олег может взять купюры из сейфов 4, 5, 6 (заметьте, что в сейфе 5 лежат 2 купюры). Олег не может взять купюры из сейфов 7 и 8, так как он не может пройти мимо второго охранника. Кроме того, Олег не может взять купюры из сейфов 3 и 2, так как он не может пройти мимо первого охранника. Итого. он может взять максимум 4 купюры.

Во втором примере Олег не может взять ни одной купюры, не проходя мимо охранников.

A. Покупка дома

Перебор реализация *800

Волшебник Зейн никогда ни в кого не влюблялся раньше, но сейчас ему понравилась одна девушка, имя которой нам неизвестно.

Девушка живет в доме номере m в деревне. Всего в деревне есть n домов, и они расположены на прямой улицу слева направо: дом 1, дом 2, ..., дом n. Дома строились по плану, поэтому дома i и i + 1 (1 ≤ i < n) расположены ровно в 10 метрах друг от друга. В этой деревне некоторые дома заняты, а некоторые — нет. Конечно, занятые дома нельзя купить.

Вам будут даны n целых чисел a1, a2, ..., an, которые обозначают занятость и цену домов. Если дом i занят, и поэтому не может быть куплен, то ai равняется 0. Иначе дом i может быть куплен, и ai означает сумму в долларах, необходимую для покупки этого дома.

У Зейна есть только k долларов, и поэтому для него непросто выбрать дом, который он должен купить, чтобы жить как можно ближе к своей возлюбленной. Помогите Зейну определить минимальное расстояние от дома его возлюбленной до некоторого дома, который он может себе позволить купить.

Входные данные

Первая строка содержит три целых числа n, m, и k (2 ≤ n ≤ 100, 1 ≤ m ≤ n, 1 ≤ k ≤ 100) — количество домов в деревне, дом, где живет девушка, и количество денег, которое есть у Зейна (в долларах), соответственно.

Вторая строка содержит n целых числел a1, a2, ..., an (0 ≤ ai ≤ 100), обозначающих занятость и цену домов.

Гарантируется, что am = 0, и что возможно купить хотя бы один дом за сумму не больше k долларов.

Выходные данные

Выведите одно число — минимально возможное расстояние (в метрах) от дома возлюбленной Зейна до дома, который может купить Зейн.

Примечание

В первом примере с k = 20 долларами Зейн может купить только дом 5. Расстояние от дома m = 1 до дома 5 равно 10 + 10 + 10 + 10 = 40 метров.

Во втором примере Зейн может купить дома 6 и 7. Лучше купить дом 6, чем дом 7, потому что дом m = 3 и дом 6 находятся на расстоянии 30 метров, а дом m = 3 и дом 7 — на расстоянии 40 метров.

E. Запросы на массиве

дп Перебор Структуры данных *2000

Дан массив a из n элементов, все элементы — натуральные числа, не превышающие n.

Необходимо обработать q запросов к этому массиву. Каждый запрос задаётся двумя числами p и k. Запрос состоит из нескольких операций, каждая операция заменяет число p числом p + ap + k. Эти операции проводятся, пока p не станет больше, чем n. Для каждого запроса необходимо выяснить количество таких операций.

Входные данные

В первой строке входного файла задано единственное число n (1 ≤ n ≤ 100000).

Во второй строке задано n целых чисел — массив a (1 ≤ ai ≤ n для всех i от 1 до n).

В третьей строке задано число q — количество запросов (1 ≤ q ≤ 100000).

В следующих q строках задано по два числа p и k (1 ≤ p, k ≤ n) — описание очередного запроса.

Выходные данные

Выведите q чисел, i-е из них должно быть равно ответу на запрос под номером i.

Примечание

Разберём пример из условия:

В первом запросе после первой операции p = 3, после второй p = 5.

Во втором и третьем запросах p становится больше n уже после первой операции.

A. Майк и палиндром

Конструктив Перебор Строки *1000

У Майка имеется строка s состоящая только из маленьких букв латинского алфавита. Он хочет изменить ровно один символ из строки так, чтобы результирующая строка стала палиндромом.

Палиндром это строка, которая читается в две стороны одинаково. Например строки «z», «aaa», «aba», «abccba» палиндромы, а строки «codeforces», «reality», «ab» нет.

Входные данные

Первая и единственная строка входных данных содержит строку s (1 ≤ |s| ≤ 15).

Выходные данные

Выведите «YES» (без кавычек), если Майк может изменить ровно один символ так, что результирующая строка станет палиндромом, или выведите «NO» (без кавычек) иначе.

B. Майк и строки

дп Перебор Строки *1300

У Майка есть n строк s1, s2, ..., sn. Каждая строка состоит из маленьких букв латинского алфавита. За один ход он может выбрать строку si, удалить первый символ и вставить его в конец этой строки. Например, если у него имеется строка «coolmike», то за один ход он может преобразовать эту строку в строку равную «oolmikec».

Теперь Майк задается вопросом: какое минимальное количество ходов необходимо сделать, чтобы все строки стали равными.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 50) — количество строк.

После этого следуют n строк, каждая из которых содержит строку. i-я строка соответствует строке si. Длины строк одинаковы. Длина каждой строки положительна и не превосходит 50.

Выходные данные

Выведите минимальное количество ходов, которое необходимо сделать, чтобы все строки стали равными, или выведите  - 1, если решения не существует.

Примечание

В первом тестовом примере оптимальным образом будет преобразовать все строки в строку «zwoxz».

A. Морковные торты

Перебор реализация *1100

В одной из игр Playrix печь выпекает за t минут k морковных тортов, причем все торты выпекаются одновременно по прошествии t минут с начала выпекания. Аркадию нужно получить хотя бы n тортов для выполнения задания, а сейчас у него нет ни одного, зато есть сколько угодно ингредиентов и одна печь. Кроме того, Аркадий может построить еще одну такую же печь для ускорения процесса, это займет d минут. Во время постройки новой печи выпекать торты может только старая печь, после конца постройки обе печи выпекают параллельно. Аркадий не может построить более одной новой печи.

Определите, целесообразно ли строительство второй печи, то есть уменьшит это минимальное время получения n тортов, или нет. Если время приготовления без второй печи равно времени приготовления тортов с ней, то строительство печи нецелесообразно.

Входные данные

В первой строке следует четыре целых числа n, t, k, d (1 ≤ n, t, k, d ≤ 1 000) — количество тортов, которые нужно испечь, время, за которое печь выпекает k тортов, количество тортов, выпекаемое за один раз, а также время, которое нужно для строительства второй печи.

Выходные данные

Если строительство второй печи целесообразно, выведите «YES». В противном случае, выведите «NO».

Примечание

В первом примере с помощью одной печи можно сделать 8 тортов за 12 минут. Если построить вторую печь за 5 минут, то по истечении 6-ти минут, первая печь испечёт 4 торта, а вторая испечёт еще 4 по истечении 11-ти минут. Поэтому строить вторую печь целесообразно.

Во втором примере не имеет значения, строить вторую печь или нет, так как в обоих случаях время приготовления 8-ми тортов равно 12-ти минутам. Поэтому строительство второй печи нецелесообразно.

В третьем примере первая печь успеет приготовить 11 тортов за 3 минуты, что больше необходимых 10-ти. Вторую печь строить нецелесообразно, так как её строительство занимает даже больше времени, чем приготовление нужного количества тортов с помощью одной печи.

D. Расширение поля

meet-in-the-middle дп Перебор *2100

Одна из игр, которыми увлекается Аркадий, происходит на прямоугольном участке. В процессе игры Аркадий может покупать расширения для своего участка, каждое расширение в несколько раз увеличивает любую из двух сторон его участка. Формально, есть n расширений, i-е из них позволяет увеличить длину или ширину (по выбору Аркадия) участка в ai раз. Каждое расширение можно использовать не более одного раза, расширения можно использовать в любом порядке.

Сейчас участок Аркадия имеет размер h × w. Он хочет его расширить так, чтобы возможно было разместить на участке прямоугольное поле размером a × b (вдоль или поперек, параллельно сторонам участка). Найдите минимальное число расширений, которое будет достаточно Аркадию для достижения своей цели.

Входные данные

В первой строке следуют пять целых чисел a, b, h, w и n (1 ≤ a, b, h, w, n ≤ 100 000) — размеры поля, которое нужно разместить на участке, размеры участка, а также количество доступных расширений.

Во второй строке следует последовательность n целых чисел a1, a2, ..., an (2 ≤ ai ≤ 100 000), где ai равно количеству раз, в которое может быть увеличена сторона при применении к ней i-го расширений.

Выходные данные

Выведите минимальное число расширений, которое будет достаточно Аркадию для достижения своей цели. Если невозможно поместить поле на участок после использования всех расширений, выведите -1. Если поле изначально помещается на участок, выведите 0.

Примечание

В первом примере достаточно использовать любое из доступных расширений. Например, можно увеличить h в 5 раз, использовав второе расширение. Тогда h станет равно 10 и станет возможно поместить поле на получившийся расширенный участок.

A. Предсказание Панорамикса

Перебор *800

Простым числом называется число, которое имеет ровно два различных делителя: единицу и само себя. Например, числа 2, 7, 3 являются простыми, а 1, 6, 4 — нет.

Следующим после x простым числом называется наименьшее простое число, большее x. Например, после 2 следующим простым является 3, а после 3 следующим простым является 5. Учтите, что для каждого числа есть ровно одно следующее простое. То есть 5 не является следующим простым для 2.

Однажды, холодным апрельским утром Панорамикс предсказал, что скоро освободится Какофоникс из своей смирительной рубашки, и чёрный день наступит для жителей галльской деревни.

Этот день, после третьей порции волшебного снадобья, определился друидом очень просто: если в некоторый день Астерикс и Обеликс побьют ровно x римских солдат, где x — простое число, а на следующий день они побьют ровно y римских солдат, где yследующее после x простое число, то стоит ждать конца света, ибо ничто не сможет сдержать Какофоникса с его адской песней.

Вчера галлы побили n римских солдат и оказалось, что число n — простое! Сегодня их жертвами стал отряд из m римлян (m > n). Определите, стоит ли ждать чёрного дня после сегодняшней победы Астерикса и Обеликса?

Входные данные

В первой и единственной строке входного потока дано два натуральных числа — n и m (2 ≤ n < m ≤ 50). Гарантируется, что число n — простое.

В претестах рассмотрены все случаи с ограничениями 2 ≤ n < m ≤ 4.

Выходные данные

Выведите YES, если число m оказалось следующим простым после n, или NO в противном случае.

A. Вредная Клавиатура

Перебор *1100

У Тонио есть клавиатура с двумя клавишами: буквой «V» и буквой «K».

Однажды он набрал строку s, используя только эти две буквы. Ему нравится, когда он встречает подстроку «VK», поэтому он хочет изменить не больше одной буквы в строке (или не изменять ничего), чтобы максимизировать число вхождений этой подстроки. Вычислите максимальное число раз, которое строка «VK» может встретиться как подстрока (т. е. буква «K» сразу после буквы «V») в получившейся строке.

Входные данные

Единственная строка содержит строку s, которая состоит только из заглавных букв латинского алфавита «V» или «K» и имеет длину от 1 до 100.

Выходные данные

Выведите одно число — максимальное число раз, которое строка «VK» может встречаться как подстрока в данной строке после изменения не более одного символа.

Примечание

В первом примере можно ничего не изменять, строка «VK» встречается один раз, что является максимумом.

Во втором примере можно изменить второй символ с «V» на «K». Тогда мы получим строку «VK», которая имеет одно вхождение строки «VK» как подстроки.

В четвертом примере мы можем изменить четвертую букву с «K» на «V». Это даст нам строку «VKKVKKKKKKVVVVVVVVVK». В ней строка «VK» встречается как подстрока трижды. Можно показать, что любое другое действие не дает нам больше вхождений.

D. Матожидание диаметра дерева

Бинарный поиск Деревья дп Перебор поиск в глубину и подобное сортировки *2500

Паша — прилежный студент, один из лучших друзей Моджака. Он всегда размышляет над какой-то задачей. Сегодня они разговаривали о следующей задаче.

Дан лес (ациклический неориентированный граф) из n вершин и m ребер. Также есть q запросов, на которые необходимо ответить. В каждом запросе даны две вершины v и u. Пусть V — множество вершин в компоненте связности, к которой принадлежит v, а U — множество вершин в компоненте связности, к которой принадлежит u. Добавим ребро между некоторой вершиной и некоторой вершиной и вычислим величину d получившейся компоненты. Если получившаяся компонента — дерево, то величина d равна диаметру компоненты, иначе она равна -1. Найдите математическое ожидание величины d, если вершины a и b выбираются из множеств равновероятно случайным образом.

Можете помочь Паше решить эту задачу?

Диаметром компоненты называется максимальное расстояние между парой вершин в компоненте. Расстоянием между двумя вершинами называется минимальное число ребер на пути между ними.

Заметьте, что запросы не добавляют ребер в изначальный лес.

Входные данные

Первая строка содержит три целых числа n, m и q (1 ≤ n, m, q ≤ 105) — количество вершин и ребер в графе и количество запросов.

Каждая из следующих m строк содержит два целых числа ui и vi (1 ≤ ui, vi ≤ n), что значит, что есть ребро между вершинами ui и vi.

Гарантируется, что заданный граф — лес.

Каждая из следующих q строк содержит два целых числа ui и vi (1 ≤ ui, vi ≤ n) — вершины, участвующие в i-м запросе.

Выходные данные

Для каждого запроса выведите математическое ожидание величины d в соответствии с условием задачи.

Ваш ответ будет засчитан, если его абсолютная или относительная ошибка не превосходит10 - 6. Формально, пусть ваш ответ равен a, а ответ жюри равен b. Ваш ответ будет засчитан, если .

Примечание

В первом примере вершины 1 и 3 лежат в одной компоненте, поэтому ответ на первый запрос равен -1. Во втором запросе есть два исхода: добавить ребро 1 - 2, или добавить ребро 2 - 3. В обоих случаях диаметр равен 2, поэтому ответ равен 2.

Во втором примере ответ на первый запрос равен -1. Ответ на второй запрос — среднее по трем случаям: Если добавлены ребра 1 - 2 или 1 - 3, то диаметр будет равен 3, а если добавлено ребро 1 - 4, то диаметр равен 2. Поэтому ответ равен .

B. Охота на футболки

Перебор реализация *1300

Не так давно на платформе Codeforces прошел контест Codecraft-17. Лучшие 25 участников, а также дополнительно случайные 25 из попавших в 500 лучших участников, получают фирменную футболку Codeforces.

К сожалению, вам не удалось попасть в число 25 лучших участников, однако, заняв место p, вы смогли попасть в 500 лучших.

Сейчас идет отборочный раунд 8VC Venture Cup 2017. Было объявлено, что обладатели футболок Codecraft-17 будут выбраны следующим образом. Пусть s — количество баллов у первого места в отборочном раунде 8VC Venture Cup 2017. Тогда будет выполнен следующий псевдокод:


i := (s div 50) mod 475
repeat 25 times:
i := (i * 96 + 42) mod 475
print (26 + i)

Здесь «div» — оператор целочисленного деления, «mod» — оператор взятия остатка от деления.

В результате исполнения данного псевдокода будет выведено 25 целых чисел от 26 до 500. Это будут номера мест участников, получающих футболки Codecraft-17. Гарантируется, что выведенные 25 чисел будут попарно различны при любом значении s.

Вы лидируете в отборочном раунде 8VC Venture Cup 2017, имея в наличии x баллов. Вы полагаете, что если наберете хотя бы y баллов в текущем раунде, то точно займете первое место.

Чтобы изменить свой итоговый балл, вы можете сделать любое количество как успешных, так и неудачных попыток взлома. Успешный взлом приносит вам 100 баллов, неудачная попытка вычитает 50 баллов. Однако делать успешные взломы тяжело.

Вы хотите одновременно выиграть текущий раунд и обеспечить себе призовую футболку за Codecraft-17. Какое наименьшее число успешных взломов вам придется для этого сделать?

Входные данные

Единственная строка содержит три целых числа p, x и y (26 ≤ p ≤ 500; 1 ≤ y ≤ x ≤ 20000) — ваше место в Codecraft-17, текущее количество баллов у вас в отборочном раунде 8VC Venture Cup 2017, и наименьшее количество баллов, которое вы считаете достаточным для победы в текущем раунде.

Выходные данные

Выведите единственное целое число — минимальное количество успешных взломов, которое необходимо сделать, чтобы выиграть отборочный раунд 8VC Venture Cup 2017 и одновременно получить футболку Codecraft-17.

Гарантируется, что достижение этой цели возможно при любых входных данных.

Примечание

В первом примере вам не нужно делать никаких взломов, поскольку 10880 баллов уже приносят 239-му месту (то есть, вам) футболку Codecraft-17. В таком случае, в соответствии с приведенным псевдокодом, футболки получат участники, занявшие следующие места:


475 422 84 411 453 210 157 294 146 188 420 367 29 356 398 155 102 239 91 133 365 312 449 301 343

Во втором примере вам необходимо сделать два успешных взлома и одну неудачную попытку взлома, чтобы ваш результат стал равен 7408.

В третьем примере вам придется сделать целых 24 успешных взлома, чтобы ваше количество баллов стало равно 10400.

В четвертом примере достаточно сделать 6 неудачных попыток взлома (не делая при этом ни одного успешного взлома), чтобы ваш результат стал равен 6500, чего как раз достаточно для победы в текущем раунде и получения футболки.

A. Владик и вежливость

Перебор реализация *800

Владик и Валера на очередном соревновании выиграли a и b конфет соответственно. Владик предложил Валере 1 свою конфету, после этого Валера, чтобы никто не подумал, что он менее щедрый, дал Владику 2 свои конфеты, Владик по той же причине следующий раз дал уже 3 свои конфеты...

Более формально, ребята по очереди давали друг другу на одну конфету больше, чем получали на предыдущем шаге.

Так продолжалось до момента, когда один из них не смог дать нужное количество своих конфет. Конфеты, которые ребята получили друг от друга, они не считают своими. Вам нужно узнать, кто первый не сможет дать нужное количество конфет.

Входные данные

Единственная строка входных данных содержит два целых числа a, b (1 ≤ a, b ≤ 109) — количество конфет Владика и Валеры соответсвенно.

Выходные данные

Единственная строка выходного файла должна содержать «Vladik» в случае, если Владик первый не сможет дать нужное количество конфет, и «Valera» иначе.

Примечание

Иллюстрация первого примера:

Иллюстрация второго примера:

B. Охранник Сахир

битмаски дп Перебор *1600

Некоторые люди не выключают свет, когда уходят из помещения, что ведет к бесполезной растрате энергии. Будучи охранником в университете, Сахир ждет, пока все студенты и профессора покинут здание, а затем идет и выключает везде свет.

В здании n этажей и две лестницы слева и справа. На каждом этаже есть m комнат вдоль коридора, который соединяет левую и правую лестницы. Другими словами, здание можно представить как прямоугольник из n строк и m + 2 столбцов, где первый и последний столбец  — лестницы, а m столбцов посередине — комнаты.

Сахир сейчас стоит на первом этаже на левой лестнице. Он хочет выключить везде свет, при этом, он не хочет подниматься на этаж выше до того, как выключит весь свет на текущем этаже. Конечно, Сахир должен побывать в комнате, чтобы выключить в ней свет. Сахир тратит одну минуту на то, чтобы подняться по лестнице на один этаж или перейти в соседнюю команату/на лестницу из соседней комнаты или с лестницы на том же этаже. Выключение света в комнате, в которой Сахир находится, не отнимает у него времени. Помогите Сахиру найти минимальное время для выключения всего света в здании.

Заметьте, что Сахир не должен возвращаться на исходную позицию, а также то, что он не обязан посещать комнаты, в которых свет и так выключен.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n ≤ 15, 1 ≤ m ≤ 100) — количество этажей и количество комнат на каждом этаже, соответственно.

Следующие n строк содержат описание здания. Каждая строка содержит строку из нулей и единиц длины m + 2, описывающую один этаж (левую лестницу, затем m комнат, затем правую лестницу), где 0 означает, что свет выключен, а 1 означает, что свет включен. Этажи даны в порядке сверху вниз, в частности, последняя строка описывает первый этаж.

Первые и последние символы каждой строки описывают лестницы, поэтому они всегда равны 0.

Выходные данные

Выведите одно число — минимально возможное время, необходимое для того, чтобы выключить весь свет.

Примечание

В первом примере Сахир сначала пойдет в комнату 1 на первом этаже, а затем — в комнату 2 на втором этаже, используя любую лестницу.

Во втором примере он пойдет сначала в четвертую комнату на первом этаже, поднимется на один этаж по правой лестнице, зайдет в четвертую комнату на втором этаже, опять поднимется по правой лестнице, пойдет во вторую комнату на последнем этаже.

В третьем примере он будет проходить по всему коридору на каждом этаже, чередуя лестницы.

B. Золотой Век

математика Перебор *1800

В Берляндии год считается несчастливым, если его номер n можно записать как n = xa + yb, где a и b — целые неотрицательные числа.

Например, если x = 2 и y = 3, тогда годы 4 и 17 будут несчастливыми (4 = 20 + 31, 17 = 23 + 32 = 24 + 30), а год 18 не будет, так как не существует представления числа 18 в таком виде.

Отрезок лет называется Золотым Веком, если в нем нет ни одного несчастливого года.

Напишите программу, которая найдет максимальную длину Золотого Века, который начинается не раньше года l и заканчивается не позднее года r. Если все годы в отрезке [l, r] несчастливые, то ответ — 0.

Входные данные

В первой строке записано четыре целых числа x, y, l и r (2 ≤ x, y ≤ 1018, 1 ≤ l ≤ r ≤ 1018).

Выходные данные

Выведите максимальную длину Золотого Века в промежутке [l, r].

Если все годы в отрезке [l, r] несчастливые, то выведите 0.

Примечание

В первом примере несчастливые годы — 2, 3, 4, 5, 7, 9 и 10. Максимальная длина Золотого Века достигается на отрезках [1, 1], [6, 6] и [8, 8].

Во втором примере длиннейший Золотой Век — отрезок [15, 22].

C. Пылкий поток любви

дп Перебор Строки *1600

День рождения Надеко приближается! Так как она украсила комнату для вечеринки, длинная гирлянда из бумажных гвоздик была повешена на видную часть стены. Койому, брату Надеко, она понравится!

Надеке все еще не нравится гирлянда, поэтому она решила ее снова улучшить. Гирлянда состоит из n частей, пронумерованных слева направо от 1 до n, и i-я из этих частей имеет цвет si, обозначенный строчной латинской буквой. Надеко перекрасит не более m частей в любой цвет (по-прежнему обозначенный строчной латинской буквой). После этого, она найдет все подотрезки, состоящие только из частей цвета c — любимого цвета Койоми — и будет называть длину самого большого такого подотрезка койомностью гирлянды.

Пусть, например, гирлянда имеет цвета «kooomo», а любимый цвет Койоми — «o». Среди всех подотрезков, содержащих только цвет «o», самым длинным является «ooo», его длина равна 3. Поэтому койомность этой гирлянды равна 3.

Проблема в том, что Надеко не уверена в любимом цвете Койоми, поэтому она постоянно меняет свои планы на предстоящую работу. У нее есть q планов, каждый определяется парой из числа mi и строчной буквы ci, значения которых были объяснены раньше. Вам предстоит найти максимальную койомность, достижимую после изменения гирлянды в соответствии с каждым из планов.

Входные данные

Первая строка содержит одно положительное целое число n (1 ≤ n ≤ 1 500) — длину гирлянды.

Вторая строка содержит n строчных латинских букв s1s2... sn как строку — начальные цвета частей гирлянды.

Третья строка содержит целое положительное число q (1 ≤ q ≤ 200 000) — количество планов у Надеко.

Каждая из следующих q строк описывает один план: строка i из них содержит целое число mi (1 ≤ mi ≤ n) — максимальное число частей, которое можно перекрасить, и затем строчную латинскую букву ci — возможный любимый цвет Койоми.

Выходные данные

Выведите q строк: для каждого плана выведите одно целое число на отдельной строке — максимально возможную койомность, достижимую после изменения гирлянды в соответствии с этим планом.

Примечание

В первом примере есть три плана:

  • В первом плане можно перекрасить не более чем 1 часть. Перекрасив часть цвета «y» в цвет «o», получим «kooomi», койомность которой равна 3 — максимально возможной;
  • Во втором плане можно перекрасить не более чем 4 части, получив гирлянду «oooooo», койомность которой равна 6;
  • В третьем случае можно перекрасить не более 4 частей, два способа «mmmmmi» и «kmmmmm» являются оптимальными с койомностью, равной 5.

A. Карен и игра

жадные алгоритмы Перебор реализация *1700

На пути к школе Карен зациклилась на одной игре в телефоне!

Игра описывается следующими правилами. На каждом уровне есть таблица с n строками и m столбцами. Каждая ячейка содержит изначально число 0.

Ход состоит в выборе одной строки или одного столбца и прибавлении 1 ко всем ячейкам этого столбца или строки.

Чтобы пройти уровень, нужно, чтобы после всех ходов число в j-й ячейке i-го столбца равнялось gi, j.

Карен застряла на одном из уровней, и хочет пройти его за минимальное число ходов. Помогите ей!

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 100) — количество строк и количество столбцов в таблице, соответственно.

Следующие n строк содержат по m целых чисел каждая. Число j в i-й из этих строк равняется gi, j (0 ≤ gi, j ≤ 500).

Выходные данные

Если уровень нельзя пройти, выведите -1.

Иначе выведите на первой строке одно число k — минимальное число ходов, необходимое для прохождения уровня.

Каждая из следующих k строк должна содержать описание одного хода в одном из следующих форматов:

  • row x, (1 ≤ x ≤ n) — ход «выбрать строку x».
  • col x, (1 ≤ x ≤ m) — ход «выбрать столбец x».

Если есть несколько оптимальных решений, выведите любое.

Примечание

В первом примере таблица имеет 3 строки и 5 столбцов. Карен может выполнить следующие 4 хода, чтобы пройти уровень:

Во втором примере в таблице 3 строки и 3 столбца. Ясно, что невозможно пройти уровень, так как любой ход создаст три 1 в таблице, но необходимо получить только одну 1 по центру.

В третьем тесте у Карен таблица с 3 строками и 3 столбцами. Она может выполнить следующие 3 хода, чтобы пройти уровень:

Это не единственное решение, например, другое — выполнить ходы col 1, col 2, col 3.

B. Карен и тест

Комбинаторика Конструктив математика Перебор *2200

Карен только что пришла в школу, у нее сегодня тест по математике!

Тест проверяет умения складывать и вычитать числа. К сожалению, учителя были заняты подготовкой задач к раунду Codeforces, поэтому у них не было времени сделать тест. Поэтому они дали лишь одну задачу, которая стоит все баллы.

В ряд записаны n целых чисел. Карен должна по очереди складывать и вычитать каждую пару соседних чисел, и записывать получающиеся суммы или разности в следующий ряд. Затем она должна повторить процесс со следующим рядом, и так далее, пока не останется ровно одно число. Первой операцией должно быть сложение.

Заметьте, что, если она закончила предыдущий ряд, вычислив сумму чисел, то она должна начать новый ряд вычитанием, и наоборот.

Учителя просто посмотрят на последнее число: если оно окажется верным, то Карен получит полный балл, иначе — ноль.

Карен хорошо подготовилась к тесту, но боится сделать ошибку где-нибудь, что приведет ее к неправильному финальному ответу. Можете вычислить, какое число она должна получить в конце?

Так как это число может быть большим, выведите неотрицательный остаток от его деления на 109 + 7.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 200000) — количество чисел, записанных в первом ряду.

Вторая строка содержит n целых чисел. А именно, i-е из этих чисел равно ai (1 ≤ ai ≤ 109) — i-му числу в первом ряду.

Выходные данные

Выведите одно целое число: число в последнем ряду после выполнения всех операций.

Так как оно может быть большим, выведите его неотрицательный остаток от деления на 109 + 7.

Примечание

В первом примере числа в первом ряду равны 3, 6, 9, 12 и 15.

Карен выполняет операции как показано на рисунке:

Неотрицательный остаток от деления итогового числа на 109 + 7 равен 36.

Во втором примере числа в первом ряду равны 3, 7, 5 и 2.

Карен выполняет следующие операции:

Неотрицательных остаток от деления итогового числа на 109 + 7 равен 109 + 6.

C. Карен и супермаркет

Деревья дп Перебор *2400

На пути домой Карен решила зайти в супермаркет за продуктами.

Ей нужно купить много продуктов, но, так как она еще учится, ее бюджет ограничен. Она может потратить не более b долларов.

В супермаркете есть n товаров. Товар номер i может быть куплен за ci долларов. Конечно, каждый товар может быть куплен только один раз.

Супермаркет хочет расширяться, поэтому Карен получила n купонов. Если Карен купит i-й товар, то она может использовать i-й купон для того, чтобы уменьшить цену этого товара на di. Конечно, купон не может быть использован без покупки соответствующего товара.

Однако, на использование купонов накладывается ограничение. Для всех i ≥ 2, чтобы использовать купон номер i, Карен должна использовать также купон номер xi (для использования которого может понадобиться использовать другие купоны, чтобы выполнить условие).

Карен хочет узнать, сколько максимум товаров она может купить, не превысив своего бюджета b?

Входные данные

Первая строка содержит два целых числа n и b (1 ≤ n ≤ 5000, 1 ≤ b ≤ 109) — число товаров в магазине и количество денег у Карен, соответственно.

Следующие n строк описывают товары. А именно:

  • Строка номер i начинается с двух целых чисел ci и di (1 ≤ di < ci ≤ 109) — цены i-го товара и скидка при использовании купона для i-го товара, соответственно.
  • Если i ≥ 2, то далее следует еще одно целое число xi (1 ≤ xi < i), означающее, что перед тем как будет использован этот купон, необходимо использовать купон номер xi.
Выходные данные

Выведите одно целое число: количество товаров, которые Карен может купить, не превысив бюджет.

Примечание

В первом примере Карен может купить следующие 4 товара:

  • Используя первый купон для покупки первого товара за 10 - 9 = 1 доллар.
  • Используя третий купон для покупки третьего товара за 12 - 2 = 10 долларов.
  • Используя четвертый купон для покупки четвертого товара за 20 - 18 = 2 доллара.
  • Купив шестой товар за 2 доллара.

Суммарная стоимость равна 15, что не превышает бюджета. Заметьте, например, что она не может использовать купон на шестой товар, так как тогда она должна будет использовать пятый купон и купить пятый товар, что она не сделала.

Во втором примере у Карен достаточно денег, чтобы использовать все купоны для покупки всех товаров.

A. Карен и утро

Перебор реализация *1000

Карен готовится к новому школьному дню!

Сейчас время чч:мм по 24-часовому формату. Как вы знаете, Карен любит палиндромы, поэтому ей кажется, что если проснуться в момент времени, являющийся палиндромом, то день будет удачный.

Сколько минимум минут ей нужно еще поспать, чтобы время было палиндромом, когда она проснется?

Напомним, что палиндром это строка, которая читается одинаково слева направо и справа налево. Например, 05:39 — это не палиндром, так как 05:39 справа налево — 93:50. С другой стороны, 05:50 — палиндром, потому что 05:50 справа налево — 05:50.

Входные данные

Единственная строка содержит время в формате чч:мм (00 ≤  мм  ≤ 23, 00 ≤  мм  ≤ 59).

Выходные данные

Выведите единственное число — минимальное число минут Карен должна поспать, чтобы проснуться в момент времени, являющийся палиндромом.

Примечание

В первом примере Карен должна поспать минимум 11 минут. Тогда она проснется в 05:50, что является палиндромом.

Во втором примере Карен может проснуться прямо сейчас, так как текущее время 13:31 является палиндромом.

В третьем примере Карен должна поспать минимум 1 минуту. Она может проснуться в 00:00, когда время является палиндромом.

C. Действительно большие числа

Бинарный поиск дп математика Перебор *1600

Ивану нравится узнавать различные факты о числах, но особенно его интересуют действительно большие числа. Иван считает натуральное число x действительно большим, если разность x и суммы его цифр (в десятичной записи) не меньше s. Чтобы доказать, что эти числа обладают особыми свойствами, он хочет узнать, насколько они редкие — если быть точным, ему нужно посчитать количество действительно больших чисел, которые не превышают n.

Иван попытался посчитать всё самостоятельно, но скоро понял, что для него это слишком трудно. Поэтому он попросил вас о помощи.

Входные данные

В первой (и единственной) строке записаны два числа n и s (1 ≤ n, s ≤ 1018).

Выходные данные

Выведите одно число — количество действительно больших чисел, не превышающих n.

Примечание

В первом примере числа 10, 11 и 12действительно большие.

Во втором примере не существует действительно больших чисел, не превышающих 25 (первое действительно большое число равно 30: 30 - 3 ≥ 20).

В третьем примере 10 — единственное действительно большое число (10 - 1 ≥ 9).

C. Диванный вор

Перебор реализация *2000

Скоро начинается очередной раунд на DecoForces! Дедушка Макс хотел поучаствовать в раунде, но за 15 минут до начала обнаружил пропажу — кто-то украл его любимый диван, на котором он писал контесты.

К счастью, вор оставил записку для дедушки Макса. Записка привела его на склад диванов. Но вот незадача — дедушка не может определить, какой из диванов был украден у него, так как внешне они все одинаковые!

Представим склад как прямоугольное поле n × m клеток. Каждый диван занимает две клетки склада, соседние по стороне. Каждую клетку занимает не более одного дивана (но могут быть и пустые клетки).

Считается, что диван A расположен левее дивана B, если существуют две таких клетки a и b, что a принадлежит дивану A, b принадлежит дивану B, и xa < xb. Диван A расположен выше дивана B, если существуют две таких клетки a и b, что a принадлежит дивану A, b принадлежит дивану B, и ya < yb. Аналогично определяем, когда какой-то диван правее или выше другого.

Обратите внимание, что во всех условиях выполняется A ≠ B. Также диван A может одновременно быть и выше другого дивана B, и ниже него. То же для левого и правого условий.

В записке, которую нашёл дедушка Макс, указывалось, что левее его дивана расположено cntl диванов, правее — cntr диванов, выше — cntt диванов и ниже — cntb диванов.

Помогите дедушке по этим данным найти его диван! Гарантируется, что не более одного дивана подходит под заданные условия.

Выведите номер дивана дедушки Макса. Если нет такого дивана, что все условия соблюдаются, то выведите -1.

Входные данные

В первой строке записано целое число d (1 ≤ d ≤ 105) — количество диванов на складе.

Во второй строке записаны два числа n, m (1 ≤ n, m ≤ 105) — размеры склада.

В следующих d строках записано по четыре целых числа x1, y1, x2, y2 (1 ≤ x1, x2 ≤ n, 1 ≤ y1, y2 ≤ m) — координаты i-го дивана. Гарантируется, что клетки (x1, y1) и (x2, y2) имеют общую сторону, (x1, y1)  ≠  (x2, y2) и ни одна клетка не покрыта более чем одним диваном.

В последней строке записаны четырех целых числа cntl, cntr, cntt, cntb (0 ≤ cntl, cntr, cntt, cntb ≤ d - 1).

Выходные данные

Выведите номер дивана, для которого все условия соблюдаются. Диваны пронумерованы от 1 до d в порядке входных данных. Если такого дивана нет, то выведите -1.

Примечание

Рассмотрим второй пример.

  • У первого дивана 0 расположены слева от него, 2 справа (1, 1) находится слева и от (5, 5), и от (5, 4)), 0 сверху и 2 снизу (и 2-й, и 3-й диваны находятся ниже).
  • У второго дивана cntl = 2, cntr = 1, cntt = 2 and cntb = 0.
  • У третьего дивана cntl = 2, cntr = 1, cntt = 1 and cntb = 1.

Второй диван подходит под данные условия.

В третьем примере:

  • У первого дивана cntl = 1, cntr = 1, cntt = 0 and cntb = 1.
  • У второго дивана cntl = 1, cntr = 1, cntt = 1 and cntb = 0.

И так как нет ни одного дивана с набором (1, 0, 0, 0), то ответ -1.

B. Окабэ и банановые деревья

математика Перебор *1300

Окабэ зачем-то нужны бананы для одного из экспериментов. Поэтому он решил сходить в лес и срубить банановых деревьев.

Рассмотрим точку (x, y) на плоскости такую, что x и y — целые числа, и 0 ≤ x, y. В такой точке растет дерево с x + y бананами на нем. В других точках нет деревьев. Окабэ нарисовал прямую, имеющую уравнение . Окабэ может выбрать один прямоугольник со сторонами, параллельными осям координат, такой, что все его точки лежат под или на прямой, и срубить все деревья внутри и на границе прямоугольника, собрав все бананы с них.

Помогите Окабэ найти максимальное число бананов, которое он может получить, если мудро выберет прямоугольник.

Окабе уверен, что ответ не превосходит 1018. Вы можете доверять ему.

Входные данные

Первая строка содержит два целых числа m и b (1 ≤ m ≤ 1000, 1 ≤ b ≤ 10000).

Выходные данные

Выведите максимальное число бананов, которое может получить Окабэ с деревьев, которые он срубит.

Примечание

Рисунок выше соответствует первому примеру. Оптимальный прямоугольник показан красным, в нем находится 30 бананов.

B. Решение кроссворда

Перебор реализация Строки *1000

Вскоре Лехе наскучило считать наибольшие общие делители двух факториалов. Поэтому он решил заняться разгадыванием кроссвордов. Как известно, это очень интересное занятие, но может быть и очень сложным время от времени. В ходе разгадывания одного из кроссвордов Лехе пришлось решить несложную задачу. А сможете ли вы?

У Лехи есть две строки s и t. Теперь хакер хочет изменить строку s так, чтобы она встречалась в t в качестве подстроки. Все изменения должны иметь вид: Леха выбирает некоторую позицию в строке s и заменяет символ в этой позиции на знак вопроса «?». Хакер уверен, что знак вопроса «?» при сравнении может играть роль произвольного символа. Например, если в результате он получит строку sab?b», то она встретится в taabrbb» как подстрока.

Гарантируется, что длина строки s не превосходит длины строки t. Помогите хакеру Лехе заменить в s минимальное количество символов на знаки вопроса «?» так, чтобы результат встречался в t в качестве подстроки. Символ «?» при сравнении следует считать равным любому другому символу.

Входные данные

В первой строке следует два целых числа n и m (1 ≤ n ≤ m ≤ 1000) — длина строки s и длина строки t соответственно.

Во второй строке следует n строчных латинских букв — строка s.

В третьей строке следует m строчных латинских букв — строка t.

Выходные данные

В первую строку выведите целое число k — минимальное количество символов, которые нужно заменить. Во второй строке выведите k различных целых чисел — позиции букв в строке s, которые нужно заменить. Позиции выводите в любом порядке. Если ответов несколько, разрешается вывести любой из них. Нумерация позиций начинается с единицы.

D. Моя милая девочка Нура

дп жадные алгоритмы математика Перебор теория чисел *1800

В университете Павлополиса, где учится Нура, решили провести конкурс красоты «Мисс университета Павлополиса». Опишем подробнее процесс выбора самой красивой девушки в университете.

Конкурс проходит в несколько этапов. Пусть изначально в конкурсе участвует n девушек. Всех участниц делят на равные группы по x человек в каждой. При этом число x выбирается произвольно, то есть число x может быть различным для разных этапов конкурса. Внутри каждой группы жюри конкурса сравнивает девушек по красоте в формате «каждая с каждой». Таким образом, если в группе x девушек, то происходит сравнений. Затем из каждой группы выбирается по одной самой красивой участнице. Выбранные девушки попадают в следующий этап конкурса. То есть, если n девушек были разделены на группы, по x участниц в каждой, то в следующий этап попадут ровно участниц. Конкурс продолжается до тех пор, пока не останется ровно одна девушка, которая и будет признана «Мисс университета Павлополиса».

Но для жюри этот конкурс — очень утомительное занятие. Им хотелось бы делить девушек на группы в каждом этапе так, чтобы суммарное число попарных сравнений девушек было как можно меньше. Обозначим за f(n) минимальное суммарное количество сравнений, которые надо провести, чтобы выбрать самую красивую участницу, если к первому этапу допустить n девушек.

Организаторы конкурса — большие сумасброды. Они дают Нуре три целых числа t, l и r и просят бедную девушку посчитать значение следующего выражения: t0·f(l) + t1·f(l + 1) + ... + tr - l·f(r). Однако, так как значение этого выражения может быть достаточно велико, организаторы просят посчитать его по модулю 109 + 7. Если Нура сможет посчитать значение этого выражения, организаторы обещают ей помощь в ходе конкурса красоты. Но бедная девушка не сильна в математике, поэтому за помощью она обратилась к Лехе, а тот — прямиком к вам.

Входные данные

В первой и единственной строке задано три целых числа t, l и r (1 ≤ t < 109 + 7, 2 ≤ l ≤ r ≤ 5·106).

Выходные данные

Выведите единственное число — значение искомого выражения по модулю 109 + 7.

Примечание

Рассмотрим пример.

Необходимо найти значение .

f(2) = 1. Из двух девушек можно составить только одну группу из двух человек, в которой произойдет одно сравнение.

f(3) = 3. Из трех девушек можно составить только одну группу из трех человек, в которой произойдет три сравнения.

f(4) = 3. Четырех девушек можно разбить на две группы по две девушки в каждой. Тогда на первом этапе произойдет два сравнения, по одному в каждой из двух групп. Во второй этап выйдут две девушки, между которыми произойдёт ещё одно сравнение. Итого 2 + 1 = 3. Можно также в первом этапе оставить всех девушек в одной группе. Тогда произойдет сравнений. Очевидно, что лучше разбивать девушек на группы первым способом.

Тогда значение выражения это .

B. Пять в ряд

Перебор реализация *1600

Алиса и Боб играют в игру «Пять в ряд» на поле 10 × 10. По очереди они ставят крестики и нолики, по одному за раз. Алиса ставит крестики, Боб — нолики.

В текущей партии они совершили некоторое количество ходов, и теперь ход Алисы. Ей интересно, может ли она поставить крестик так, чтобы сразу победить.

Алиса побеждает, когда какие-либо крестики на поле образуют линию длины не меньше 5. Линия может быть горизонтальной, вертикальной или диагональной.

Входные данные

Задана матрица 10 × 10 (10 строк по 10 символов в каждой) с крестиками, обозначаемыми заглавными латинскими буквами 'X', ноликами — буквами 'O' и пустыми клетками — символами '.'. Количество крестиков равно количеству ноликов, и существует хотя бы один крестик и нолик. Существует хотя бы одна пустая клетка.

Гарантируется, что в текущей расстановке никто еще не достиг победы.

Выходные данные

Выведите 'YES', если Алиса может победить в один ход, поставить крестик в какую-либо свободную клетку. В противном случае выведите 'NO'.

A. Ключи от офиса

Бинарный поиск дп жадные алгоритмы Перебор сортировки *1800

На прямой есть n человек и k ключей. Каждый из людей хочет попасть в офис, который также расположен на прямой. Для этого каждому человеку нужно сначала дойти до точки, в которой находится ключ, взять его, а затем отправиться в офис. После того как человек взял ключ, больше этот ключ взять никто не сможет.

Перед вами стоит задача определить минимальное время по истечении которого все n людей смогут добраться до офиса с ключами. Считайте, что каждый из людей преодолевает единицу расстояния за 1 секунду. Если в точку с ключом одновременно придут два человека, то ключ может взять только один из них. Человек не обязан брать ключ, мимо которого проходит.

Входные данные

В первой строке следуют три целых числа n, k и p (1 ≤ n ≤ 1 000, n ≤ k ≤ 2 000, 1 ≤ p ≤ 109) — количество людей, количество ключей и позиция офиса.

Во второй строке следуют n различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — позиции, в которых изначально находятся люди. Позиции заданы в произвольном порядке.

В третьей строке следуют k различных целых чисел b1, b2, ..., bk (1 ≤ bj ≤ 109) — позиции, в которых изначально находятся ключи. Позиции заданы в произвольном порядке.

Обратите внимание, что изначально в каждой точке может находиться не более одного человека и не более одного ключа. Человек и ключ могут находиться в одной точке.

Выходные данные

Выведите минимальное время в секундах по истечении которого все n людей смогут добраться до офиса с ключами.

Примечание

В первом примере человек, находящийся в точке 20 должен взять ключ, находящийся в точке 40 и дойти с ним до офиса, который находится в точке 50. На это он потратит 30 секунд. Человек, находящийся в точке 100 может взять ключ, находящийся в точке 80 и дойти с ним до офиса. На это он потратит 50 секунд. Таким образом, через 50 секунд все люди могут оказаться в офисе с ключами.

C. Оценки жюри

Конструктив Перебор *1700

Поликарп смотрел шоу, где k членов жюри последовательно оценивали участника, начисляя ему некоторое количество баллов (возможно отрицательное, то есть баллы снимали). Изначально у участника было некоторое количество баллов, и каждая оценка последовательно добавлялась к его количеству баллов. Известно, что i-й член жюри поставил оценку ai.

Поликарп не помнит, сколько баллов было у участника до этих k оценок, но помнит, что среди результатов участника, которые озвучивались после того, как каждый из k жюри поставил оценку, точно были n (n ≤ k) значений b1, b2, ..., bn (гарантируется, что все bj различны). Возможно такое, что Поликарп помнит не все озвученные результаты, то есть n < k. Обратите внимание, начальный результат участника не озвучивался.

Перед вами стоит задача определить количество вариантов того, сколько баллов мог иметь участник до оценок жюри.

Входные данные

В первой строке следуют два целых числа k и n (1 ≤ n ≤ k ≤ 2 000) — количество членов жюри и количество значений, о которых помнит Поликарп.

Во второй строке следуют k целых чисел a1, a2, ..., ak ( - 2 000 ≤ ai ≤ 2 000) — оценки жюри в порядке их выставления.

В третьей строке следуют n различных целых чисел b1, b2, ..., bn ( - 4 000 000 ≤ bj ≤ 4 000 000) — значения баллов, про которые помнит Поликарп. Заметьте, что эти величины не обязательно даны в хронологическом порядке.

Выходные данные

Выведите количество вариантов того, сколько баллов мог иметь участник до оценок жюри. Если Поликарп что-то напутал и не существует ни одного подходящего варианта, выведите «0» (без кавычек).

Примечание

В первом примере ответ 3, так как изначально участник мог иметь  - 10, 10 или 15 баллов.

Во втором примере только одно подходящее изначальное количество баллов, которое равно 4 002 000.

C. Прожорливая Кракозябра

жадные алгоритмы Комбинаторика математика Перебор *2700

Недавно в Мармеладном замке поселилась самая настоящая Кракозябра. И она постоянно не прочь чем-нибудь поживиться.

Любимым блюдом Кракозябры являются натуральные числа в медовом соусе, а точнее, нули в их десятичной записи. Другие цифры ей не по вкусу; мало того, от них у нее частенько случается несварение желудка. Поэтому прежде, чем приступить к трапезе, Кракозябра аккуратно раскладывает цифры числа в возрастающем порядке и съедает лишь нули (если они есть), а из оставшихся цифр формирует новое число, которое она презрительно отбрасывает как несъедобный хвост.

Так, например, если Кракозябра предпочтет полакомиться числом 57040, то несъедобный хвост будет равняться 457.

Сластене немного не по душе такое соседство, но ее природная гостеприимность не позволяет ей оставить Кракозябру без еды. У Сластены есть некоторый диапазон чисел от L до R, которыми она планирует накормить гостью. Помогите ей узнать, сколько различных несъедобных хвостов останется после ужина.

Входные данные

В первой строчке заданы два числа L и R — границы диапазона (1 ≤ L ≤ R ≤ 1018).

Выходные данные

Выведите одно число — ответ на задачу.

Примечание

В первом примере несъедобные хвосты — все числа от 1 до 9. Заметьте, что 10 и 1 дают одинаковые хвосты, равные 1.

Во втором примере Кракозябра сформирует уникальные несъедобные хвосты из всех чисел диапазона, кроме пары 45, 54. Таким образом, ответ равен (57 - 40 + 1) - 1 = 17.

D. Палиндромная характеристика

дп Перебор Строки хэши *1900

Палиндромная характеристика строки s длины |s| — это последовательность из |s| целых чисел, k-е из которых равно количеству непустых подстрок строки s, являющихся k-палиндромами.

Строка является 1-палиндромом тогда и только тогда, когда она читается одинаково как слева-направо, так и справа-налево.

Строка является k-палиндромом (k > 1) тогда и только тогда, когда:

  1. Её левая половина равна правой половине.
  2. Её левая и правая половины не пусты и являются (k - 1)-палиндромами.

Левая половина строки t — это её префикс длины ⌊|t| / 2⌋, а правая — её суффикс той же длины. ⌊|t| / 2⌋ обозначает длину строки t, делённую на 2, округленную вниз.

Обратите внимание, что каждая подстрока учитывается столько раз, сколько встречается как подстрока. Так, например, в строке «aaa» подстрока «a» встречается 3 раза.

Входные данные

Первая строка содержит строку s (1 ≤ |s| ≤ 5000), состоящую из строчных латинских букв.

Выходные данные

Выведите |s| целых чисел — палиндромную характеристику строки s.

Примечание

В первом примере 1-палиндромами являются подстроки «a», «b», «b», «a», «bb», «abba», 2-палиндромом является подстрока «bb». 3- и 4-палиндромы у этой строки отсутствуют.

B. Флаг Берляндии

Перебор реализация *1600

Флаг Берляндии представляет собой прямоугольное поле размера n × m. Для флага выполняются следующие условия:

  • Флаг раскрашен в три цвета, которые соответствуют буквам 'R', 'G' и 'B'.
  • Флаг состоит из трех равных по длине и ширине полос, параллельных друг другу и сторонам флага. Каждая полоса окрашена ровно в один цвет.
  • Каждый цвет должен быть использован ровно в одной полосе.

Задано прямоугольное поле размера n × m, состоящее только из символов 'R', 'G' и 'B'. Выведите "YES" (без кавычек), если данное поле представляет собой корректный флаг Берляндии. В противном случае, выведите "NO" (без кавычек).

Входные данные

В первой строке записаны два целых числа n и m (1 ≤ n, m ≤ 100) — размеры поля.

В следующих n строках следуют по m символов 'R', 'G' и 'B' — описание поля.

Выходные данные

Если данная матрица представляет собой корректный флаг Берляндии, то выведите "YES" (без кавычек). В противном случае выведите, "NO" (без кавычек).

Примечание

В третьем примере нет трех параллельных линий.

Строки в поле из четвертого примера параллельны друг другу и сторонам матрицы. Однако, они имеют разную ширину — 2, 1 и 1, соответственно.

C. Две печати

Перебор реализация *1500

У одного очень важного человека есть лист бумаги в форме прямоугольника a × b.

Также у него есть n печатей, каждая из которых оставляет на бумаге оттиск — прямоугольник размера xi × yi. Печать надо ставить параллельно сторонам листа (но можно поворачивать на 90 градусов).

Очень важный человек хочет выбрать две любые различные печати и поставить ими два оттиска. Каждая из выбранных печатей ставит ровно один оттиск. Оттиски надо поставить так, чтобы они не пересекались (но они могут касаться сторонами), а суммарная занимаемая ими площадь была наибольшей. Какую наибольшую площадь можно занять двумя печатями?

Входные данные

Первая строка содержит три целых числа n, a и b (1 ≤ n, a, b ≤ 100).

Каждая из следующих n строк содержит два целых числа xi, yi (1 ≤ xi, yi ≤ 100).

Выходные данные

Выведите максимальную суммарную площадь, которую можно покрыть двумя печатями. Если две печати выбрать невозможно, выведите 0.

Примечание

В первом примере можно повернуть второй оттиск на 90 градусов. Потом разместить первый оттиск сразу под вторым и занять весь лист.

Во втором примере нельзя выбрать последний оттиск, так как он не поместится. Выбрав первый и третий оттиски, мы получим максимальную площадь.

В третьем примере не существует такой пары оттисков, что они оба могут поместиться на листе.

F. Префикс суммы

Бинарный поиск Комбинаторика математика матрицы Перебор *2400

Дана функция p(x), где x — это массив из m целых чисел, которая возвращает массив y, состоящий из m + 1 целых чисел таких, что yi равно сумме первых i элементов массива x (0 ≤ i ≤ m).

Дана бесконечная последовательность массивов A0, A1, A2..., где массив A0 дан во входных данных, и для всех i ≥ 1 Ai = p(Ai - 1). Кроме этого дано целое положительное число k. Найдите минимальное возможное i такое, что Ai содержит число не меньшее чем k.

Входные данные

Первая строка содержит два целых числа n и k (2 ≤ n ≤ 200000, 1 ≤ k ≤ 1018), где n — размер массива A0.

Вторая строка содержит n целых чисел A00, A01... A0n - 1 — элементы массива A0 (0 ≤ A0i ≤ 109). Массив A0 содержит по крайней мере два положительных элемента.

Выходные данные

Выведите минимальное i такое, что массив Ai содержит число не меньшее чем k.

A. Двоичные блоки

Перебор *1400

Вам дано изображение, которое может быть представлено как 2-d таблица пикселей размера n на m. Каждый пиксель изображения либо включен, либо выключен, что обозначается символами «0» или «1», соответственно. Вы хотите сжать это изображение. Вы хотите выбрать целое число k > 1 и разбить изображение на блоки размера k на k. Если n и m не делятся на k, то изображение дополняется выключенными пикселями справа и снизу так, что размеры делятся на k. Все пиксели внутри одного блока должны иметь одинаковое значение. Данное изображение может быть не сжимаемым в текущем состоянии. Найдите минимальное число пикселей, которое нужно изменить так, чтобы изображение стало сжимаемым для некоторого k. Более точно, сначала вы должны выбрать k, затем изображение дополняется нулями, затем вы можете изменить некоторые пиксели так, чтобы изображение было сжимаемым для этого k.

Входные данные

Первая строка содержит два целых числа n, m (2 ≤ n, m ≤ 2 500) — размеры изображения.

Следующие n строк содержат бинарные строки, состоящие из ровно m символов, описывающих изображение.

Выходные данные

Выведите одно целое число — минимальное число пикселей, которое нужно изменить, чтобы изображение стало сжимаемым.

Примечание

Можно изменить символы, чтобы изображение стало следующим:


00110
00110
00000

Мы можем выбрать k = 2. Затем, изображение дополняется.


001100
001100
000000
000000

Видно, что его можно сжать для k = 2.

B. Игра рядов

жадные алгоритмы Перебор реализация *1900

Армия Дейенерис Таргариен состоит из k групп, i-я из групп состоит из ai солдат. Она хочет перевезти свою армию на другой берег моря, чтобы завладеть Железным троном. Для этого она купила самолет. В самолете n рядов по 8 мест. Будем называть места соседними, если они в одном ряду и это места {1, 2}, {3, 4}, {4, 5}, {5, 6}, {7, 8}.

Ряд в самолет

Дейенерис Таргариен хочет расположить свою армию так, чтобы солдаты из разных групп не сидели на соседних местах.

Ваша задача — определить, возможно ли рассадить её армию так, чтобы условие выше выполнялось.

Входные данные

Первоя строка содержит два целых числа n и k (1 ≤ n ≤ 10000, 1 ≤ k ≤ 100) — количество рядов и количество групп солдат, соответственно.

Вторая строка содержит k целых чисел a1, a2, a3, ..., ak (1 ≤ ai ≤ 10000), где ai обозначает количество солдат в i-й группе.

Гарантируется, что a1 + a2 + ... + ak ≤ 8·n.

Выходные данные

Если возможно расположить солдат в самолете, выведите «YES» (без кавычек). В противном случае выведите «NO» (без кавычек).

Вы можете выводить каждую из букв в любом регистре.

Примечание

В первом примере Дейенерис может расположить солдат как показано на картинке.

Во втором примере невозможно рассадить солдат, так как солдат из первой группы всегда будет сидеть на соседнем месте с кем-то из второй группы.

В третьем примере Дейенерис может расположить первую группу на местах (1, 2, 7, 8), а второю группу — на оставшиеся места.

В четвертом примере она может расположить первые две группы на места (1, 2) и (7, 8), третью группу на место (3), а четвертую группу — на места (5, 6).

E. Мать драконов

meet-in-the-middle графы математика Перебор *2700

В Королевстве Ланнистеров n замков и несколько стен, соединяющих два замка, никакие два замка не соединены более, чем одной стеной, ни одна стена не соединяет замок с собой.

Сир Джейме Ланнистер узнал, что Дейенерис Таргариен собирается атаковать его королевство. Он хочет защитить свои владения. У него есть k литров странной жидости. Он хочет распределить эту жидкость между замками так, чтобы каждый замок содержал некоторое количество жидкости (возможно, нулевое или нецелое количество литров). После этого стабильность стены, соединяющей замки a и b, содержащие x и y литров жидкости, соответственно, равна x·y.

Ваша задача — найти максимальную возможную сумму стабильностей стен, которую Сир Джейме Ланнистер сможет достичь

Входные данные

Первая строка содержит два целых числа n и k (1 ≤ n ≤ 40, 1 ≤ k ≤ 1000).

Далее следует n строк. В i-й из них содержится n целых чисел ai, 1, ai, 2, ..., ai, n (). Если замки i и j соединены стеной, ai, j = 1. В противном случае оно равно 0.

Гарантируется, что ai, j = aj, i и ai, i = 0 для всех 1 ≤ i, j ≤ n.

Выходные данные

Выведите одно число — максимальную возможную сумму стабильностей стен, которую Сир Джейме Ланнистер сможет достичь.

Ваш ответ будет считаться правильным, если его абсолютная или относительная точность не превосходит 10 - 6.

А именно, если ваш ответ равен a, а ответ жюри равен b, то ваш ответ будет зачтен, если .

Примечание

В первом примере, если замки 1, 2, 3 содержат 0.5, 0.5, 0 литров жидкости, соответственно, ответ равен 0.25.

Во втором примере, если замки 1, 2, 3, 4 содержат 1.0, 1.0, 1.0, 1.0 литров жидкости, ответ равен 4.0.

A. Щедрый Кефа

Перебор реализация *900

Как-то у себя в чулане Кефа нашёл n шариков. Для удобства обозначим цвет i-го шарика как si — строчная буква английского алфавита. У Кефы есть k друзей. Кефин друг обидится, если получит два шарика одного цвета. Кефа хочет раздать все шарики своим друзьям. Помогите Кефе узнать, сможет ли он раздать все шарики и при этом не обидеть своих друзей — выведите «YES», в случае положительного ответа, и «NO», иначе. Обратите внимание, что Кефин друг не обидится, если не получит ни одного шарика.

Входные данные

В первой строке входных данных содержатся два числа, разделенные одним пробелом, n и k (1 ≤ n, k ≤ 100) — количество шариков и количество друзей соответственно.

В следующей строке входных данных содержится строка s — цвета шариков.

Выходные данные

Ответ на задачу — «YES» или «NO» в единственной строке без кавычек.

Вы можете выводить каждую из букв в любом регистре.

Примечание

В первом примере Кефа может отдать 1-й и 3-й шарик первому другу, а 2-й и 4-й второму.

Во втором примере Кефа вынужден отдать каждому другу шарики цвета a, но при этом один останется, значит ответ «NO».

A. Кирилл и игра

Перебор *1200

Кирилл играет в новую компьютерную игру. Он пришел в магазин зелий, где может позволить себе купить любое зелье. Каждое зелье характеризуется двумя целыми числами  — количеством опыта и стоимостью. Эффективностью зелья назовем отношение количества опыта к стоимости. Эффективность может быть нецелым числом.

Для каждой пары целых чисел a и b, таких, что l ≤ a ≤ r и x ≤ b ≤ y, в магазине есть зелье с количеством опыта a и стоимостью b (то есть всего (r - l + 1)·(y - x + 1) зелий).

Кирилл хочет купить зелье эффективности ровно k. Сможет ли он сделать это?

Входные данные

Единственная строка содержит пять целых числе l, r, x, y, k (1 ≤ l ≤ r ≤ 107, 1 ≤ x ≤ y ≤ 107, 1 ≤ k ≤ 107).

Выходные данные

Выведите «YES» без кавычек, если в магазине есть зелье с эффективностью ровно k и «NO» без кавычек в противном случае.

Вы можете выводить каждую из букв в любом регистре.

B. Интерактивный LowerBound

интерактив Перебор Теория вероятностей *2000

Это интерактивная задача.

Дан отсортированный по возрастанию односвязный список. Необходимо найти в нем минимальное число, большее или равное x.

Более формально, есть односвязный список, построенный на массиве из n элементов. Ячейка с индексом i хранит два целых числа: valuei — значение в данной ячейке, и nexti — индекс следующей ячейки односвязного списка (либо -1, если текущая ячейка последняя). Список отсортирован, то есть если nexti ≠  - 1, то valuenexti > valuei.

Вам дано количество элементов списка n, индекс его первой ячейки start и число x.

Вы можете сделать до 2000 запросов двух типов:

  • ? i (1 ≤ i ≤ n) — узнать, чему равны значение valuei и nexti,
  • ! ans — выдать ответ на задачу: минимальное число, большее или равное x, либо ! -1, в случае, когда таких чисел нет. После этого запроса необходимо завершить программу.

Напишите программу, которая решает данную задачу.

Входные данные

Первая строка входных данных содержит три целых числа n, start, x (1 ≤ n ≤ 50000, 1 ≤ start ≤ n, 0 ≤ x ≤ 109) — число элементов в списке, индекс первого элемента и число x.

Выходные данные

Чтобы вывести ответ на задачу, выведите его в формате ! ans, где ans — минимальное число в списке, большее или равное x, или -1, если такого числа нет.

Протокол взаимодействия

Чтобы задать запрос первого типа, выведите ? i (1 ≤ i ≤ n), где i — номер ячейки, про которую вы хотите узнать информацию.

После каждого запроса типа ? считайте два целых числа valuei и nexti (0 ≤ valuei ≤ 109,  - 1 ≤ nexti ≤ n, nexti ≠ 0).

Гарантируется, что если nexti ≠  - 1, то valuenexti > valuei, и что массив задает корректный односвязный список с началом в start.

Обратите внимание, что вы можете сделать не более 1999 запросов типа ?.

Если nexti =  - 1 и valuei =  - 1, это означает, что вы превысили максимальное число запросов или сделали некорректный запрос. Ваша программа должна немедленно завершиться (например, вызовом exit(0)). Вы получите вердикт «Неправильный ответ», и это будет означать, что вы превысили максимальное число запросов или задали некорректный запрос. Если вы проигнорируете это, то можете получить любой вердикт, так как ваша программа продолжит читать из закрытого потока ввода.

Выше решение получит вердикт «Решение зависло», если вы не будете ничего выводить или забудете сделать операцию flush после вывода вопроса или ответа.

Чтобы выполнить операцию flush, можете использовать (сразу после вывода запроса и перевода строки):

  • fflush(stdout) в C++;
  • System.out.flush() в Java;
  • stdout.flush() в Python;
  • flush(output) в Pascal;
  • Для других языков смотрите документацию.

Формат взломов

Для взломов необходимо использовать следующий формат:

В первой строке выведите три числа n, start, x (1 ≤ n ≤ 50000, 1 ≤ start ≤ n, 0 ≤ x ≤ 109).

В следующих n строках выведите описание ячеек списка: в i-й выведите два целых числа valuei и nexti (0 ≤ valuei ≤ 109,  - 1 ≤ nexti ≤ n, nexti ≠ 0).

Данная структура должна быть корректным односвязным списком. В частности, из ячейки start должно было возможно посетить все ячейки, двигаясь в следующую ячейку nexti, а последняя ячейка end должна содержать -1 в качестве nextend.

Примечание

Информацию об односвязном списке можно узнать по ссылке

Иллюстрация массива в примере из условия. Темной рамкой выделены стартовая и конечная вершины.

B. Люба и билет

жадные алгоритмы Перебор реализация *1600

У Любы есть билет, состоящий из 6 цифр. За один ход она может выбрать цифру в любой позиции и заменить её на произвольную другую цифру.

Люба хочет узнать, какое минимальное количество цифр в билете ей необходимо изменить, чтобы он стал счастливым.

Напомним, что билет является счастливым, если сумма первых трёх его цифр равняется сумме последних трёх его цифр.

Входные данные

Во входных данных задана строка, состоящая ровно из 6 символов, являющихся цифрами от 0 до 9 — номер билета Любы. Номер билета может начинаться с цифры 0.

Выходные данные

Выведите единственное число — минимальное количество цифр, которые необходимо изменить в билете, чтобы он стал счастливым.

Примечание

В первом примере билет уже является счастливым, поэтому ответ на тест — 0.

Во втором примере можно заменить цифры 4 и 5 на два нуля и получить счастливый билет. Можно легко увидеть, что ответа меньше добиться нельзя.

В третьем примере можно заменить любой ноль на 3. Очевидно, что невозможно добиться более оптимального ответа.

A. Резюме

Перебор реализация *1500

Хидэо Кодзима вот только уволился из Конами. Сейчас он ищет себе новое место работы. Несмотря на то, что Хидэо довольно известный человек, ему все еще нужно резюме для трудоустройства.

В течение своей продолжительной карьеры Хидэо принял участие в разработке n игр. Некоторые из них вышли крайне успешными, некоторые оказались не столь качественными. Хидэо хочет удалить несколько игр (возможно ни одной) из своего резюме, чтобы произвести лучшее впечатление на работодателей. В результате в его резюме никакая неудачная игра не должна идти сразу после удачной игры.

Более формально, задан массив s1, s2, ..., sn из нулей и единиц. Ноль соответствует неуспешной игре, единица — успешной. Игры заданы в том порядке, в каком они были изданы, Хидэо не имеет права менять местами какие-либо значения. Он хочет удалить некоторые элементы так, чтобы не существовало нулевого элемента, который стоит сразу после единичного.

Кроме того, Хидэо в резюме хочет упомянуть как можно больше игр. Помогите гению узнать максимальное количество игр, которые он может оставить в своем резюме.

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 100).

Во второй строке записаны n целых чисел, разделенные пробелами, s1, s2, ..., sn (0 ≤ si ≤ 1). 0 соответствует неуспешной игре, 1 — успешной.

Выходные данные

Выведите единственное целое число — максимальное количество игр, которые Хидэо может оставить в своем резюме так, чтобы никакая неудачная игра не шла сразу после удачной игры.

B. Математическое телешоу

жадные алгоритмы Перебор *1800

Поликарп участвует в математическом телешоу. Ему предложены n задач, каждая из которых состоит из k подзадач, которые пронумерованы от 1 до k. За время tj минут он может решить подзадачу j любой из задач. Таким образом, время, которое необходимо на решение подзадачи зависит только от её номера, но не зависит от самой задачи. Поликарп может решать подзадачи в любом порядке.

За решение подзадачи произвольной задачи ему дается один балл. Таким образом, балл за задачу равен количеству её решенных подзадач. Кроме того, если Поликарп полностью решает задачу (то есть все её k подзадач), то он получает дополнительный балл. Таким образом, суммарный балл за полное решение задачи равен k + 1.

Всего у Поликарпа есть M минут. Какой наибольший балл он сможет набрать?

Входные данные

В первой строке записаны три целых числа n, k и M (1 ≤ n ≤ 45, 1 ≤ k ≤ 45, 0 ≤ M ≤ 2·109).

Следующая строка содержит k целых чисел — значения tj (1 ≤ tj ≤ 1000000), где tj — время решения j-й подзадачи в минутах для любой из задач.

Выходные данные

Выведите максимальное количество баллов, сколько сможет набрать Поликарп за M минут.

Примечание

В первом примере Поликарп может полностью справиться с первой задачей, потратив время 1 + 2 + 3 + 4 = 10 минут и еще успеть решить одну подзадачу второй задачи за одну минуту.

Во втором примере Поликарп может решить у всех пяти задач первую подзадачу, потратив на это 5·1 = 5 минут. У него еще останется 5 минут. За это время у двух задач он решит вторые подзадачи, потратив на это 2·2 = 4 минуты. Таким образом, суммарно он наберет 5 + 2 = 7 баллов.

C. Четыре отрезка

дп Перебор Структуры данных *1800

Задан массив из n целых чисел. Пусть sum(l, r) — сумма чисел на индексах с l по r не включительно (l-й элемент учитывается, r-й элемент не учитывается). Индексы l и r таковы, что 0 ≤ l ≤ r ≤ n. Индексы в массиве нумеруются с 0.

Например, если массив a = [ - 5, 3, 9, 4], то sum(0, 1) =  - 5, sum(0, 2) =  - 2, sum(1, 4) = 16, и sum(i, i) = 0 для всех i от 0 до 4.

Выберите три индекса delim0, delim1, delim2 (0 ≤ delim0 ≤ delim1 ≤ delim2 ≤ n) и поделите массив таким образом, чтобы величина res = sum(0, delim0) - sum(delim0, delim1) + sum(delim1, delim2) - sum(delim2, n) была максимальна.

Обратите внимание, что некоторые значения sum(l, r) могут соответствовать пустым отрезкам (если l = r для соответствующего отрезка).

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 5000).

Во второй строке записаны n целых чисел a0, a1, ..., an - 1 ( - 109 ≤ ai ≤ 109).

Выходные данные

Выведите три таких индекса, что величина res — максимальна. Если существует несколько ответов, выведите любой из них.

B. Tell Your World

геометрия Перебор *1600

Соедини бесчисленное количество точек линиями и достигни далёкого мира.

На плоскости находится n точек, i-я из которых находится в точке с координатами (i, yi).

Определите, возможно ли провести две параллельные и не совпадающие прямые такие, что каждая точка лежит на ровно одной из прямых, а каждая из прямых проходит через хотя бы одну точку.

Входные данные

Первая строка содержит целое число n (3 ≤ n ≤ 1 000) — количество точек.

Вторая строка содержит n целых чисел y1, y2, ..., yn ( - 109 ≤ yi ≤ 109) — вертикальные координаты точек.

Выходные данные

Выведите «Yes» (без кавычек), если можно удовлетворить всем ограничениям, и «No» иначе.

Вы можете выводить каждую из букв в любом регистре (заглавную или строчную).

Примечание

В первом примере есть пять точек: (1, 7), (2, 5), (3, 8), (4, 6) и (5, 9). Возможно провести прямую, проходящую через точки 1, 3, 5, и параллельную ей вторую, проходящую через точки 2, 4.

Во втором примере, несмотря на то, что можно провести две прямых, покрывающие все точки, их нельзя сделать параллельными.

В третьем примере невозможно выполнить оба условия одновременно.

D. Сумма медиан

Бинарный поиск Перебор реализация Структуры данных *2300

В одном небезызвестном алгоритме нахождения k-порядковой статистики нужно разбить все элементы на пятерки подряд идущих элементов и найти медиану каждой пятерки. Медианой называют средний элемент отсортированного массива (для пятерки — это третий по величине элемент). Для оценки скорости работы этого алгоритма на современной видеокарте требуется уметь находить сумму медиан в каждой пятерке упорядоченного множества.

Суммой медиан отсортированного k-элементного множества S = {a1, a2, ..., ak}, где a1 < a2 < a3 < ... < ak, будем называть

Оператор обозначает взятие остатка, то есть обозначает остаток при делении x на y.

Для проведения нагрузочного тестирования потребовалось быстро вычислять сумму медиан для изменяющегося множества.

Входные данные

В первой строке задано число n (1 ≤ n ≤ 105) — количество операций, производимых с множеством.

Далее в каждой из n строк описана одна из трех операций:

  • add x — добавить в множество элемент x;
  • del x — удалить из множества элемент x;
  • sum — найти сумму медиан множества.

Для любой операции add x верно, что элемент x непосредственно перед операцией не входит в множество.

Для любой операции del x верно, что элемент x непосредственно перед операцией входит в множество.

Все числа во входных данных — положительные целые числа, не превосходящие 109.

Выходные данные

Для каждой операции sum выведите на отдельной строке сумму медиан текущего множества. Если множество пусто, то выведите 0.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout (также вы можете использовать спецификатор %I64d).

A. Точки в пятимерном пространстве

геометрия математика Перебор *1700

Дано множество, состоящее из n точек в пятимерном пространстве. Точки пронумерованы от 1 до n. Никакие две точки не совпадают.

Назовем точку a плохой, если существуют две разные точки b и c из данного множества, не совпадающие с a, такие что угол между векторами и острый (строго меньше ). Иначе, назовем точку хорошей.

Угол между векторами и в пятимерном пространстве определен как , где  — скалярное произведение и  — длина вектора .

Выведите индексы всех хороших точек в порядке возрастания.

Входные данные

Первая строка входных данных содержит одно целое число n (1 ≤ n ≤ 103) — количество точек.

Следующие n строк содержат по пять целых чисел ai, bi, ci, di, ei (|ai|, |bi|, |ci|, |di|, |ei| ≤ 103) — координаты i-й точки. Все точки различны.

Выходные данные

Выведите число k — количество хороших точек.

В следующих k строках выведите индексы хороших точек в возрастающем порядке.

Примечание

В первом примере, первая точка образует угол ровно со всеми другими парами точек, поэтому она является хорошей.

Во втором примере точки лежат в плоскости cd и выглядят так:

Видно, что все углы острые, поэтому ни одна точка не является хорошей.

E. Выборы

битмаски бпф математика Перебор разделяй и властвуй *2800

В Берляндии приближаются президентские выборы! Каждый с нетерпением ожидает этого события!

В Берляндии есть n жителей и три кандидата — Алексей, Борис и Владимир. Так как выборы определят будущее страны на много лет, каждый из n жителей выберет один из шести возможных порядков на кандидатах случайно, равновероятно и независимо от остальных жителей.

Для увеличения прозрачности процесса выборов правительство разработало функцию (т.е. функция принимает n булевых аргументов и возвращает булевый результат). Функция удовлетворяет следующему условию: f(1 - x1, 1 - x2, ..., 1 - xn) = 1 - f(x1, x2, ..., xn).

Будет проведено три раунда выборов между каждой парой кандидатов: Алексеем и Борисом, Борисом и Владимиром, Владимиром и Алексеем. В каждом раунде xi будет равно 1, если i-й житель предпочитает первого кандидата второму (т.е. в его списке предпочтений первый кандидат находится раньше второго), и 0 иначе. После этого определяется величина y = f(x1, x2, ..., xn). Если y = 1, то первый кандидат считается победителем этого раунда, иначе, если y = 0, второй считается победителем раунда.

Определим вероятность того, что есть кандидат, победивший в двух раундах, p. p·6n всегда целое число. Выведите это число по модулю 109 + 7 = 1 000 000 007.

Входные данные

Первая строка содержит число n (1 ≤ n ≤ 20).

Следующая строка содержит строку длины 2n из нулей и единиц, представляющую функцию f. Определим bk(x) как k-й бит x. Тогда i-й символ строки есть f(b1(i), b2(i), ..., bn(i)) (символы строки нумеруются с нуля).

Гарантируется, что f(1 - x1, 1 - x2, ..., 1 - xn) = 1 - f(x1, x2, ..., xn) для всех значений x1, x2, ldots, xn.

Выходные данные

Одно число — ответ на задачу.

Примечание

В первом примере f(x1, x2, x3) = x1, т.е. результат полностью определятся первым жителем. Тогда первый кандидат в порядке предпочтений первого жителя победит в двух турах. Следовательно, p = 1 и ответ на задачу 1·63 = 216.

A. Цифры

математика Перебор реализация *2500

Джон задал Джеку очень сложную задачу. Он написал огромное положительное число A0 на кусочек бумаги. Это число не превосходит 10200000. На каждом шагу Джек может написать знаки ' + ' между некоторыми цифрами текущего числа (возможно, ни одного) и вычислить сумму выражения. Затем он может выполнить такую же операцию над получившейся суммой, и так далее. Получившиеся суммы обозначаются A1, A2 и так далее. Его задача состоит в том, чтобы в итоге получить число из одной цифры.

Проблема в том, что на кусочке бумаги не так уж и много места. Там осталось место только для трех строчек, поэтому Джек не может сделать больше трех операций. Он хочет использовать всю бумагу, поэтому он должен выполнить ровно три операции.

Джек не может добавлять лидирующие нули к промежуточным результатам, но он может писать знак ' + ' перед цифрами 0. Например, если текущее число равно 1000100, то 10 + 001 + 00 является корректным шагом, результат которого равняется 11.

Входные данные

Первая строка содержит одно целое число N (1 ≤ N ≤ 200000) — число цифр в A0.

Вторая строка содержит целое число A0 из N цифр без лидирующих нулей.

Выходные данные

Выведите ровно три строки. Каждая строка будет шагом, выполненным Джеком. Результатом третьего шага должно быть однозначное число.

Каждый шаг должен состоять из цифр и знаков ' + '. Шаги не должны содержать несколько знаков ' + ' подряд, пробелов, а также знаков ' + ' перед первой и после последней цифры. Кроме того, они должны быть арифметически согласованными.

Возможно, что решение не единственно. В таком случае, выведите любое из них.

Примечание

В первом примере Джек не может нигде поставить знак ' + ', поэтому он просто пишет 1 в каждой из строк и решает задачу. В этом случае решение единственно.

Во втором примере Джек сначала пишет знаки ' + ' между каждой парой последовательных цифр, получая результат 5 + 8 + 0 + 6 = 19. Он делает то же на втором шаге, получая 1 + 9 = 10. Затем он пишет 1 + 0 = 1, поэтому после трех шагов результат равен 1 и его решение корректно.

I. Брачное агенство

графы Деревья Перебор поиск в глубину и подобное *2300

Эта история происходит в городе BubbleLand. В этом городе есть n домов. В каждом из этих n домов живет мальчик или девочка. В этом городе люди действительно любят числа, и у каждого есть свое любимое число f. Это означает, что мальчик или девочка, живущие в городе в i-м доме, имеют свое любимое число, равное fi.

Дома пронумерованы числами от 1 до n.

Дома соединены n - 1 двунаправленными дорогами, от любого дома возможно добраться до любого другого. Между каждой парой домов есть ровно один путь.

Новое брачное агенство открыло свои офисы в этом странном городе, и жители были восхищены. Они сразу же отправили q запросов в агенство, каждый запрос был в следующем формате:

  • a b — спрашивает, сколько есть способов выбрать пару (мальчик и девочка) такую, что они имеют одинаковое любимое число и живут в домах, находящимся на уникальном пути от дома a до дома b.

Помогите брачному агенству ответить на запросы и расширить их бизнес.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 105) — число домов в городе.

Вторая строка содержит n целых чисел, i-е из этих чисел равно 1, если в i-м доме живет мальчик, и 0, если в i-м доме живет девочка.

Третья строка содержит n целых чисел, где i-е число равно любимому числу fi (1 ≤ fi ≤ 109) девочки или мальчика, живущих в i-м доме.

Следующие n - 1 строк содержат информацию о дорогах, i-я из них содержит два целых числа ai и bi (1 ≤ ai, bi ≤ n), которые означают, что есть дорога между этими двумя домами. Гарантируется, что от любого дома можно добраться до любого другого по дорогам.

Следующая строка содержит одно целое число q (1 ≤ q ≤ 105) — число запросов.

Каждая из следующих q строк описывает запрос и содержит два целых числа a и b (1 ≤ a, b ≤ n).

Выходные данные

Для каждого из q запросов выведите единственное число — ответ на этот запрос.

Примечание

В первом вопросе на пути от дома 1 до дома 3 потенциальными парами являются (1, 3) и (6, 3).

Во втором вопросе на пути от дома 7 до дома 5 потенциальными парами являются (7, 6), (4, 2) и (4, 5).

A. Дробь

Конструктив математика Перебор *800

Петя увлекается математикой, и больше всего в математике ему нравятся дроби. Недавно он узнал, что дробь называется правильной, если её числитель меньше знаменателя (a < b), и, что дробь называется несократимой, если её числитель и знаменатель взаимно просты (у них нет положительных общих делителей кроме 1).

На досуге Петя придумывает правильные несократимые дроби и переводит их в десятичные с помощью калькулятора. Один раз Петя перепутал знак деления (÷) и знак сложения ( + ) и вместо желаемой десятичной записи дроби получил сумму числителя и знаменателя, которая оказалась равна n.

Петя захотел восстановить исходную дробь, но понял, что это не всегда возможно сделать однозначно. Поэтому он решил найти наибольшую правильную несократимую дробь , сумма числителя и знаменателя которой равна n. Помогите Пете справиться с этой задачей.

Входные данные

В единственной строке ввода находится целое число n (3 ≤ n ≤ 1000) — сумма числителя и знаменателя искомой дроби.

Выходные данные

Выведите через пробел два целых положительных числа a и b — числитель и знаменатель максимальной подходящей правильной несократимой дроби.

A. Дневник Тома Реддла

Перебор реализация Строки *800

Гарри Поттер стремится уничтожить крестражи Сами-Знаете-Кого. Первый крестраж, о котором Гарри узнал из Тайной Комнаты — это дневник Тома Реддла. Он был у Джинни и заставил её открыть Тайную Комнату. Гарри хочет узнать, как много разных людей видели дневние, чтобы убедиться, что они не находятся под его влиянием.

У него есть n имён людей, которые видели дневник в порядке, в котором они читали его. Гарри хочет для каждого человека узнать, видел ли он дневник ранее.

Формально, для имени si в i-й строке, выведите «YES» (без кавычек) если существует индекс j, такой что si = sj и j < i, иначе выведите «NO» (без кавычек).

Входные данные

В первой строке ввода содержится целое число n, (1 ≤ n ≤ 100) — количество имён в списке.

Затем следуют n строк, в каждой из которых содержится имя si, состоящее из строчных букв английского алфавита. Длина каждой строки находится в пределах от 1 до 100.

Выходные данные

Выведите n строк, в каждой из которых выведите «YES» или «NO» (без кавычек), в зависимости от того, встречалось ли это имя ранее.

Вы можете вывести любую букву как заглавной, так и строчной.

Примечание

В примере 1 для i = 5 существует j = 3 такое, что si = sj и j < i, поэтому ответ для i = 5 равен «YES».

B. Кольцо Марвала Мракса

дп Перебор Структуры данных *1500

Профессор Дамблдор помогает Гарри уничтожать крестражи. Он отправился в Дом Мраксов, так как догадывался, что там может находиться крестраж. Профессор заметил кольцо Марвала Мракса и определил, что это крестраж. Несмотря на то, что профессор Дамблдор уничтожил его, он оказался проклят. Профессор Снегг помогает Дамблдору снять проклятие. Для этого он собирается дать Дамблдору ровно x капель зелья, которое он приготовил.

Значение x вычисляется как максимум p·ai + q·aj + r·ak для данных p, q, r и массива a1, a2, ... an при условии, что 1 ≤ i ≤ j ≤ k ≤ n. Помогите Снеггу определить x. Учтите, что x может быть отрицательным, в таком случае Снегг не сможет спасти Дамблдора.

Входные данные

В первой строке находятся 4 целых числа n, p, q, r ( - 109 ≤ p, q, r ≤ 109, 1 ≤ n ≤ 105).

Во второй строке заданы n целых чисел a1, a2, ... an ( - 109 ≤ ai ≤ 109), разделённых пробелами.

Выходные данные

Выведите максимальное значение выражения p·ai + q·aj + r·ak с учётом 1 ≤ i ≤ j ≤ k ≤ n.

Примечание

В первом примере можно выбрать i = j = k = 5, получив ответ 1·5 + 2·5 + 3·5 = 30.

Во втором примере можно выбрать i = j = 1, k = 5, получив ответ 12.

A. Теория множеств

Конструктив Перебор *1600

Маша и Гриша очень любят изучать свойства множеств натуральных чисел.

В некоторый момент Гриша выписал на доске множество A, состоящее из n различных положительных целых чисел ai, и предложил Маше подумать над следующей задачкой: придумать множество B, состящее из n положительных целых чисел bj, такое, что все n2 чисел, которые получаются сложением ai и bj для всех возможных пар i и j — различны. При этом и Гриша и Маша не любят больших чисел, поэтому все числа в множестве A не превышают 106, то же свойство должно выполняться и для чисел из множества B.

Помогите Маше построить искомое множество B.

Входные данные

Входные данные содержат несколько тестовых наборов. В первой строке задано количество тестов t (1 ≤ t ≤ 100).

Каждый из тестов описывается следующим образом: в первой строке описания теста содержатся одно число n — размер множества A (1 ≤ n ≤ 100).

В следующей строке содержатся n чисел ai — числа, принадлежащие множеству A (1 ≤ ai ≤ 106).

Выходные данные

Для каждого теста в отдельной строке сначала выведите ответ на него:

  • NO, если не существует ни одного способа построить множество B, чтобы выполнить условие задачи.
  • YES, если способ решить задачу есть. В этом случае в следующей строке выведите n различных целых положительных чисел bj — элементы множества B (1 ≤ bj ≤ 106). Если подходящих ответов несколько, выведите любой из них.

A. k-Округление

математика Перебор теория чисел *1100

Для заданного натурального числа n его k-округлением назовём такое минимальное целое положительное число x, что x заканчивается на k или более нулей в системе счисления по основанию 10 и одновременно делится на n.

Например, 4-округлением числа 375 будет число 375·80 = 30000. Число 30000 — минимальное такое число, которое заканчивается на 4 или более нуля и делится на 375.

Напишите программу, которая осуществляет k-округление числа n.

Входные данные

В единственной строке входных данных записаны два целых числа n и k (1 ≤ n ≤ 109, 0 ≤ k ≤ 8).

Выходные данные

Выведите k-округление числа n.

B. Какой этаж?

Перебор реализация *1500

В доме Поликарпа на каждом этаже одинаковое количество квартир. К сожалению, Поликарп не помнит, сколько именно квартир на каждом этаже, зато он помнит, что квартиры пронумерованы от 1 снизу вверх. Таким образом, в нумерации сначала идут квартиры первого этажа, затем второго и так далее. Поликарп не помнит точное количество квартир в доме, вы можете считать дом бесконечно высоким (то есть содержащим бесконечное количество квартир). Обратите внимание, этажи нумеруются с 1.

Про некоторые квартиры Поликарп помнит, на каких этажах они расположены. Гарантируется, что воспоминания Поликарпа непротиворечивы. То есть существует дом с одинаковым количеством квартир на каждом этаже, такой что квартиры из воспоминания Поликарпа имеют те этажи, которые он запомнил.

Может ли он на основании этой информации указать точный этаж для квартиры n?

Входные данные

В первой строке записаны два целых числа n и m (1 ≤ n ≤ 100, 0 ≤ m ≤ 100), где n — номер квартиры, этаж которой надо определить, и m — количество квартир в воспоминании Поликарпа.

Далее следуют m строк, которые описывают воспоминание Поликарпа: каждая из этих строк содержит пару чисел ki, fi (1 ≤ ki ≤ 100, 1 ≤ fi ≤ 100), которая означает, что квартира ki находится на этаже fi. Все значения ki — различны.

Гарантируется, что воспоминания Поликарпа непротиворечивы.

Выходные данные

Выведите номер этажа, на котором расположена квартира n, если его номер однозначно определяется по воспоминанию Поликарпа. Выведите -1, если однозначно восстановить номер этажа невозможно.

Примечание

В первом примере 6-я квартира находится на 2-м этаже, а 7-я уже на 3-м, следовательно, 6-я квартира последняя на своём этаже, а всего на этаже 3 квартиры. Таким образом, 10-я квартира находится на 4-м этаже.

Во втором примере на каждом этаже может быть 3 или 4 квартиры, поэтому мы не можем узнать, на каком этаже находится 8-я квартира.

B. Ленивый охранник

геометрия математика Перебор *1000

Ваш друг недавно устроился работать в охранную компанию. Каждый охранник в компании отвечает за область города из ровно N кварталов, причем область он может выбирать сам. Это значит, что вашему другу предстоит патрулировать вдоль периметра какой-нибудь области площадью ровно N кварталов. Он хочет облегчить себе жизнь, и просит вас помочь ему найти кратчайший маршрут для патрулирования. Город можно считать бесконечной квадратной сеткой.

Входные данные

Входной файл содержит единственное число N (1 ≤ N ≤ 106) — число кварталов, которое должен окружать маршрут.

Выходные данные

Минимальный периметр, которого можно достичь.

Примечание

Вот некоторые из возможных маршрутов для примеров:

E. Длинная последовательность

математика матрицы Перебор *2700

Будем называть рекуррентной двоичной последовательностью бесконечную последовательность (a0, a1, ...) из нулей и единиц, задающуюся соотношением:

an = c1·an - 1 + c2·an - 2 + ... + ck·an - k (mod 2), 
где — заранее фиксированные коэффициенты и n ≥ k. Будем считать, что не все ci нули.

Заметим, что такая последовательность однозначно восстанавливается из любого своего k-кортежа {as, as + 1, ..., as + k - 1}, поэтому в частности она является периодической. Более того, если в кортеже содержатся только нули, тогда и сама последовательность состоит лишь из нулей, что не очень-то интересно. В противном случае, период последовательности не превосходит 2k - 1, так как любой k-кортеж однозначно определяет следующий элемент, и существует всего 2k - 1 ненулевых k-кортежей. Будем называть последовательность длинной, если ее минимальный период в точности равен 2k - 1. Вам требуется по данному k предъявить длинную последовательность или определить, что ее не существует.

Входные данные

В единственной строке содержится одно целое число k (2 ≤ k ≤ 50).

Выходные данные

Если для данного k не существует длинной последовательности, выведите одно число «-1» (без кавычек). Иначе первая строка вывода должна содержать коэффициенты: c1, c2, ..., ck. Вторая строка должна содержать первые k элементов последовательности: a0, a1, ..., ak - 1. Все числа (элементы и коэффициенты) должны быть 0 или 1, причем хотя бы один коэффициент должен быть 1.

Если решений несколько, выведите любое.

Примечание

1. В первом случае: c1 = 1, c2 = 1, поэтому an = an - 1 + an - 2 (mod 2). Получается последовательность:

с периодом 3 = 22 - 1.

2. В втором случае: c1 = 0, c2 = 1, c3 = 1, поэтому an = an - 2 + an - 3 (mod 2). Последовательность имеет вид:

ее период равен 7 = 23 - 1.

Периоды окрашены в разные цвета.

A. Квази-палиндром

Перебор реализация *900

Назовем число квази-палиндромным, если добавление некоторого количества ведущих нулей (возможно нулевого) делает из него строку-палиндром.

Строка t называется палиндромом, если она одинаково читается как слева направо, так и справа налево.

Например, числа 131 и 2010200квази-палиндромные, они могут быть преобразованы в строки "131" и "002010200", соответственно, которые являются палиндромами.

Задано целое число x Проверьте, является ли оно квази-палиндромным.

Входные данные

В первой строке записано одно целое число без ведущих нулей x (1 ≤ x ≤ 109).

Выходные данные

Выведите «YES», если число xквази-палиндромное. Иначе выведите «NO» (без кавычек).

B. Сплав каякеров

жадные алгоритмы Перебор сортировки *1500

Вадим очень любит путешествовать. Недавно он услышал о том, что в его городке появился клуб каякеров, и его очень заинтересовал этот вид путешествия. Поэтому Вадим присоединился к группе каякеров и готов отправиться в сплав.

Сейчас группе нужно распределиться по каякам. В группе n человек (включая Вадима), и у них есть ровно n - 1 двухместных и 2 одноместных каяка. Вес i-го человека равен wi, и вес очень важен в сплаве — если разница весов двух человек, сидящих в двухместном каяке, слишком велика, то каяк становится неустойчивым и может перевернуться. И, конечно же, каякеры хотят распределиться по плавсредствам так, чтобы этого не произошло.

Формально, неустойчивость одноместного каяка всегда равна 0, а неустойчивость двухместного каяка равна модулю разности между весами людей, которые заняли этот каяк. Неустойчивость всей группы — это сумма неустойчивостей всех каяков.

Помогите группе определить минимально возможную суммарную неустойчивость!

Входные данные

В первой строке задано одно целое число n (2 ≤ n ≤ 50).

Во второй строке заданы n целых чисел w1, w2, ..., w2n, где wi — вес человека i (1 ≤ wi ≤ 1000).

Выходные данные

Выведите минимально возможную неустойчивость группы.

B. Поликарп и буквы

Перебор реализация Строки *1000

Поликарп любит строчные буквы и недолюбливает прописные. Однажды он получил строку s, состоящую только из строчных и прописных букв английского алфавита.

Пусть A — множество индексов строки. Назовем его симпатичным, если:

  • в индексах из A стоят различные строчные буквы;
  • в строке нет таких прописных (заглавных) букв, которые расположены между элементами из A (иными словами, не существует такого j, что s[j] — прописная буква и a1 < j < a2 для некоторых a1 и a2 из A).

Напишите программу, которая найдет наибольшее количество элементов симпатичного множества индексов.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 200) — длина строки s.

Вторая строка — это строка s, состоящая из строчных и прописных букв английского алфавита.

Выходные данные

Выведите наибольшее количество элементов симпатичного множества индексов для строки s.

Примечание

В первом примере искомыми позициями могут являться позиции 6 и 8 или позиции 7 и 8. В позициях 6 и 7 стоит буква 'a', в позиции 8 стоит буква 'b'. Пара позиций 1 и 8 не подходит, так как между ними стоит прописная буква 'B'.

Во втором примере искомыми позициями, например, являются позиции 7, 8 и 11. Существуют и другие способы выбрать симпатичное множество, состоящее из трёх элементов.

В третьем примере строка s не содержит строчных букв, следовательно, ответ равен 0.

E. Шестнадцатеричная дислексия

битмаски графы дп Перебор *3300

Копирование больших шестнадцатеричных строк (то есть чисел в системе счисления по основанию 16) вручную может вызывать много ошибок, но это не останавливает людей. Вы обнаружили ошибку в программе, которая, скорее всего, была вызвана ошибкой при копировании такой строки. Вы думаете, что тот, кто копировал строку, не изменил ни одной цифры, и не изменил длину, но, возможно, перепутал порядок цифр. Например, если исходная строка была 0abc, то, возможно, она была изменена в a0cb или 0bca, но не в abc или 0abb.

К сожалению, у вас нет доступа ни к изначальной строке, ни к скопированной, но вы знаете длину этих строк и модуль их разницы (как чисел). Вам будет дана эта разница как шестнадцатеричная строка S, которая дополнена ведущими нулями до длины изначальной (и скопированной) строки. Определите наименьшее возможное численное значение исходной строки.

Входные данные

В единственной строке содержится шестнадцатеричная строка S, записанная только цифрами от 0 до 9 и строчными латинскими буквами от a до f, длиной не более 14. Как минимум одна из цифр не равна нулю.

Выходные данные

Если описанное невозможно, выведите «NO» (без кавычек).

Иначе выведите минимальную шестнадцатеричную строку, соответствующую минимально возможному исходному числу, включая все ведущие нули, дополняющие его до нужной длины. Выводите число в том же формате, что и во входных данных.

Примечание

Численное значение шестнадцатеричной строки вычисляется как сумма произведений каждой из цифр на последовательные степени числа 16, начиная с самой правой цифры, которая умножается на 160. Шестнадцатеричные цифры, большие 9, обозначаются строчными буквами: a = 10, b = 11, c = 12, d = 13, e = 14, f = 15.

Например, численное значение 0f1e равно 0·163 + 15·162 + 1·161 + 14·160 = 3870, численное значение 00f1 равно 0·163 + 0·162 + 15·161 + 1·160 = 241, численное значение 100f равно 1·163 + 0·162 + 0·161 + 15·160 = 4111. Так как 3870 + 241 = 4111 и 00f1 — перестановка 100f, то 00f1 — корректный ответ на второй пример.

F. Яичная рулетка

meet-in-the-middle битмаски математика Перебор разделяй и властвуй *3300

В Яичную рулетку играют два игрока. Изначально 2R сырых яйца и 2C вареных яйца кладутся в коробку в случайном порядке. Яйца все еще в скорлупе, поэтому невозможно отличить сырое яйцо от вареного. По одному игроки выбирают одно яйцо и разбивают его о свой лоб. Если яйцо было вареное, ничего особенного не произойдет, но если оно было сырое, то оно все испачкает. Такое продолжается до тех пор, пока один из игроков не разобьет R сырых яиц. В этот момент игра заканчивается, этот игрок объявляется проигравшим, а его соперник — победителем.

Порядок, в котором ходят игроки, может быть представлен как строка из букв «A» и «B», где i-й символ обозначает игрока, который будет выбирать i-е яйцо. Традиционно игроки ходят по очереди, то есть, они следуют порядку «ABABAB...». Это не очень честно, так как второй игрок будет выигрывать чаще, чем первый. Мы хотим, чтобы вы нашли более честный порядок ходов. Определим нечестность порядка как модуль разности между вероятностью победы первого игрока и вероятностью победы второго игрока. Нам интересны порядки, в которых нечестность является минимально возможной. Мы считаем порядок корректным, если в нем одинаковое количество букв «A» и «B».

Вам будет дана строка S длины 2(R + C), содержащая только символы «A», «B» и «?». Порядок подходит под S, если он отличается от S только в позициях, где S содержит «?». Среди корректных порядков, минимизирующих нечестность, сколько подходят под S?

Входные данные

Первая строка содержит целые числа R и C (1 ≤ R, C ≤ 20, R + C ≤ 30).

Вторая строка содержит строку S, имеющею длину 2(R + C) и состоящую только из символов «A», «B», «?».

Выходные данные

Выведите количество корректных порядков, которые минимизируют нечестность и подходят под S.

Примечание

В первом тесте из примере минимальная нечестность равна 0, а порядки, минимизирующие ее, это «ABBA» и «BAAB», но ни один из них не подходит под S. Заметьте, что порядок «ABBB» также имеет нечестность 0, но он не является корректным, так как не содержит одинаковое число «A» и «B».

Во втором примере единственно подходящим порядком является «BBAAABABABBA».

A. Разблокируйте

Перебор реализация Строки *900

По мере развития технологий производители стараются сделать экран разблокировки телефона настолько удобным, насколько возможно. Чтобы разблокировать новый телефон, домашнему щенку Аркадия Му-му надо пролаять пароль. Пароль представляется телефоном в виде строки из двух строчных латинских букв.

Каштанка, заклятый враг Му-му, хочет разблокировать ее телефон, чтобы получить некоторую важную информацию. Однако, она может пролаять лишь n различных слов, каждое из которых может быть представлено как строка из двух строчных латинских букв. Каштанка хочет пролаять несколько слов (не обязательно различных) одно за другим так, чтобы произнести строку, которое содержит пароль как подстроку. Определить, возможно разблокировать телефон таким образом, или нет.

Входные данные

Первая строка содержит две строчные латинские буквы — пароль на телефоне.

Вторая строка содержит одно целое число n (1 ≤ n ≤ 100) — количество слов, которое знает Каштанка.

Следующие n строк содержат по две строчные латинские буквы каждая, описывающие слова, известные Каштанке. Гарантируется, что эти слова различны.

Выходные данные

Выведите «YES», если Каштанка может пролаять несколько слов друг за другим так, чтобы получившаяся строка содержала пароль, и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (заглавную или строчную).

Примечание

В первом примере пароль равен «ya», Каштанка может пролаять «oy», затем «ah» и затем «ha», образовав в итоге строку «oyahha», которая содержит пароль. Поэтому ответ «YES».

Во втором примере Каштанка не может получить строку, содержащую пароль как подстроку. Обратите внимание, она может пролаять, например, «ht», затем «tp», получив «http», но эта строка не содержит «hp» как подстроку.

В третьем примере строка «hahahaha» содержит «ah» как подстроку.

C. Кволы

битмаски дп Конструктив Перебор *1500

Снарк и Филипп готовят задачи на предстоящие кволы. У них есть банк из n задач, они хотят выбрать из него любое непустое подмножество задач.

На кволах будет участвовать k опытных команд. Для каждой задачи известно, для каких из этих команд эта задача баян, то есть, про каждую задачу и каждую команду известно, знает ли эта команда эту задачу, или нет.

Определите, можно ли выбрать подмножество задач так, чтобы каждая из команд не знала хотя бы половину задач.

Входные данные

Первая строка содержит два целых числа n и k (1 ≤ n ≤ 105, 1 ≤ k ≤ 4) — число задач и число опытных команд на кволах. Следующие n строк содержат по k чисел, каждое из которых либо 0, либо 1. j-е число в i-й строке равно 1, если j-я команда знает i-ю задачу, и 0 иначе.

Выходные данные

Выведите «YES» (без кавычек), если можно выбрать непустой набор задач, удовлетворяющий ограничениям, и «NO» в противном случае.

Вы можете выводить каждую букву как заглавной, так и строчной («YeS» и «yes» можно вывести вместо «YES»).

Примечание

В первом примере нельзя выбрать набор задач, так как первая команда знает все задачи.

Во втором примере можно взять первую и третью задачи.

D. Огромные строки

битмаски дп Перебор реализация Строки *2200

Дано n строк s1, s2, ..., sn, состоящих из символов 0 и 1. Далее m раз создается новая строка как конкатенация уже имеющихся. Формально, на i-м шаге конкатенация saisbi записывается в новую строку sn + i (нумерация шагов ведется с 1). После каждой операции вам нужно найти максимальное положительное целое число k такое, что в полученной строке встречаются все возможные строки из 0 и 1 длины k (а таких различных строк 2k) как подстроки. Если такого k не существует, выведите 0.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 100) — количество строк. Следующие n строк содержат строки s1, s2, ..., sn (1 ≤ |si| ≤ 100) по одной в строке. Суммарная длина строк не превосходит 100.

Следующая строка содержит число m (1 ≤ m ≤ 100) — количество операций. За ней следуют m строк, содержащих по два целых числа ai и bi (1 ≤ ai, bi ≤ n + i - 1) — номера строк, образующих новую строку sn + i.

Выходные данные

Выведите m строк, содержащие по одному целому числу — ответы на запросы после операций.

Примечание

В первой операции создается строка "0110". Для k = 1 две возможные бинарные строки длины k — это "0" и "1", они обе являются подстроками новой строки. Для k = 2 и больше существуют строки длины k, не встречающиеся в получившейся строке (для k = 2 такая строка — это "00"). Поэтому ответ равен 1.

Во второй операции создается строка "01100". Теперь присутствуют все строки длины k = 2.

В третьей операции создается строка "1111111111". В ней нет нулей, поэтому ответ равен 0.

A. Художественное занятие

Перебор реализация *1100

Камень... Бумага!

После того как Карен придумала детерменированную стратегию для победы (поражения?) в игру камень-ножницы-бумага, её брат, Коёми, придумал новую игру в качестве замены. Правила этой игры таковы.

В начале выбирается целое число n. Коёми и Карен независимо выбирают по n различных положительных целых чисел, которые обозначаются как x1, x2, ..., xn и y1, y2, ..., yn, соответственно. Затем они показывают друг другу свои последовательности и меняют их до тех пор, пока все 2n чисел не станут различными. Затем две последовательности фиксируются и больше не меняются.

После этого они считают число упорядоченных пар (i, j) (1 ≤ i, j ≤ n), таких, что величина xi xor yj равна одному из 2n целых чисел. Здесь xor означает побитовое сложение по модулю 2 двух целых чисел. Эта операция часто обозначается как ^ или xor в языках программирования.

Карен выигрывает, если число таких пар чётно, в противном случае выигрывает Коёми. Определите победителя.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 2 000) — длина обеих последовательностей.

Во второй строке через пробел заданы n целых чисел x1, x2, ..., xn (1 ≤ xi ≤ 2·106) — последовательность, выбранная Коёми.

В третьей строке через пробел заданы n целых чисел y1, y2, ..., yn (1 ≤ yi ≤ 2·106) — последовательность, выбранная Карен.

Гарантируется, что данные 2n чисел попарно различны, то есть не существует пары (i, j) (1 ≤ i, j ≤ n), такой, что выполняется хотя бы одно: xi = yj; i ≠ j и xi = xj; i ≠ j и yi = yj.

Выходные данные

Выведите имя победителя: «Koyomi» или «Karen» (без кавычек). Обратите внимание на регистр букв.

Примечание

В первом тестовом примере 6 пар удовлетворяют условию: (1, 1), (1, 2), (2, 1), (2, 3), (3, 2) и (3, 3). Карен победит, так как 6 — чётное число.

Во втором тестовом примере существует 16 таких пар, поэтому Карен выиграет снова.

D. Постоянная вездесущесть

графы Перебор поиск в глубину и подобное *2800

Основная предпосылка справедливости не должна быть правильной, но должна быть сильной. Вот почему справедливость всегда побеждает.

Пчела Циндерсворм. Коёми с ним знаком.

Пчёлы, как известно, живут на дереве. Точнее в полном двоичном дереве с n вершинами, пронумерованными от 1 до n. Вершина с номером 1 является корнем, а предок i-й (2 ≤ i ≤ n) вершины имеет номер . Учтите, что все рёбра в дереве неориентированные.

Коёми добавил m дополнительных неориентированных рёбер, делая дом пчёл сложнее. А вам нужно посчитать количество простых путей в полученном графе, по модулю 109 + 7. Простой путь это последовательность из вершин, в которой каждые две соседние вершины соединены ребром, а также рёбер, их соединяющих. Кроме того, простой путь не содержит никакую вершину более одного раза. Учтите, что путь из одной вершины также является простым путём. Обратитесь к примерам для лучшего понимания условия.

Входные данные

В первой строке содержатся два целых числа n и m (1 ≤ n ≤ 109, 0 ≤ m ≤ 4) — число вершин в дереве и число добавленных рёбер, соответственно.

В следующих m строках содержатся пары целых чисел u и v (1 ≤ u, v ≤ n, u ≠ v), которые описывают ребро, добавленное между вершинами u и v.

Учтите, что в итоговом графе могут быть кратные рёбра.

Выходные данные

Выведите единственное число — количество простых путей в итоговом графе по модулю 109 + 7.

Примечание

В первом тестовом примере простыми путями являются: (1); (2); (3); (1, 2); (2, 1); (1, 3); (3, 1); (2, 1, 3); (3, 1, 2). (Для простоты тут не указаны рёбра в пути, так как в графе нет кратных рёбер)

Во втором тестовом примере простыми путями являются: (1); (1, 2); (1, 2, 3); (1, 3); (1, 3, 2) и аналогичные пути с началами в 2 и 3. (5 × 3 = 15 в итоге.)

В третьем тестовом примере простыми путями являются: (1); (2); и любой путь из одного ребра, пройденного в каком-то направлении. (2 + 5 × 2 = 12 путей в сумме.)

A. Поиск красивых чисел

Перебор реализация *900

Дано два списка различных ненулевых цифр.

Назовем число красивым, если в его записи (в системе счисления по основанию 10) присутствует хотя бы одна цифра из первого списка и хотя бы одна цифра из второго списка. Чему равно минимальное натуральное (положительное целое) красивое число?

Входные данные

В первой строке даны числа n, m (1 ≤ n, m ≤ 9) – длины первого и второго списка соответственно.

Во второй строке через пробел даны n различных целых цифр a1, a2, ..., an (1 ≤ ai ≤ 9) – элементы первого списка.

В третьей строке через пробел даны m различных целых цифр b1, b2, ..., bm (1 ≤ bi ≤ 9) – элементы второго списка.

Выходные данные

Выведите минимальное натуральное красивое число.

Примечание

В первом примере красивыми являются числа 25, 46, 24567 и многие другие. Из них минимальным является 25. 42 и 24 не являются красивыми, так как в них отсутствуют цифры из второго списка.

Во втором примере красивыми являются все числа, в чьей записи встречаются не только цифры 9. Очевидно, минимальным из таких чисел является 1, так как это минимальное натуральное число.

D. Что-то там c xor запросами

интерактив Перебор Теория вероятностей *2000

Это интерактивная задача.

Жюри загадало некоторую перестановку p из чисел от 0 до n - 1, про которую вам известна только ее длина n. Напомним, что в перестановке все числа различны.

Пусть b — обратная к p перестановка, то есть pbi = i для всех i. Тогда единственное действие, которое вы можете выполнить — узнать xor элементов pi и bj, указав их индексы i и j (не обязательно различные). В результате запроса для индексов i и j вы получите значение , где символом обозначена операция xor. Описание операции xor вы можете найти в примечаниях.

Заметим, что некоторые перестановки могут быть неотличимы от заданной, даже если сделать все различные n2 запросов. Вам необходимо вычислить, сколько перестановок неотличимы от загаданной, а также выдать одну из таких перестановок, сделав не более 2n запросов.

Загаданная перестановка не зависит от ваших запросов.

Входные данные

В первой строке входных данных следует целое положительное число n (1 ≤ n ≤ 5000) — длина загаданной перестановки. В первую очередь ваша программа должна прочитать это число.

Выходные данные

Когда ваша программа будет готова вывести ответ, выведите три строки.

В первой строке выведите один символ «!».

Во второй строке выведите одно целое число answers_cnt — количество перестановок, неотличимых от загаданной жюри, считая загаданную.

В третьей строке выведите n целых чисел p0, p1, ..., pn - 1 (0 ≤ pi < n, все pi должны быть различны) — одну из перестановок, неотличимых от загаданной жюри.

После вывода ответа ваша программа должна завершиться.

Протокол взаимодействия

Чтобы узнать xor двух элементов, выведите строку вида «? i j», где i и j — целые числа от 0 до n - 1 — индекс элемента перестановки и индекс элемента обратной перестановки, xor-сумму которых ваша программа запрашивает. После этого выведите перевод строки и сделайте операцию flush.

После выполнения запроса ваша программа может считать целое число, равное .

Для перестановки длины n ваша программа должна сделать не более 2n запросов на xor-сумму. Обратите внимание, что вывод ответа не учитывается при подсчете количества запросов. Обратите внимание, что вы можете задать не более 2n запросов. В случае, если ваша программа сделает больше 2n запросов или сделает хотя бы один некорректный запрос, ваше решение получит вердикт «Неправильный ответ».

Если в какой-то момент ваша программа считывает -1 как ответ, она должна немедленно завершиться (например, вызовом exit(0)). Вы получите вердикт «Неправильный ответ», и это будет означать, что вы задали больше 2n запросов или задали некорректный запрос. Если вы проигнорируете это, то можете получить любой вердикт, так как ваша программа продолжит читать из закрытого потока ввода.

Выше решение получит вердикт «Решение зависло», если вы не будете ничего выводить или забудете сделать операцию flush после вывода вопроса или ответа.

Чтобы выполнить операцию flush, можете использовать (сразу после вывода запроса и перевода строки):

  • fflush(stdout) в C++;
  • System.out.flush() в Java;
  • stdout.flush() в Python;
  • flush(output) в Pascal;
  • Для других языков смотрите документацию.

Взломы

Используйте следующий формат для взломов:

n

p0 p1 ... pn - 1

Взламываемая программа не будет иметь доступа к этим данным.

Примечание

Операцией xor, или побитовое исключающее ИЛИ, называется операция над двумя целыми числами, при которой i-й разряд результата в двоичной системе счисления будет равен 1 тогда и только тогда, когда ровно у одного из двух целых чисел в i-м разряде в двоичной системе счисления стоит 1. Больше информации смотрите по ссылке.

В первом примере при p = [0, 1, 2], а значит b = [0, 1, 2], на заданные запросы у этой перестановки совпадают все значения для всех выведенных парах i, j. Кроме этой перестановки не существует других перестановок, подходящих под выданные ответы, поэтому это — ответ.

Ответы на запросы:

  • ,
  • ,
  • ,
  • ,
  • ,
  • .

В втором примере при p = [3, 1, 2, 0], а значит b = [3, 1, 2, 0], на заданные запросы у этой перестановки совпадают все значения для всех выведенных пар i, j. Однако кроме нее подходит также перестановка p = [0, 2, 1, 3], b = [0, 2, 1, 3], причем на всех n2 возможных запросов у этих двух перестановок ответы будут совпадать, а у всех остальных перестановок ответы будут другие уже на заданных запросах.

E. Награждение победителей

дп Перебор Структуры данных *2300

На днях Алексей закончил проведение соревнования по программированию для студентов из Берляндии. n студентов приняли участие в соревновании, i-й решил ai задач. Теперь необходимо наградить некоторых участников. Алексей может вручать студентам дипломы трех степеней. Каждый студент или получит один диплом какой-либо степени, или не получит диплома совсем. Пусть cntx — количество студентов, награжденные дипломом степени x (1 ≤ x ≤ 3). Должны соблюдаться следующие условия:

  • Для каждого x (1 ≤ x ≤ 3) cntx > 0;
  • Для любых двух степеней x и y cntx ≤ 2·cnty.

Конечно, есть множество способов распределить дипломы. Пусть bi — степень диплома, который получит i-й студент (или  - 1, если i-й студент останется без диплома). Также для любого x такого, что 1 ≤ x ≤ 3, пусть cx — максимальное количество задач, решенных студентом, получившим диплом степени x, а dx — минимальное количество задач, решенных студентом, получившим диплом степени x. Алексей хочет раздать дипломы таким образом, чтобы:

  1. Если студент i решил больше задач, чем студент j, то он должен быть награжден не хуже студента j (невозможно, чтобы студент j получил диплом, а i — нет, и невозможно, чтобы оба получили диплом и bj < bi);
  2. d1 - c2 должно быть максимально;
  3. Среди всех способов максимизировать предыдущее выражение d2 - c3 должно быть максимально;
  4. Среди всех способов удовлетворить предыдущие условия d3 - c - 1 должно быть максимально, где c - 1 — максимальное количество задач, решенных студентом, не получившим диплома (или 0, если все студенты получили диплом).

Помогите Алексею найти способ наградить участников!

Входные данные

В первой строке записано одно целое число n (3 ≤ n ≤ 3000).

Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 5000).

Выходные данные

Выведите n чисел. i-е число должно равняться степени диплома, который получит i-й участник (или  - 1, если он не получит никакого диплома).

Если существует несколько оптимальных решений, выведите любое из них. Гарантируется, что ответ всегда существует.

A. Дежурство по классу

математика Перебор *1200

Восьмиклассник Вова сегодня дежурит по классу. После уроков он зашёл в кабинет, чтобы вымыть доску, и обнаружил на ней число n. На вопрос о происхождении этого числа учительница математики Инна Петровна ответила Вове, что n является ответом на задание по арифметике для первоклассников. В учебнике было дано некоторое целое положительное число x. Задача состояла в том, чтобы сложить x с суммой цифр числа x, записанного в десятичной системе счисления.

Поскольку число n на доске было небольшим, Вова быстро догадался, какое число x могло быть в учебнике. Теперь ему хочется получить программу, которая будет для произвольных значений числа n искать все подходящие значения x или определять, что таких x не существует. Напишите для Вовы такую программу.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 109).

Выходные данные

В первой строке выведите одно целое число k — количество различных значений x, удовлетворяющих условию. В следующих k строках выведите сами значения по одному в строке в порядке возрастания.

Примечание

В первом примере значение x = 15 является единственным возможным вариантом: 15 + 1 + 5 = 21.

Во втором примере удовлетворяющих условию значений x не существует.

B. Никита и строка

дп Перебор *1500

Однажды Никита нашел строку, состоящую только из символов «a» и «b».

Никита считает, что строка красивая, если её можно разрезать на 3 строки (возможно, нулевой длины) так, что, не меняя порядок, 1-я и 3-я состоят только из букв «a», а 2-я только из букв «b».

Никита хочет сделать строку красивой, выкинув из нее некоторые символы (или не выкидывая их вовсе), но не меняя их порядок. Какой наибольшей длины строку он сможет получить?

Входные данные

В первой строке содержится непустая строка, длиной не более 5 000, состоящая только из строчных букв латинского алфавита «a» и «b».

Выходные данные

Выведете одно число — максимально возможную длину получившейся красивой строки.

Примечание

В первом примере строка уже красивая.

Во втором примере нужно убрать одну из букв «b», чтобы строка стала красивой.

A. Аккорд

Перебор реализация *1200

Вася учится музыке.

Он уже знает много интересного. Например, он знает, что существует 12 нот: C, C#, D, D#, E, F, F#, G, G#, A, B, H. Еще он знает, что далее ноты повторяются по циклу: за H снова идет C, а перед C стоит H. Ноту C в начале этого ряда и ноту C после H мы считаем одинаковыми и будем отождествлять. Расстояние между нотами по звукоряду измеряется в тонах: между двумя последовательными нотами ровно один полутон, то есть 0,5 тона. Расстояние берется от нижней ноты к верхней, то есть расстояние между C и E — 4 полутона, а между E и C — 8 полутонов.

Еще Вася знает, что такое аккорд. Аккорд — это неупорядоченный набор из не менее чем трех нот. Однако Вася пока разбирается лишь с трезвучиями, то есть с аккордами ровно из трех нот. Он уже различает два вида трезвучий — мажорные и минорные.

Определим мажорное трезвучие. Пусть трезвучие состоит из нот X, Y и Z. Если мы можем так упорядочить ноты, что расстояние по звукоряду между X и Y — 4 полутона, а между Y и Z — 3 полутона, то трезвучие называется мажорным. Соответственно, между X и Z образовывается интервал в 7 полутонов.

Минорное трезвучие отличается тем, что расстояние между X и Y должно быть 3 полутона, а между Y и Z — 4 полутона.

Например, трезвучие «C E G» является мажорным: между C и E — 4 полутона, а между E и G — 3. А трезвучие «C# B F» является минорным, потому что если мы упорядочим ноты как «B C# F», то между B и C# будет 3 полутона, а между C# и F — как раз 4.

Помогите Васе классифицировать трезвучие, данное ему учительницей.

Входные данные

В единственной строке через пробел записаны 3 ноты в обозначении, указанном выше.

Выходные данные

Выведите «major», если аккорд является мажорным, «minor», если минорным, и «strange», если учительница подсунула Васе какой-то странный аккорд, не являющийся ни мажорным, ни минорным. Вася обещает вам, что ответ всегда будет однозначным. То есть не бывает аккордов, являющихся одновременно мажорными и минорными.

H. Palindromic Cut

Перебор реализация Строки *1800

Kolya has a string s of length n consisting of lowercase and uppercase Latin letters and digits.

He wants to rearrange the symbols in s and cut it into the minimum number of parts so that each part is a palindrome and all parts have the same lengths. A palindrome is a string which reads the same backward as forward, such as madam or racecar.

Your task is to help Kolya and determine the minimum number of palindromes of equal lengths to cut s into, if it is allowed to rearrange letters in s before cuttings.

Input

The first line contains an integer n (1 ≤ n ≤ 4·105) — the length of string s.

The second line contains a string s of length n consisting of lowercase and uppercase Latin letters and digits.

Output

Print to the first line an integer k — minimum number of palindromes into which you can cut a given string.

Print to the second line k strings — the palindromes themselves. Separate them by a space. You are allowed to print palindromes in arbitrary order. All of them should have the same length.

A. ACM ICPC

Перебор *1000

В одном маленьком, но очень гордом ВУЗе было принято решение выиграть ACM ICPC. Для этого нужно составить как можно больше команд из трёх человек, но так как желающих студентов всего 6, было решено составить две команды.

Участнику с номером i по результатам тестирования была присвоена некоторая сила ai. Силой команды называется сумма сил всех участников в этой команде. Теперь руководству ВУЗа интересно, возможно ли собрать две команды с одинаковой силой. Ответьте на этот вопрос руководства.

Входные данные

В единственной строке находятся шесть целых чисел a1, ..., a6 (0 ≤ ai ≤ 1000) — силы участников.

Выходные данные

Выведите «YES» (без кавычек), если из данных участников можно собрать две команды с одинаковой силой, и «NO» (без кавычек) — иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом тесте можно взять в первую команду 1-го, 2-го и 6-го участника, во вторую — 3-го, 4-го и 5-го: силы команд будут 1 + 3 + 1 = 2 + 1 + 2 = 5.

Во втором тесте участник номер 6 слишком сильный и его команда будет заведомо сильнее другой.

B. Кубики для Маши

Перебор реализация *1300

На день рождения маленькой Маше-растеряше подарили набор кубиков, о которых она давно мечтала. Набор состоит из n кубиков.

На каждой из 6 граней каждого кубика написана ровно одна цифра от 0 до 9. Маше стало интересно для какого наибольшего натурального числа x она может составить все числа от 1 до x при помощи кубиков.

Для этого Маша может поворачивать кубики и ставить их в ряд. После этого она смотрит на верхние грани использованных кубиков слева направо и составляет из этих цифр число.

Число не может содержать лидирующие нули. При составлении числа не обязательно использовать все кубики. Если Маша не может получить даже число 1, то следует вывести число 0.

Обратите внимание: Маша не может получить цифру 6 из цифры 9, или 9 из 6 при перевороте кубика.

Входные данные

В первой строке дано целое число n (1 ≤ n ≤ 3) - количество кубиков, которое подарили Маше.

В следующих n строк записано по 6 целых чисел aij (0 ≤ aij ≤ 9) — число на j-й грани i-го кубика.

Выходные данные

Выведите единственное число — такое максимальное x, что Маша-растеряша может собрать из кубиков все числа от 1 до x или 0, если она не может собрать даже число 1.

Примечание

В первом примере Маша может составить все числа от 1 до 87, но число 88 она не может составить, так как нет двух кубиков с цифрами 8.

C. Сборка кубика

Перебор реализация *1500

В перерывах между конкурсами топ-модель Изабелла старается не скучать и развиваться. Например, сейчас она учится собирать кубик Рубика 2x2x2.

Сразу научиться собирать кубик довольно непросто, поэтому она сначала хочет научиться понимать, можно ли из текущего положения собрать кубик поворотом ровно одной грани на 90 градусов в любую сторону.

Чтобы проверять правильность своих ответов, ей хочется иметь программу, которая будет по заданной раскраске граней кубика говорить, можно ли его собрать требуемым образом.

Кубик является собранным, если для каждой грани верно, что все квадратики этой грани имеют один цвет.

https://ru.wikipedia.org/wiki/Кубик_Рубика

Входные данные

В первой строке дана последовательность из 24 целых чисел ai (1 ≤ ai ≤ 6), где ai — номер цвета i-го квадратика. Гарантируется, что каждый из цветов встречается ровно 4 раза.

Выходные данные

Выведите «YES», если кубик можно собрать поворотом одной грани, и «NO» иначе.

Примечание

В первом тестовом примере раскраска выглядит так:

Во втором тестовом примере раскраска выглядит так:

Кубик можно собрать поворотом грани, содержащей квадратики 13, 14, 15, 16.

A. Локальные экстремумы

Перебор реализация *800

Вам дан массив a. Некоторый элемент массива ai называется локальным минимумом, когда он строго меньше своих соседей (то есть, ai < ai - 1 и ai < ai + 1). Элемент называется локальным максимумом, когда он строго больше своих соседей (ai > ai - 1 и ai > ai + 1). Так как у a1 и an есть только по одному соседу, они не являются ни локальными минимумами, ни локальными максимумами.

Элемент называется локальным экстремумом, когда он либо локальный минимум, либо локальный максимум. Посчитайте количество локальных экстремумов в данном массиве.

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 1000) — количество элементов в массиве a.

Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1000) — элементы массива a.

Выходные данные

Выведите количество локальных экстремумов в данном массиве.

C. Игра с фишками

Перебор реализация Структуры данных *2300

Рассмотрим следующую игру. Имеется прямоугольное поле размера n × m, в некоторых клетках которого находятся фишки.

На каждой фишке нарисована стрелка. Таким образом, каждая фишка на поле показывает в одном из направлений: вверх, вниз, налево или направо.

Игрок может выбрать одну из фишек и сделать ей ход.

Ход подразумевает следующую последовательность действий. Выбранная фишка назначается текущей. После этого игрок проверяет есть ли фишки в той же строке (или в том же столбце), что и текущая фишка, на которые указывает стрелка текущей фишки. Если там есть хотя бы одна фишка, то ближайшая из них назначается новой текущей фишкой, а бывшая текущая фишка удаляется с поля. После этого проверка повторяется. Этот процесс может повторяться несколько. Если новая фишка не найдена, текущая фишка удаляется с поля и ход игрока заканчивается.

В результате хода игрок получает некоторое количество очков, равное количеству удаленных фишек.

По заданной начальной расстановке фишек определите максимальное количество очков, которое может получить игрок за один ход, а также количество таких ходов.

Входные данные

В первой строке даны два целых числа n и m (1 ≤ n, m, n × m ≤ 5000). Далее идут n строк по m символов в каждой — описание игрового поля. «.» означает, что данная клетка пуста. «L», «R», «U», «D» означают, что в данной клетке есть фишка и стрелка на ней указывает налево, направо, вверх или вниз соответственно.

Гарантируется, что на поле имеется хотя бы одна фишка.

Выходные данные

Выведите два числа — максимальное количество очков, которое может получить игрок за один ход и количество ходов, позволяющих получить это максимальное количество очков.

Примечание

В первом примере наибольшее количество очков приносит фишка в позиции (3, 3). Ее ход можно проследить на следующей картинке:

Все остальные фишки приносят меньше очков.

A. Гордыня

дп жадные алгоритмы математика Перебор теория чисел *1500

Вам дан массив a длиной n, вы можете выполнять определенные операции над ним. Каждая операция выгладит следующим образом: выберите два соседних элемента из a, пусть это будут x и y, и замените один из них величиной gcd(x, y), где gcd обозначает наибольший общий делитель.

Какое минимальное число операций необходимо, чтобы сделать все элементы массива равными 1?

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 2000) — количество элементов в массиве.

Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — элементы массива.

Выходные данные

Выведите -1, если невозможно сделать все элементы массива равными 1. Иначе выведите минимальное число операций, необходимых для того, чтобы сделать все числа равными 1.

Примечание

В первом примере можно изменить все числа на 1, используя следующие 5 шагов:

  • [2, 2, 3, 4, 6].
  • [2, 1, 3, 4, 6]
  • [2, 1, 3, 1, 6]
  • [2, 1, 1, 1, 6]
  • [1, 1, 1, 1, 6]
  • [1, 1, 1, 1, 1]

Можно доказать, что нельзя достичь того же меньше, чем за 5 операций.

B. Прекрасные делители

Перебор реализация *1000

Недавно Люба узнала о существовании прекрасных чисел. Число называется прекрасным, если в своей двоичной записи оно имеет сначала k + 1 единицу, а потом k нулей.

Примеры прекрасных чисел:

  • 12 (110);
  • 1102 (610);
  • 11110002 (12010);
  • 1111100002 (49610).

Более формально, число является прекрасным, если существует такое целое положительное k, что оно имеет вид (2k - 1) * (2k - 1).

У Любы есть число n, она хочет найти его максимальный прекрасный делитель. Помогите ей с этим!

Входные данные

В единственной строке входных данных задано целое число n (1 ≤ n ≤ 105) — число, для которого Люба хочет найти максимальный прекрасный делитель.

Выходные данные

В единственной строке выходных данных выведите единственное число — максимальный прекрасный делитель заданного числа. Очевидно, что он всегда существует.

A. QAQ

дп Перебор *800

«QAQ» — смайлик, используемый для выражения плача. Представьте, что «Q» — это глаза со слезами, а «A» — рот.

Алмаз дал Борту строку, состоящую только из заглавных букв латинского алфавита длины n. В строке содержится большое число «QAQ» (Алмаз так мил!).

Борт хочет узнать, сколько подпоследовательностей «QAQ» встречаются в строке, которую дал Алмаз. Обратите внимание, буквы «QAQ» не обязательно должны идти непосредственно друг за другом, но порядок букв должен быть соблюден.

Входные данные

Единственная строка содержит строку длины n (1 ≤ n ≤ 100). Гарантируется, что эта строка содержит только заглавные буквы латинского алфавита.

Выходные данные

Выведите одно целое число — количество подпоследовательностей «QAQ» в строке.

Примечание

В первом примере 4 подпоследовательностей «QAQ»: «QAQAQYSYIOIWIN», «QAQAQYSYIOIWIN», «QAQAQYSYIOIWIN», «QAQAQYSYIOIWIN».

D. Ральф и его поездки по Бинарной стране

Деревья Перебор Структуры данных *2200

Ральф находится в Бинарной стране. Бинарная страна состоит из n городов и (n - 1) двунаправленной дороги, соединяющей города. Дороги пронумерованы от 1 до (n - 1), где i-я дорога соединяет город номер (здесь x обозначает x, округленный вниз к ближайшему целому) и город номер (i + 1), а длина i-й дороги равна Li.

Ральф дал вам m запросов. В каждом запросе он указал некоторый город Ai и целое число Hi. Он хочет сделать несколько поездок, начинающихся в указанном городе. Он может выбрать любой город (включая Ai) в Бинарной стране в качестве конца поездки. От такой поездки он получит (Hi - L) единиц счастья, где L — расстояние между городом Ai и конечным городом маршрута.

Ральфу интересны все поездки из Ai, в которых он может получить положительное количество единиц счастья. Для каждого запроса посчитайте суммарное количество получаемых единиц счастья по всем таким поездкам.

Ральф никогда не проедет по одному и тому же маршруту дважды или больше (в одном запросе), также, он никогда не посетит один город дважды или больше за одну поездку.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n ≤ 106, 1 ≤ m ≤ 105).

Далее следуют (n - 1) строк, каждая содержит одно целое число Li (1 ≤ Li ≤ 105) — длину i-й дороги.

Далее следуют m строк, каждая содержит два целых числа Ai и Hi (1 ≤ Ai ≤ n, 0 ≤ Hi ≤ 107).

Выходные данные

Выведите m строк, на i-й из них выведите одно целое число — ответ на i-й запрос.

Примечание

Далее следует пояснение ко второму примеру.

Первый запрос Ральфа — начинать поездки в городе 2, а Hi равно 4. Вот варианты поездок, которые у него есть:

  • Закончить поездку в городе 5. Так как расстояние между городами 5 и 2 равно 3, он получит 4 - 3 = 1 единицу счастья.
  • Закончить поездку в городе 4, тогда он получит 3 единицы счастья.
  • Закончить поездку в городе 1, тогда он получит 2 единицы счастья.
  • Закончить поездку в городе 3, тогда он получит 1 единицу счастья.
  • Обратите внимание, он может закончить поездку в городе 2, тогда он получит 4 единицы счастья.
  • Ральф не может закончить поездку в городе 6, так как расстояние между городом 6 и городом 2 равно 5, что приводит к отрицательному количеству единиц счастья.

Поэтому ответ на первый запрос равен 1 + 3 + 2 + 1 + 4 = 11.

A. Деление пиццы

Перебор реализация *1200

Студенты Вася и Петя учатся в БГУ (Байтляндском Государственном Университете). На одной из перемен они решили перекусить и заказали пиццу. Пицца представляет собой круг некоторого радиуса. Пиццу доставили уже разрезанную на n кусков, i-й кусок представляет собой сектор с углом равным ai. Вася и Петя хотят разделить все куски на два непрерывных сектора так, чтобы разница углов этих секторов была минимальна. Углом сектора называется сумма углов всех кусков пиццы входящих в него. Обратите внимание, что один из секторов может быть пустым.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 360) — количество кусков, на которые разрезана пицца.

Во второй строке записаны n целых чисел ai (1 ≤ ai ≤ 360) — углы секторов, на которые разрезана пицца. Сумма всех ai равна 360.

Выходные данные

Выведите одно целое число — минимально возможную разницу между углами секторов пиццы которые достанутся Васе и Пете.

Примечание

В первом тесте Вася может взять 1 и 2 куски, а Петя 3 и 4. Тогда ответ равен |(90 + 90) - (90 + 90)| = 0.

Во третьем тесте есть только один кусок, который полностью достанется Васе или Пете. Поэтому ответ равен |360 - 0| = 360.

В четвертом тесте Вася может взять 1 и 4 куски, тогда Пете достанутся 2 и 3 куски. Ответ в этом случае равен |(170 + 10) - (30 + 150)| = 0.

Поясняющая картинка к четвертому тесту:

Красный и зеленый сектора состоят каждый из двух соседних кусков пиццы, поэтому Вася может взять зеленый сектор, а Петя красный.

B. Просьба Ктолли

Перебор *1300

— Спасибо за сегодняшний день.

— Я испытала так много потрясающих эмоций.

— Ты подарила мне сказочные воспоминания... Но мне пора уходить...

— Маленькая последняя просьба, не мог бы ты...

— Помочь решить задачу с Codeforces?

— ......

— Что?

Ктолли несколько дней думала над следующей задачей:

Если число является палиндромом и длина его записи без ведущих нулей в десятичной системе счисления чётная, оно называется числом zcy. Число является палиндромом, если его запись в десятичной системе счисления читается одинаково слева направо и справа налево и не содержит ведущих нулей. Например 12321 и 1221 являются палиндромами, а 123 и 12451 не являются. Кроме того, 1221 является числом zcy, а 12321 не является.

Даны целые числа k и p, посчитайте остаток от деления на p суммы k минимальных чисел zcy.

К сожалению, Уильям не очень хорош в решении задач такого рода, поэтому просит вашей помощи!

Входные данные

В первой и единственной строке содержатся два целых числа k и p (1 ≤ k ≤ 105, 1 ≤ p ≤ 109).

Выходные данные

Выведите единственное число — ответ на задачу.

Примечание

В первом тестовом примере самое маленькое число zcy равно 11, а второе минимальное zcy число равно 22.

Во втором тестовом примере, .

B. Правильное питание

Перебор реализация теория чисел *1100

У Васи есть n бурлей. Одна бутылка Бер-Колы стоит a бурлей, а один батончик Барса стоит b бурлей. Он может покупать любое целое неотрицательное количество бутылок Бер-Колы и любое целое неотрицательное количество батончиков Барс.

Определите, сможет ли Вася купить какое-то количество бутылок Бер-Колы и батончиков Барс таким образом, чтобы потратить ровно n бурлей.

Иными словами, вам необходимо найти два неотрицательных целых числа x и y таких, что Вася может купить x бутылок Бер-Колы, y батончиков Барс, при этом x·a + y·b = n, либо сообщить, что такие числа найти невозможно.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 10 000 000) — количество денег, которые есть у Васи.

Во второй строке записано целое число a (1 ≤ a ≤ 10 000 000) — стоимость одной бутылки Бер-Колы.

В третьей строке записано целое число b (1 ≤ b ≤ 10 000 000) — стоимость одного батончика Барс.

Выходные данные

Если Вася не сможет купить Бер-Колу и батончики Барс так, чтобы потратить ровно n бурлей, выведите «NO» (без кавычек).

В противном случае, в первую строку выведите «YES» (без кавычек). Во вторую строку выведите два целых неотрицательных числа x и y — количество бутылок Бер-Колы и количество батончиков Барс, которые должен купить Вася, чтобы потратить ровно n бурлей, то есть x·a + y·b = n. Если ответов несколько разрешается вывести любой из них.

Любое из чисел x и y может быть равно 0.

Примечание

В первом примере Вася может купить две бутылки Бер-Колы и один батончик Барс, тогда он потратит ровно 2·2 + 1·3 = 7 бурлей.

Во втором примере, Вася может потратить ровно n бурлей несколькими способами:

  • купить две бутылки Бер-Колы и пять батончиков Барс;
  • купить четыре бутылки Бер-Колы и не покупать батончиков Барс;
  • не покупать Бер-Колу и купить 10 батончиков Барс.

В третьем примере невозможно купить Бер-Колу и батончики Барс, чтобы потратить ровно n бурлей.

F. Восстановление выражения

математика Перебор хэши *2300

Было записано корректное выражение вида a+b=c, где a, b и c — целые неотрицательные числа, не содержащие лишних лидирующих нулей.

В этом выражении были утеряны знаки плюс и равно. Перед вами стоит задача восстановить выражение.

Иными словами, в заданную последовательность цифр надо вставить один знак '+' и один знак '=' так, чтобы:

  • знак '+' находился левее знака '=',
  • знаки '+' и '=' разбивали последовательность на три непустые состоящие из цифр части (пусть левая часть — это a, средняя часть — это b, а правая часть — это c),
  • все три части a, b и c не содержали лишних лидирующих нулей,
  • было верно равенство a+b=c.

Гарантируется, что во всех предложенных тестах, ответ всегда существует.

Входные данные

В первой строке следует непустая строка, состоящая из цифр. Длина строки не превышает 106.

Выходные данные

Выведите восстановленное выражение. Если существует несколько решений, разрешается вывести любое из них.

Обратите внимание, что в ответе сначала должны содержаться два слагаемых (разделённые символом '+'), а затем результат их сложения, перед которым должен стоять символ '='.

Не нужно разделять числа и знаки операций пробелами. Строго следуйте формату выходных данных из примеров.

Если удалить из ответной строки символ '+' и символ '=', то должна получиться строка, равная строке из входных данных.

B. Бегущий Студент

геометрия Перебор реализация *1200

И снова несчастье свалилось на голову Бедного Студента. Он опаздывает на экзамен.

Добежав до остановки, которая находится в точке (0, 0), он сел в маршрутку и поехал по прямой, параллельной оси OX, в сторону увеличения координаты x.

Бедный Студент знает следующее:

  • за весь рейс маршрутка делает ровно n остановок, i-ая остановка происходит в точке (xi, 0)
  • координаты всех остановок различны
  • маршрутка едет с постоянной скоростью, равной vb
  • можно предполагать, что посадка и высадка пассажиров на остановках происходит мгновенно
  • Студент может выйти из маршрутки только на остановках
  • Студенту придется выйти из маршрутки на конечной остановке, если он не выйдет раньше
  • университет, в котором будет проводиться экзамен, находится в точке (xu, yu)
  • Студент может бежать от остановки до университета по прямой с постоянной скоростью vs сколь угодно долго
  • расстояние между двумя точками можно считать по формуле:
  • Студент уже едет в маршрутке, поэтому выйти на первой остановке он не может

Бедный Студент хочет добраться до университета как можно быстрее. Помогите ему выбрать остановку, на которой нужно выходить. Если таких остановок несколько, то выберите ту, от которой расстояние до университета наименьшее.

Входные данные

В первой строке даны три целых числа: 2 ≤ n ≤ 100, 1 ≤ vb, vs ≤ 1000. Во второй строке даны n неотрицательных целых чисел в порядке возрастания: координаты xi остановки номер i. Гарантируется, что x1 равно нулю, а xn ≤ 105. В третьей строке даны координаты университета, целые числа xu и yu, по модулю не превышающие 105.

Выходные данные

В единственной строке выведите ответ на задачу — номер оптимальной остановки.

Примечание

Как известно, студенты — люди особые, а маршрутки, обычно, никуда не спешат. Поэтому не нужно удивляться, если скорость студента будет больше или равна скорости маршрутки.

C. Числа Хексадесимал

математика Перебор реализация *1200

Одним прекрасным июльским утром в Мэйнфрейме случилось очень страшное событие: злобный вирус Мегабайт каким-то образом открыл доступ к блоку памяти своей не менее злобной сестры Хексадесимал. Он загрузил в неё огромный поток из n различных натуральных чисел от 1 до n, чтобы получить полный контроль над её энергией.

Но его план провалился по той простой причине, что Хексадесимал не воспринимала никакой информации, кроме чисел, записанных в двоичной системе счисления. Это значит, что если десятичная запись исходного числа содержала какие-то символы, отличные от 0 или 1, то оно не сохранялось в памяти. Теперь Мегабайт хочет узнать, сколько чисел было успешно загружено.

Входные данные

Входные данные содержат единственное число n (1 ≤ n ≤ 109).

Выходные данные

Выведите единственное число — ответ на задачу.

Примечание

Для n = 10 в ответ входят числа 1 и 10.

C. Уберите лишнего

математика Перебор Структуры данных *1700

Дана перестановка p длины n. Удалите один элемент из перестановки так, чтобы количество рекордов стало максимально возможным.

Напоминаю, что в последовательности чисел a1, a2, ..., ak число ai называется рекордом, если для всех целых j (1 ≤ j < i) выполняется aj < ai.

Входные данные

Первая строка входных данных содержит единственное целое число n (1 ≤ n ≤ 105) — длина перестановки.

Следующая строка входных данных содержит n целых чисел p1, p2, ..., pn (1 ≤ pi ≤ n) — перестановка. Все числа различные.

Выходные данные

Выведите единственное целое число — элемент перестановки, который требуется удалить, чтобы количество рекордов стало максимально возможным. Если таких элементов несколько, выведите минимальный из них.

Примечание

В первом примере можно удалить только один элемент.

E. Обмены в строке

Перебор реализация Строки хэши *2200

Изначально была дана строка s длины n, состоящая из строчных латинских букв. Её скопировали ровно k раз, получив при этом k одинаковых строк s1, s2, ..., sk. После этого в каждой из них поменяли местами ровно одну пару символов (возможно, одинаковых, но находящихся на разных позициях).

Вам необходимо по заданным k строкам s1, s2, ..., sk восстановить любую подходящую строку s. Обратите внимание, что суммарная длина всех строк не превосходит 5000 (то есть k·n ≤ 5000).

Входные данные

В первой строке задано два целых числа k и n (1 ≤ k ≤ 2500, 2 ≤ n ≤ 5000, k · n ≤ 5000) — количество получившихся строк и длина каждой из них.

В следующих k строках заданы сами строки s1, s2, ..., sk, состоящие из строчных латинских букв. Гарантируется, что длина каждой из строк равна n.

Выходные данные

В единственной строке выведите любую подходящую строку s, либо же «-1» (без кавычек), если такой строки не существует.

Примечание

В первом тестовом примере строка s1 получается из строки acab перестановкой местами 2 и 4 символов, строка s2 получается перестановкой 1 и 2 символов, а строка s3 — 3 и 4 символов.

Во втором тестовом примере s1 получается из строки kbub перестановкой 3 и 4 символов, s2 — перестановкой 2 и 4 символов, а s3 — перестановкой 1 и 3 символов.

В третьем тестовом примере невозможно получить никакую строку, удовлетворяющую условиям.

A. Новый год и количество карт

Перебор реализация *800

У вашего друга есть n карт.

Вы знаете, что на одной стороне каждой из карт написана строчная буква латинского алфавита, а на другой — цифра.

Сейчас все карты лежат на столе так, что видна ровно одна сторона каждой карты.

Вы хотите проверить, верно ли следующее утверждение для всех данных карт: «Если на одной стороне карты гласная, то на другой — четная цифра.» Более формально, гласная — одна из букв «a», «e», «i», «o» и «u», а четная цифра — одна из «0», «2», «4», «6» и «8».

Например, если на карте с одной стороны «a», а с другой — «6», то утверждение для нее верно. Также, утверждение верно для карты с «b» и «4», а также для карты с «b» и «3» (так как буква — не гласная). Утверждение неверно, например, для карты с «e» и «5». Вы хотите проверить, верно ли утверждение для всех карт. В частности, если ни на одной карте нет гласной, утверждение верно.

Чтобы проверить это утверждение, вы можете перевернуть некоторые карты и посмотреть на другую сторону. Определите, какое минимальное число карт нужно перевернуть, чтобы проверить, что данное утверждение верно.

Входные данные

Единственная строка содержит строку s (1 ≤ |s| ≤ 50), которая описывает стороны карт, которые вы видите на столе. Каждый символ строки s — либо строчная буква латинского алфавита, либо цифра.

Выходные данные

Выведите единственное число — минимальное число карт, которое вам нужно перевернуть, чтобы проверить данное утверждение.

Примечание

В первом примере нужно перевернуть обе карты. Обратите внимание, даже если одна сторона карт имеет одинаковые буквы, другая сторона может различаться.

Во втором примере не нужно переворачивать ни одной карты. Утверждение является бессодержательной истиной, так как нет ни одной карты с гласной буквой.

В третьем примере нужно перевернуть вторую и четвертую карты.

B. Новый год и ручной робот

Перебор реализация *1200

Боб запрограммировал робота для движения по двумерному лабиринту.

В лабиринте есть препятствия. Свободные клетки обозначаются как «.», а препятствия — как «#».

В лабиринте есть один робот. Его начальная позиция обозначается буквой «S». В этой позиции нет препятствий. В лабиринте есть единственный выход. Его позиция обозначается буквой «E». В этой позиции нет препятствий.

Робот может двигаться только вверх, вниз, налево и вправо.

Когда Боб программировал робота, он выписал строчку, состоящую из цифр от 0 до 3, включительно. Он хотел сделать так, чтобы каждая цифра задавала уникальное направление, чтобы робот, следуя указаниям в данной строке, доходил бы до финиша. К сожалению, он забыл назначить цифрам направления.

Робот выберет некоторое случайное соответствие направлений цифрам. Различным цифрам робот поставит в соответствие различные направления. Затем робот выполнит данные ему инструкции, в соответствии с данной строкой и выбранному соответствию направлений цифрам. Если инструкции выведут робота за пределы лабиринта, или он врежется в препятствие, робот сломается. Если робот в любой момент времени окажется на точке с выходом, то он остановится и дальше не будет исполнять инструкции.

Боб никак не может отладить свой робот, поэтому он просит вас определить число вариантов соответствий направлений цифрам таких, что робот не сломается и доберется до выхода.

Входные данные

Первая строка содержит два целых числа n и m (2 ≤ n, m ≤ 50) — размеры лабиринта.

Следующие n строк содержат по m символов каждая и описывают лабиринт.

Каждый символ лабиринта — это «.», «#», «S» или «E».

Гарантируется, что в лабиринте ровно одна буква «S» и ровно одна буква «E».

Последняя строка содержит строку s (1 ≤ |s| ≤ 100) — команды роботу. Каждая символ строки s — цифра от 0 до 3.

Выходные данные

Выведите единственное число — количество соответствий направлений цифрам таких, что данные роботу команды приведут его к выходу.

Примечание

В первом примере единственным подходящим соответствием будет , где D — вниз, L — влево, U — вверх, R — вправо.

C. Новый год и керлинг

геометрия математика Перебор реализация *1500

Кэрол играет в керлинг.

У нее есть n дисков радиуса r на плоскости.

Изначально все диски находятся выше линии y = 10100.

Кэрол пускает диски по направлению к прямой y = 0 по одному в порядке от 1 до n.

Когда она пускает i-й диск, она ставит его центр в точку (xi, 10100), а затем толкает его так, что его y координата начинает уменьшаться, а координата x остается постоянной. Диск останавливается, когда он касается прямой y = 0 или любого предыдущего диска. Обратите внимание, как только диск остановился, он больше не двигается, даже от удара следующих дисков.

Вычислите координату y центров всех дисков после того, как они остановятся.

Входные данные

Первая строка содержит два целых числа n и r (1 ≤ n, r ≤ 1 000) — количество дисков и радиус каждого диска, соответственно.

Следующая строка содержит n целых чисел x1, x2, ..., xn (1 ≤ xi ≤ 1 000) — x-координаты дисков.

Выходные данные

Выведите единственную строку с n числами. i-е из этих чисел должно быть равно итоговой y-координате центра i-го диска. Ваш ответ будет зачтен, если его абсолютная или относительная ошибка не превосходит 10 - 6.

А именно, пусть ваш ответ для определенного диска равен a, а ответ жюри — b. Ваш ответ будет зачтен, если для всех дисков.

Примечание

В первом примере конечные позиции дисков показаны на рисунке:

В частности, обратите внимание на положение последнего диска.

A. Генерация логина

жадные алгоритмы Перебор сортировки *1000

Логин пользователя в Полигоне состоит из префикса его имени и префикса его фамилии, соединенных последовательно в таком порядке. Каждый префикс должен быть непустым, но может совпадать с именем/фамилией. Обычно для пользователя существует несколько возможных логинов.

Вам даны имя и фамилия пользователя. Верните первый в алфавитном порядке логин, который может получить этот пользователь (предположите, что все возможные логины свободны).

Напомним, что префикс строки s — это любая подстрока, с которой начинается s: «a», «ab», «abc» и т.д. являются префиксами строки «abcdef», а «b» и «bc» — нет. Строка a следует в алфавитном порядке раньше строки b, если a является префиксом b, или a и b до некоторой позиции совпадают, а затем в a идет буква, стоящая в алфавите раньше, чем буква в b на той же позиции: «a» и «ab» следуют раньше строки «ac», а «b» и «ba» — позже.

Входные данные

В единственной строке входных данных записаны имя и фамилия пользователя, разделенные пробелами. Имя и фамилия состоят из строчных латинских букв и содержат от 1 до 10 символов, включительно.

Выходные данные

Выведите одну строку — первый по алфавиту логин, который может получить пользователь. Логин также записан строчными буквами.

B. Два торта

Бинарный поиск Перебор реализация *1200

В самый канун Нового года Иван решил приступить к оформлению праздничного стола. Иван купил два торта и разрезал их на части: первый торт был разрезан на a кусков, а второй — на b кусков.

Иван знает, что на празднование соберется n человек (включая его самого), так что он должен разложить n тарелок для торта. Теперь его задача — распределить торты по тарелкам. Иван хочет это сделать таким образом, чтобы выполнялись следующие условия:

  1. каждый кусок торта лежит на какой-либо тарелке;
  2. на каждой тарелке лежит хотя бы один кусок торта;
  3. ни на одной тарелке не лежат куски обоих тортов.

Чтобы сделать гостей чуточку счастливее, Иван хочет распределить торты так, чтобы минимальное количество кусков торта на тарелке было максимально. Формально, Иван хочет знать такое максимальное число x, что он может распределить торты по тарелкам, соблюдая все вышеприведенные условия, и на каждой тарелке будет хотя бы x кусков торта.

Помогите Ивану найти это число x!

Входные данные

В первой строке записаны три целых числа n, a и b (1 ≤ a, b ≤ 100, 2 ≤ n ≤ a + b) — количество тарелок, количество кусков первого торта и количество кусков второго торта, соответственно.

Выходные данные

Выведите такое максимальное число x, что Иван может распределить распределить торты по тарелкам таким образом, чтобы на каждой было не меньше x кусков торта.

Примечание

В первом примере есть только один способ распределить, на каждой тарелке будет ровно по 1 куску торта.

Во втором примере можно положить на первые две тарелки 3 и 4 куска первого торта, а на оставшиеся — по 5 кусков второго торта. Минимальное число кусков на тарелке — 3. Существуют и другие валидные распределения.

C. Три гирлянды

Конструктив Перебор *1400

Мишка только начал украшать ёлку к Новому году. У него есть три гирлянды, и все он хочет использовать для украшения. После этого Мишка их все зажжёт.

Когда гирлянда включена, она периодически меняет своё состояние — иногда горит, иногда нет. Формально, если i-я гирлянда включена в течение некоторой секунды x, то она горит только в течение секунд x, x + ki, x + 2ki, x + 3ki и так далее.

Мишка хочет включить гирлянды таким образом, чтобы в каждую секунду после включения гирлянд горела хотя бы одна. Формально, Мишка выбирает три целых числа x1, x2 и x3 (не обязательно различных) так, чтобы если включить первую гирлянду в течение x1-й секунды, вторую — в течение x2-й, а третью — в течение x3-й, то в течение любой секунды, начиная с max(x1, x2, x3), будет гореть хотя бы одна гирлянда.

Помогите Мишке узнать, можно ли осуществить его идею!

Входные данные

В первой строке записаны три целых числа k1, k2 и k3 (1 ≤ ki ≤ 1500) — временные промежутки каждой из гирлянд.

Выходные данные

Если Мишка может выбрать такие моменты времени, чтобы включить гирлянды так, что в каждую секунду после включения всех гирлянд горела хотя бы одна, то выведите YES.

В противном случае выведите NO.

Примечание

В первом примере Мишка может выбрать x1 = 1, x2 = 2, x3 = 1. Первая гирлянда будет гореть в течение секунд 1, 3, 5, 7, ..., вторая — 2, 4, 6, 8, ..., чего уже достаточно, чтобы покрыть все секунды после 2-й. Не влияет даже значение x3. Наш выбор приведет, однако, к тому, что третья горит в течение секунд 1, 4, 7, 10, ....

Во втором примере никак нельзя выбрать такие моменты времени, всегда будет существовать секунда, в которую не горит ни одна гирлянда.

D. Подсчет инверсий

математика Перебор *1800

Перестановкой размера n называют такой массив из n чисел, что все числа от 1 до n встречаются в нем ровно один раз. Инверсией в перестановке p называют такую пару позиций (i, j), что i > j и ai < aj. Например, перестановка [4, 1, 3, 2] содержит 4 инверсии: (2, 1), (3, 1), (4, 1), (4, 3).

Задана перестановка a размера n и m запросов к ней. Каждый запрос представляется двумя позициями l и r — отрезок [l, r] в перестановке надо перевернуть. Например, если a = [1, 2, 3, 4] и применен запрос l = 2, r = 4, то полученная перестановка — [1, 4, 3, 2].

После каждого запроса выведите, четное количество инверсий в перестановке или нечетное.

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 1500) — размер перестановки.

Во второй строке записаны n чисел a1, a2, ..., an (1 ≤ ai ≤ n) — элементы перестановки. Все числа попарно различны.

В третьей строке записано одно целое число m (1 ≤ m ≤ 2·105) — количество запросов, которые надо обработать.

Затем следуют m строк, в i-й строке записаны два целых числа li, ri (1 ≤ li ≤ ri ≤ n), означающие, что i-й запрос — это перевернуть отрезок [li, ri] в перестановке. Все запросы производятся последовательно.

Выходные данные

Выведите m строк. В i-й из них должно быть записано odd, если количество инверсий в перестановке после i-го запроса нечетно и even в противном случае.

Примечание

В первом примере:

  1. после первого запроса a = [2, 1, 3], инверсия: (2, 1);
  2. после второго запроса a = [2, 3, 1], инверсии: (3, 1), (3, 2).

Во втором примере:

  1. a = [1, 2, 4, 3], инверсия: (4, 3);
  2. a = [3, 4, 2, 1], инверсии: (3, 1), (4, 1), (3, 2), (4, 2), (4, 3);
  3. a = [1, 2, 4, 3], инверсия: (4, 3);
  4. a = [1, 4, 2, 3], инверсии: (3, 2), (4, 2).

C. Перун, ультуй!

жадные алгоритмы Перебор сортировки *2500

Многие студенты с пользой проводят новогодние каникулы. Влад особенно преуспевает в этом! Третьи сутки напролет, держась на салатах и мандаринах, оставшихся с новогоднего стола, он калибрует ранг в своей любимой MOBA-игре, играя за героя по имени Перун.

Абсолютная способность Перуна — «Гнев грома» — при применении мгновенно отнимает у каждого из n врагов на карте по очков здоровья в качестве единовременного эффекта. У нее есть ограничение — она может быть активирована только в момент времени, являющийся целым числом. Награда за убийство врага изначально равна и увеличивается каждую секунду на . Формально, если после применения «Гнева грома» в секунду t здоровье врага i станет меньшим или равным нулю, то Влад получит золота за его убийство.

Каждый враг может получать урон, а может восполнять здоровье — и все это множеством различных способов. Влада, впрочем, не интересуют детали; для каждого из n героев он лишь знает:

  •  — максимальное количество очков здоровья героя i;
  •  — количество очков здоровья героя в секунду 0;
  •  — количество очков здоровья, которое герой i восстанавливает за одну секунду (очки добавляются сразу же по наступлении следующей секунды).

Еще Влад знает о m изменениях здоровья в ходе игры:

  •  — секунда, в которую изменяется здоровье врага;
  •  — враг, у которого изменяется здоровье;
  •  — новое количество очков здоровья врага enemyj.

Естественно, из игры Влад хочет вынести максимум пользы и, если потребуется, он, забыв об учебе, будет выжидать годы и годы в ожидании подходящего момента для активации суперспособности. Помогите ему найти секунду от 0 включительно до  + ∞ включительно (напомним, что номер секунды должен быть целым числом), чтобы активация «Гнева грома» помогла ему получить максимальное количество золота, и выведите это количество.

Входные данные

В первой строке заданы два целых числа, разделенных пробелами — n и m (1 ≤ n ≤ 105, 0 ≤ m ≤ 105).

Во второй строке заданы три целых числа, разделенных пробелами — , , (, ).

В последующих n строках заданы три целых числа, разделенных пробелами — , , (, ).

В последующих m строках заданы три целых числа, разделенных пробелами — , , (, , ). Гарантируется, что в одну секунду для одного врага известно не более одного изменения здоровья: формально для любых a, b таких, что 1 ≤ a, b ≤ m, a ≠ b верно, что если , то .

Выходные данные

Выведите в одной строке единственное число — максимальное количество золота, которое Влад может получить в результате единовременного применения способности «Гнев грома», или -1, если количество золота, которое он может получить, может быть бесконечно большим.

Примечание

На графиках ниже изображены очки здоровья каждого из врагов в зависимости от времени в примерах.

Желтым цветом обозначено время, в течение которого Влад может убить одного врага.

Фиолетовым цветом обозначено время, в течение которого Влад может убить двух врагов.

В первом примере можно применить «Гнев грома» в 50-ю секунду: погибнут враги 2 и 3, так как у них будет 40 и 50 очков здоровья соответственно, и Влад получит награду в 2·(1000 + 50·10) = 3000 золота.

Во втором примере максимальное здоровье врага 1 меньше урона, наносимого способностью, поэтому его можно будет убить в любой момент времени, а поскольку награда увеличивается каждую секунду на 50 золота, то максимально возможная награда будет увеличиваться до бесконечности.

D. Слишком простые задачи

Бинарный поиск жадные алгоритмы Перебор сортировки Структуры данных *1800

Вы готовитесь к экзамену по теории расписаний. Экзамен продлится ровно T миллисекунд. На экзамене вас ждут n задач. Каждую задачу номер i вы сможете либо полностью решить, затратив на это ti миллисекунд, либо не решить вовсе, не потратив на нее ни миллисекунды. Времени на отдых после решения задачи вам не потребуется.

К несчастью, ваш преподаватель считает, что некоторые задачи слишком просты для вас, поэтому каждой задаче i сопоставил целое число ai, обозначающее, что задача i может принести балл за ее решение только в том случае, если вы решите не более ai задач всего (включая задачу i).

Формально, пусть за экзамен вы решите некоторое множество задач p1, p2, ..., pk. Ваш итоговый балл за экзамен s будет равен количеству таких j от 1 до k, что k ≤ apj.

Догадавшись, что настоящая первая задача экзамена уже перед вами, вы хотите заранее выбрать подмножество задач для решения на экзамене, которое принесет вам наибольший возможный итоговый балл. Не забудьте, что экзамен ограничен по времени, и вам должно хватить времени на решение всех выбранных задач. Если существуют разные множества задач, ведущие к наибольшему итоговому баллу, вас устроит любое из них.

Входные данные

Первая строка содержит два целых числа n и T (1 ≤ n ≤ 2·105; 1 ≤ T ≤ 109) — количество задач на экзамене и длительность экзамена в миллисекундах, соответственно.

Каждая из следующих n строк содержит пару целых чисел ai и ti (1 ≤ ai ≤ n; 1 ≤ ti ≤ 104). Задачи пронумерованы от 1 до n.

Выходные данные

В первой строке выведите целое число s — наибольший возможный итоговый балл.

Во второй строке выведите целое число k (0 ≤ k ≤ n) — количество задач, которые вам следует решить.

В третьей строке выведите k различных целых чисел p1, p2, ..., pk (1 ≤ pi ≤ n) — номера задач, которые вам следует решить, в любом порядке.

Если наилучших множеств задач несколько, выведите любое из них.

Примечание

В первом примере следует решить задачи с номерами 3, 1 и 4. В таком случае вы потратите 80 + 100 + 90 = 270 миллисекунд, уложившись в длительность экзамена, 300 миллисекунд (и даже оставив себе 30 миллисекунд на отдых). Задачи 3 и 1 принесут вам по одному баллу, а задача 4 — не принесет. В итоге вы наберете два балла.

Во втором примере катастрофически не хватает времени на решение даже одной задачи.

В третьем примере вы идеально успеваете решить обе задачи за 42 + 58 = 100 миллисекунд и с улыбкой сдать работу преподавателю.

A. Точные квадраты

математика Перебор реализация *900

Дан массив a1, a2, ..., an, состоящий из n целых чисел, найдите наибольшее число в нём, которое не является точным квадратом.

Число x называется точным квадратом, если существует целое число y такое, что x = y2.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 1000) — количество элементов в массиве.

Во второй строке содержатся n целых чисел a1, a2, ..., an ( - 106 ≤ ai ≤ 106) — элементы массива.

Гарантируется, что хотя бы один элемент массива не является точным квадратом.

Выходные данные

Выведите максимальное число, содержащееся в массиве, такое, что оно не является точным квадратом. Гарантируется, что ответ существует.

Примечание

В первом тестовом примере 4 является точным квадратом, поэтому наибольшее число, которое не является точным квадратом — это 2.

C. Комивояжёр и специальные числа

дп Комбинаторика Перебор *1800

Комивояжёр проводит много времени в пути, поэтому часто скучает. Чтобы скоротать время, он любит производить операции с числами. Одна из таких операций заключается в том, что он берёт натуральное число x и уменьшает его до количества бит, которые установлены в 1 в двоичной записи числа x. Например, для числа 13 верно, что 1310 = 11012, значит, в нём есть 3 единичных бита, поэтому за одну операцию 13 уменьшится до 3.

Он называет число специальным если минимальное количество операций, требуемых для уменьшения этого числа до 1 равно k.

Комивояжёру интересно, сколько существует специальных чисел, не превосходящих n. Помогите ему.

Так как ответ может быть большим, выведите его по модулю 109 + 7.

Входные данные

В первой строке содержится целое число n (1 ≤ n < 21000).

Во второй строке содержится целое число k (0 ≤ k ≤ 1000).

Учтите, что n задано в двоичной системе счисления без ведущих нулей.

Выходные данные

Выведите одно целое число — количество специальных чисел, не превосходящих n, по модулю 109 + 7.

Примечание

В первом тестовом примере тремя специальными числами являются 3, 5 и 6. За одну операцию они уменьшаются до 2 (потому что в каждом из чисел 3, 5 и 6 два единичных бита), а затем до 1 (потому что в числе 2 один единичный бит) после применения ещё одной операции.

F. Подстроки в строке

битмаски Перебор Строки строковые суфф. структуры Структуры данных *3000

Дана строка s, обработайте q запросов, каждый из которых имеет один из следующий типов:

  • 1 ic — Изменить i-й символ в строке на c.
  • 2 lry — Рассмотрим подстроку строки s, начинающуюся с символа с номером l и заканчивающуюся на символ с номером r. Выведите количество раз, которые y входит в неё как подстрока.
Входные данные

В первой строке задана строка s (1 ≤ |s| ≤ 105), состоящая из строчных букв английского алфавита.

Во второй строке задано число q (1 ≤ q ≤ 105) — количество запросов.

Следующие q строк описывают запросы и могт в зависимости от типа запроса имеють следующие форматы:

  • 1 ic (1 ≤ i ≤ |s|)
  • 2 lry (1 ≤ l ≤ r ≤ |s|)

c — это строчная буква английского алфавита, y — непустая строка, состоящая из строчных букв английского алфавита.

Сумма |y| по всем запросам второго типа не превосходит 105.

Гарантируется, что в тесте есть хотя бы один запрос второго типа.

Строки индексируются, начиная с 1.

|s| обозначает длину строки s.

Выходные данные

Для каждого запроса типа 2 выведите ответ в отдельной строке.

Примечание

В первом тестовом примере изначально строка aba встречается 3 раза как подстрока на подотрезке [1, 7].

После запроса первого типа строка становится равной ababcbaba и строка aba встречается только один раз как подстрока на отрезке [1, 7].

A. Джейми и откладывание будильника

математика Перебор реализация *900

Джейми очень любит спать. Однажды он решил, что хочет проснуться ровно в hh: mm. Однако он ненавидит просыпаться, поэтому он решил сделать своё пробуждение менее неприятным, установив будильник в счастливое время. Затем он будет нажимать на кнопку будильника каждые x минут, пока не настанет hh: mm и только затем встанет с кровати. Джейми интересно, какое минимальное количество раз ему придётся нажимать на кнопку будильника.

Время называется счастливым, если оно содержит цифру '7'. Например, времена 13: 07 и 17: 27 являются счастливыми, а 00: 48 и 21: 34 не являются.

Учтите, что момент звонка будильника и момент, когда Джейми встанет с кровати, могут быть в разные дни. Гарантируется, что существует счастливое время, на которое Джейми может поставить будильник, чтобы проснуться в hh: mm.

Формально, Вам требуется найти такое минимальное неотрицательное целое число y, что в записи момента времени на x·y минут более раннего, чем hh: mm, присутствует цифра '7'.

Джейми использует 24-часовой формат времени времени, поэтому после 23: 59 наступает 00: 00.

Входные данные

В первой строке содержится целое число x (1 ≤ x ≤ 60).

Во второй строке содержатся два целых числа hh и mm (00 ≤ hh ≤ 23, 00 ≤ mm ≤ 59). В записи каждого из этих чисел содержатся ровно две цифры.

Выходные данные

Выведите минимальное возможное количество нажатий на кнопку.

Примечание

В первом тестовом примере Джейми хочет проснуться в 11:23. Поэтому он может поставить свой будильник на 11:17. Затем ему придётся нажать кнопку в 11:17 и в 11:20.

Во втором тестовом примере Джейми может поставить будильник ровно на 01:07, так как это счастливое время.

A. Одиннадцать

Перебор реализация *800

Одиннадцать хочет выбрать себе новое имя. Так как ее друзья — гики, они предложили ей алгоритм для выбора имени. Одиннадцать хочет, чтобы в имени было ровно n букв.

Ее друг предложил имя, состоящее только из заглавных и строчных букв латинского алфавита «O». А именно, i-я буква должна быть «O» (заглавная), если число i встречается в последовательности Фибоначчи, и «o» (строчная) в остальных случаях. Буквы в имени нумеруются от 1 до n. Последовательность Фибоначчи — это последовательность f, где

  • f1 = 1,
  • f2 = 1,
  • fn = fn - 2 + fn - 1 (n > 2).

Друзья Одиннадцать еще слишком маленькие, чтобы знать, что такое последовательность Фибоначчи, поэтому они просят вас определить новое имя Одиннадцать.

Входные данные

Первая и единственная строка содержит одно целое число n (1 ≤ n ≤ 1000).

Выходные данные

Выведите новое имя Одиннадцать на единственной строке.

A. Супермаркет

жадные алгоритмы Перебор реализация *800

Зачастую, придя в магазин, на ценнике фруктов или овощей вы увидите цену за килограмм. Однако в некоторых магазинах, если вы спросите о цене, вам ответят, что она составляет \(a\) юаней за \(b\) килограмм (вам не нужно знать, что такое «юань»), или, что то же самое, \(a/b\) юаней за килограмм.

Вы хотите купить \(m\) килограмм яблок. Вы узнали цены в \(n\) магазинах. Найдите минимальную стоимость, по которой вы можете купить эти яблоки.

Вы можете считать, что в любом магазине достаточно яблок для вас.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 5\,000\), \(1 \leq m \leq 100\)), означающие, что вы узнали цены в \(n\) магазинах и хотите купить \(m\) килограмм яблок.

Следующие \(n\) строк описывают цены в магазинах. Каждая строка содержит два целых числа \(a, b\) (\(1 \leq a, b \leq 100\)), означающие, что в этом супермаркете вы должны заплатить \(a\) юаней за \(b\) килограмм яблок.

Выходные данные

В единственной строке выведите минимальную стоимость \(m\) килограмм яблок. Ваш ответ будет считаться правильным, если абсолютная или относительная его ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(x\), а ответ жюри равен \(y\). Ваш ответ будет считаться правильным, если \(\frac{|x - y|}{\max{(1, |y|)}} \le 10^{-6}\).

Примечание

В первом примере необходимо купить \(5\) килограмм яблок в магазине \(3\). Стоимость равна \(5/3\) юаней.

Во втором примере необходимо купить \(1\) килограмм яблок в магазине \(2\). Стоимость равна \(98/99\) юаней.

B. Прекрасное число

Бинарный поиск дп Перебор реализация теория чисел *1100

Будем называть положительное целое число прекрасным, если и только если сумма его цифр равна \(10\). Вам дано целое число \(k\), найдите \(k\)-е по величине прекрасное положительное целое число.

Входные данные

Единственная строка содержит одно целое число \(k\) (\(1 \leq k \leq 10\,000\)).

Выходные данные

Выведите \(k\)-е по величине прекрасное число.

Примечание

Первое прекрасное число равно \(19\), а второе — \(28\).

C. Рассадка

Перебор реализация *1300

Предположим, вы ходите каждый день на занятия. Каждый раз вы приходите в последний момент, и некоторые места в классе уже заняты. Например, сегодня вы с друзьями пришли в класс и обнаружили, что некоторые места уже заняты.

В класс \(n\) рядов по \(m\) мест в каждом ряду. Таким образом, класс можно представить как матрицу \(n \times m\). Символ «.» означает свободное место, а символ «*» означает занятое место. Вам необходимо найти \(k\) соседних свободных мест в одном ряду или в одном столбце. Посчитайте количество способов выбрать места. Два способа считаются различными, если различны множества мест, которые вы выберете.

Входные данные

Первая строка содержит три различных целых числа \(n,m,k\) (\(1 \leq n, m, k \leq 2\,000\)), где \(n,m\) описывают размеры класса, а \(k\) — число соседних мест, которые вы должны найти.

Каждая из следующих \(n\) строк содержит \(m\) символов «.» или «*». Они образуют матрицу, описывающую класс, «.» обозначает свободное место, а «*» — занятое.

Выходные данные

Выведите одно число — число способов выбрать \(k\) свободных мест в одном ряду или столбце.

Примечание

В первом примере есть три способа выбрать места. Они перечислены ниже.

  • \((1,3)\), \((2,3)\)
  • \((2,2)\), \((2,3)\)
  • \((2,1)\), \((2,2)\)

F. SUM и REPLACE

Перебор снм Структуры данных теория чисел *2000

Обозначим за D(x) количество положительных делителей натурального числа x. К примеру, D(2) = 2 (2 делится на 1 и 2), D(6) = 4 (6 делится на 1, 2, 3 и 6).

Вам дан массив a из n целых чисел. Нужно обрабатывать два вида запросов:

  1. REPLACE l r — для каждого заменить ai на D(ai);
  2. SUM l r — посчитать .

Выведите ответ на каждый запрос SUM.

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 3·105) — количество элементов в массиве и количество запросов, соответственно.

Во второй строке заданы n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 106) — элементы массива.

Затем следуют m строк, в каждой из которых записаны 3 целых числа ti, li, ri, обозначающих i-й запрос. Если ti = 1, то i-й запрос — REPLACE li ri, иначе это запрос SUM li ri (1 ≤ ti ≤ 2, 1 ≤ li ≤ ri ≤ n).

Хотя бы один запрос имеет тип SUM.

Выходные данные

Для каждого запроса SUM выведите ответ на него.

G. Список чисел

Бинарный поиск битмаски Комбинаторика математика Перебор теория чисел *2200

Обозначим за L(x, p) бесконечную последовательность таких целых чисел y, что gcd(p, y) = 1 и y > x (где gcd — наибольший общий делитель двух чисел), расположенных в порядке возрастания. Элементы L(x, p) пронумерованы, начиная с 1; например, 9, 13 и 15 — соответственно первый, второй и третий элементы L(7, 22).

Напишите программу, обрабатывающую t запросов. Каждый запрос задаётся тремя целыми числами x, p и k, а ответ на запрос — k-й элемент последовательности L(x, p).

Входные данные

В первой строке записано одно целое число t (1 ≤ t ≤ 30000) — количество запросов.

Далее следуют t строк. В i-й строке записаны три числа x, p и k для i-го запроса (1 ≤ x, p, k ≤ 106).

Выходные данные

Выведите t чисел, где i-е число — ответ на i-й запрос.

B. Волшебный лес

Перебор *1300

Имп попал в волшебный лес, где растут ксоругольники (што?)

Ксоругольником порядка n называется такой невырожденный треугольник, что длины его сторон — целые числа, не превосходящие n, а их xor-сумма равна нулю. Чтобы выбраться из волшебного леса, необходимо быстро уметь считать количество ксоругольников порядка n.

Более формально, по заданному числу n необходимо найти количество таких троек (a, b, c), что:

  • 1 ≤ a ≤ b ≤ c ≤ n;
  • , где запись обозначает побитовое исключающее ИЛИ чисел x и y.
  • (a, b, c) образуют невырожденный (т. е. со строго положительной площадью) треугольник.
Входные данные

В единственной строке задано число n (1 ≤ n ≤ 2500).

Выходные данные

Выведите искомое количество ксоругольников порядка n.

Примечание

В первом примере единственным подходящим ксоругольником является (3, 5, 6).

C. Наскальная живопись

Перебор теория чисел *1600

Имп решил посмотреть документальный фильм про наскальную живопись.

Его внимание мгновенно привлекли нацарапанные в хаотическом порядке числа, подозрительно напоминающие остатки от деления числа n на всевозможные i от 1 до k. К несчастью, этих чисел слишком много, а потому последовательность уходит далеко за пределы экрана и ее сложно анализировать.

Имп просит вас заняться этим вместо него и сообщить, правда ли, что все эти остатки от деления различны. Более формально, необходимо проверить, что все различны для 1 ≤ i ≤ k, то есть не существует такой пары (i, j), что одновременно выполняются следующие условия:

  • 1 ≤ i < j ≤ k,
  • , где означает остаток от деления x на y.
Входные данные

В единственной строке заданы два числа n, k (1 ≤ n, k ≤ 1018).

Выходные данные

Выведите «Yes», если все остатки различны, и «No» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом примере остатки по модулю 1 и 4 совпадают.

C. Аземблер

Перебор реализация *2500

После провала программы Search Ultimate, искавшей строки в тексте за квадрат, Игорь К. задумался: "Отчего же, отчего моя программа работает так медленно?" Перепроверив еще раз свой код, он сказал: "В моем коде ошибок нет, однако я знаю, как мы будем улучшать Search Ultimate!" и достал с полки толстую книжку, на которой было написано "Аземблер. Принципиально новый подход".

Внимательно полистав эту книгу, Игорь К. понял, что, оказывается, умножение чисел можно проводить в десятки раз быстрее. "Search Ultimate будет быстра, как никогда!" — радостно прокричал он и приступил к работе.

Поясним теперь, в чем заключалась идея Игоря К. Дело в том, что код, генерируемый компилятором, далеко не оптимален — стандартное умножение чисел действительно работает медленнее, чем тот трюк, о котором рассказывалось в книжке.

В языке Azembler есть 26 регистров (eax, ebx, ..., ezx) и две команды:

  • [x] — возвращает значение, записанное по адресу x. Например, [eax] возвращает значение, которое записано по адресу, равному значению в регистре eax.
  • lea x, y — загружает в регистр x, указанный в качестве первого операнда, адрес второго операнда. Так, например, команда lea ebx, [eax] запишет в регистр ebx содержимое регистра eax: сначала выполнится операция [eax], результатом которой будет являться некоторое значение, лежащее по адресу, записанному в eax. Но нам не нужно это значение — следующей операцией будет lea — которая возьмет адрес [eax], т.е. значение в самом регистре eax, и запишет его в ebx.

На первый взгляд вторая операция кажется бессмысленной, но, оказывается, допустимо записывать эту операцию как

lea ecx, [eax + ebx],

lea ecx, [k*eax]

или даже

lea ecx, [ebx + k*eax],

где k = 1, 2, 4 или 8.

В результате в регистр ecx будут записаны соответственно числа eax + ebx, k*eax и ebx + k*eax. Но такая операция выполняется намного, в десятки раз, быстрее, чем обычное умножение чисел. А с помощью нескольких таких операций можно очень быстро умножить какое-либо число на другое. Конечно, вместо eax, ebx и ecx разрешено использовать любые регистры.

Например, пусть в регистре eax записано некоторое число, и требуется умножить его на 41. Это можно сделать в 2 cтрочки:

lea ebx, [eax + 4*eax] // теперь ebx = 5*eax

lea eax, [eax + 8*ebx] // теперь eax = eax + 8*ebx = 41*eax

Игорь К. заинтересовался, а каким минимальным числом операций lea можно умножить число на некоторое заданное число n и как это сделать. Ваша задача — помочь ему.

Считайте, что в начальный момент регистр eax содержит число, которое Игорь К. собрался умножать на n, а регистры от ebx до ezx содержат число 0. В конечный момент времени ответ может находиться в любом регистре.

Входные данные

В входных данных записано единственное целое число n (1 ≤ n ≤ 255), умножение на которое предстоит реализовать Игорю К.

Выходные данные

В первой строке выведите число p — минимальное число операций lea, необходимое для этого. Затем выведите программу из p команд, выполняющую эти операции. Гарантируется, что такая программа существует для любого n от 1 до 255.

Используйте в точности следующий формат команд (здесь k равно 1, 2, 4 или 8, а x, y и z — это любые, возможно совпадающие, регистры):

lea x, [y]

lea x, [y + z]

lea x, [k*y]

lea x, [y + k*z]

Обратите внимание на то, что в конце каждой команды недопустимы лишние пробелы.

A. Встреча друзей

жадные алгоритмы математика Перебор реализация *800

Два друга находятся на координатной прямой Ox в целочисленных точках. Один из них находится в точке x1 = a, а другой — в точке x2 = b.

Каждый из друзей может перемещаться на единицу влево и на единицу вправо неограниченное количество раз. При перемещении усталость мальчика увеличивается по следующим правилам: после первого перемещения усталость увеличивается на 1, после второго перемещения — на 2, после третьего — на 3 и так далее. Например, если мальчик сначала пойдёт влево на единицу, затем вправо на единицу (то есть вернётся в исходную точку) и после этого влево на единицу, его усталость будет равна 1 + 2 + 3 = 6.

Друзья хотят встретиться в одной точке. Определите минимальную суммарную усталость друзей при условии, что они должны оказаться в одной точке.

Входные данные

В первой строке следует целое число a (1 ≤ a ≤ 1000) — начальная позиция первого из друзей.

Во второй строке следует целое число b (1 ≤ b ≤ 1000) — начальная позиция второго из друзей.

Гарантируется, что a ≠ b.

Выходные данные

Выведите минимальную суммарную усталость обоих друзей при условии, что они должны оказаться в одной точке.

Примечание

В первом примере либо первый друг должен переместиться на единицу вправо (тогда встреча произойдёт в точке 4), либо второй друг должен переместиться на единицу влево (тогда встреча друзей произойдет в точке 3). В обоих случаях суммарная усталость равна 1.

Во втором примере первый друг должен переместиться на единицу влево, а второй друг — на единицу вправо. Тогда они встретятся в точке 100, при этом суммарная усталость будет равна 1 + 1 = 2.

В третьем примере один из оптимальных способов перемещения следующий. Первый друг должен три раза переместиться на единицу вправо, а второй друг — два раза на единицу влево. Таким образом, друзья встретятся в точке 8, и суммарная усталость будет равна 1 + 2 + 3 + 1 + 2 = 9.

C. Цикл перестановки

Конструктив Перебор *1600

Для перестановки P[1... N] чисел от 1 до N определим следующую функцию f:

Обозначим, за g(i) минимальное натуральное j такое, что f(i, j) = i. Можно показать, что такое j всегда существует.

Для заданных N, A, B найдите перестановку P чисел от 1 до N такую, что для любого 1 ≤ i ≤ N, g(i) равно или A, или B.

Входные данные

В единственной строке содержатся три целых числа N, A, B (1 ≤ N ≤ 106, 1 ≤ A, B ≤ N).

Выходные данные

Если требуемой перестановки не существует, выведите -1.

Иначе выведите перестановку целых чисел от 1 до N.

Примечание

В первом тестовом примере g(1) = g(6) = g(7) = g(9) = 2 и g(2) = g(3) = g(4) = g(5) = g(8) = 5.

Во втором тестовом примере g(1) = g(2) = g(3) = 1.

D. Оригинальное вырезание

Комбинаторика математика Перебор *2900

Все красное отпугивает монстра Ниана. Например, красная бумага и... вы, красные на Codeforces в будущем или уже сейчас.

Большой Банбан приобрел кусочек бумаги с бесконечной целочисленной решеткой, точки решетки образуют квадраты равной площади. Его любимая замкнутая линия — окружность, т. к. окружность одновременно проста и красива. Он приготовился вырезать что-нибудь красивое, предварительно нарисовав несколько цветных окружностей.

Он нарисовал n концентрических окружностей и пронумеровал их от 1 до n таким образом, что центры всех окружностей совпадают с одной и той же точкой целочисленной решетки, а радиус k-й окружности равен длинам кратчайшего периода решетки.

Определим красоту точки целочисленной решетки как сумму номеров окружностей, внутри или на границе которых лежит эта точка. Банбан хотел попросить вас определить суммарную красоту всех точек целочисленной решетки, но передумал.

Определим суммарную красоту всех точек целочисленной решетки на ткани с n окружностями ка f(n). Вычислите .

Входные данные

Первая строка содержит одно целое число m (1 ≤ m ≤ 1012).

Выходные данные

В единственной строка выведите одно целое число — .

Примечание

Решетка с 5 окружностями изображена на рисунке ниже.

Всего есть 5 типов точек целочисленной решетки, красота каждой красной точки равна 1 + 2 + 3 + 4 + 5 = 15, красота каждой оранжевой точки равна 2 + 3 + 4 + 5 = 14, красота каждой зеленой точки равна 4 + 5 = 9, красота каждой синей точки равна 5, а красота каждой серой точки равна 0. Итого, f(5) = 5·15 + 4·14 + 4·9 + 8·5 = 207.

Аналогично, f(1) = 5, f(2) = 23, f(3) = 50, f(4) = 102, и поэтому .

A. Совместимая пара

игры Перебор *1400

Ниан — монстр, живущий глубоко в океане. Раз в год он выбирается на сушу и поедает скот и даже людей. Чтобы отогнать монстра, люди наполняют свои дома красными красками, светом и шумом: все это пугает монстра.

У Маленького Томми есть n фонарей, а у Большого Банбана — m фонарей. Фонари Томми имеют яркости a1, a2, ..., an, а фонари Банбана — b1, b2, ..., bm, соответственно.

Томми хочет спрятать один из фонарей, а затем Банбан выберет один из не спрятанных фонарей Томми, и один свой фонарь. Яркость пары фонарей будет равна произведению яркости двух выбранных фонарей.

Томми хочет, чтобы это произведение было как можно меньше, а Банбан хочет, чтобы произведение было как можно больше.

Найдите яркость выбранной пары, если оба действуют оптимально.

Входные данные

Первая строка содержит два целых числа n и m (2 ≤ n, m ≤ 50).

Вторая строка содержит n целых чисел a1, a2, ..., an.

Третья строка содержит m целых чисел b1, b2, ..., bm.

Все числа находятся в пределах от  - 109 до 109.

Выходные данные

Выведите одно число — яркость итоговой пары.

Примечание

В первом примере Томми спрячет фонарь с яркостью 20, а Банбан выберет фонарь Томми с яркостью 18, и свой фонарь с яркостью 14.

Во втором примере Томми спрячет фонарь с яркостью 3, а Банбан выберет фонарь с яркостью 2 от Томми, и свой фонарь с яркостью 1.

A. Фафа и его компания

Перебор реализация *800

Фафа руководит компанией, которая работает над большими проектами. Всего в компании Фафы n работников. Когда появляется новый проект, Фафа должен распределить задачи по проекту между всеми работниками.

Фафа недавно понял, что каждый раз делать это очень сложно. Поэтому он решил выбрать лучших l сотрудников из компании в руководители. Когда появляется новый проект, Фафа будет распределять задачи только между руководителями, а каждый руководитель будет отвечать за некоторое положительное число сотрудников и будет распределять задачи между ними. Чтобы все было честно, каждый руководитель должен получить одинаковое число сотрудников под свое руководство. Кроме того, каждый сотрудник, не являющийся руководителем, должен быть подчинен ровно одному руководителю, и никакой руководитель не должен быть подчинен никакому руководителю.

По данному числу сотрудников n найдите, сколькими способами Фафа может выбрать число руководителей l, чтобы можно было поровну разделить оставшихся сотрудников между ними.

Входные данные

В единственной строке содержится одно целое число n (2 ≤ n ≤ 105) — количество сотрудников в компании Фафы.

Выходные данные

Выведите одно целое число — ответ на задачу.

Примечание

Во втором примере у Фафы есть три способа:

  • выбрать только 1 руководителя и определить остальных 9 сотрудников под его руководство.
  • выбрать 2-х руководителей, каждый будет руководить 4 сотрудниками.
  • выбрать 5 руководителей, каждый будет руководить 1 сотрудником.

B. Вредные кузнечики

математика Перебор теория чисел *1400

Стоит отличная погода, а значит, самое время забраться на верхушку близлежащей сосны и вдоволь насладиться пейзажем.

От ствола сосны отходят несколько веток, расположенных друг над другом и пронумерованных числами от 2 до y. На ветках со 2 по p включительно живут маленькие злобные кузнечики, отношения с которыми у вас не ладятся. Они также отличаются повышенной прыгучестью: кузнечик, живущий на ветке x, способен допрыгнуть до веток с номерами .

Помня о ваших прошлых неудачах в общении с кузнечиками, вы решили устроиться так, чтобы ни один кузнечик не сумел вас побеспокоить; в то же время вам хочется вскарабкаться как можно выше, ибо вид сверху открывается просто потрясающий!

Иными словами, найдите самую высокую ветку, до которой не допрыгнет ни один кузнечик, или сообщите, что это невозможно.

Входные данные

В единственной строке заданы числа p и y (2 ≤ p ≤ y ≤ 109).

Выходные данные

Выведите одно число — номер самой высокой ветки, до которой не достанут кузнечики. Если такой не существует, выведите -1.

Примечание

В первом примере до веток 2, 4, 6 допрыгивает кузнечик, живущий на ветке 2, а на ветке 3 изначально живет еще один. Поэтому единственным возможным вариантом является ветка 5.

Во втором примере подходящих веток не существует — это напрямую следует из пояснения к первому примеру.

B. В погоне за призом

жадные алгоритмы Перебор *1100

Вы и ваш друг участвуете в телешоу «В погоне за призом».

В начале шоу n призов располагаются на прямой. i-й приз находится в позиции ai. Позиции всех призов различны. Вы начинаете в позиции 1, ваш друг — на позиции 106 (в этих двух позициях нет призов). Вам необходимо, работая сообща, собрать все призы в любом порядке за минимальное время.

Известно, что переход из x в x + 1 или x - 1 занимает ровно 1 секунду как у вас, так и у вашего друга. Вы достаточно тренировались, так что приз поднимаете мгновенно, если его позиция совпадает с вашей текущей (то же верно и для вашего друга). Количество взятых призов никак не влияет на вашу скорость (и скорость вашего друга).

Теперь вы обсуждаете стратегию, решаете, кто какие призы будет брать. Обратите внимание, что каждый приз должен быть взят либо вами, либо вашим другом.

За какое наименьшее число секунд можно собрать все призы?

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 105) — количество призов.

Во второй строке записаны n целых чисел a1, a2, ..., an (2 ≤ ai ≤ 106 - 1) — позиции призов. Никакие два приза не стоят на одной позиции. Позиции заданы в возрастающем порядке.

Выходные данные

Выведите одно целое число — минимальное число секунд, за которое удастся собрать все призы.

Примечание

В первом примере вы забираете все призы: берете первый в секунду 1, второй — в 2 и третий — в 8.

Во втором примере вы берете первый приз за 1 секунду, ваш друг берет другой за 5 секунд, вы делаете это одновременно, так что итоговое время получается 5.

C. Подбираем тесты

Бинарный поиск Конструктив Перебор *1700

Определим m-свободную матрицу, как бинарную (то есть содержащую только символы 1 и 0) матрицу такую, что любая квадратная подматрица m × m этой матрицы содержит хотя бы один ноль.

Рассмотрим следующую задачу:

Даны два целых числа n и m. Постройте m-свободную квадратную матрицу размера n × n такую, что количество символов 1 в ней максимально. Выведите максимальное количество символов 1 в такой матрице.

Эту задачу вам решать совсем не обязательно. Вместо этого вы поможете составить к ней тесты.

Задано t чисел x1, x2, ..., xt. Для каждого найдите два целых числа ni и mi (ni ≥ mi) такие, что ответ для вышеприведенной задачи равен в точности xi, если установить n = ni и m = mi.

Входные данные

В первой строке задано одно целое число t (1 ≤ t ≤ 100) — количество тестов, которые вам нужно составить.

Затем следуют t строк, в i-й записано одно целое число xi (0 ≤ xi ≤ 109).

Обратите внимание, во взломах можно использовать только t = 1.

Выходные данные

На каждый тест, который вам нужно составить, выведите два целых числа ni и mi (1 ≤ mi ≤ ni ≤ 109) такие, что максимальное количество символов 1 в mi-свободной матрице размера ni × ni в точности равно xi. Если решений несколько, выведите любое; если невозможно построить такой тест, то выведите единственной число  - 1.

A. Точки на прямой

жадные алгоритмы Перебор сортировки *1200

Наши тесты не готовы. Впереди крупная олимпиада. Но ведь самая главная цель авторов контеста  — сделать еще одну задачу.

Назовём диаметром мультимножества точек на прямой максимальное расстояние между двумя точками этого множества. Например, диаметр мультимножества {1, 3, 2, 1} равен 2.

Диаметр мультимножества, состоящего из одной точки, равен 0.

Даны n точек на прямой. Какое минимальное число точек необходимо убрать, чтобы диаметр мультимножества оставшихся точек не превосходил d?

Входные данные

В первой строке заданы два целых числа n и d (1 ≤ n ≤ 100, 0 ≤ d ≤ 100) — количество точек и ограничение на диаметр, соответственно.

Во второй строке через пробел заданы n целых чисел (1 ≤ xi ≤ 100) — координаты точек.

Выходные данные

Выведите одно целое число — минимальное количество удалённых точек.

Примечание

В первом тестовом примере выгодно удалить точку с координатой 4. Оставшиеся точки будут иметь координаты 1 и 2, поэтому диаметр оставшегося мультимножества будет равен 2 - 1 = 1.

Во втором тестовом примере диаметр равен 0, поэтому удалять точки не потребуется.

В третьем тестовом примере выгодно удалить точки с координатами 1, 9 и 10. Оставшиеся точки будут иметь координаты 3, 4 и 6, поэтому диаметр будет равен 6 - 3 = 3.

F. Машинное обучение

Перебор Структуры данных *2600

Вы чувствуете неприятный запах. Откуда же он?

Дан массив a. Вам нужно уметь отвечать на следующие запросы:

  1. Даны целые числа l и r. Пусть ci  — количество вхождений числа i в al: r, где al: r — это подмассив a с l-го элемента по r-й включительно. Найдите Mex множества {c0, c1, ..., c109}.
  2. Даны целые числа p и x. Присвойте ap значение x.

Mex мультимножества чисел это минимальное неотрицательное целое число, не входящее в множество.

Обратите внимание, что в данной задаче элементы a положительные, соответственно c0 = 0, поэтому 0 никогда не является ответом на запрос второго типа.

Входные данные

Первая строка содержит n и q (1 ≤ n, q ≤ 100 000) — размер массива и число запросов соответственно.

Во второй строке записано ровно n чисел — a1, a2, ..., an (1 ≤ ai ≤ 109).

Каждая из оставшихся q строк задаёт очередной запрос.

Запрос первого типа задаётся тремя числами ti = 1, li, ri, где 1 ≤ li ≤ ri ≤ n — границы соответствующего подмассива.

Запрос второго типа задаётся тремя числами ti = 2, pi, xi, где 1 ≤ pi ≤ n — позиция в которой нужно заменить число, а 1 ≤ xi ≤ 109 — его новое значение.

Выходные данные

Для каждого запроса первого типа выведите одно число — Mex множества {c0, c1, ..., c109}.

Примечание

Отрезок первого запрос состоит из ровно одного элемента — 1.

Отрезок второго запроса состоит из четырёх 2, одной 3 и двух 1.

Отрезок четвёртого запроса состоит из трёх 1, трёх 2 и одной 3.

A. Защитить овец

графы Перебор поиск в глубину и подобное реализация *900

Боб — пастух. Он пасет своих овец на большом пастбище. Недавно волки утащили нескольких из его овец. Поэтому он решил обзавестись несколькими собаками-пастухами, которые будут защищать всех его овец.

Пастбище можно представить как прямоугольник из R × C клеток. Каждая клетка либо пустая, либо содержит овцу, волка или собаку. Овцы и собаки не могут двигаться, однако волки могут перемещаться по пастбищу свободно, каждый раз перемещаясь влево, вправо, вверх или вниз в соседнюю клетку. Если волк доберется до клетки с овцой, он съест ее. Однако волк не может зайти в клетку, где находится собака.

Изначально собак нет. Расположите собак на пастбище так, чтобы никакой волк не мог бы добраться до никакой овцы, или определите, что это невозможно. Обратите внимание на то, что у вас достаточно собак, поэтому вам не нужно минимизировать их количество.

Входные данные

Первая строка содержит два целых числа R (1 ≤ R ≤ 500) и C (1 ≤ C ≤ 500) — число строк и число столбцов на пастбище, соответственно.

Каждая из следующих R строк содержит строку, состоящую из ровно C символов и описывающую одну строку пастбища. Здесь «S» означает клетку с овцой, «W» означает клетку с волком, а «.» означает пустую клетку.

Выходные данные

Если невозможно защитить всех овец, выведите одну строчку со словом «No».

Иначе выведите одну строку со словом «Yes». Затем выведите R строк, описывающих пастбище после того, как вы расставили собак. Как и во входных файлах, «S» означает клетку с овцой, «W» означает клетку с волком, «D» — собаку, а «.» — пустую клетку. Вы не можете перемещать, добавлять или удалять волков или овец.

Если существует несколько решений, выведите любое из них. Вам не обязательно минимизировать число собак.

Примечание

В первом примере можно разбить пастбище собаками на две половины, в одной из которых находятся овцы, а в другой — волки. Обратите внимание на то, что овца в клетке (2,1) находится в безопасности, так как волки не могут двигаться по диагонали.

Во втором примере нет мест, куда можно было бы добавить собаку для защиты единственной овцы.

В третьем примере нет волков, поэтому задача очень проста. Мы посадили одну собаку в центр, чтобы она олицетворяла собой безопасность, однако решение без нее тоже верно.

D. Отбой

Бинарный поиск жадные алгоритмы Перебор сортировки *2300

Преподаватели Летней Какой-нибудь Школы укладывают учащихся спать.

Домик состоит из n комнат, в каждой из которых должны жить ровно b школьников. Однако к моменту отбоя оказалось, что далеко не каждый школьник находится в своей комнате. Комнаты расположены в ряд и пронумерованы по порядку от 1 до n, изначально в i-й комнате находятся ai школьников. При этом, в домике находятся все проживающие в нём школьники и только они, то есть, a1 + a2 + ... + an = nb. В домике также живут 2 преподавателя.

Процесс укладывания школьников спать устроен следующим образом. Первый преподаватель встаёт у комнаты 1 и движется в направлении комнаты n, а второй преподаватель — у комнаты n и движется в сторону комнаты 1. Закончив укладывать очередную комнату, преподаватель переходит к следующей, если n нечётно, то среднюю комнату укладывает спать только первый преподаватель. Как только все школьники уложены спать, процесс заканчивается.

Когда преподаватель заходит в комнату, он считает количество школьников внутри, затем тушит свет и закрывает комнату. Дополнительно, если количество школьников внутри не совпадает с b, этот преподаватель записывает номер комнаты в свою записную книжку и всё равно тушит свет и закрывает комнату. Преподаватели очень торопятся составить учебный план на завтра, поэтому игнорируют, кто именно находится в комнате, считая только количество школьников.

Пока преподаватели находятся в комнатах, школьники могут перебегать между ещё не закрытыми и не укладываемыми прямо сейчас комнатами, причём школьник успевает перебежать не более чем на d комнат (то есть, перемещается в комнату с номером, который отличается не более чем на d). Также, после (или вместо) перемещения любой школьник может спрятаться под кровать в той комнате, в которой находится, тогда преподаватель его не заметит при подсчёте. В любой комнате под кроватями могут спрятаться сколько угодно школьников одновременно.

Формально говоря, происходит следующий процесс:

  • Объявляется отбой, к этому моменту в комнате i находится ai школьников.
  • Каждый школьник может переместиться в другую комнату, но не далее, чем на d от изначального положения, либо остаться в текущей комнате. После этого желающие спрятаться под кровать прячутся.
  • В комнату 1, а также в комнату n заходят преподаватели и укладывают спать всех находящимся там школьников, после чего запирают комнату (после этого нельзя ни войти в комнату, ни выйти из неё).
  • Школьники из комнат с номерами от 2 до n - 1 могут переместиться в другие комнаты, убегая не далее, чем на d комнат от своего текущего местоположения, либо остаться в текущей комнате. Желающие спрятаться под кровать прячутся.
  • Из комнаты 1 в комнату 2, и из комнаты n в комнату n - 1 переходит преподаватель.
  • Процесс продолжается, пока во всех комнатах школьники не будут уложены спать.

Пусть первый преподаватель записал x1 комнат с видимым нарушением численности (комнат, где число не спрятавшихся школьников не равно b), а второй x2. Школьники знают, что директор смены будет слушать жалобы на безобразие во время отбоя не более, чем от одного преподавателя домика, поэтому хотят действовать таким образом, чтобы максимальное из чисел xi было как можно меньше. Помогите им определить, какое минимальное значение эта величина может принимать при оптимальных действиях школьников.

Входные данные

В первой строке записаны три целых числа n, d и b (2 ≤ n ≤ 100 000, 1 ≤ d ≤ n - 1, 1 ≤ b ≤ 10 000) — количество комнат в домике, максимальное количество комнат, которые успевает пробежать школьник, пока преподавателя нет в коридоре, и требуемое количество школьников в одной комнате.

Во второй находятся n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 109), i-е из которых соответствует количеству школьников в i-й комнате перед объявлением отбоя.

Гарантируется, что a1 + a2 + ... + an = nb.

Выходные данные

Выведите одно число — минимальное возможное значение максимального xi.

Примечание

В первом примере первые три комнаты посетит первый преподаватель, а последние две — второй. Одним из оптимальных решений является следующее: на первом шаге три школьника должны перебежать из комнаты 5 в комнату 4, на втором шаге два из них должны перебежать в комнату 3 и одному из них следует там спрятаться. Тем самым недовольство первого преподавателя вызовет только комната 2, а второй преподаватель и вовсе не встретит никаких нарушений.

Во втором примере одной из оптимальных стратегий является следующая: на первом шаге все школьники из комнаты 1 прячутся, а все школьники из комнаты 2 перебегают в комнату 3. На втором шаге один школьник перебегает из комнаты 3 в комнату 4, а ещё 5 прячутся. Тем самым первый преподаватель будет недоволен комнатами 1 и 2, а второй — комнатами 5 и 6.

E. Двоичные карты

Перебор *2700

Никогда не поздно научиться играть в увлекательную игру под названием «Двоичные карты»!

В игре участвует неограниченное число игральных карт разных положительных и отрицательных достоинств. Абсолютная величина, написанная на любой карте, является степенью двойки, то есть на карте может быть написано либо 2k, либо  - 2k для некоторого целого k ≥ 0. Карты любого достоинства имеются в неограниченном количестве.

В начале игрок выбирает себе колоду — некоторое множество (возможно пустое) игральных карт. При этом в колоду разрешается включить произвольное количество карт каждого из достоинств, но уровень игрока оценивают по тому, насколько мало карт он включает в свою колоду. Игра состоит из n конов. На i-м кону жюри называет игроку целое число ai. После этого игрок обязан выложить на стол такое подмножество карт из своей колоды, что сумма достоинств этих карт в точности равна ai (можно не выкладывать никакие карты вообще, тогда сумма считается равной нулю). Если игрок не может выложить нужный набор карт, он считается проигравшим, а игра заканчивается. В противном случае игрок возвращает выложенные карты назад в свою колоду и переходит к следующему кону. Игрок считается победителем, если он на каждом кону смог выложить необходимые карты.

До вас дошли слухи, какие числа ai жюри собирается назвать на каждом кону. Теперь вы хотите выбрать колоду с минимальным количеством карт, которая позволит вам выиграть в «Двоичные карты».

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 100 000) — количество названных чисел в игре.

Во второй строке находятся n целых чисел a1, a2, ..., an ( - 100 000 ≤ ai ≤ 100 000) — числа, называемые на каждом кону.

Выходные данные

В первой строке выведите число k (0 ≤ k ≤ 100 000) — минимальное количество карт, которые нужно выбрать в колоду, чтобы выиграть в «Двоичные карты».

Во второй строке выведите k целых чисел b1, b2, ..., bk ( - 220 ≤ bi ≤ 220, |bi| является степенью двойки) — достоинства карт, составляющих колоду. Достоинства можно выводить в любом порядке. Если существует несколько колод оптимального размера, разрешается вывести любую из них.

Гарантируется, что существует колода карт минимального размера, удовлетворяющая требованиям на величины чисел выше.

Примечание

В первом тесте из условия на единственном кону можно положить обе карты из колоды. Обратите внимание, этот тест из условия — единственный из подходящих под ограничения первой группы тестов.

Во втором тесте из условия в первый кон можно выложить единственную карту  - 1, во второй кон — карты 4 и  - 1, в третий кон можно не выкладывать ничего, в четвёртый кон — только карту 4, а в пятый кон — всю колоду.

B. Карта кошки

*особая задача интерактив Перебор *1900

Если вы когда-нибудь имели дело с кошками, вы могли заметить, что у них есть строгие предпочтения в вопросе того, где их гладить. Вот примерная карта нормальной кошки.

Впрочем, некоторые кошки не позволяют своим людям этих глупостей. Вот карта мрачной кошки.

Вы встретили кошку. Можете определить, нормальная она или мрачная?

Протокол взаимодействия

Эта задача - интерактивная. Изначально вам не дается никакой информации о кошке. Вместо этого кошка разделяется на 10 областей, пронумерованных от 0 до 9.

За один запрос вы можете выбрать одну область, которую вы попробуете погладить, и вывести соответствующий номер в стандартный поток вывода. Вы получите реакцию кошки в соответствии с картой ее типа, которую вы можете прочитать из стандартного потока ввода. Для простоты все реакции записаны строчными буквами.

Как только вы определились, какого типа кошка, выведите "normal" или "grumpy" в стандартный поток вывода.

Примечание

Используйте оператор flush после каждого запроса, чтобы не оставить часть запроса в буфере.

D. Ножницы

Перебор Строки *2600

Женя недавно обзавелся крайне полезным в хозяйстве инструментом — k-ножницами для резки строк. С их помощью можно вырезать из произвольной строки s (длины не менее k) две непересекающиеся подстроки длины ровно k, которые затем склеиваются (с сохранением порядка). Например, 2-ножницами из строки abcde можно вырезать подстроки ab и de и склеить их в abde, а вырезать ab и bc не получится.

Разумеется, перед применением ножницы стоит проверить на чем-то, что не жалко испортить. Порывшись в бумагах, Женя раздобыл две строки s и t. Ему сразу же стало интересно: правда ли, что можно применить его ножницы к строке s так, чтобы в получившейся вырезке t содержалась в качестве подстроки?

Входные данные

В первой строке содержатся три числа n, m, k (2 ≤ m ≤ 2·k ≤ n ≤ 5·105) — длина строки s, длина строки t и параметр для ножниц соответственно.

Во второй и третьей строках заданы s и t, состоящие из латинских букв в нижнем регистре.

Выходные данные

Если ответ не существует, выведите «No».

В противном случае в первой строке выведите «Yes», а во второй — два числа L и R, означающие индексы, в которых начинаются вырезанные подстроки (в 1-индексации). Если возможных ответов несколько, выведите любой.

Примечание

В первом примере можно вырезать подстроки, начинающиеся по индексам 1 и 5. Получившаяся вырезка baaaab содержит подстроку aaaa.

Во втором примере получившаяся вырезка равняется bccb.

C1. Encryption (easy)

Перебор *1200

Rebel spy Heidi has just obtained the plans for the Death Star from the Empire and, now on her way to safety, she is trying to break the encryption of the plans (of course they are encrypted – the Empire may be evil, but it is not stupid!). The encryption has several levels of security, and here is how the first one looks.

Heidi is presented with a screen that shows her a sequence of integers A and a positive integer p. She knows that the encryption code is a single number S, which is defined as follows:

Define the score of X to be the sum of the elements of X modulo p.

Heidi is given a sequence A that consists of N integers, and also given an integer p. She needs to split A into 2 parts such that:

  • Each part contains at least 1 element of A, and each part consists of contiguous elements of A.
  • The two parts do not overlap.
  • The total sum S of the scores of those two parts is maximized. This is the encryption code.

Output the sum S, which is the encryption code.

Input

The first line of the input contains two space-separated integer N and p (2 ≤ N ≤ 100 000, 2 ≤ p ≤ 10 000) – the number of elements in A, and the modulo for computing scores, respectively.

The second line contains N space-separated integers which are the elements of A. Each integer is from the interval [1, 1 000 000].

Output

Output the number S as described in the problem statement.

Note

In the first example, the score is maximized if the input sequence is split into two parts as (3, 4), (7, 2). It gives the total score of .

In the second example, the score is maximized if the first part consists of the first three elements, and the second part consists of the rest. Then, the score is .

E1. Guard Duty (easy)

геометрия жадные алгоритмы математика Перебор *1600

The Rebel fleet is afraid that the Empire might want to strike back again. Princess Heidi needs to know if it is possible to assign R Rebel spaceships to guard B bases so that every base has exactly one guardian and each spaceship has exactly one assigned base (in other words, the assignment is a perfect matching). Since she knows how reckless her pilots are, she wants to be sure that any two (straight) paths – from a base to its assigned spaceship – do not intersect in the galaxy plane (that is, in 2D), and so there is no risk of collision.

Input

The first line contains two space-separated integers R, B(1 ≤ R, B ≤ 10). For 1 ≤ i ≤ R, the i + 1-th line contains two space-separated integers xi and yi (|xi|, |yi| ≤ 10000) denoting the coordinates of the i-th Rebel spaceship. The following B lines have the same format, denoting the position of bases. It is guaranteed that no two points coincide and that no three points are on the same line.

Output

If it is possible to connect Rebel spaceships and bases so as satisfy the constraint, output Yes, otherwise output No (without quote).

Note

For the first example, one possible way is to connect the Rebels and bases in order.

For the second example, there is no perfect matching between Rebels and bases.

B. Счастливые числа (упрощенная версия)

Бинарный поиск битмаски Перебор *1300

Петя любит счастливые числа. Всем известно, что счастливыми являются натуральные числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

Очень счастливыми называются счастливые числа, в которых содержится одинаковое количество цифр 4 и 7. Например, числа 47, 7744, 474477 являются очень счастливыми числами, а 4, 744, 467 — не являются.

Однажды Пете встретилось натуральное число n. Найдите наименьшее очень счастливое число, которое не меньше n.

Входные данные

В единственной строке задано натуральное число n (1 ≤ n ≤ 109). Это число не содержит лидирующих нулей.

Выходные данные

В единственной строке выведите наименьшее очень счастливое число, которое больше или равно n.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

D. Запросы для полного бинарного дерева

Деревья Перебор реализация *2100

У вас есть полное бинарное дерево с бесконечным количеством уровней.

В каждой вершине записано значение. Если в вершине записано значение x, то в ее левом потомке записано значение x, а в правом потомке — значение x + 1.

Значение, записанное в корне, равно 1.

Вам нужно обработать Q запросов.

Всего есть 3 типа запросов:

  1. Циклически сдвинуть на K значения, записанные во всех вершинах, которые находятся на одном уровне с вершиной, в которой записано значение X. (Вершины и значения, записанные в вершинах, на других уровнях остаются без изменений).
  2. Циклически сдвинуть на K вершины, которые находятся на одном уровне с вершиной, в которой записано значение X. (Поддеревья сдвигаемых вершин двигаются вместе с ними).
  3. Вывести значения, записанные в каждой из вершин, которые встречаются на простом пути из вершины, в которой записано значение X, до корня.

Положительное K означает циклический сдвиг вправо, а отрицательное K означает циклический сдвиг влево.

Гарантируется, что среди запросов есть хотя бы один, который имеет тип 3.

Входные данные

В первой строке следует целое число Q (1 ≤ Q ≤ 105).

Далее следуют Q запросов по одному в строке:

  • Запросы типа 1 и 2 имеют следующий формат: T X K (1 ≤ T ≤ 2; 1 ≤ X ≤ 1018; 0 ≤ |K| ≤ 1018), где T обозначает тип запроса.
  • Запросы типа 3 имеют следующий формат: 3 X (1 ≤ X ≤ 1018).
Выходные данные

Для каждого запроса типа 3 выведите в порядке убывания значения, записанные во всех вершинах, встречающихся на пути.

Примечание

На картинках ниже изображены первые 4 уровня дерева для первого примера:

Изначальное дерево:

Дерево после запроса 1 2 1:

Дерево после запроса 2 4 -1:

C. Шахматная доска

битмаски Перебор реализация *1400

Однажды Магнус решил разыграть одну классическую шахматную партию. Но открыв чулан, Магнус пришел в ужас! Его любимая доска была разломлена на 4 части, каждая размера n на n, причем n обязательно нечетно. Хуже того, некоторые клетки имели неправильный цвет. j-я клетка i-й строки k-й части доски имеет цвет ak, i, j; 1 соответствует черному цвету, а 0 — белому.

Магнусу стало интересно, какое минимальное количество клеток нужно перекрасить, чтобы из частей доски можно было составить правильную доску. В правильной доске любая пара соседних по стороне клеток должна иметь различный цвет, и размер правильной доски должен быть 2n на 2n. Части доски разрешено переставлять, но нельзя поворачивать или переворачивать.

Входные данные

Первая строка содержит нечетное число n (1 ≤ n ≤ 100) — размер частей доски.

Далее следуют 4 блока, каждый из которых описывает часть доски. Каждый блок состоит из n строк по n символов; j-й символ i-й строки равен 1, если соответствующая клетка изначально покрашена в чёрный цвет, и 0, если клетка изначально белая. Блоки разделяются пустыми строками.

Выходные данные

Выведите одно число — минимальное количество клеток, которые необходимо перекрасить, чтобы из них можно было составить правильную доску.

C. Сделай квадрат

математика Перебор реализация *1400

Задано целое положительное число \(n\), запись которого не содержит лидирующих нулей (например, запись 04 недопустима).

За один ход вы можете удалить любую его цифру так, чтобы результат остался положительным числом без лидирующих нулей.

Определите минимальное количество операций, которые можно последовательно применить, чтобы сделать заданное число \(n\) квадратом некоторого целого положительного числа, либо сообщите, что это невозможно.

Целое число \(x\) является квадратом некоторого целого положительного числа, если \(x=y^2\) для некоторого целого положительного \(y\).

Входные данные

В первой строке следует целое положительное число \(n\) (\(1 \le n \le 2 \cdot 10^{9}\)). Число задано без лидирующих нулей.

Выходные данные

Если невозможно сделать из числа \(n\) с помощью описанных операций квадрат некоторого целого положительного числа, выведите -1. В противном случае, выведите минимальное количество операций, которые необходимы для этого.

Примечание

В первом примере из числа \(8314\) нужно удалить цифру \(3\) и цифру \(4\). После этого \(8314\) станет равно числу \(81\), которое является квадратом числа \(9\).

Во втором примере число \(625\) изначально является квадратом числа \(25\), поэтому ничего удалять не нужно.

В третьем примере невозможно получить из числа \(333\) квадрат целого числа, поэтому ответ на этот примере -1.

C. Разрезы прямоугольника

математика Перебор теория чисел *2600

Прямоугольник со сторонами \(A\) и \(B\) разрезали на прямоугольники разрезами, параллельными его сторонам. Например, если было сделано \(p\) горизонтальных и \(q\) вертикальных разрезов, то было получено \((p + 1) \cdot (q + 1)\) прямоугольников. В результате было получено \(n\) различных видов прямоугольников. Два прямоугольника различны, если хотя бы одна сторона у них имеет разную длину. Обратите внимание, что прямоугольники не поворачивали, то есть прямоугольники \(a \times b\) и \(b \times a\) считаются различными при \(a \neq b\).

Для каждого вида прямоуольников даны размеры прямоугольников этого вида, а также количество прямоугольников этого вида, которое было получено в результате разреза исходного прямоугольника.

Посчитайте количество пар \((A; B)\) таких, что в результате разрезания прямоугольника со сторонами \(A\) и \(B\) могли быть получены данные прямоугольники. Обратите внимание, что \((A; B)\) и \((B; A)\) считаются различными парами при \(A \neq B\).

Входные данные

В первой строке находится целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^{5}\)) — количество видов прямоугольников, полученных в результате разрезания исходного прямоугольника.

В следующих \(n\) строках содержатся три целых числа \(w_{i}, h_{i}, c_{i}\) \((1 \leq w_{i}, h_{i}, c_{i} \leq 10^{12})\) — размеры прямоугольника некоторого вида и количество прямоугольников такого вида.

Гарантируется, что прямоугольники разных видов различны.

Выходные данные

Выведите одно целое число — ответ на задачу.

Примечание

В первом примере подходящими парами являются \((1; 9)\), \((3; 3)\) и \((9; 1)\).

Во втором примере есть 6 подходящих пар: \((2; 220)\), \((4; 110)\), \((8; 55)\), \((10; 44)\), \((20; 22)\) и \((40; 11)\).

Ниже пример разрезания для получения \((20; 22)\).

В третьем примере не существует ни одной подходящей пары.

A. Домино

Перебор реализация *2400

Мальчику Гене на день рождения подарили домино. Домино состоит из 28 различных костей 2 × 1 — на обеих клетках написано по цифре от 0 до 6.

0-0 0-1 0-2 0-3 0-4 0-5 0-6
1-1 1-2 1-3 1-4 1-5 1-6
2-2 2-3 2-4 2-5 2-6
3-3 3-4 3-5 3-6
4-4 4-5 4-6
5-5 5-6
6-6

Фигура, состоящая из всех 28 доминошек, называется волшебной, если ее можно целиком покрыть 14 непересекающимися квадратами 2 × 2 так, чтобы каждый квадрат содержал четыре одинаковые цифры. Каждый раз, когда Гена собирает волшебную фигуру, проявляются волшебные свойства набора — именинник выигрывает следующий контест. Геннадий заметил, что собирать уже когда-то собранную фигуру нельзя, иначе контест выигрывает кто-нибудь другой.

Гена выбрал клетчатое поле размером n × m и расположил на нем прямоугольные фишки размером 1 × 2 и 2 × 1. Каждая фишка занимает целиком ровно две соседние клетки поля. Эти фишки не перекрываются, но могут касаться. Всего фишек на поле ровно 28 — по числу доминошек в наборе. Теперь Гена хочет заменить каждую фишку на доминошку так, чтобы в результате получилась волшебная фигура. Различные фишки должны быть заменены на различные доминошки. Определите, в скольки контестах Геннадий может одержать победу при заданном расположении фишек? Также требуется найти один из возможных способов заменить фишки на доминошки, чтобы выиграть следующий раунд Codeforces.

Входные данные

В первой строке заданы два целых положительных числа n и m (1 ≤ n, m ≤ 30). В каждой из следующих n строк содержится по m символов — расположение фишек на поле. Точки обозначают пустые места, латинские буквы от «a» до «z» и «A», «B» — расположение фишек. Всего на поле ровно 28 фишек. Клетки, покрытые одной и той же фишкой, обозначены одной и той же буквой, разные фишки обозначены разными буквами. Гарантируется, что описание поля корректно.

Также гарантируется, что хотя бы одно решение существует.

Выходные данные

В первой строке выведите количество способов заменить фишки на доминошки, чтобы получилась волшебная фигура — общее число контестов, которые можно выиграть, используя это расположение фишек. Следующие n строк по m символов должны содержать поле из точек и цифр от 0 до 6 — любое из возможных решений. Все доминошки должны быть различны.

D. Робот в подвале

битмаски Перебор реализация *2700

Профессор опять потерял своего домашнего робота. После некоторых раздумий профессор понял, что робота он оставил в подвале.

Подвал в доме профессора представляет собой прямоугольник n × m, разбитый на квадратные клетки 1 × 1. Некоторые клетки — стены, которые непроходимы, остальные клетки проходимы. Из любой проходимой клетки можно попасть в любую другую проходимую клетку, двигаясь через смежные по ребрам проходимые клетки. Одна из проходимых клеток является выходом из подвала. Робот находится ровно в одной из проходимых клеток, в том числе, он может находиться в клетке выхода.

Профессору страшно идти ночью в темный подвал искать робота. Но у него есть план подвала, а также пульт дистанционного управления роботом. Профессор с помощью пульта может посылать сигналы роботу, чтобы он сдвигался на одну клетку влево, вправо, вверх или вниз. Получив сигнал, робот сдвигается в нужном направлении, если соседняя с ним клетка в данном направлении проходима. Иначе робот стоит на месте.

Профессор выписал на листочек последовательность из k команд, которая, по его мнению, приведет робота к выходу из подвала, где бы он ни находился изначально. Он запрограммировал другого робота, чтобы тот нажимал на пульте нужные кнопки в соответствии с записью на листочке. Профессор уже было хотел запустить программу на выполнение и пойти спать, но тут его осенило.

На выполнение каждой команды тратится электроэнергия, а профессор не хочет получить в конце месяца большой счет за электричество. Поэтому он хочет найти наименьший префикс в выписанной им последовательности, который гарантированно приведет робота к выходу после его выполнения. Именно с этой просьбой профессор тревожит вас в столь поздний час.

Входные данные

В первой строке находятся три целых числа n, m и k (3 ≤ n, m ≤ 150, 1 ≤ k ≤ 105). В последующих n строках содержится по m символов — описание подвала профессора: «#» означает стену, «.» — проходимую клетку, а «E» — выход из подвала (эта клетка тоже проходима). Гарантируется, что до выхода можно добраться из любой проходимой клетки, а все клетки по периметру прямоугольника n × m — стены. Ровно одна клетка является выходом из подвала. В последней строке находится k символов — описание последовательности команд, что профессор выписал на листочек. «L», «R», «U», «D» означают команды влево, вправо, вверх и вниз соответственно.

Выходные данные

В выходной файл выведите длину наименьшего префикса, который гарантированно приводит робота к клетке выхода. Другими словами, робот должен оказаться в клетке выхода после выполнения всех команд из префикса (в процессе выполнения команд робот мог приходить в клетку выхода, а затем уходить из нее, но нас интересует положение робота только в самом конце), где бы он ни находился в подвале изначально. Если профессор ошибся и никакой префикс (включая всю последовательность) не приводит робота к выходу, выведите «-1» (без кавычек). Если единственная проходимая клетка поля — выход, то выведите «0» (без кавычек).

B. Манкала

Перебор реализация *1100

Манкала — игра, известная на Ближнем Востоке. В неё играют на доске с 14 лунками.

Изначально в каждой лунке находится \(a_i\) камней. Когда игрок совершает ход, он выбирает лунку с положительным числом камней. Он берёт из неё все камни, после чего раскладывает эти камни по одному в следующие лунки против часовой стрелки.

Заметьте, что разложение камней против часовой стрелки означает, что если игрок берёт камни из лунки \(i\), он положит один камень в \((i+1)\)-ю лунку, после чего в \((i+2)\)-ю, и так далее. Если он положит камень в \(14\)-ю лунку, следующий должен быть положен в первую лунку.

После хода игрок забирает себе все камни из лунок, в которых находится чётное число камней. Число камней, собранных игроком — это его счёт, согласно Ресли.

Ресли — известный игрок в манкалу. Он хочет узнать, какой максимальный счёт он может получить после одного хода.

Входные данные

В единственной строке содержится 14 целых чисел \(a_1, a_2, \ldots, a_{14}\) (\(0 \leq a_i \leq 10^9\)) — число камней внутри каждой из лунок.

Гарантируется, что для любого \(i\) (\(1\leq i \leq 14\)) \(a_i\) либо нечётно, либо равно нулю, и что на доске есть хотя бы один камень.

Выходные данные

Выведите одно целое число — максимальный возможный счёт игрока после одного хода.

Примечание

В первом примере после хода из лунки с \(7\) камнями доска будет выглядеть как 1 2 2 0 0 0 0 0 0 0 1 1 1 1. После этого игрок собирает камни из всех лунок с чётным числом камней и получает счёт, равный \(4\).

D. Почти арифметическая прогрессия

математика Перебор реализация *1500

Поликарп обожает арифметические прогрессии. Последовательность \([a_1, a_2, \dots, a_n]\) называется арифметической прогрессией, если для любого \(i\) (\(1 \le i < n\)) значение выражения \(a_{i+1} - a_i\) одинаково. Например, последовательности \([42]\), \([5, 5, 5]\), \([2, 11, 20, 29]\) и \([3, 2, 1, 0]\) — арифметические прогрессии, а \([1, 0, 1]\), \([1, 3, 9]\) и \([2, 3, 1]\) — нет.

Из определения следует, что любая последовательность из одного элемента или двух элементов — арифметическая прогрессия.

Поликарп нашел на улице некоторую последовательность положительных целых чисел \([b_1, b_2, \dots, b_n]\). Он согласен изменить каждый из элементов не более чем на единицу. Иными словами, каждый элемент последовательности может быть уменьшен на \(1\), оставлен без изменений или увеличен на \(1\).

Определите минимальное количество элементов последовательности \(b\), которые нужно изменить Поликарпу на единицу таким образом, чтобы последовательность \(b\) стала арифметической прогрессией, либо сообщите, что это невозможно.

Допустимо, что после изменений последовательность содержит \(0\).

Входные данные

В первой строке следует целое число \(n\) \((1 \le n \le 100\,000)\) — количество элементов в последовательности \(b\).

Во второй строке следует последовательность \(b_1, b_2, \dots, b_n\) \((1 \le b_i \le 10^{9})\).

Выходные данные

Если невозможно получить арифметическую прогрессию с помощью описанных операций, выведите -1. В противном случае, выведите неотрицательное целое число — минимальное количество элементов последовательности, которые нужно изменить на единицу таким образом, чтобы последовательность стала арифметической прогрессией.

Примечание

В первом примере нужно увеличить первое число на \(1\), уменьшить второе число на \(1\), увеличить третье число на \(1\), а четвертое число оставить без изменений. Таким образом, после изменения на единицу трех элементов, получим последовательность \([25, 20, 15, 10]\), которая является арифметической прогрессией.

Во втором примере не нужно изменять ни одного элемента, так как данная последовательность является арифметической прогрессией.

В третьем примере невозможно получить арифметическую прогрессию.

В четвертом примере нужно изменить только первый элемент, уменьшив его на единицу. После этого получим последовательность \([0, 3, 6, 9, 12]\), которая является арифметической прогрессией.

D. Куро, НОД, побитовое исключающее ИЛИ, сумма и все-все-все

Бинарный поиск битмаски Деревья дп жадные алгоритмы математика Перебор снм Строки Структуры данных теория чисел *2200

Куро играет в обучающую игру про числа. Основные математические операции в этой игре — наибольший общий делитель, побитовое исключающее ИЛИ и сумма двух чисел. Куро так любит эту игру, что проходит уровень за уровнем изо дня в день.

К сожалению, Куро уезжает в отпуск и будет неспособна продолжить череду решений. Поскольку Кэти — надёжный человек, Куро попросил её прийти к нему домой в этот день и поиграть за него.

Изначально дан пустой массив \(a\). Игр состоит из \(q\) запросов двух разных типов. Запросы первого типа просят Кэти добавить число \(u_i\) в массив \(a\). Запросы второго типа просят Кэти найти такое число \(v\), принадлежащее массиву \(a\), что \(k_i \mid GCD(x_i, v)\), \(x_i + v \leq s_i\), и \(x_i \oplus v\) максимально, где \(\oplus\) обозначает операцию побитового исключающего ИЛИ, \(GCD(c, d)\) обозначает наибольший общий делитель целых чисел \(c\) и \(d\), а \(y \mid x\) означает, что \(x\) делится на \(y\), или же вывести -1, если таких чисел в массиве нет.

Поскольку вы программист, Кэти просит вас написать программу, которая будет автоматически и точно выполнять внутриигровые запросы, чтобы выполнить поручения Куро. Давайте поможем ей!

Входные данные

В первой строке содержится одно целое число \(q\) (\(2 \leq q \leq 10^{5}\)) — число внутриигровых запросов.

Далее следует \(q\) строк, каждая из которых начинается с целого числа \(t_i\) — типа запроса:

  • Если \(t_i = 1\), далее следует целое число \(u_i\) (\(1 \leq u_i \leq 10^{5}\)) — вам необходимо лобавить \(u_i\) в массив \(a\).
  • Если \(t_i = 2\), далее следует три целых числа \(x_i\), \(k_i\) и \(s_i\) (\(1 \leq x_i, k_i, s_i \leq 10^{5}\)). Это означает, что вам необходимо найти такое число \(v\), принадлежащее массиву \(a\), что \(k_i \mid GCD(x_i, v)\), \(x_i + v \leq s_i\), а \(x_i \oplus v\) максимально, где \(\oplus\) обозначает побитовое исключающее ИЛИ, или вывести -1, если таких чисел в массиве нет.

Гарантируется, что первый запрос имеет тип \(1\) и что существует хотя бы один запрос типа \(2\).

Выходные данные

Для каждого запроса типа \(2\) выведите запрашиваемое число \(v\) или -1, если таких чисел не найдено, в отдельной строке.

Примечание

В первом примере необходимо выполнить пять запросов:

  • Первый запрос просит вас добавить \(1\) в \(a\). Теперь \(a\) — \(\left\{1\right\}\).
  • Второй запрос просит вас добавить \(2\) в \(a\). Теперь \(a\) — \(\left\{1, 2\right\}\).
  • Третий запрос просит вас найти ответ с \(x = 1\), \(k = 1\) и \(s = 3\). И \(1\), и \(2\) удовлетворяют условиям на \(v\), так как \(1 \mid GCD(1, v)\) и \(1 + v \leq 3\). Поскольку \(2 \oplus 1 = 3 > 1 \oplus 1 = 0\), ответом на этот запрос будет \(2\).
  • Четвёртый запрос просит вас найти ответ с \(x = 1\), \(k = 1\) и \(s = 2\). Только \(v = 1\) удовлетворяет условия \(1 \mid GCD(1, v)\) и \(1 + v \leq 2\), поэтому ответом на этот запрос будет \(1\).
  • Пятый запрос просит вас найти ответ с \(x = 1\), \(k = 1\) и \(s = 1\). В \(a\) нет удовлетворяющих условиям элементов, поэтому мы выводим -1 как ответ на этот запрос.

A. Помогите Василисе Премудрой

Перебор реализация *1700

Василисе Премудрой из Тридевятого царства, Тридесятого государства ее подруга Хелависа Премудрая из Тридесятого царства, Тридевятого государства прислала чудесный ларчик с секретом. Однако в чем секрет ларчика Василиса Премудрая пока не знает, потому что не может его открыть. Она надеется, что вы поможете ей в этом.

Замок ларчика устроен следующим образом. Сам ларчик представляет собой абсолютно идеальный черный куб с одинаковым углублением в каждой из граней (заморские нанотехнологии, пока еще не освоенные в Осколково). К ларчику прилагаются шесть самоцветов той же формы, что и углубления в его гранях. Открыть ларчик можно только после того, как его правильно инкрустировать самоцветами — то есть вставить в углубление каждой грани ровно по одному самоцвету. Две инкрустации считаются одинаковыми, если они могут быть получены одна из другой произвольными вращениями ларчика (вспомните, ларчик представляет собой идеальный нанотехнологический куб).

Теперь Василиса Премудрая хочет по набору цветов самоцветов определить, сколько различных инкрустаций куба ей придется сделать в худшем случае для открытия ларчика. Для ответа на этот вопрос полезно знать, что два самоцвета одного цвета являются неразличимыми. Помогите Василисе решить эту нелегкую задачу.

Входные данные

В первой строке без пробелов записано ровно 6 символов из множества {R, O, Y, G, B, V} — цвета самоцветов, которыми нужно инкрустировать грани ларчика.

Выходные данные

Выведите искомое количество различных инкрустаций.

A. Антипалиндром

Перебор реализация Строки *900

Строка называется палиндромом, если она одинаково читается слева направо и справа налево. Например, строки «kek», «abacaba», «r» и «papicipap» — палиндромы, а строки «abb» и «iq» — нет.

Подстрокой \(s[l \ldots r]\) (\(1 \leq l \leq r \leq |s|\)) строки \(s = s_{1}s_{2} \ldots s_{|s|}\) называется строка \(s_{l}s_{l + 1} \ldots s_{r}\).

Девушка Анна очень боится палиндромов, поэтому она предпочитает, чтобы ее называли Анн. Таким же образом в своем воображении она меняет слова-палиндромы на другие слова. А именно, она меняет слово \(s\) на самую длинную подстроку, которая не является палиндромом. Если же все совсем плохо и все подстроки слова \(s\) являются палиндромами, она и вовсе пропускает это слово из виду.

Не так давно во время чтения книги Анн увидела слово \(s\). Скажите, в слово какой длины оно превратилось в ее воображении?

Входные данные

В первой строке расположена непустая строка \(s\) длиной не более \(50\) символов, состоящая из строчных латинских букв.

Выходные данные

Если существует подстрока строки \(s\), которая не является палиндромом, выведите длину самой длинной такой подстроки. Иначе выведите \(0\).

Обратите внимание, самых длинных подстрок, не являющихся палиндромами, может быть несколько, однако их длина определяется однозначно.

Примечание

«mew» не является палиндромом, поэтому подстрока максимальной длины строки «mew», не являющаяся палиндромом, это вся строка. Таким образом, ответ на первый тест из примера это \(3\).

Строка «uffuw», не являющаяся палиндромом, является подстрокой длины \(5\) строки «wuffuw», таким образом ответ на второй тест из примера это \(5\).

Все подстроки строки «qqqqqqqq» состоят из одинаковых букв, поэтому являются палиндромами, таким образом, у этой строки не существует подстроки, не являющейся палиндромом, и ответ на третий тест из примера это \(0\).

A. Ряд

Конструктив Перебор *1200

Есть ряд из \(n\) кресел. Назовем рассадку людей в ряду «максимальной», если выполняются следующие два правила:

  1. Ни у кого из сидящих в ряду нет соседей.
  2. Невозможно посадить еще одного человека так, чтобы не нарушалось первое правило.

Вам дана строка, состоящая из нулей и единиц и описывающая рассадку людей в ряду (\(0\) — кресло пустое, \(1\) — кресло занято). Вам необходимо по данной строке определить, является ли рассадка максимальной.

Обратите внимание, первое и последнее кресла не являются соседними (если \(n \ne 2\)).

Входные данные

В первой строке входных данных дано целое положительное число \(n\) (\(1 \leq n \leq 1000\)) — количество кресел в ряду.

Вторая строка содержит строку длины \(n\), состоящая из нулей и единиц — описание рассадки.

Выходные данные

Выведите «Yes» (без кавычек), если рассадка максимальная, иначе выведите «No».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом тестовом примере представлена максимальная рассадка.

Во втором тестовом примере у сидящего на третьем слева кресле есть сосед, сидящий на четвертом.

В третьем тестовом примере можно посадить еще одного человека на третье кресло, не нарушая первого правила.

D. Акула

Деревья Перебор снм Структуры данных *1900

Уже давно ученые наблюдают занятное поведение акул. Акулы, как и многие другие живые существа, в поисках пищи чередуют перемещения на маленькие отрезки внутри одной локации с переходами на более длительные расстояния между локациями.

Максу, начинающему биологу, досталась распечатка, содержащая перемещения акулы за каждый из \(n\) последовательных дней в течение года. Длины всех передвижений оказались различными. По этим данным Макс решил посчитать, какое же количество локаций посетила морская хищница. Он предположил, что существует такое число \(k\), что, если за один день акула переместилась на расстояние, строго меньшее \(k\), то она не поменяла локацию; если же акула переместилась на расстояние, большее или равное \(k\), то в этот день она перемещалась на новую локацию. При этом перемещение на новую локацию могло занять несколько дней, в каждый из которых акула переместилась на расстояние, не меньшее \(k\).

Акула никогда не возвращается на старую локацию после того, как она ушла из нее. Таким образом, в последовательности из \(n\) дней можно выделить отрезки, в течение которых акула перемещалась на расстояния, меньшие \(k\): это соответствует одной локации. Аркадий хочет выбрать такое \(k\), чтобы длины всех таких отрезков были одинаковы.

Найдите такое целое число \(k\), что количество локаций в перемещениях акулы максимально возможно. Если существует несколько таких \(k\), выведите минимальное.

Входные данные

В первой строке входных данных дано целое положительное число \(n\) (\(1 \leq n \leq 10^5\)) — количество дней.

Во второй строке даны \(n\) различных положительных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — длины передвижений в каждый из дней.

Выходные данные

Выведите целое число \(k\) такое, что:

  1. на каждой локации акула провела равное количество дней;
  2. среди вариантов, удовлетворяющих первому условию, число локаций максимально возможное;
  3. среди вариантов, удовлетворяющих первому и второму условию, \(k\) минимально возможное.
Примечание

В первом тестовом примере перемещения по локации являются перемещения в \(1\)-й и \(2\)-й дни (первая локация), в \(4\)-й и \(5\)-й (вторая локация), в \(7\)-й и \(8\)-й (третья локация). Таким образом, всего локаций три.

Во втором примере перемещений по локации является только перемещение во \(2\)-й день. Всего одна локация.

E. Задача Принца

Деревья математика Перебор Структуры данных теория чисел *2800

Действующими лицами этой задачи будут герои какого-нибудь недавно вышедшего в прокат фильма. Кажется, в последнее время много мемов по «Мстители: Война бесконечности». Я не смотрел ни одной части, поэтому лишь смутно знаю героев. Впрочем, это не помешает мне использовать их в задаче. Пусть героями нашей задачи будут Танос и Доктор Стрендж. Итак, Танос и Доктор Стрендж занимаются своими супергеройскими и суперзлодейскими делами, как вдруг они наталкиваются на обычную задачу по спортивному программированию.

Есть дерево размера \(n\).

В каждой вершине \(v\) записано целое положительное число \(a_{v}\).

Нужно ответить на \(q\) запросов.

Запрос задаётся в виде \(u\) \(v\) \(x\).

Нужно посчитать \(\prod_{w \in P} gcd(x, a_{w}) \mod (10^{9} + 7)\), где \(P\) — множество вершин, лежащих на пути из \(u\) в \(v\). Иными словами, вычислите произведение \(gcd(x, a_{w})\) для всех вершин \(w\) на пути от \(u\) до \(v\). Так как произведение может быть большим, выведите его по модулю \(10^9+7\). Здесь \(gcd(s, t)\) обозначает наибольший общий делитель \(s\) и \(t\).

Обратите внимание, что сами числа в вершинах не изменяются.

Думаю, вам интереснее было бы смотреть на супергеройские похождения Доктора Стренджа и Таноса, чем на то, как они решают задачку. Поэтому вам предлагается решить задачу вместо них.

Входные данные

В первой строке записано одно целое число \(n\) — размер дерева (\(1 \le n \le 10^{5}\)).

В следующих \(n-1\) строках описываются рёбра дерева по одному в строке. \(i\)-е ребро описывается двумя целыми числами \(u_{i}\) и \(v_{i}\) (\(1 \le u_{i}, v_{i} \le n\)), которые означают, что ребро соединяет вершины \(u_{i}\) и \(v_{i}\). Гарантируется, что данные ребра задают дерево.

В следующей строке записаны \(n\) целых положительных чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_{v} \le 10^{7}\)).

В следующей строке записано одно целое положительное число \(q\) (\(1 \le q \le 10^{5}\)) — количество запросов.

Наконец, в \(q\) строках описываются запросы, каждое описывается тремя целыми числами \(u_{i}\), \(v_{i}\) и \(x_{i}\) (\(1 \le u_{i}, v_{i} \le n\), \(1 \le x_{i} \le 10^{7}\)).

Выходные данные

Выведите \(q\) чисел в отдельных строках — ответы на запросы в том порядке, в котором они заданы во входных данных. Выведите каждый ответ по модулю \(10^9+7 = 1000000007\).

C. Три табло

дп Перебор реализация *1400

Середина 2018-го года и на границе Краснокаменска, что в Забайкальском крае, Мария Степановна хочет арендовать три электронных табло для обращения внимания жителей на важную проблему.

Вдоль дороги в один ряд стоят \(n\) электронных табло, причем на \(i\)-м табло текст может отображаться только со шрифтом размера \(s_i\). Мария Степановна хочет арендовать три таких табло с индексами \(i < j < k\), что размер шрифта строго увеличиваются при проезде в определенную сторону, а именно, должно выполняться \(s_i < s_j < s_k\).

Стоимость аренды \(i\)-го табло равна \(c_i\). Определите, какую минимальную стоимость должна заплатить Мария Степановна.

Входные данные

В первой строке находится одно целое число \(n\) (\(3 \le n \le 3\,000\)) — число электронных табло.

Во второй строке находятся \(n\) целых чисел \(s_1, s_2, \ldots, s_n\) (\(1 \le s_i \le 10^9\)) — размеры шрифтов на табло при движении вдоль дороги.

В третьей строке находятся \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 10^8\)) — стоимости аренды табло.

Выходные данные

Если не существует трех подходящих табло, выведите -1. В противном случае, выведите одно целое число — минимальную стоимость аренды трех табло с индексами \(i < j < k\) таких, что \(s_i < s_j < s_k\).

Примечание

В первом примере можно, например, выбрать табло \(1\), \(4\) и \(5\), так как \(s_1 < s_4 < s_5\) (\(2 < 4 < 10\)), а суммарная стоимость равна \(40 + 10 + 40 = 90\).

Во втором примере невозможно выбрать подходящую тройку табло, поэтому ответ -1.

A. Разнообразная команда

Перебор реализация *800

В классе учится \(n\) школьников, рейтинг \(i\)-го из них на сайте Codehorses равен \(a_i\). Требуется выбрать команду из \(k\) школьников (\(1 \le k \le n\)) такую, что рейтинги всех членов этой команды различны.

Если невозможно выбрать требуемую команду, выведите «NO» (без кавычек). Иначе же выведите «YES» и \(k\) различных чисел — номера школьников, которые могут составить требуемую команду. Если ответов несколько, то выведите любой из них.

Входные данные

В первой строке входных данных записано два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 100\)) — количество школьников и размер команды.

В следующей строке записано \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\)), где \(a_i\) — рейтинг \(i\)-го школьника.

Выходные данные

Если невозможно выбрать требуемую команду, выведите «NO» (без кавычек). Иначе в первую стороку выведите «YES». Во вторую строку выведите \(k\) различных целых чисел от \(1\) до \(n\) — номера школьников, которые могут составить требуемую команду. Все рейтинги членов выбранной команды должны быть различны. Номера можно выводить в любом порядке. Если ответов несколько, то выведите любой из них.

Считайте, что школьники пронумерованы от \(1\) до \(n\).

Примечание

Все возможные ответы для первого тестового примера:

  • {1 2 5}
  • {2 3 5}
  • {2 4 5}

Заметьте, что порядок не важен.

D. Точки и степени двойки

математика Перебор *1800

На координатной прямой заданы \(n\) точек с различными целочисленными координатами, координата \(i\)-й точки равна \(x_i\). Выберите такое наибольшее по количеству точек подмножество заданного множества точек, что расстояния между любой парой точек в этом подмножестве — степень двойки. Следует рассматривать все возможные пары точек из подмножества, а не только соседние. Заметим, что любое подмножество из одного элемента удовлетворяет описанному выше требованию.

Иными словами, нужно выбрать такое наибольшее подмножество точек \(x_{i_1}, x_{i_2}, \dots, x_{i_m}\), что для любой пары \(x_{i_j}\), \(x_{i_k}\) должно выполняться, что \(|x_{i_j} - x_{i_k}| = 2^d\), где \(d\) — целое неотрицательное число. Это число может быть различным для разных пар точек.

Входные данные

В первой строке входных данных задано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество точек.

В следующей строке задано \(n\) различных целых чисел \(x_1, x_2, \dots, x_n\) (\(-10^9 \le x_i \le 10^9\)) — координаты точек.

Выходные данные

В первой строке выведите \(m\) — количество точек в наибольшем по размеру подмножестве, которое удовлетворяет описанному в условии ограничению.

В следующей строке выведите \(m\) целых чисел — координаты точек из этого подмножества.

Если решений несколько, выведите любое из них.

Примечание

В первом примере ответ равен \([7, 3, 5]\). Заметим, что \(|7-3|=4=2^2\), \(|7-5|=2=2^1\) и \(|3-5|=2=2^1\). Не существует подмножества с большим количеством точек, удовлетворяющего условию задачи.

E. Делимость на 25

жадные алгоритмы Перебор *2100

Задано целое число \(n\) от \(1\) до \(10^{18}\), записанное без лидирующих нулей.

За один ход можно поменять в нём любую такую пару соседних цифр местами, что в результате получается число без лидирующих нулей. Иными словами, после каждого хода должно получаться число без лидирующих нулей.

Какое наименьшее количество ходов надо последовательно совершить, чтобы получилось число, которое делится на \(25\)? Выведите -1, если не существует такой последовательности ходов, которая приводит к числу, кратному \(25\).

Входные данные

В первой строке входных данных задано целое число \(n\) (\(1 \le n \le 10^{18}\)). Гарантируется, что первая (левая) цифра числа \(n\) отлична от нуля.

Выходные данные

Если не существует такой последовательности ходов, которая приводит к числу, кратному \(25\), выведите -1. В противном случае выведите минимальное количество ходов в такой последовательности.

Обратите внимание, что вы можете менять местами только соседние цифры.

Примечание

В первом тестовом примере одна из возможных последовательностей ходов следующая: 5071 \(\rightarrow\) 5701 \(\rightarrow\) 7501 \(\rightarrow\) 7510 \(\rightarrow\) 7150.

E. Уличные фонари

жадные алгоритмы Перебор *2100

Дом Адилбека расположен на улице, которая может быть представлена, как ось OX. На этой улице очень темно, поэтому Адилбек хочет установить фонари, чтобы осветить ее. На улице есть \(n\) позиции для установки фонарей, они соответствуют целым числам от \(0\) до \(n - 1\) на оси OX. Однако, некоторые позиции заблокированы, в них нельзя установить фонари.

Существуют фонари различных типов, они отличаются только своей мощностью. Когда фонарь мощности \(l\) устанавливают на позицию \(x\), сегмент улицы \([x; x + l]\) становится освещен. Мощность любого фонаря — это положительное целое число.

Магазин по продаже фонарей имеет ассортимент из бесконечного количество фонарей мощности от \(1\) до \(k\). Однако, каждый покупатель может купить фонари ровно одного типа. Каждый фонарь мощности \(l\) стоит \(a_l\).

Какую минимальную цену придется заплатить Адилбеку за покупку фонарей ровно одного типа таких, что они могут осветить весь отрезок улицы \([0; n]\)? Некоторые фонари могут освещать и другие отрезки улицы, эти отрезки Адилбеку не важны. Например, он может поставить фонарь мощности \(3\) в позицию \(n - 1\) (даже несмотря на то, что он освещает участок, который не полностью принадлежит \([0; n]\)).

Входные данные

В первой строке записаны три целых числа \(n\), \(m\) and \(k\) (\(1 \le k \le n \le 10^6\), \(0 \le m \le n\)) — длина отрезка улицы, который Адилбек хочет осветить, количество заблокированных позиций и максимальная доступная мощность фонарей.

Во второй строке записаны \(m\) целых чисел \(s_1, s_2, \dots, s_m\) (\(0 \le s_1 < s_2 < \dots s_m < n\)) — заблокированные позиции.

В третьей строке записаны \(k\) целых чисел \(a_1, a_2, \dots, a_k\) (\(1 \le a_i \le 10^6\)) — цены фонарей.

Выходные данные

Выведите минимальную цену придется заплатить Адилбеку за покупку фонарей ровно одного типа таких, что они могут осветить весь отрезок улицы \([0; n]\).

Если невозможно осветить весь отрезок улицы \([0; n]\), то выведите -1.

E. Номер автобуса

Комбинаторика математика Перебор *1800

Вечер выдался не из легких... Вася играл безупречно, но, как это часто бывает, его подводила команда. Поражения следовали одно за другим, а Васе очень нужна была победа! Неудивительно, что в итоге Вася лёг спать чуть позже запланированного времени и совершенно не выспался.

Утром Вася пришел на остановку стал ждать автобус до университета. Мысли путались в светлой голове Васи, поэтому он не смог вспомнить номер нужного ему автобуса и сел в первый попавшийся — им оказался автобус с номером \(n\).

Сев в автобус, Вася подумал, что из-за своего состояния он мог перепутать порядок цифр в номере автобуса. Более того, некоторые цифры он мог «увидеть» несколько раз, но те цифры, которые он увидел, точно были в настоящем номере автобуса. Например, если Вася увидел номер 2028, то в оригинале номер автобуса мог быть 2028, 8022, 2820 или даже просто 820. При этом, например, номера 80, 22208, 52 точно не могли быть номером автобуса. Кроме того, разумеется, номер автобуса не начинался на цифру 0, поэтому, номер 082 тоже не мог быть настоящим номером автобуса.

По заданному числу \(n\) необходимо определить, сколько существует вариантов исходного номера автобуса.

Входные данные

В первой строке задано натуральное число \(n\) — номер автобуса, который увидел Вася (\(1 \leq n \leq 10^{18}\)). Гарантируется, что номер не начинается с цифры \(0\).

Выходные данные

Вывести единственное число — количество возможных вариантов настоящего номера автобуса.

Примечание

В первом примере возможны лишь варианты \(97\) и \(79\).

Во втором примере возможные номера автобуса (в порядке возрастания): \(208\), \(280\), \(802\), \(820\), \(2028\), \(2082\), \(2208\), \(2280\), \(2802\), \(2820\), \(8022\), \(8202\), \(8220\).

F. Отобразить число

жадные алгоритмы математика Перебор реализация *2700

Вася регулярно участвует в соревнованиях по программированию. Он уже привык к достаточно длинным условиям задач и научился быстро выделять важные предложения среди множества слов. Разумеется, ограничения на входные данные и другие числа в описании задачи — очень важная часть условий, например, разложить на простые множители число до 1000000 проще, чем число до 1000000000. Однако, Вася заметил, что зачастую запись числа получается очень длинной и сложной для восприятия. Может, авторы задачи могли ее сократить? Например, вместо 1000000 можно написать \(10^{6}\), вместо 1000000000\(10^{9}\), а вместо 1000000007\(10^{9}+7\).

Вася решил, что запись числа для удобства восприятия должна подчиняться следующим правилам:

  • запись должна содержать только числа, операции сложения («+»), умножения («*») и возведения в степень («^»), в частности, использование скобок не допускается;
  • нельзя использовать несколько операций возведения в степень подряд, например, запись «2^3^4» недопустима;
  • значение записанного выражения должно равняться исходному числу;
  • запись должна содержать наименьшее возможное количество символов.

По заданному числу \(n\) найдите для него эквивалентную запись, удобную для восприятия.

Входные данные

Единственная строка содержит натуральное число \(n\) (\(1 \leq n \leq 10\,000\,000\,000\)).

Выходные данные

Вывести удобную для восприятия запись числа \(n\). Если существует несколько таких записей, выведите любую из них.

Примечание

В третьем примере так же допустим ответ 10^10, тоже имеющий длину \(5\).

D. Настя и игра

математика Перебор реализация *2100

На день рождения Насте подарили еще один массив, на котором можно играть в широко известную в Байтландии национальную игру. Однако, для этой игры нужно сначала выбрать такой подотрезок массива, что , где p — произведение всех чисел на этом отрезке, s — их сумма, а k — константа, одинаковая для всего массива.

Насте стало интересно, а сколько подотрезков массива удовлетворяют вышеописанным условиям? Подотрезком называется несколько подряд идущих элементов массива.

Входные данные

В первой строке входных данных записаны два целых числа n и k (1 ≤ n ≤ 2·105, 1 ≤ k ≤ 105), где n — длина массива, а k — константа, описанная выше.

Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 108) — элементы массива.

Выходные данные

В единственной строке требуется вывести количество подотрезков массива, на которых отношение произведения к сумме элементов равно k.

Примечание

В первом примере единственный подотрезок в массиве — [1]. В нем сумма равна 1, произведение равно 1, значит, он подходит под условие, так как .

Во втором примере есть два подходящих подотрезка — [6, 3] и [3, 8, 1]. Подотрезок [6, 3] имеет сумму 9, а произведение 18, следовательно, подходит, так как . Подотрезок [3, 8, 1] имеет сумму 12, а произведение 24, следовательно, подходит, так как . Все остальные подотрезки массива не подходят.

B. Открытый протокол

битмаски Перебор *1900

Двум участникам предоставили по паре чисел от 1 до 9, так что ровно одно число встречается в обеих парах. Они хотят определить, какое число в их парах совпадает, используя канал связи, к которому у вас есть доступ, так, чтобы вы не могли определить это число.

Оба участника передали друг другу множество пар чисел, которое включает пару, данную им. Каждая пара состоит из двух различных чисел.

Определите, можете ли вы однозначно определить число, которое совпадает у двух участников, или верно ли, что оба участника могут определить это число, а вы — нет.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 12\)) — количество пар, которые первый участник передал второму и наоборот.

Во второй строке \(n\) пар целых чисел, каждое от \(1\) до \(9\), — пары чисел, который первый участник передал второму.

В третьей строке \(m\) пар целых чисел, каждое от \(1\) до \(9\), — пары чисел, которые второй участник передал первому.

Все пары внутри каждого из двух множеств будут уникальными (в частности, если в множестве есть пара \((1,2)\), в нем не будет пары \((2,1)\)). Каждая пара содержит два различных числа.

Гарантируется, что переданные множества пар не противоречат условию, иными словами, существуют пара в первом множестве и пара во втором множестве, у которых совпадает ровно одно число.

Выходные данные

Если вы можете однозначно определить число, которое совпадает, выведите это число.

Иначе, если вы можете однозначно утверждать, что оба участника знают это число, а вы — нет, выведите \(0\).

Иначе выведите \(-1\).

Примечание

В первом примере первый участник передал пары \((1,2)\) и \((3,4)\), а второй – \((1,5)\), \((3,4)\). Поскольку вы знаете, что реальные пары имеют ровно одно общее число, не может быть, чтобы оба участника видели \((3,4)\). Значит, числа у первого участника — \((1,2)\), а у второго — \((1,5)\), и вы однозначно знаете, что общее число — \(1\).

Во втором примере либо у первого участника пара \((1,2)\), а у второго пара \((1,5)\), либо у первого пара \((3,4)\), а у второго пара \((6,4)\). В первом случае они оба знают что общее число — \(1\), а во втором они оба знают, что общее число — \(4\). У вас нет достаточной информации, чтобы отличить \(1\) от \(4\).

В третьем примере у первого участника пара \((1,2)\), и он не может определить число, так как с его точки зрения у второго участника может быть либо \((1,3)\), и тогда общее число — \(1\), либо \((2,3)\), и тогда общее число — \(2\). Несмотря на то, что второй участник однозначно знает общее число, ни вы, ни первый участник не знаете его, следовательно правильный вывод для теста — \(-1\).

C. Аккуратное маневрирование

битмаски геометрия Перебор *2100

Два небольших космических корабля окружены двумя группами вражеских больших космических кораблей. Все происходит на плоскости, и одна группа вражеских кораблей расположена так, что все \(y\)-координаты их кораблей целочисленные, а \(x\)-координаты равны \(-100\), в то время как у второй группы вражеских кораблей тоже \(y\)-координаты целочисленны, но их \(x\)-координаты равны \(100\).

Каждый корабль в обеих группах одновременно сделает два выстрела из лазера (такой выстрел – это бесконечный луч, который уничтожает любой корабль на своем пути): по одному точно в направлении каждого маленького космического корабля. Все выстрелы будут сделаны одновременно. Маленькие космические корабли смогут легко увернуться от этих выстрелов, и сейчас хотят расположить себя в каких-то позициях с \(x=0\) (и не обязательно целыми \(y\)), чтобы эти лучи уничтожили как можно больше вражеских кораблей. Найдите максимальное количество вражеских кораблей, которые можно так уничтожить, считая, что вражеские корабли не смогут увернуться.

Входные данные

В первой строке находятся два целых числа \(n\) и \(m\) (\(1 \le n, m \le 60\)) — количество вражеских кораблей группе с \(x = -100\) и количество вражеских кораблей в группе c \(x = 100\), соответственно.

Вторая строка содержит \(n\) целых чисел \(y_{1,1}, y_{1,2}, \ldots, y_{1,n}\) (\(|y_{1,i}| \le 10\,000\)) — \(y\)-координаты кораблей в первой группе.

Третья строка содержит \(m\) целых чисел \(y_{2,1}, y_{2,2}, \ldots, y_{2,m}\) (\(|y_{2,i}| \le 10\,000\)) — \(y\)-координаты кораблей во второй группе.

\(y\)-координаты не обязательно уникальны, даже в пределах одной группы.

Выходные данные

Выведите одно число — максимальное количество вражеских кораблей, которое можно уничтожить.

Примечание

В первом примере один корабль может расположиться в \((0, 2)\), а второй – в \((0, 7)\). Так все корабли в первой группе и \(6\) из \(9\) кораблей во второй группе будут уничтожены.

Во втором примере один корабль может расположиться в \((0, 3)\), а второй – в любом месте, этого будет достаточно, чтобы уничтожить все вражеские корабли.

C. Из бара домой

геометрия жадные алгоритмы математика Перебор сортировки Структуры данных *2300

Для вектора \(\vec{v} = (x, y)\), определим длину \(|v| = \sqrt{x^2 + y^2}\).

Аллен немного перебрал в баре, который находится в начале координат. Существуют \(n\) векторов \(\vec{v_1}, \vec{v_2}, \cdots, \vec{v_n}\). Аллен сделает \(n\) шагов. Так как Аллен дезориентирован, на \(i\)-м шаге он либо сделает шаг на вектор \(\vec{v_i}\), либо на вектор \(-\vec{v_i}\). Другими словами, если его позиция сейчас равна \(p = (x, y)\), то он окажется либо в \(p + \vec{v_i}\), либо в \(p - \vec{v_i}\).

Аллен не хочет уйти далеко от дома (он также находится в баре). Помогите ему найти последовательность шагов (последовательность знаков векторов) такую, чтобы его финальная позиция \(p\) удовлетворяла ограничению \(|p| \le 1.5 \cdot 10^6\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество шагов.

В каждой из следующих строк содержится два целых числа \(x_i\) и \(y_i\), описывающих вектор \(\vec{v_i} = (x_i, y_i)\). Гарантируется, что \(|v_i| \le 10^6\) выполняется для всех \(i\).

Выходные данные

Выведите единственною строку, содержащую \(n\) целых чисел \(c_1, c_2, \cdots, c_n\), каждое из которых равно либо \(1\), либо \(-1\). Ваше решение будет зачтено, если финальная позиция \(p = \sum_{i = 1}^n c_i \vec{v_i}\) удовлетворяет \(|p| \le 1.5 \cdot 10^6\).

Можно показать, что решение всегда существует при данных ограничениях.

A. Превратить в единицы

жадные алгоритмы математика Перебор реализация *1500

Вам дана строка \(a_1, a_2, \dots, a_n\), состоящая из нулей и единиц.

Назовем последовательность подряд идущих элементов \(a_i, a_{i + 1}, \ldots, a_j\) (\(1\leq i\leq j\leq n\)) подстрокой строки \(a\).

К строке можно неограниченное количество раз последовательно применять следующие операции:

  • выбрать любую подстроку (в частности, допустимо выбрать всю строку) строки \(a\) и развернуть ее, заплатив за это \(x\) монет (например, «0101101» \(\to\) «0111001»);
  • выбрать любую подстроку (в частности, допустимо выбрать всю строку или один символ) строки \(a\) и заменить каждый символ на противоположный ему (то есть нули заменяются на единицы, а единицы — на нули), заплатив за это \(y\) монет (например, «0101101» \(\to\) «0110001»).

Вы можете применять операции в любом порядке. Допустимо к одной и той же подстроке применять любую или обе операции неоднократно.

Какое минимальное количество монет потребуется потратить, чтобы получить строку, состоящую только из единиц?

Входные данные

В первой строке записаны целые числа \(n\), \(x\) и \(y\) (\(1 \leq n \leq 300\,000, 0 \leq x, y \leq 10^9\)) — длина строки, стоимость первой операции (разворота подотрезка) и стоимость второй операции (инвертирования всех элементов некоторого подотрезка) соответственно.

Во второй строке записана строка \(a\) длины \(n\), состоящая из нулей и единиц.

Выходные данные

Выведите единственное целое число — минимальную суммарную стоимость изменений, необходимых для получения строки, состоящей только из единиц. Выведите \(0\), если не требуется совершать никаких изменений.

Примечание

В первом примере нужно сначала перевернуть подстроку \([1 \dots 2]\), а затем инвертировать подстроку \([2 \dots 5]\).

Тогда строка изменялась так:

«01000» \(\to\) «10000» \(\to\) «11111».

И затраченная стоимость соответственно равна \(1 + 10 = 11\).

Во втором примере нужно сначала инвертировать подстроку \([1 \dots 1]\), а затем инвертировать подстроку \([3 \dots 5]\).

Тогда строка изменялась так:

«01000» \(\to\) «11000» \(\to\) «11111».

И затраченная стоимость соответственно равна \(1 + 1 = 2\).

В третьем примере строка уже состоит только из единиц, поэтому ответ \(0\).

B. Римские цифры

дп жадные алгоритмы Комбинаторика математика Перебор *2000

Рассмотрим систему счисления, основанную на упрощенных римских цифрах. Есть цифры I, V, X, L соответствующие значениям \(1\), \(5\), \(10\) и \(50\) соответственно. Другие римские цифры использовать нельзя.

Числа в такой системе счисления записываются как последовательности из одной или более цифр. Определим значение записи просто как сумму всех цифр в ней.

Например, запись XXXV соответствует числу \(35\), а запись IXI — числу \(12\).

Заметим, что это отличается от традиционной римской системы счисления — например, любая последовательность цифр является корректной, а также порядок цифр не имеет значения (например, запись IX означает \(11\), а не \(9\)).

Несложно заметить, что одно и то же число можно выразить несколькими способами. Вычислите сколько существует различных чисел, которые можно записать используя хотя бы одну запись из ровно \(n\) римских римских цифр I, V, X и L.

Входные данные

В единственной строке входного файла дано целое число \(n\) (\(1 \le n \le 10^9\)) — число римских цифр в записи чисел.

Выходные данные

Выведите одно число — количество различных чисел, которые можно выразить используя ровно \(n\) римских цифр I, V, X и L.

Примечание

В первом примере есть ровно \(4\) различных числа, которые можно получить — I, V, X и L.

Во втором примере можно получить числа \(2\) (II), \(6\) (VI), \(10\) (VV), \(11\) (XI), \(15\) (XV), \(20\) (XX), \(51\) (IL), \(55\) (VL), \(60\) (XL) и \(100\) (LL).

A. Мишка и контест

Перебор реализация *800

Мишка сел писать очередной контест. Всего в контесте \(n\) задач. Умение Мишки решать задачи равно \(k\).

Мишка выписал задачи в список от первой до последней. Из-за понятных только ему принципов Мишка может решать задачи только с концов списка. Каждый раз он выбирает, с какого конца решить очередную задачу — слева или справа. Таким образом, очередная задача, которую решит Мишка, — это либо крайняя левая, либо крайняя правая задача из списка.

Мишка не может решать задачи, сложность которых строго больше \(k\). Когда Мишка решит задачу, она пропадет из списка, тем самым уменьшая его длину на \(1\). Мишка остановится, когда не сможет решить больше ни одну задачу.

Какое количество задач решит Мишка?

Входные данные

В первой строке входных данных задано два целых числа \(n\) и \(k\) (\(1 \le n, k \le 100\)) — количество задач в контесте и умение Мишки решать задачи.

Во второй строке входных данных задано \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\)), где \(a_i\) равняется сложности задачи с номером \(i\). Задачи заданы в порядке их расположения в списке слева направо.

Выходные данные

Выведите одно целое число — максимальное количество задач, которое сможет решить Мишка.

Примечание

В первом тестовом примере Мишка может решать задачи в следующем порядке: \([4, 2, 3, 1, 5, 1, 6, 4] \rightarrow [2, 3, 1, 5, 1, 6, 4] \rightarrow [2, 3, 1, 5, 1, 6] \rightarrow [3, 1, 5, 1, 6] \rightarrow [1, 5, 1, 6] \rightarrow [5, 1, 6]\). Таким образом, количество решенных им задач будет равно \(5\).

Во втором тестовом примере Мишка не может решить ни одной задачи, так как задачи как с левого, так и с правого концов списка имеют сложность, превышающую \(k\).

В третьем тестовом примере Мишка умеет очень хорошо решать задачи и сможет решить их все.