II Олимпиада классов при механико-математическом факультете МГУ имени М.В. Ломоносова по программированию 2023
A. Число в треугольнике
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

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

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

На вход даётся единственное натуральное число $$$n$$$ $$$(1\le n \le 10^{6})$$$.

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

Если число $$$n$$$ есть в треугольнике, выведите два неотрицательных целых числа $$$x, y$$$ $$$(0 \le y \le x \le 10^{18})$$$ — номер строки и позиция в этой строке, где находится число $$$n$$$ в треугольнике. Гарантируется, что данных ограничений достаточно для вывода ответа.

Если числа $$$n$$$ нет в треугольнике, выведите единственное число $$$-1$$$.

Помните, что нумерация строк происходит с $$$0$$$ и нумерация чисел в каждой строке, тоже производится с $$$0$$$.

Если позиций с числом $$$n$$$ несколько, можно вывести любую.

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

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

Федя был очень обрадован существованию такого понятия как НОД чисел.

Наибольшим общим делителем (НОД) двух натуральных чисел $$$m$$$ и $$$n$$$ называется наибольший из их общих делителей. Понятие наибольшего общего делителя естественным образом обобщается на наборы из более чем двух натуральных чисел, как наибольший из общих делителей всех этих чисел.

Но что такое НОД одного числа? Давайте считать что для натуральных чисел, это оно же. Однако Феде не нравится такое скучное обобщение и он придумал своё понятие — НПД.

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

Подстрока — это непрерывная последовательность символов внутри строки. Например, у числа $$$171$$$ подстроки это числа: $$$1$$$, $$$17$$$, $$$171$$$, $$$7$$$, $$$71$$$ и $$$1$$$, а числа $$$11$$$ и $$$2$$$ не являются его подстроками.

По заданному числу $$$n$$$ найдите его НПД.

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

Дано единственное натуральное число $$$n$$$ $$$(1 \le n \le 10^{10^6})$$$. Гарантируется, что $$$n$$$ не содержит $$$0$$$.

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

Выведите НПД($$$n$$$)

Примеры
Входные данные
6
Выходные данные
6
Входные данные
28
Выходные данные
2
Входные данные
171
Выходные данные
1
Примечание

В условии предъявлены все подстроки числа $$$171$$$ из третьего примера, их общий НОД равен $$$1$$$.

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

Артур и Никита, наигравшись в шахматы, придумали новую игру. У каждого игрока изначально есть по одному числу $$$a$$$ и $$$b$$$ соответственно. Сначала Артур приписывает к своему числу $$$n$$$ любых цифр справа, потом Никита приписывает к своему $$$m$$$ любых цифр справа. Побеждает тот, у кого число в итоге окажется больше. Ваша задача — научиться определять исход игры по заданным числам $$$a, b, n, m$$$, если игроки придерживаются оптимальной стратегии.

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

В единственной строке даются четыре числа $$$a, b, n, m$$$ $$$(1 \le a, b, n, m \le 10^9)$$$.

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

Выведите слово «Arthur», если побеждает Артур. Слово «Nikita» в случае победы Никиты и «Draw» в случае ничьи.

Примеры
Входные данные
1 2 3 4
Выходные данные
Nikita
Входные данные
54 54 54 54
Выходные данные
Draw
Входные данные
11 10 2 2
Выходные данные
Arthur

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

У Оли есть сад, в котором растет $$$n$$$ роз. Все розы расположены в ряд и последовательно пронумерованы числами от $$$1$$$ до $$$n$$$. Высота $$$i$$$-й розы — $$$a_i$$$ сантиметров.

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

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

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

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

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

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

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

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

Допускается всего один способ изменять сад — применять к розам волшебное удобрение.

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

Однажды Максим подумал, что было бы здорово решать задачи по программированию каждый день, это явно скрасит его жизнь. Затем он увидел, что на одном популярном сайте ведётся статистика не только по количеству дней подряд, которые Максим решает задачи, но и по количеству решённых задач за месяц (всем известно, что в месяце $$$k$$$ дней).

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

