2017-2018 VIII Открытый чемпионат БГУИР по программированию. Полуфинал
A. BSUIR Open
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

А что, если сделать задачу про BSUIR Open, где нужно будет искать подстроку BSUIR Open?

Нет, это сильно просто.

Действительно!

Вам дана строка s состоящая только из цифр и прописных букв латинского алфавита. Вы можете выбрать некоторые символы из этой строки и из выбранных символов составить новую строку. Определите, сколькими способами вы можете получить строку «BSUIROPEN» (без кавычек). Два способа считаются различными, если найдется такой индекс i, что i-й символ строки был выбран только в одном из способов.

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

Вам задана единственная строка s (1 ≤ |s| ≤ 1 000) — исходная строка, состоящая только из цифр и строчных букв латинского алфавита.

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

Выведите единственное число — количество способов получить строку «BSUIROPEN». Так как ответ может быть слишком большим, выведите его по модулю 109 + 7.

Примеры
Входные данные
BSUIROPEN2018
Выходные данные
1
Входные данные
BOSOQIVBONEOMOPTURSOCOS
Выходные данные
42

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

Вы работаете в команде из n человек. У вас сложилась традиция, по которой человек на свой день рождения угощает всех пиццами. Если день рождения выпадает на выходной день, то угощение переносится на понедельник. Вы решили узнать, как часто может случиться так, что в один день угощать пиццами будут сразу несколько человек (хотя бы двое). А именно вы хотите найти математическое ожидание количества таких дней в 2019 году, первое января которого приходится на вторник. Считайте, что все дни рождения равновероятны и независимы для всех людей и что вероятность родиться 29 февраля равна нулю.

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

Единственная строка входных данных содержит одно целое число n (1 ≤ n ≤ 200).

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

В единственной строке выходных данных выведите вещественное число — ответ на задачу. Абсолютная или относительная погрешность не должна превышать 10 - 9.

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

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

Назовем множество X хорошим, если XOR-сумма всех его элементов равна 42.

У вас есть очередь (изначально пустая). Над очередью выполняют n операций двух типов:

  1. добавление элемента в конец очереди;
  2. извлечение элемента из начала очереди.

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

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

В первой строке задано одно целое число n (1 ≤ n ≤ 100 000) — количество запросов.

В следующих n строках записаны операции. Операция первого типа записывается в формате '+ x', где x (0 ≤ x ≤ 42) — число, которое необходимо добавить в очередь. Операция второго типа записывается как символ '-'.

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

Выведите n строк. В каждой строке выведите 'Yes', если после очередной операции можно выделить хорошее подмножество, и 'No' — в противном случае.

Примеры
Входные данные
2
+ 42
-
Выходные данные
Yes
No
Входные данные
5
+ 2
+ 8
+ 32
+ 11
-
Выходные данные
No
No
Yes
Yes
No

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

Однажды, во время вечерней прогулки по лесу, мальчик Вова пришел к реке и увидел, что на другом берегу застрял его друг Ваня. Вове нужно спасти его друга, так как тот не умеет плавать! В реке находится n × (n + 1) островов в виде сетки. Однако между ними нет мостов! Там же на берегу Вова встретил злого волшебника Зедикуса, который согласился помочь только при условии, что Вова решит одну непростую задачу. Вове нужно посчитать количество способов построить мосты так, чтобы существовал хотя бы один путь с одного берега на другой. Помогите Вове решить эту задачу. Вове разрешено строить мосты только между соседними островами.

Более формально, каждый остров имеет координаты (r, c) (1 ≤ r ≤ n, 1 ≤ c ≤ n + 1), где r — номер строки, а c — номер столбца. Если остров имеет координаты (r, c), то соседние острова имеют координаты (r + 1, c), (r, c + 1), (r - 1, c), (r, c - 1), если таковые существуют. Острова, которые находятся в первом и последнем столбце, то есть острова с координатами (r, c), где (т. e. c равно либо 1, либо n + 1), уже соединены с берегами.

Путем с одного берега на другой является такая последовательность островов (r1, c1), (r2, c2), ..., (rk, ck), что для каждого i (1 ≤ i < k) существует мост между островами (ri, ci) и (ri + 1, ci + 1), также остров (r1, c1) находится в первом столбце (c1 = 1), а остров (rk, ck) находится в последнем столбце (ck = n + 1).

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

