Темы --> Информатика --> Алгоритмы --> Алгоритмы на строках
    Суффиксный массив(2 задач)
    Z-функция, Префикс-функция(5 задач)
    Ахо-Корасик(2 задач)
---> 45 задач <---
Источники
    Личные олимпиады(938 задач)
    Командные олимпиады(684 задач)
Страница: << 3 4 5 6 7 8 9 Отображать по:
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes

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

Вам дан список S из k разрешённых слов. Так же вам даны буквы Зига за первые n ходов. На каждую из этих ходов найдите слово, которое Заг должен сказать.

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

В первой строке ввода содержится 2 числа k и n ( 1 ≤ k ≤ 10 5 , 1 ≤ n ≤ 10 5 ) — число слов в списке и число ходов.

В следующих k строках даны различные слова из списка, по одному в строке. Каждое из слов имеет длину не более 21 символа.

В следующих n строках даны буквы Зига, по одной в строке. Буквы даны в том порядке, в котором Зиг своими ходами их называет.

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

Выведите n строк, в i -й — то слово, которое Заг должен ответить на ход Зига. Гарантируется, что Заг всегда может сделать ход.

Система оценки

Решения, работающие при n ≤ 500 и k ≤ 500 будут оцениваться в 60 балов.

Примеры
Входные данные
4 5
zagreb
split
zadar
sisak
z
s
s
z
z
Выходные данные
zadar
sisak
split
zagreb
zadar
Входные данные
5 3
london
rim
pariz
moskva
sarajevo
p
r
p
Выходные данные
pariz
rim
pariz
Входные данные
1 3
zagreb
z
z
z
Выходные данные
zagreb
zagreb
zagreb
ограничение по времени на тест
5.0 second;
ограничение по памяти на тест
512 megabytes

Скажем, что последовательность строк t 1 , ..., t k является путешествием длины k , если для всех i > 1 t i является подстрокой t i - 1 строго меньшей длины. Например, { ab , b } является путешествием, а { ab , c } или { a , a } — нет.

Определим путешествие по строке s как путешествие t 1 , ..., t k , все строки которого могут быть вложены в s так, чтобы существовали (возможно, пустые) строки u 1 , ..., u k + 1 , такие, что s = u 1 t 1 u 2 t 2 ... u k t k u k + 1 . К примеру, { ab , b } является путешествием по строке для abb , но не для bab , так как соответствующие подстроки расположены справа налево.

Назовём длиной путешествия количество строк, из которых оно состоит. Определите максимально возможную длину путешествия по заданной строке s .

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

В первой строке задано целое число n ( 1 ≤ n ≤ 500 000 ) — длина строки s .

Во второй строке содержится строка s , состоящая из n строчных английских букв.

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

Выведите одно число — наибольшую длину путешествия по строке s .

Примечание

В первом примере путешествием по строке наибольшей длины является { abcd , bc , c } .

Во втором примере подходящим вариантом будет { bb , b } .

Примеры
Входные данные
7
abcdbcc
Выходные данные
3
Входные данные
4
bbcb
Выходные данные
2
ограничение по времени на тест
0.25 second;
ограничение по памяти на тест
256 megabytes

Строка \(s\) назывется префиксом строки \(t\), если строка \(t\) начинается со строки \(s\). Строка \(s\) назывется суффиксом строки \(t\), если строка \(t\) заканчивается на строку \(s\).

Назовём две строки \(s\) и \(t\) циклически эквивалентными, если существует циклический сдвиг, переводящий строку \(s\) в строку \(t\); другими словами строки \(s\) и \(t\) циклически эквивалентны тогда и только тогда, когда, строка \(s\) может быть получена из строки \(t\) путем перемещения некого суффикса строки \(t\) в начало строки \(t\). Например, строки \(ababba\) и \(abbaab\) циклически эквивалентны, в то время как строки \(ababba\) и \(ababab\) нет. В частности, любая строка циклически эквивалентна самой себе.

Дана строка \(t\) длины \(n\). Требуется найти такой префикс \(p\) и такой суффикс \(s\) строки \(t\), что:

  • \(p\) циклически эквивалентен \(s\) (и, как следствие, их длины равны)
  • длина \(p\) не превосходит \(\frac{n}{2}\) (то есть \(p\) и \(s\) не пересекаются в \(t\))
  • длина \(p\) максимальна

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

Первая строка входных данных содержит одно целое число \(n\) — длину строки \(е\) (\(1 \le n \le 1000 000\)).

Вторая строка входных данных содержит строку \(t\) состоящую из строчных латинких букв.

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

Выведите единственное целое число \(res\) - наибольшее целое число, такое что (\(0 \le res \le \frac{n}{2}\)) и \(res\) - ый префикс строки \(t\) циклически эквивалентен \(res\)-му суффиксу строки \(t\).

Система оценки

В тестах суммарной стоимостью не менее \(30\) баллов дополнительно гарантируется что \(n \le 500\).

В тестах суммарной стоимостью не менее \(50\) баллов дополнительно гарантируется что \(n \le 5000\).