Под количеством решённых задач за месяц подразумевается количество решённых за последние $$$k$$$ дней, включая текущий день. То есть если день находится в середине месяца то суммируются все решенные задачи с середины прошлого месяца по сей день. Например 16 мая будем считать что за месяц решено суммарное количество задач с 17 апреля по 16 мая включительно.

Известно, что он уже выполняет это условие на протяжении $$$n$$$ дней. Интересно, какое минимальное количество задач решил Максим за этот период.

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

В единственной строке входных данных содержатся два числа $$$k, n$$$ ($$$1 \le k, n \le 10^6$$$) — количество дней в месяце и длительность вызова.

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

Выведите одно число — минимальное количество задач, которые решил Максим за эти $$$n$$$ дней.

Примеры
Входные данные
2 3
Выходные данные
4
Входные данные
30 15
Выходные данные
15
Входные данные
30 365
Выходные данные
2405
Примечание

Разберём первый пример:

  • В первый день Максим решает 1 задачу, и условие соблюдено, ибо он решал задачи один день и за последний месяц решил одну задачу.
  • Во второй день Максим решает 1 задачу, и условие соблюдено, ибо он решал задачи два дня и за последний месяц решил две задачи.
  • В третий день Максим решает 2 задачи, и условие соблюдено, ибо он решал задачи три дня подряд и за последний месяц решил три задачи (то есть суммируются задачи за последние два дня).

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

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

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

Если нельзя ограничить квадрат, выведите 0.

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

В первой строке заданы два натуральных числа $$$n, m$$$ $$$(3 \le n, m; n \cdot m \le 3 \cdot 10^5 )$$$ — размеры поля. Далее вводятся $$$n$$$ строк длины $$$m$$$, описывающих поле.

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

Выведите единственное число - сторону наибольшего квадрата.

Примеры
Входные данные
5 6
BBBBWB
WBWWBW
BWBWBB
BWWBBW
WBWBBW
Выходные данные
2
Входные данные
4 4
WBWB
BWWW
WWWB
BWBW
Выходные данные
0
Входные данные
3 3
BWW
WBW
WWB
Выходные данные
1
Примечание

Картинка соответствует первому примеру, выделен искомый квадрат со стороной 2, очевидно, что больший квадрат выделить нельзя:

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

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

Монстра задержит стена замка, которая поделена на $$$n$$$ равных по ширине частей, пронумерованных от $$$1$$$ до $$$n$$$. У каждой части стены есть своя высота $$$h_i$$$. Для того, чтобы проникнуть в замок, монстру придётся уничтожить всю стену. Уничтожение стены происходит следующим образом: монстр (у которого ровно $$$k$$$ когтей на лапах) подходит к некоторой части стены (не расходуя на это времени) и, если высота части стены делится на $$$k$$$, мгновенно эту часть уничтожает (снижает высоту до 0). В противном случае он тратит $$$1$$$ минуту времени, чтобы уменьшить высоту этой части с $$$h_i$$$ до $$$\lfloor \frac{h_i}{k} \rfloor$$$ (деление с округлением до целого вниз). Монстр повторяет эту процедуру, пока вся стена не окажется уничтожена, т.е. высота всех частей не окажется равной нулю.

Помимо стены, у Темура есть $$$m$$$ свитков с заклинаниями мощности $$$c$$$. Темур может использовать каждый из свитков, чтобы увеличить высоту одной (любой) части стены на выбранное им значение от $$$1$$$ до $$$c$$$. При этом на каждую часть стены магия подействует не более одного раза, а применять свитки можно только до того, как монстр начнёт ломать стену.

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

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

В первой строке через пробел записаны два целых числа: $$$n, k$$$ $$$(1 \le n \le 10^5; 2 \le k \le 10^4)$$$ — количество частей стены и когтей на лапах монстра соответственно.

