2024-2025 ICPC NERC, Квалификация на Чемпионат Кыргызстана
A. Условие задачи
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Слава практически дописал условие последней задачи для ICPC Kyrgyzstan Qualification Round — ещё немного, и задача будет готова!

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

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

Именно в этот момент Анатолий подкрался к ноутбуку Славы и начал в случайных местах нажимать клавишу Enter.

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

Помогите Славе оценить ущерб — вычислите, сколько раз Анатолий успел нажать клавишу Enter.

Например, Слава написал условие $$$abracadabra$$$

Но пришел Анатолий и нажал $$$4$$$ раза клавишу Enter:

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

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

Каждая из следующих $$$n$$$ строк содержит строку $$$s_i$$$ ($$$1 \le |s_i| \le 10$$$) — $$$i$$$-ю часть исходного условия.

Каждая часть состоит только из строчных латинских букв.

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

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

Выведите единственное целое число — минимальное количество нажатий клавиши Enter, с помощью которых Анатолий мог превратить исходное условие в представленные $$$n$$$ частей.

Пример
Входные данные
5
ab
rac
ada
b
ra
Выходные данные
4

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

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

Для этого вы в течение дня проводили наблюдения и записали массив ai — сколько муравьёв вошло или вышло в i-й момент времени:

  • |ai| означает количество муравьёв;
  • знак числа означает направление (минус — вышли, плюс — вошли)
.

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

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

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

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

Во второй строке содержится n целых чисел a1, a2, ..., an ( - 106 ≤ ai ≤ 106,  i = 1, 2, ..., n) — результат i-го наблюдения.

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

В единственной строке выведите целое число — минимально возможное количество муравьёв внутри муравейника до начала наблюдений.

Пример
Входные данные
3
20 -50 30
Выходные данные
30
Примечание

Первый тестовый пример

Количество муравьёв внутри муравейника в процессе наблюдений менялось следующим образом:

  • В начале было 30;
  • Вошло 20 — всего стало 50;
  • Вышло 50 — не осталось ни одного муравья;
  • Вошло 30 — стало 30 муравьёв внутри.

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

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

Вход в лабиринт находится в комнате 1, переход из n-й комнаты ведёт на выход.

Но в чём же смысл лабиринта, если его можно пройти напрямую?

Поэтому создатели лабиринта придумали комнаты-развилки — если посетить такую комнату в 1-й, 3-й, 5-й и т.д. раз (то есть в каждое нечетное посещение) — то переход из неё будет вести в комнату 1 вместо следующей по номеру комнаты (или выхода).

Известно, что комнаты r1, r2, ..., rk являются развилками.

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

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

В первой строке содержатся целые числа n и k (1 ≤ n ≤ 30,  0 ≤ k ≤ n) — общее количество комнат в лабиринте и количество комнат-развилок, соответственно.

В следующей строке содержится k целых чисел r1, r2, ..., rk (1 ≤ r1 < r2 < ... < rk ≤ n) — номера комнат-развилок.

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

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

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

Первый тестовый пример

Последовательность посещённых комнат будет следующей:

(1, 2, 1, 2, 3, 4, 1, 2, 1, 2, 3, 4, 5), после чего следует выход.

Всего посещено 13 комнат.

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

Набор чисел называется хорошим, если

  • размер набора (количество чисел) не более k;
  • разница между минимальным и максимальным числом не превосходит M;

Набор может содержать одинаковые значения — например, размер набора (2, 7, 3, 7) равен 4, а разница между минимальным и максимальным числом равна 7 - 2 = 5.

Дан массив целых чисел a. Разбейте его элементы на минимальное количество хороших наборов.

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

В первой строке содержатся целые числа n, M, k (1 ≤ n,  k ≤ 105, 0 ≤ M ≤ 109) — количество элементов массива, максимальная разница между числами набора и максимальный размер набора соответственно.

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

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

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

Примеры
Входные данные
4 3 3
5 8 13 21
Выходные данные
3
Входные данные
10 5 3
1 6 4 15 4 10 8 2 12 5
Выходные данные
4
Примечание

Второй тестовый пример

Массив можно разбить, например, на следующие наборы:

  • (1, 4, 6) — максимальная разница 5;
  • (2, 5) — максимальная разница 3;
  • (4, 8) — максимальная разница 4;
  • (10, 12, 15) — максимальная разница 5.

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

Вы смотрите в окно и видите n гор, высота i-й горы равна hi.

