Открытый чемпионат ЯрГУ им. П.Г. Демидова Demidov Open IT Cup 2019
A. Ханой де Пари
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

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

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

Зная, что в центральном регионе NEERC лучше всех умеют перемещать ханойские башни, вас просят разработать алгоритм для укладки башни из N дисков на состав из N платформ не более чем за T перекладываний.

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

В единственной строке даны два целых числа N и T – количество дисков и максимально допустимое количество перекладываний ($$$1 \le N \le 100$$$, $$$1 \le T \le 10000$$$). Гарантируется, что решение для данных ограничений существует.

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

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

В следующих K строках выведите описания перемещений по два числа в строке – номер диска и номер платформы, на которую его нужно поместить. Диски нумеруются от $$$1$$$ до $$$N$$$, диски с меньшим диаметром (верхние) имеют больший номер. Платформы нумеруются от $$$1$$$ до $$$N$$$, начиная с головы состава. Исходный стержень обозначается номером $$$N+1$$$.

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

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

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

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

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

На вход подается корректная дата первой пробежки Семена в виде $$$DD.MM.YYYY$$$, где $$$DD$$$, $$$MM$$$, $$$YYYY$$$, это, соответственно, день, месяц и год. Всегда $$$DD$$$ - это нечетное число. Год не может быть меньше 1900 и больше 2100.

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

Вам надо вывести дату когда Семен бросит тренировки в виде $$$DD.MM.YYYY$$$, где $$$DD$$$, $$$MM$$$, $$$YYYY$$$,, это, соответственно, день, месяц и год.

Примеры
Входные данные
11.05.2019
Выходные данные
02.06.2019
Входные данные
01.01.2019
Выходные данные
02.02.2019
Входные данные
01.02.2019
Выходные данные
02.04.2019
Примечание

Учтите, что Семен может начать бегать в високосный год, который определяется по правилам:

  • год, номер которого кратен 400 — високосный;
  • остальные годы, номер которых кратен 100, — невисокосные;
  • остальные годы, номер которых кратен 4, — високосные.

C. Разящий удар звездного десанта
ограничение по времени на тест
5 секунд
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

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

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

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

Спланируйте успешную атаку и не попадите под трибунал.

Протокол взаимодействия

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

В начале работы программы в первой строке подается число $$$N$$$ ($$$0 \lt N \lt 10^5-1$$$), которое задает, что в начале вы имеете доступ к входам в залы $$$0, 1, 2,\ldots, N$$$.

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

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

Первым передается целое число $$$K$$$ ($$$1\leqslant K\leqslant 42$$$), которое задает количество переходов. После него через пробел идут пары чисел $$$0\leqslant f_i, t_i \lt 10^5$$$, которые задают, что дронами был обнаружен переход между залами с номерами $$$f_i$$$ и $$$t_i$$$.

После получения каждой порции данных вам надо выдать «WAIT», если вы не видите пути от вашего местоположения к королеве, и тогда дроны продолжат свою работу, либо «ATTACK», если вы можете построить такой путь и надо атаковать. Указанные команды выводятся в отдельной строке на стандартный вывод. После вывода команды «ATTACK» ваша программа должна завершить свою работу.

Примеры
Входные данные
4
2 4 6 11 12
~
5 9 10 8 10 1 2 2 7 3 9
~
1 9999 7
~
Выходные данные
~
~
WAIT
~
WAIT
~
ATTACK
Входные данные
1
3 3 4 9999 4 2 3
~
1 1 2
~
Выходные данные
~
~
WAIT
~
ATTACK
Примечание

Эта задача немного необычна — в ней вам предстоит реализовать интерактивное взаимодействие с тестирующей системой. Это означает, что вы можете делать запросы и получать ответы в online-режиме. Обратите внимание, что ввод/вывод в этой задаче — стандартный (то есть с экрана на экран). После вывода очередного запроса обязательно используйте функции очистки потока, чтобы часть вашего вывода не осталась в каком-нибудь буфере. Например, на С++ надо использовать функцию fflush(stdout), на Java вызов System.out.flush(), на Pascal flush(output) и stdout.flush() для языка Python.

При работе программы знак $$$\sim$$$ выводить не нужно.

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

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

У вас есть исторические данные об изменениях цен на интересующий вас актив. Изменения цен измеряются в базисных пунктах. Один базисный пункт составляет 1/100 процента. Гарантируется, что хотя бы одно такое измерение будет положительным.

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

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

В первой строке подаётся одно число $$$N$$$ ($$$2 \lt N\leqslant 300000$$$), которое задает количество данных.

В следующей строке содержится $$$N$$$ целых чисел $$$p_i$$$ ($$$-10000 \lt p_i\leqslant 10000$$$), задающих изменение цены в течение $$$i$$$-го дня в базисных пунктах.

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