Во второй строке через пробел записаны $$$n$$$ целых чисел $$$h_i$$$ $$$(0 \le h_i \le 10^9)$$$ — высоты частей стены.

В третьей строке через пробел записаны два целых числа: $$$m, c$$$ $$$(0 \le m \le n; 1 \le c \le 10^9)$$$ — количество свитков и их мощность.

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

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

Примеры
Входные данные
5 2
1 1 1 2 2
3 1
Выходные данные
7
Входные данные
5 2
1 1 1 2 2
3 4
Выходные данные
8
Входные данные
4 9
10 85 9 3
0 7
Выходные данные
4
Примечание

Разберём третий пример:

  • На первую часть стены монстр тратит две минуты. Так как $$$10$$$ не делится на $$$9$$$, то монстр за одну минуту уменьшает высоту до $$$1=\lfloor \frac{10}{9} \rfloor$$$. И ещё минуту он тратит, чтобы уменьшить высоту до $$$0=\lfloor \frac{1}{9} \rfloor$$$.
  • На вторую часть стены монстр тратит одну минуту. Так как $$$85$$$ не делится на $$$9$$$, то монстр за одну минуту уменьшает высоту до $$$9=\lfloor \frac{85}{9} \rfloor$$$. Теперь высота делится на $$$9$$$, поэтому он мгновенно разрушает эту часть стены.
  • Третью часть стены монстр уничтожает мгновенно, ведь $$$9$$$ делится на $$$9$$$.
  • На четвёртую часть стены монстр тратит одну минуту. Так как $$$3$$$ не делится на $$$9$$$, то монстр за одну минуту уменьшает высоту до $$$0=\lfloor \frac{3}{9} \rfloor$$$.

Итого, монстр разрушает стену за $$$4=2+1+0+1$$$ минуты, причём король Темур никак не может увеличить это время, ведь волшебных свитков нет.

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

Однажды Сеня прогуливался по Калининграду и обнаружил магазин интересных графов «Остовок». Этот магазин выделялся из многих обыденных магазинов графов тем, что в нём торговали только остовами (см. определение). Зайдя в магазин, Сеня обнаружил единственный оставшийся на прилавке граф — полный граф на $$$n$$$ вершинах (обозначается $$$K_n$$$), Сеня решил купить как можно больше остовов, полная дама Люси Декарт — продавщица магазина готова отрезать от графа любой остов, который ей укажет Сеня, стоимость остова равна его диаметру (см. определение). При вырезании остова из графа вершины в последнем остаются, но пропадают рёбра, содержащиеся в этом остове.

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

Остов или остовное дерево графа — это дерево, подграф данного графа, с тем же числом вершин, что и у исходного графа.

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

Подграф — это часть графа, в которой мы берём некоторые его вершины и ребра. Другими словами, граф $$$H$$$ является подграфом графа $$$G$$$, если вершины и рёбра $$$H$$$ являются подмножеством вершин и рёбер $$$G$$$.

Диаметр графа — это число, равное расстоянию между наиболее удаленными друг от друга вершинами графа.

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

На ввод даётся одно число $$$n$$$ ($$$2\le n \le 1000$$$) — количество вершин в полном графе.

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

В первой строке выведите одно число $$$k$$$ — максимальное количество остовов, которые сможет купить Сеня.

Далее выведите $$$k$$$ наборов по $$$n-1$$$ строке, каждый из которых описывает один из $$$k$$$ остовов в виде $$$n-1$$$ ребра.

Если есть несколько оптимальных ответов, можно вывести любой.

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

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

1 2
Входные данные
3
Выходные данные
1

1 2
1 3
Входные данные
4
Выходные данные
2

1 2
2 3
3 4

1 3
1 4
2 4
Примечание

Иллюстрации к примерам, рёбра одного цвета образуют остовы.

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