Вы считаете, что две соседние горы i и (i + 1) входят в одну горную цепь, если |hi - hi + 1| ≤ k, где k — параметр схожести.

Определите минимально возможный параметр схожести k, чтобы все горы разбились на ровно m горных цепей.

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

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

Во второй строке содержится n целых чисел h1, h2, ..., hn (1 ≤ hj ≤ 106,  j = 1, 2, ..., n) — высота j-й горы.

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

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

Если существует несколько возможных значений k, выведите минимальное значение.

Если решения не существует, выведите в качестве ответа  - 1.

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

Первый тестовый пример

При k = 3 получаются следующие m = 3 горные цепи:

  • 1... 3: |2 - 3| ≤ 3, |3 - 1| ≤ 3, |1 - 5| > 3;
  • 4... 7: |5 - 2| ≤ 3, |2 - 1| ≤ 3, |1 - 4| ≤ 3, |4 - 8| > 3;
  • 8... 11: |8 - 7| ≤ 3, |7 - 9| ≤ 3, |9 - 6| ≤ 3.

При k = 2 будет уже 6 горных цепей.

Второй тестовый пример

При k = 2 получаются следующие 2 горные цепи:

  • 1... 2: |3 - 1| ≤ 2, |1 - 5| > 2;
  • 3... 5: |5 - 7| ≤ 2, |7 - 6| ≤ 2.

При k = 1 получаются 4 горные цепи.

Видно, что не существует k, при котором получаются ровно m = 3 горные цепи.

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

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

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

Сама начальная остановка находится сразу после перекрёстка 0, а конечная — сразу за перекрестком n.

Вы знаете, что от (i - 1)-го до i-го перекрестка автобус доезжает за ai секунд. Временем на остановках можно пренебречь.

Про светофор на i-м перекрестке известны три характеристики:

  • ri — сколько секунд на светофоре горит красный свет;
  • gi — сколько секунд горит зеленый свет;
  • di — за сколько секунд до вашей посадки в автобус на светофоре загорался зеленый свет.

Если автобус подъезжает ровно в тот момент, когда свет как раз переключается на красный свет — автобус уже не проедет.

Используя всю эту информацию, определите — сколько секунд займет вся поездка на автобусе от начала до конца.

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

В первой строке содержится целое число n (1 ≤ n ≤ 104) — количество перекрёстков у вас на пути.

Во второй строке содержатся целые числа a1, a2, ..., an (1 ≤ ai ≤ 104,  i = 1, 2, ..., n) — время, за которое автобус проезжает путь от (i - 1)-го до i-го перекрёстка.

В каждой из следующих n строк содержится по три целых числа ri, gi, di (1 ≤ ri, gi ≤ 1000, 1 ≤ di ≤ 104) — характеристики i-го светофора.

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

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

Пример
Входные данные
3
100 110 50
80 20 50
60 10 100
30 40 50
Выходные данные
370
Примечание

Первый тестовый пример

  • До 1-го светофора доехали за 100 секунд.
  • 1-й светофор горит зеленым в моменты времени [ - 50; - 30], [50;70]; [150;170];
  • Вы приехали во время красного света светофора, соответственно автобус будет ждать до 150 секунд.
  • До 2-го светофора автобус доедет за 110 секунд — уже прошло 150 + 110 = 260 секунд.
  • 2-й светофор горит зеленым в моменты времени [ - 100; - 90], ... [180;190]; [250;260]; [320;330].
  • Автобус приехал ровно в начале красного света светофора, соответственно придется ждать до 320 секунд.
  • До 3-го светофора автобус доедет за 50 секунд — уже прошло 320 + 50 = 370 секунд.
  • 3-й светофор горит зеленым в моменты времени [ - 50; - 10], ... [300;340]; [370;410].
  • Автобус приехал ровно в начале зеленого света светофора, поэтому он сразу проехал перекрёсток без ожидания.
  • Итого вы проехали весь путь за 370 секунд.

G. Нужно больше золота
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Начался новый семестр — а значит и ваши тренировки в киберспортивной сборной по Doka 3.

Сегодня вы впервые играете на герое по имени Мидас. Опытные сокомандники рассказали, что сила данного героя напрямую зависит от количества накопленного им золота.

Чтобы получать золото, вы должны побеждать монстров.

На карте мира расположено n монстров, с которыми вы можете сражаться в любом порядке. С каждым монстром можно сразиться только один раз.