Два индекса $$$i$$$ и $$$j$$$ через пробел, задающие начало и конец искомого периода. Индексирование периодов начинается с единицы.

Примеры
Входные данные
4
1000 2000 -3000 4000
Выходные данные
4 4
Входные данные
4
10 20 -25 40
Выходные данные
1 4
Входные данные
13
1 2 3 4 5 6 7 8 9 10 8 7 1
Выходные данные
1 13
Входные данные
5
-10 -11 1 -12 -13
Выходные данные
3 3
Входные данные
9
-11 -15 -20 -10 -9 -10 -12 -11 1
Выходные данные
9 9
Входные данные
7
-10 1000 2000 -5000 2000 1000 -9000
Выходные данные
5 6

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

Петя выписал все натуральные числа от 1 до $$$N$$$ в следующем порядке: сначала в порядке возрастания все числа с суммой цифр 1, затем – с суммой цифр 2, затем – 3, и т.д. Какое число окажется на месте с номером $$$M$$$?

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

В единственной строке записаны числа $$$N$$$ и $$$M$$$ ($$$1\leq M \leq N \leq 10^{18}$$$).

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

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

Пример
Входные данные
100 10
Выходные данные
30
Примечание

Упорядоченный ряд чисел при $$$N=100$$$: 1, 10, 100, 2, 11, 20, 3, 12, 21, 30…

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

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

Для того чтобы средство получилось максимально эффективным, но в то же время не причинило вред, характеристики его компонентов должны удовлетворять секретному неравенству: $$$$$$ 0 \le c - \left( a \oplus b \oplus \left\lfloor \dfrac{a}{b} \right\rfloor \oplus \left\lfloor \dfrac{b}{a} \right\rfloor \oplus \left\lfloor \dfrac{a \oplus b}{a} \right\rfloor \oplus \left\lfloor \dfrac{a \oplus b}{b} \right\rfloor \right) \lt D, $$$$$$ где $$$a$$$ – характеристика кексиков (время выпекания), $$$b$$$ – характеристика кокосовой пудры (размер помола), $$$c$$$ – характеристика фена (мощность), $$$D$$$ – допустимая погрешность, $$$\oplus$$$ – побитовое исключающее «или», $$$\lfloor \cdot \rfloor$$$ – целая часть числа.

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

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

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

В первой строке содержатся два целых числа $$$N$$$ и $$$D$$$ – количество различных характеристик каждого компонента и допустимая погрешность, соответственно ($$$1 \le N \le 10000$$$, $$$1 \le D \le 1000$$$).

В следующих трёх строках содержатся по $$$N$$$ целых чисел – характеристики $$$a$$$, $$$b$$$ и $$$c$$$ имеющихся компонентов, соответственно ($$$1 \le a,\ b,\ c \le 2 \cdot 10^9$$$). Числа в каждой строке различны.

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

Выведите единственное число – количество способов выбрать три компонента для нового средства.

Примеры
Входные данные
3 1
5 3 7
6 5 1
1 3 4
Выходные данные
3
Входные данные
3 3
4 3 7
2 5 7
1 4 2
Выходные данные
11
Входные данные
7 4
15 52 4 48 63 58 8
46 19 16 69 41 39 33
19 91 32 8 7 35 29
Выходные данные
23

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

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

Циферблат, который нравится роботу, отображает таймстапм — количество полных секунд, прошедших с некоторого момента времени. Каждую секунду значение таймстапма на циферблате увеличивается на 1. Известно, что дисплеи подобных циферблатов имеют ширину 10 цифр, а каждая цифра написана почтовым шрифтом - как индекс на оставшихся разве что в музее Почты России конвертах.


_ _ _ _ _ _ _ _
| _| _| |_| |_ |_ | |_| |_| | |
| |_ _| | _| |_| | |_| _| |_|

Чтобы отображать цифры, используются светодиодные элементы постоянной мощности. Так, например, чтобы обеспечить отображение на циферблате цифры «1» в течение одной секунды, требуется 2 единицы энергии, для цифры «8» придется потратить 7 единиц энергии. Сразу после включения часов на циферблате загораются 10 нулей, и далее значение таймстапма всегда отображается с ведущими нулями.

Требуется посчитать количество единиц энергии, которое затратят часы в течение $$$N$$$ секунд после включения.

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

В единственной строке находится натуральное число $$$N$$$ ($$$1 \leq N \lt 10^{10}$$$) — время работы часов.

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

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

Примеры
Входные данные
1
Выходные данные
60
Входные данные
5
Выходные данные
292
Входные данные
36
Выходные данные
2062

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

