Куча(30 задач)
    Двоичное дерево поиска(24 задач)
    Дерево отрезков, RSQ, RMQ(90 задач)
    Бор(14 задач)
    Дерево Фенвика(6 задач)
    Декартово дерево(10 задач)
---> 174 задач <---
Источники
    Личные олимпиады(938 задач)
    Командные олимпиады(684 задач)
Страница: << 22 23 24 25 26 27 28 >> Отображать по:
ограничение по времени на тест
5.0 second;
ограничение по памяти на тест
128 megabytes

Система телефонных номеров в России устроена следующим образом. Все телефонные номера имеют одну и ту же длину — M цифр. Номер состоит из двух частей: несколько первых цифр номера составляют код города, остальные цифры определяют номер абонента в пределах этого города.

В процессе развития сети коды городов регулярно меняются, при этом, коды различных городов обязательно различны. В остальном коды могут быть совершенно произвольными, в том числе код одного города может быть началом кода другого (например, код Нижнего Новгорода — 831, а код Сарова — 83130) и т. п. Если коды нескольких городов являются началом M-значного номера абонента, кодом города этого номера считается наидлиннейший из таких кодов. Так, если есть всего четыре города: Нижний Новгород, Балахна, Дзержинск и Саров с кодами, соответственно, 831, 83144, 8313 и 83130, и M = 9, то: телефоны 831123456 и 831412345 — телефоны Нижнего Новгорода, 831312345 — телефон Дзержинска, 831301234 — Сарова, а 831441234 — Балахны.

В этой задаче мы не будем учитывать различные другие ограничения на телефонные номера, существующие в реальности (например, в реальности никакой номер абонента в городе не может начинаться на 03, т. к. 03 — это телефон скорой помощи). Мы будем считать, что любой из 10M возможных M-значных номеров является допустимым телефонным номером.

Нетривиальной задачей становится задача определения, сколько всего телефонных номеров может быть выдано в каждом городе. Например, в приведённом выше примере в Балахне и Сарове могут быть выданы 10 000 телефонных номеров (все четырёхзначные номера), в Дзержинске могут быть выданы 90000 телефонных номеров — все пятизначные телефонные номера, кроме начинающихся на ноль, а в Нижнем Новгороде могут быть выданы 890 000 номеров — все шестизначные номера, кроме тех, которые начинаются на цифру 3, а также на последовательность 44.

Напишите программу, которая решит эту задачу для произвольного набора кодов городов.

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

На первой строке входного файла находятся два числа N и M — количество городов и длина полного телефонного номера (1 ≤ N ≤ 100 000, 1 ≤ M ≤ 9). Далее следуют N строк, в каждой из которых находится код очередного города и название города, между которыми находится ровно один пробел. Название города состоит только из заглавных и маленьких латинских букв и не превышает по длине 20 символов. Гарантируется, что в каждой из этих строк входного файла будет ровно один пробел — между кодом города и его названием.

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

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

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

Города можете выводить в произвольном порядке.

Примеры
Входные данные
4 9
831 NizhnyNovgorod
8313 Dzerzhinsk
83130 Sarov
83144 Balakhna
Выходные данные
Sarov 10000
Dzerzhinsk 90000
Balakhna 10000
NizhnyNovgorod 890000
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes

Цепочкой слов длины n назовем последовательность слов w1, w2, ..., wn такую, что для 1 ≤ i ≤ n слово wi является собственным префиксом слова wi + 1.

Напомним, что слово u длины k называется собственным префиксом слова v длины l, если l > k и первые k букв слова v совпадают со словом u.

Задано множество слов S = {s1, s2, ..., sm}. Найдите максимальную длину цепочки слов, которую можно построить, используя (возможно, не все) слова этого множества.

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

Первая строка входного файла содержит целое число m(1 ≤ m ≤ 255). Каждая из последующих m строк содержит по одному слову из множества S.

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

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

В выходной файл выведите ответ на задачу.

Примеры
Входные данные
3
a
ab
abc
Выходные данные
3
Входные данные
5
a
ab
bc
bcd
add
Выходные данные
2
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
256 megabytes

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

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

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

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

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

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

Третья строка входного файла содержит одно целое число m — количество сравнений и перекрашиваний (1 ≤ m ≤ 100 000). Следующие m строк содержат описания заданий, который Вася получает от Витезслава: четыре целых числа q, l, r и k.

В случае перекрашивания q = 0. Эта запись означает перекрашивание всех планок с l по r включительно в цвет k (1 ≤ l ≤ r ≤ n). В запросе на сравнение q = 1. Эта запись означает сравнение кусков забора длины k начиная с позиций l и r соответственно (1 ≤ l, r ≤ n - k + 1, k > 0).

