Линейные структуры(59 задач)
Корневая эвристика (sqrt декомпозиция)(14 задач)
Разреженные таблицы (sparse table)(2 задач)
Система непересекающихся множеств(16 задач)
Хеш(35 задач)
Персистентные структуры данных(2 задач)
Знаете ли вы, почему четвертый этаж заперт и там не останавливается лифт? Потому что на самом деле четвертый, запертый, этаж, где не останавливается лифт, содержит бесконечное количество комнат, пронумерованных натуральными числами. На этот этаж регулярно приезжают дети, каждый из которых заранее выбрал, в какую комнату он хочет заселиться. Если выбранная комната оказывается свободна, то ребенок занимает ее, в противном случае он занимает первую свободную комнату с бóльшим номером.
Кроме того, некоторые дети уезжают в середине смены. Сразу после отъезда ребенка его комната становится доступна для заселения следующего.
Промоделируйте работу преподавателей, ответственных за четвертый этаж и научитесь быстро сообщать приезжающим детям, какую комнату им следует занимать.
Первая строка входного файла содержит натуральное число \(n\) — количество прибытий и отъездов, происходящих в течение смены (\(1 \le n \le 100\,000\)).
Следующие \(n\) строк содержат информацию об ЛКШатах. Число \(a > 0\) обозначает, что приехал школьник, желающий занять комнату номер \(a\) (\(1 \le a \le 100\,000\)). Число \(a < 0\) обозначает, что из комнаты номер \(|a|\) уехал школьник (гарантируется, что эта комната не была пуста).
Для каждого приезжающего школьника выведите одно натуральное число — номер комнаты, в которую он поселится.
6 5 5 5 -6 5 5
5 6 7 6 8
Петя в очередной раз купил себе набор из кубиков. На этот раз он выстроил из них настоящую крепость — последовательность из N столбиков, высота каждого столбика составляет Ai кубиков.
Вскоре ему стало интересно, насколько его крепость защищена от жуликов и воров. Для этого он ввел понятия башни. Башней называется любая последовательность из K столбиков подряд (где K — любимое число Пети). Защищенность башни определяется как суммарная высота всех столбиков этой башни (чем она больше, тем громаднее и ужаснее она кажется), умноженная на минимум высоты столбиков башни (т.к. враги, очевидно, будут пытаться проникнуть через самое слабое место башни). Неприступность крепости определяется как сумма защищенностей каждой из башен.
Петя решил как можно скорее посчитать, какова же неприступность его крепости. Однако вскоре он понял, что недостаточно знать высоту каждого из столбиков. В зависимости от того, как сгруппировать столбики в башни, получится разный результат. В различных вариантах группировки часть столбиков могут не принадлежать ни одной из башен. Разумеется, Петя выберет то разбиение на башни, при котором неприступность будет максимальна.
Петя успешно справился со своей задачей, но теперь Правительство Флатландии решило защитить свой горный курорт. Правительство уже построило крепость из кубиков (просто кубики были побольше). Теперь вы должны помочь Правительству посчитать неприступность этой крепости. Единственная трудность состоит в том, что у Правительства было очень много денег, и поэтому крепость была построена очень длинная.
В первой строке входного файла содержатся число N — количество столбиков в крепости и число K — любимое число Пети (1 ≤ K ≤ N ≤ 100 000). Далее на следующей строке содержатся N целых чисел, обозначающих Ai (1 ≤ Ai ≤ 106).
На первой строке выведите число Q — количество башен в оптимальном разбиении. Далее выведите Q чисел — номера первых столбиков каждой башни.
1 1 1
1 1
2 1 1 1000000
2 1 2
8 3 1 2 3 4 1 6 7 8
2 2 6
Нынешняя задача состоит в расшифровке текстов Велулу. Основная проблема заключается в том, что в их алфавите нет пробелов. Поэтому все тексты слипаются в одну последовательность букв, которые сложно разобрать.
К счастью, археологи уже разработали проект словаря велульского языка. Конечно же они знают о том, что можно обработать последовательность букв на компьютере и получить слова, имея в своем распоряжении словарь. Однако, воспользовавшись таким методом они обнаружили, что огромное количество таких последовательностей почти для любого текста разумного размера. Они не знают, является ли это проблемой метода обработки или особенностью велульского языка. Поэтому они придумали другой метод, который базируется не только на словаре, но и на порядке частей речи в предложении.
Теперь у них был не только словарь, но и предположение о том, как предложение строится в велульском языке. Вам предстоит определить, сколькими способами можно разбить текст на слова, следуя этим правилам, и вывести один из примеров разбиения.
Вам будет дан словарь, правила построения предожений и текст для расшифровки. Для каждого слова определено, какой частью речи оно может быть.
Первая строка входного файла содержит числа \(N\), \(M\) и \(K\), где \(1 \leq N \leq 5000\) — количество слов в велульском словаре, \(1 \leq M \leq 10\) — количество правил построения предожения, а \(1 \leq K \leq 10\) — количество различных частей речи.
В вельском языке не так много букв. Так что археологи закодировали их маленькими латинскими буквами. В каждой из \(N\) следующих строк содержится слово (не длиннее 20 символов), затем число \(k_i\) (\(1 \leq k_i \leq 10\)) — количество частей речи, которыми может быть это слово, а затем \(k_i\) чисел \(a_{ij}\) обозначающие допустимые части речи. Все числа \(a_{ij}\) даны в возрастающем порядке. Слова в словаре даны в произвольном порядке (не успели упорядочить). Каждое слово встречается в словаре только один раз.
Следующие \(M\) строк содержат правила конструирования предожений. Каждое правило описывается количеством слов в предложении \(l_i\) (\(1 \leq l_i \leq 10\)) и, затем, перечислены \(l_i\) чисел, являюзихся идентификаторами частей речи. Правила не повторяются.
Последняя строка ввода содержит текст, который надо расшифровать. Текст не пуст и его длина не превышает 1000 символов.
Первая строка должна содержать количество вариантов расшифровки. Если их больше чем \(10^{18}\) выведите строку «TOO MANY» вместо количества.
Если существует корректное разбиение текста на слова, то выведите одно из них в следующей строке. Исходный текст требуется разделить пробелами и точкой с пробелом для получения набора корректных предожений, каждое из которых удовлетворяет правилам, а все слова содержатся в словаре. Точка должна стоять сразу за окончанием предожения, а все слова должны быть разделены пробелами. Весь текст должен быть разбит на предожения. Внимательно посмотрите пример.
Если вариантов несколько — выведите любой из них.
5 2 2 ba 1 2 za 2 1 2 a 2 1 2 caba 1 1 ab 1 1 2 1 2 3 2 2 1 abazabacaba
2 a ba. za ba caba.
Представьте, что у вас есть автомобиль с очень большим бензобаком - достаточно большим, чтобы вместить любое необходимое количество бензина. Вы путешествуете по кольцевому маршруту, на котором есть некоторое число АЗС. Суммарное количество бензина на всех заправочных станциях в точности равно количеству бензина, необходимому для того, чтобы один раз проехать по маршруту. Когда вы приезжаете на заправочную станцию, вы заливаете весь бензин, который там есть, в свой бензобак. Изначально бак пуст, но гарантируется, что существует станция, с которой можно стартовать в некотором направлении (по часовой стрелке или против часовой стрелки) так, чтобы можно было один раз проехать по маршруту. Даны длина маршрута, расположение заправочных станций и для каждой станции количество километров, которое можно проехать на бензине с одной лишь этой АЗС. Требуется найти все возможные станции и направления старта, которые позволят совершить один круг по маршруту.
Входной файл содержит нескольно тестовых примеров (не более 50). Каждый тестовый пример начинается со строки, содержащей два положительных числа \(c\) и \(s\) (\(c \leq 100\,000\)): длину окружности (в километрах) и количество заправочных станций. Далее следуют \(s\) пар целых чисел \(t\) и \(m\). В каждой паре \(t\) - это целое число от \(0\) до \(c - 1\), означающее позицию этой АЗС, измеренную по часовой стрелке от некоторой произвольной фиксированной точки окружности, а \(m\) - это количество километров, которое можно проехать, используя весь бензин с этой станции. Все позиции различны. За последним тестовым примером следует пара нулей.
Для каждого тестового примера выведите его номер (в формате, показанном в примере), а затем список пар значений в виде \(i\) \(d\),
где \(i\) - это позиция заправочной станции, а \(d\) - это либо C
либо CC
, либо CCC
, означающих, что, стартовав с пустым бензобаком, можно проехать по марштуту из позиции \(i\) по часовой стрелке (C
) против часовой стрелки (CC
) или в любом направлении
(CCC
) и вернуться в позицию \(i\).
Станции нужно выводить в порядке возрастания позиции.
1 ≤ s ≤ 1 000. Решение оценивается в 40 баллов.
Дополнительные ограничения отсутствуют. Решение оценивается в 60 баллов.
10 4 2 3 4 3 6 1 9 3 5 5 0 1 4 1 2 1 3 1 1 1 0 0
Case 1: 2 C 4 CC 9 C Case 2: 0 CCC 1 CCC 2 CCC 3 CCC 4 CCC