Мало кто знает, но у Уильяма Роуэна Гамильтона был слон Тирион. Он часто любил гулять по странным объектам, которые в жизни не встречаются. Одним из таких объектов был Гамильтонов сад. В Гамильтоновом саду есть $$$13 \cdot n + 113$$$ растений, каждое из которых хочет увидеть Тирион. Расстояние между растениями определяется по следующему правилу: расстояние при переходе от растения с номером $$$i$$$ к растению с номером $$$j$$$ равно $$$(i - j)$$$ mod $$$n$$$ (растения нумеруются с единицы). Тирион хоть и любит гулять, но двигается он очень медленно. Именно поэтому он просит вас составить ему маршрут с кратчайшим суммарным расстоянием, который проходит по всем вершинам ровно один раз и возвращается в стартовую.

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

В первой строке два числа $$$n$$$ и $$$p$$$ $$$(1 \le n \le 10^5, 1 \le p \le 2)$$$.

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

Если $$$p$$$ = $$$1$$$, выведите в первой строке длину искомого маршрута.

Если $$$p$$$ = $$$2$$$, выведите в первой строке длину искомого маршрута, а во второй строке $$$13 \cdot n + 113$$$ чисел - искомый маршрут.

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

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

Темная ночь. Шумят волны, начинает капать дождь. Челкаш после очередного заплыва приплыл к контрабандистам, чтобы сбыть награбленный товар. Однако не все пошло по плану: выяснилось, что у контрабандистов на корабле уже фактически нет места. Задачу о рюкзаке контрабандисты не знают, и потому они требуют, чтобы Челкаш отдавал им товар в порядке неубывания веса. Челкаш уже очень устал и ничего не соображает, и потому эта задача кажется ему непосильной.

К его счастью, в этот раз он приплыл не один, а вместе с Гаврилой. Но запуганный Гаврила сидит в углу лодки и еле может пошевелить руками, и потому отсортировать товар он также не может. Поэтому Челкаш решает поступить так: он выкладывает весь товар в ряд и q раз меняет какие-то два элемента ряда местами. После этого он бросается на Гаврилу и требует, что бы он сказал, является ряд отсортированным по неубыванию или нет. Как уже было сказано, Челкаш очень устал, и даже если в какой-то момент товар оказался отсортированным, Челкаш может продолжить задавать вопросы.

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

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

В первой строке входных данных дано два целых числа n и q (2 ≤ n ≤ 105, 1 ≤ q ≤ 105) — количество товара и запросов, соответственно. Во второй строке дано n натуральных чисел, не превосходящих 109 — веса товаров. Далее следуют q строк, каждая из которых содержит два различных целых числа a и b (1 ≤ a, b ≤ n), означающих, что Челкаш поменял местами элементы ряда с позициями a и b.

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

Выведите q строк, являющимися ответами на запросы Челкаша. Если после изменения позиций элементов ряд стал отсортированным по неубыванию, выведите «Sorted!». В противном случае выведите «Unsorted!». Кавычки выводить не нужно.

Примеры
Входные данные
5 4
1 2 5 3 4
3 4
4 5
1 5
5 1
Выходные данные
Unsorted!
Sorted!
Unsorted!
Sorted!
Входные данные
2 3
2 10
1 2
1 2
1 2
Выходные данные
Unsorted!
Sorted!
Unsorted!

J. Путешествие КORовьева
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
64 мегабайта
ввод
стандартный ввод
вывод
стандартный вывод

Коровьев (или Фагот) — старший подчинённый Воланда. Поэтому ему вместе с котом Бегемотом часто приходится выполнять поручения мессира. Но, кажется, на этот раз им не обойтись без Вашей помощи!

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

Воланд попросил Коровьева и Бегемота разработать самый короткий маршрут от дома до театра. Но не всё так просто, ведь Воланд — не обычный смертный и обладает сверхспособностями. Поэтому он считает длиной маршрута побитовый OR длин дорог на этом маршруте (о том, что такое побитовый OR читайте в примечании).

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

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

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

Каждая из следующих m строк содержит 3 целых числа — pi, qi, wi (1 ≤ pi, qi,  ≤ n, 0 ≤ wi ≤ 109, pi ≠ qi), где pi и qi — вершины, соединяемые i-м ребром, а wi — вес этого ребра. Гарантируется, что граф не содержит кратных ребер.

Последняя строка содержит два натуральных числа — a и b (1 ≤ a, b ≤ n, a ≠ b) — вершины, между которыми требуется найти путь наименьшего веса (дом Воланда и театр).

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

В единственной строке выведите целое число — наименьший вес по всем путям между a и b. Если между a и b не существует пути, то выведите «-1» (без кавычек)/

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

Побитовый OR двух чисел вычисляется следующим образом: cначала оба числа переводятся в двоичную систему счисления, затем одно записывается под другим. i-й бит результата будет равен единице, если i-й бит первого числа равен единице и/или i-й бит второго числа равен единице.

Например, 10 OR 6 = 10102 OR 01102 = 11102 = 14.

В большинстве языков программирования побитовый OR уже встроен. В языках C++, Python эта операция обозначается как |, в Pascal — это операция or, в Visual Basic — это операция Or.