На данной иллюстрации присутствуют два берега, описанные в условии. Левый берег обозначен через L, а правый через R. Островами на данной иллюстрации являются зеленые кружки. Мостами являются прямоугольники с закругленными углами. Как можно видеть, данная конфигурация мостов содержит путь между левым берегом и правым. Напомним, что мосты между берегом L и левым столбцом островов присутствуют изначально. Тоже самое для правого берега R и правого столбца островов. Также стрелки rows и columns соответствуют осям координат для строк и столбцов.
Входные данные

В единственной строке входных данных содержится единственное целое число n (1 ≤ n ≤ 42) — размерность сетки островов.

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

Выведите единственное целое число — ответ на задачу по модулю 109 + 7.

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

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

Вам дана строка s состоящая только из цифр «1»-«9», символов «a»-«z», «*» и «=» представляющая из себя уравнение. В уравнении присутствуют только операции умножения (символ «*»), целые положительные числа меньшие 10, а также неизвестные переменные. Переменные могут находиться только по левую сторону уравнения, могут встречаться несколько раз, а их имена являются строчными буквами латинского алфавита.

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

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

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

Вам дана единственная строка s (|s| ≤ 1 000) — исходное уравнение. В строке присутсвует ровно один символ «=».

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

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

В единственной строке выведите одно целое число — количество решений данного уравнения по модулю 109 + 7.

Выведите «-1», если уравнение имеет бесконечное количество решений.

Примеры
Входные данные
a*b=4*2
Выходные данные
4
Входные данные
x*y*1=7*9*8*8
Выходные данные
42
Примечание

Все решения для уравнения из первого примера:

  1. a = 1, b = 8
  2. a = 2, b = 4
  3. a = 4, b = 2
  4. a = 8, b = 1

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

Вам дан массив A состоящий из n целых чисел, а также некоторое число k. Вас просят найти такую подпоследовательность массива A, что медиана m данной подпоследовательности будет как можно ближе к числу k, то есть |m - k| — минимально, а среди всех таких  — подпоследовательность с максимальной длиной.

Медианой массива X длины len называется число, находящееся в отсортированном в порядке неубывания массиве X (xi ≤ xi + 1) на позиции , если считать, что индексы массива X начинаются с 1.

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

В первой строке задано два целых числа n и k (1 ≤ n ≤ 200 000, 1 ≤ k ≤ 109) — размер массива A и значение, к которому нужно найти ближайшую медиану, соответственно.

Во второй строке задано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — элементы массива A.

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

В первой строке выведите одно целое число l (1 ≤ len ≤ n) — размер подпоследовательности.

Во второй строке выведите len целых чисел p1, p2, ..., plen (1 ≤ pi ≤ n, pi < pi + 1) — номера элементов массива A, включенных в данную подпоследовательность.

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

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

Назовем цифровой характеристикой числа n некоторую функцию f(n) такую, что:

где g(n) — сумма цифр десятичной записи числа n.

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

Вместо самого числа Ване предложили его описание, по которому можно восстановить это число. Описание представляет из себя четверку чисел a, b, m и k. Чтобы получить исходное число, Ване необходимо в первую очередь сгенерировать k чисел ai таких, что при i > 1, . Полученные числа ему необходимо выписать на листок бумаги в обратном порядке, таким образом получив одно большое число. Для этого числа он и должен найти цифровую характеристику.

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

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

В первой строке задано одно целое число t (1 ≤ t ≤ 10 000) — количество чисел, для которых необходимо вычислить цифровую характеристику.

В следующих t строках записаны описания чисел. Каждое описание состоит из четырех целых чисел a, b, m и k (0 ≤ a, b ≤ 109, 2 ≤ m ≤ 109 + 7, 1 ≤ k ≤ 109) — параметров генерации числа.

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

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

Выведите t строк. В каждой строке выведите ans (0 ≤ ans ≤ 9) — цифровую характеристику соответствующего числа.

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

По первому описанию было получено число 54321. Его цифровая характеристика равна f(54321) = f(15) = f(6) = 6.

По четвертому описанию было получено число 7567146726305885465044624203783362942522101681268442.

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

Пусть f(x) — максимальный четный делитель x или 0, если такого нет.

Вам дано n запросов li, ri. Для каждого запроса вам необходимо найти .

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

В первой строке входных данных содержится одно целое число n (1 ≤ n ≤ 105) — количество запросов.