Для i-го монстра известны две характеристики:

  • gi — сколько золота вы получите после победы над монстром;
  • bi — какой запас золота вам необходим, чтобы победить монстра. Золото при этом не тратится.

Изначально у вас 0 золота. Ваша цель на игру — накопить не менее w золота.

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

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

В первой строке содержится целое число w (1 ≤ w ≤ 109) — количество золота, являющееся вашей целью на игру.

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

В каждой из следующих n строк содержится по два целых числа gi и bi (1 ≤ gi ≤ 109,  0 ≤ bi ≤ 109) — характеристики i-го монстра из условия задачи.

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

В первой строке выведите целое число k — минимальное количество сражений с монстрами, необходимое для достижения цели в w золота. Если вы никак не можете достичь цели — выведите  - 1.

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

Считайте, что монстры занумерованы в порядке их упоминания во входных данных.

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

Примеры
Входные данные
28
8
5 2
7 25
4 0
6 1
2 20
3 3
8 7
4 15
Выходные данные
6
3 4 1 6 7 8
Входные данные
5
1
5 1
Выходные данные
-1
Примечание

Первый тестовый пример

Опишем последовательность сражений и заработанного золота.

  • Вначале у вас 0 золота, поэтому вы можете сразиться только с 3-м монстром и получить 4 золота.
  • Далее вы сражаетесь с 4-м монстром и получаете 6 золота — всего у вас 10 золота.
  • После этого вы сражаетесь с 1-м монстром и получаете дополнительные 5 золота — всего 15.
  • Затем вы сражаетесь с 6-м монстром и получаете дополнительные 3 золота — всего 18 золота.
  • Последние две битвы вы проводите с монстрами 7 и 8 (в любом порядке, так как вам хватает золота) — суммарно вы получаете 12 золота, что суммарно даёт 30.
  • Вам необходимо 28 золота, значит цель достигнута.

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

Второй тестовый пример

У вас 0 золота в начале, а единственный доступный монстр требует 1 золота для победы.

Вы не можете набрать w = 5 золота, значит необходимо вывести  - 1.

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

Вы устроились в крупную корпорацию.

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

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

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

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

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

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

Во второй строке содержится n целых чисел bi (0 ≤ bi ≤ n), где bi — номер непосредственного начальника i-го сотрудника. Если bi = 0, то i-й сотрудник — генеральный директор.

Гарантируется, что описанная иерархия корректна — если сотрудник bi является непосредственным начальником сотрудника i, то сотрудник i ни прямо, ни косвенно не является начальником сотрудника bi.

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

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

Если существует несколько вариантов ответа с наибольшим количеством сотрудников — выведите любой.

Пример
Входные данные
15
6 0 0 15 13 2 15 14 13 3 12 0 12 2 11
Выходные данные
12 8
Примечание

Первый тестовый пример

  • Генеральный директор под номером 2 руководит компанией с сотрудниками 6, 14, 1 и 8 — всего 5 человек.
  • Генеральный директор под номером 3 руководит компанией с сотрудником 10 — всего 2 человека.
  • Генеральный директор под номером 12 руководит компанией со всеми остальными сотрудниками — всего 8 человек.

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

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

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

К сожалению, вы не можете медитировать перед двумя лекциями подряд — эффект сильно ослабнет.

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

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

В первой строке содержится целое число n  — количество лекций.

Во второй строке содержится n целых чисел a1, a2, ..., an  — количество знаний, которое вы получите по умолчанию за j-ю лекцию.

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

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

Во второй строке выведите n символов s1s2... sn, где символ sj = M, если вы медитировали перед j-й лекцией, и sj = O, если вы слушали лекцию без медитации.

Символы M и O — заглавные латинские буквы.

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

Примеры
Входные данные
6
1 8 1 1 5 2
Выходные данные
31
OMOOMO
Входные данные
7
2 4 2 3 5 4 5
Выходные данные
39
MOMOMOM
Примечание

Первый тестовый пример

Вы решили помедитировать перед 2-й и 5-й лекциями — суммарно получили 1 + 8·2 + 1 + 1 + 5·2 + 2 = 31.

Второй тестовый пример

В данном случае вы медитировали перед каждой нечетной лекцией — суммарно получилось 2·2 + 4 + 2·2 + 3 + 5·2 + 4 + 5·2 = 39.

Обратите внимание, что вы не могли, например, медитировать и перед 5-й, и перед 6-й лекциями.