В тестах суммарной стоимостью не менее \(80\) баллов дополнительно гарантируется что \(n \le 200000\).

В тестах суммарной стоимостью не менее \(90\) баллов дополнительно гарантируется что \(n \le 500000\).

Примеры
Входные данные
15
ababbabababbaab
Выходные данные
6
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes

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

Логотип состоит из \(n\) вертикальных полос различной высоты. Полосы пронумерованы от \(1\) до \(n\) слева направо. Логотип описывается перестановкой \((s_1, s_2, ..., s_n)\) чисел \(1, 2, ..., n\). Полоса с номером \(s_1\) - самая низкая, полоса с номером \(s_2\) - следующая по высоте и, наконец, полоса \(s_n\) - самая высокая. Фактическая высота полос не имеет большого значения. Вдоль главной улицы расположено \(m\) зданий. К вашему удивлению, высота зданий различна. Задача состоит в том, чтобы найти все позиции, на которых логотип соответствует зданиям. Помогите компании и найдите все непрерывные последовательности зданий, которые соответствуют логотипу. Непрерывная последовательность зданий соответствует логотипу, если здание \(s_1\) в этой последовательности является самым низким, здание \(s_2\) является следующим по высоте и т. д. Например, последовательность зданий высотой \(5, 10, 4\) соответствует логотипу, описанному перестановкой \((3, 1, 2)\), поскольку здание №3 (высотой 4) является самым низким, здание №1 - вторым по высоте, а здание №2 - самым высоким.

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

Первая строка стандартного ввода содержит два целых числа \(n\) и \(m\) \((2 \le n \le m \le 1 000 000)\).

Вторая строка содержит \(n\) целых чисел \(s_i\), образующих перестановку чисел \(1, 2, ..., n\). То есть \(1 \le s_i \le n\) и s\(_i \neq s_j\) для \(i \neq j\).

Третья строка содержит \(m\) целых чисел \(h_i\) - высоты зданий (\(1 \le h_i \le 10^9\) для \(1 \le i \le m\)). Все числа различные.

В каждой строке числа разделены пробелами.

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

Первая строка стандартного вывода должна содержать целое число \(k\) – количество совпадений.

Вторая строка должна содержать \(k\) целых чисел - индексы зданий начиная с 1, которые соответствуют первой полосе из логотипа в правильном соответствии. Числа должны быть перечислены в возрастающем порядке.

Если \(k = 0\), ваша программа должна напечатать пустую вторую строку.

Система оценки

В тестах суммарной стоимостью не менее 35 баллов \(n \le 5000\) и \(m \le 20 000\).

В тестах суммарной стоимостью не менее 60 баллов \(n \le 50 000\) и \(m \le 200 000\).

Примеры
Входные данные
5 10
2 1 5 3 4
5 6 3 8 12 7 1 10 11 9
Выходные данные
2
2 6
ограничение по времени на тест
0.75 second;
ограничение по памяти на тест
256 megabytes

Байтазар, король Байтотии организовал масштабную реформу имён своих подданных. Имена жителей Байтотии исторически часто содержат повторяющиеся фразы и Байтазар хочет с одной стороны упростить имена, а с другой, сохранить традиции повторения, а именно Байтазар хочет заменить каждое из имён в Байтотии на имя такой же длины, чтобы при этом множества периодов для старого и нового имён совпали, но имя при этом состояло только из символов «0» и «1». Из всех кандидатов в новое имя Байтазар хочет выбрать лексикографически минимальное.

Натуральное число \(k\) (\(1 \le k \lt n\)) называется периодом строки \(s\) длины \(n\) тогда и только тогда, когда для любого натурального \(i\), такого что \(1 \le i \le n - k\), верно что \(s_i = s_{i + k}\).

Множество периодов для данной строки \(s\) – множество таких чисел \(i\), что \(i\) является периодом \(s\). Обозначим его за Per(\(s\)). К примеру, Per(«ABIABUABIAB») = {6, 9}, Per(«0000») = {1, 2, 3}.

Помогите Байтазару перевести имена его подданных, и, возможно, он разрешит вам сохранить ваше собственное имя!

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

В первой строке ввода дано единственное число \(t\) (\(1 \le t \le 20\)) - количество имён, которые необходимо перевести в соответсвии с реформой Байтазара.

В последующих \(t\) строках содержатся имена жителей Байтотии. В \(i\) строке содержится строка \(s_i\), состоящяя из заглавных латинских букв - имя \(i\) жителя до перевода.

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

Вы должны вывесте \(t\) строк. В \(i\) строке выведите имя, в которое превратится имя \(s_i\) после перевода.

Система оценки

Подзадача 1 (30 баллов): длина каждого имени не превосходит 20 (\(|s_i| \le 20\))

Подзадача 2 (70 баллов): длина каждого имени не превосходит 200000 (\(|s_i| \le 200000\))

Примеры
Входные данные
3
ABIABUABIAB
BABBAB
BABURBAB
Выходные данные
01001101001
010010
01000010

Страница: << 3 4 5 6 7 8 9 Отображать по:
Выбрано
:
Отменить
|
Добавить в контест