В каждой из следующих n строк содержатся по два целых числа li и ri (1 ≤ li ≤ ri ≤ 105) — описание i-го запроса.

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

Выведите n строк. В i-й строке выведите одно целое число — ответ на i-й запрос.

Примеры
Входные данные
1
2 12
Выходные данные
42
Входные данные
2
1 42
42 45
Выходные данные
462
86

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

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

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

В первой строке задается два числа n и q (1 ≤ n ≤ 1 000, 1 ≤ q ≤ 30 000) — количество точек и множитель сравнения для сторон соответственно. Множитель q задается ровно с двумя знаками после запятой.

В следующих n строках задается по два целых числа xi yi (|xi|, |yi| ≤ 104) — координаты i-й точки.

Гарантируется, что точки попарно различны и для любой тройки различных точек A B C выполняется условие |D(A, B) - D(A, C) * Q| > 10 - 6, где D(A, B) это евклидово расстояние между точками A и B.

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

В единственной строке выведите искомое количество треугольничков.

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

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

Вова постоянно желает узнать что-то новое. Много чего он спрашивает у Леши. На этот раз Леша дал ему следующую задачу...

Задан массив из n целых чисел a1, a2, ..., an. Необходимо найти такую перестановку p, что будет максимально. Вова пока не придумал решение, но вам выдался шанс придумать решение быстрее его.

Напомним, что операция , она же XOR, она же исключающее ИЛИ. Данной операции соответствует оператор ^ в языках программирования C++ и Java. В языке Pascal за данную операцию отвечает оператор xor. Для чисел 5 и 3 результат операции будет равен: .

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

В первой строке ввода находится целое число n (1 ≤ n ≤ 8) — размер массива A.

В следующей строке находятся n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — массив A.

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

В единственной строке выведите n целых чисел p1, p2, ..., pn (1 ≤ pi ≤ n) — перестановка, при которой достигается максимальная XOR-сумма массива. Напомним, что в перестановке все элементы различны. Если существует несколько правильных ответов, разрешается вывести любой.

Пример
Входные данные
4
21 2 2018 42
Выходные данные
2 4 1 3 

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

Пока скучные соседские дети играют в скучный футбол за окном, маленький Джим играет со своим деревом, состоящим ровно из n вершин. Джим кладет в некоторую вершину S фишку. Игра заканчивается как только фишка окажется в вершине F. Очевидно, что для того, чтобы игра закончилась, фишку нужно как-то передвигать (для наших самых скрупулёзных читатей отметим, что S и F не совпадают). Любая последовательность передвижений, которая хоть сколько-нибудь напоминает Джиму одну из ранее увиденных им последовательностей, кажется ему невероятно скучной. Для того, чтобы избежать невероятно скучных последовательностей, мальчик двигает фишку случайно: если фишка сейчас находится в вершине v, то он равновероятно выбирает одну из соседних c v вершин в дереве и перемещает фишку в нее. Но после того, как Джим сыграл чуть более 4↑↑ 2 раз в данную игру, она также стала казаться ему немного скучной. С другой стороны, большое количество сыгранных игр научило Джима интуитивно понимать, сколько раз в среднем нужно переместить фишку для того, чтобы закончить игру для данных S и F. На следующий день Джим решил, что ставить эксперименты на невинных людях немного интереснее, чем играть с деревом. Для начала, он решил узнать, насколько хорошо справляются с определенем математического ожидания количества перемещений, требуемого для завершения игры другие люди.

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

В первой строке входных данных находятся два числа 2 ≤ n ≤ 105 и 1 ≤ q ≤ 105 — количество вершин в дереве и количество пар вершин S и F, для которых нужно найти матожидание количества перемещений.

Далее следует n - 1 строка, каждая из них содержит числа v и u (1 ≤ ui, vi ≤ n, ui ≠ vi) — номера вершин дерева, соединенных очередным ребром. Гарантируется, что заданный граф представляет собой дерево.

Каждая из следующих q строк содержит числа 1 ≤ Si, Fi ≤ n (Si ≠ Fi) — номера стартовой и конечной вершин для i-го эксперимента.

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

Можно показать, что для любого дерева и заданных стартовой и конечной вершин S, F ответ можно выразить как , где P и Q — взаимно простые целые числа, а . Выведите значение P × Q - 1 по модулю 109 + 7 для каждой пары (Si, Fi) на отдельной строке.

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