2017 Открытый Чемпионат ЯрГУ по спортивному программированию
A. Два коридора
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
64 мегабайта
ввод
стандартный ввод
вывод
стандартный вывод

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

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

В единственной строке входных данных содержатся два целых числа a и b (1  ≤  a, b  ≤  1015).

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

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

Пример
Входные данные
5 5
Выходные данные
14.1421356237

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

Петр – следователь по особо важным делам в городе Брагинске. Совсем недавно из банка организованная банда преступников похитила огромную сумму денег. В местном полицейском участке Петру приказали отыскать воришек. Днём и ночью работал Пётр, но никак не удавалось напасть на след злоумышленников. Однако воскресным днём поступил странный звонок, в котором сообщалось, что некоторая группа людей катается на новеньком maserati по дорогам города, причём каждые несколько часов их замечают на одном и том же перекрёстке. Сомнений не осталось – только те самые преступники могли так дерзко рассекать по городу. Но Петру также известно, что в Брагинске гаишники настолько суровые, что даже похищенных денег не хватит, чтобы от них откупиться, поэтому преступники ездят по правилам (да-да!). Дороги в Брагинске односторонние и каждая из них соединяет ровно два перекрестка. Теперь перед Петром стоит задача попроще – ему нужно узнать, может ли он выбрать перекрёсток, так что, устроив засаду на нём, он гарантировано сможет поймать банду.

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

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

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

Выведите единственное число k – номер перекрестка, на котором Петр должен устроить засаду, если возможных ответов несколько – выведите любой. Если таких перекрестков в Брагинске нет, то выведите «–1» (без кавычек).

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

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

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

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

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

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

Первая строка входных данных содержит одно целое нечетное число n (1  ≤  n  ≤  105) – общее количество слов. Слово – непустая строка из латинских строчных букв длиной не более 100 символов. В каждой из следующих n строк записано ровно по одному слову.

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

Выведите слово, которое забыл переписать в тетрадь Вася.

Примеры
Входные данные
1
brzd
Выходные данные
brzd
Входные данные
5
aa
aa
bb
bb
c
Выходные данные
c
Примечание

Обратите внимание, что в данной задаче стоит ограничение по памяти 6 МБ.

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

В нереально крутой real-time стратегии «Supreme Commander: Forged Alliance» есть два типа ресурсов: электричество и материя. Материю могут добывать только mass extractor'ы, которые, в свою очередь, можно проапгрейдить максимум до 3 уровня. Наш друг Вася хочет как можно скорее накопить K единиц материи, чтобы наконец достроить парагон. Известно, что mass extractor первого уровня добывает 3 единицы материи в секунду, второго уровня – 9, третьего – 27. Апгрейд с первого до второго уровня длится l2 секунд, со второго до третьего – l3 секунд. Во время апгрейда mass extractor не добывает материю. Изначально у Васи 0 материи и всего 1 mass extractor первого уровня.

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

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

В единственной строке входных данных содержится 3 числа: K, l2, l3 (1  ≤  K  ≤  109; 1  ≤  l2,  l3  ≤  1000) – количество материи, которое хочет накопить Вася, время апгрейда до 2 уровня и время апгрейда до 3 уровня соответственно.

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

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

Пример
Входные данные
1 100 1000
Выходные данные
0.3333333333

E. Не нюхайте нашатырь
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
64 мегабайта
ввод
стандартный ввод
вывод
стандартный вывод

Дано поле размера n × m, в каждой клетке которого записано по одной заглавной латинской букве. Вам необходимо найти такой маршрут длины k, что выписывая буквы из клеток на пути, полученная строка будет лексикографически минимальна. Из одной клетки можно пойти в другую, если у них есть общая сторона. Ходить за пределы поля и из клетку в саму себя не разрешается. Стартовать можно в любой клетке.

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

В первой строке даны три числа: n,  m (1  ≤  n,  m  ≤  100,  n·m  ≥  2) – размеры поля и k (1  ≤  k  ≤  105) – длина строки. В следующих n строках записано ровно по m символов в каждой – описание поля. В таблице встречаются только латинские заглавные буквы.

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

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

Пример
Входные данные
1 4 1
BRZD
Выходные данные
B

F. Gravity defied
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
64 мегабайта
ввод
стандартный ввод
вывод
стандартный вывод

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

X = {xi},  i = 0, 1, ..., n,  0  ≤  xi  ≤  9 :  x0 ≠ x1,  xn ≠ xn - 1, 
Другими словами, для каждой точки ломаной, выполняется одно из трех условий:
  1. точка является крайней, причем она не равна соседней
  2. точка строго выше своих соседей
  3. точка строго ниже своих соседей.