Все числа во входном файле положительные и не превышают 100 000.

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

Выведите одну строку: для каждого запроса на сравнение выведите ‘+’ в случае совпадения соответствующих кусков забора и ‘-’ в противном случае.

Примеры
Входные данные
7
1 2 1 3 1 2 1
3
0 4 5 2
1 3 1 2
1 3 1 3
Выходные данные
+-
Входные данные
2
1 2
5
1 1 2 1
0 2 2 1
1 1 2 1
0 1 2 3
1 1 1 2
Выходные данные
-++
ограничение по времени на тест
0.75 second;
ограничение по памяти на тест
128 megabytes

На вступительном экзамене по информатике в СУНЦ МГУ Вашему другу предложили реализовать структуру данных для хранения множеств чисел. Так как он специализируется на истории литературы, данную структуру придётся реализовать Вам.

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

Вы должны реализовать следующие операции на этой структуре:

  • ADD e s
    Добавить в множество №s (0 <= s <= m) число e (0 <= e <= n).

  • DELETE e s
    Удалить из множества №s (0 <= s <= m) число e (0 <= e <= n). Гарантируется, что до этого число e было помещено в множество

  • CLEAR s
    Очистить множество №s (0 <= s <= m).

  • LISTSET s
    Показать содержимое множества №s (0 <= s <= m), либо -1, если множество пусто.

  • LISTSETSOF e
    Показать множества, в которых лежит число e (0 <= e <= n), либо -1, если этого числа нет ни в одном множестве.

Формат входных данных

Сначала вводятся числа N (1 <= N <= 9223372036854775807), M (1 <= M <= 100000) и K (0 <= K <= 100000) — максимальное число, номер максимального множества и количество запросов к структуре данных. Далее следуют K строк указанного формата запросов.

Формат выходных данных

На каждый запрос LISTSET Ваша программа должна вывести числа — содержимое запрошенного множества или -1, если множество пусто.

На каждый запрос LISTSETSOF Ваша программа должна вывести числа — номера множеств, содержащие запрошенное число или -1, если таких множеств не существует.

На прочие запросы не должно быть никакого вывода.

Гарантируется, что правильный вывод программы не превышает одного мегабайта.

Примеры
Входные данные
10 10
9
ADD 1 1
ADD 1 2
ADD 2 1
LISTSET 1
LISTSETSOF 1
DELETE 1 1
LISTSET 1
CLEAR 1
LISTSET 1
Выходные данные
1 2 
1 2 
2 
-1
Входные данные
10 10
5
ADD 1 1
LISTSET 10
LISTSET 1
CLEAR 1
LISTSET 1
Выходные данные
-1
1 
-1
#111773
  
Темы: [Деревья]
ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
16 megabytes
В ходе недавних военных учений министр обороны Советской Федерации товарищ Иванов имел возможность лично убедиться в блестящей боевой готовности солдат вверенной ему Советской Армии. Но одна вещь всё же продолжала беспокоить выдающегося военачальника. Прославленный генерал понимал, что была продемонстрирована лишь физическая подготовка солдат. Теперь настало время организовать очередные учения и проверить интеллектуальные способности личного состава. Генерал Шульман, вновь назначенный ответственным за проведение учений, пожертвовал все выделенные деньги бедным и с чистой совестью лёг спать. Во сне генералу явился учебник по тактике и изложил схему, руководствуясь которой можно провести учения совершенно бесплатно.

В соответствии с этой схемой учения делятся на N раундов, в течение которых N солдат, последовательно пронумерованных от 1 до N, маршируют друг за другом по кругу, т.е. первый следует за вторым, второй за третьим, ..., (N-1)-й за N-м, а N-й за первым. В каждом раунде очередной солдат выбывает из круга и идёт чистить унитазы, а оставшиеся продолжают маршировать. В очередном раунде выбывает солдат, марширующий на K позиций впереди выбывшего на предыдущем раунде. В первом раунде выбывает солдат с номером K. Разумеется, г-н Шульман не питал никаких надежд на то, что солдаты в состоянии сами определить очерёдность выбывания из круга. «Эти неучи даже траву не могут ровно покрасить», – фыркнул он и отправился за помощью к прапорщику Шкурко.


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

Единственная строка содержит целые числа N (1 ≤ N ≤ 100000) и K (1 ≤ K ≤ N).


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

Вывести через пробел номера солдат в порядке их выбывания из круга.
Примеры
Входные данные
5 3
Выходные данные
3 1 5 2 4

Страница: << 22 23 24 25 26 27 28 >> Отображать по:
Выбрано
:
Отменить
|
Добавить в контест