Ваш давний друг Петя хочет создать новый мод данной игры, в котором будут лишь уровни по типу «пилы», состоящие из n звеньев ломанной. Но Петя коварен, он хочет сделать мод непроходимым (призовой 822сс не достанется никому :С ), поэтому решил добавить всевозможные конфигурации данного уровня, а именно всевозможные наборы чисел X, для которых выполняются все вышеописанные ограничения. Петя не силен в математике, поэтому попросил Вас посчитать, какое количество уровней будет в его моде.

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

Первая строка входных данных содержит единственное целое положительное число n (1  ≤  n  ≤  10000) – длину для каждого уровня Пети.

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

Выведите единственное число – ответ на задачу.

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

Один из примеров «пилы» изображен на рисунке:

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

Есть шахматная доска размера n × m и k королей. Король бьет все соседние по вертикали, горизонтали и диагонали клетки. Назовем расстановку фигур на доске правильной, если никакие два короля не бьют друг друга. Ваша задача – посчитать количество правильных расстановок k королей по модулю 109 + 9.

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

Единственная строка входных данных содержит три целых положительных числа n, m, k (1  ≤  n, m  ≤  70,  1  ≤  k  ≤  n·m  ≤  70).

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

Выведите единственное число – количество правильных расстановок по модулю 109 + 9.

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

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

На плоскости даны n точек, заданные своими координатами. Требуется посчитать количество таких треугольников, у которых хотя бы одна сторона параллельна осям координат, а площадь лежит в отрезке от A / 2 до B / 2 включительно. Два треугольника считаются одинаковыми, если наборы номеров точек, которые задают вершины треугольников, совпадают как множества.

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

В первой строке входных данных содержится три целых числа n, A, B – количество точек (3  ≤  n  ≤  2000) и границы отрезка (1  ≤  A  ≤  B  ≤  2·109). В каждой из последующих n строк содержится два целых числа xi и yi – координаты i-той точки (|xi|,  |yi|  ≤  109). Координаты всех точек различны.

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

Выведите единственное целое число – ответ на задачу.

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

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

Есть веревка, концы которой закреплены на плоскости в двух точках A(0,  - 10) и B(0, 10). Эта веревка пересекает прямую y = 0 в n точках (но не касается!). Для каждой точки пересечения известен порядковый номер при движении по веревке от точки A к точке B. Если выписать все пересечения слева направо, то получится перестановка a1, a2, ..., an. Смотрите первый тестовый пример и рисунок для лучшего понимания.

На вход подается некоторая перестановка чисел длины n, и вам необходимо ответить на вопрос, можно ли уложить веревку на плоскости так, что выполняются следующие условия:
  1. Концы веревки закреплены в точках A и B.
  2. Веревка не имеет самопересечений.
  3. Перестановка номеров пересечений совпадает с данной перестановкой.
Входные данные

В первой строке дано число n (1 ≤  n  ≤  105) – размер перестановки. Во второй строке даны n различных чисел ai (1  ≤  ai  ≤  n) – перестановка, описанная в условии.

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

Если возможно уложить веревку требуемым образом выведите «Yes», иначе выведите «No».

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

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

Даны массив чисел a длины n и m запросов. Каждый запрос задаёт отрезок массива, на котором нужно посчитать сумму различных чисел, то есть сумму, в которую каждое число из отрезка входит ровно один раз.

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

В первой строке содержится целое число n: 1  ≤  n  ≤  105.

Во второй строке содержатся n целых чисел ai, разделённые пробелом: 0  ≤  ai  ≤  109.

В третьей строке содержится целое число m: 1  ≤  m  ≤  106.

Далее следуют m строк с запросами. В каждой строке содержится пара целых чисел Li и Ri, разделённые пробелом: 0  ≤  Li  ≤  Ri  <  n – левая и правая границы отрезка, на котором нужно посчитать сумму различных чисел.

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

Выведите m строк, в i-й строке ответ на i-й запрос.

Пример
Входные данные
10
2 10 5 4 10 3 5 10 10 2
11
0 9
1 5
2 4
3 7
3 8
4 7
4 9
5 8
7 7
7 8
8 9
Выходные данные
24
22
19
22
22
18
20
18
10
10
12

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

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

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

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

В первой строке дано целое положительное число n (1  ≤  n  ≤  100) – число велосипедистов. Во второй строке даны n чисел a1, a2, ..., an – скорости всех велосипедистов (1  ≤  ai  ≤  100).

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

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

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