ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 256 мегабайт
ввод: стандартный ввод
вывод: стандартный вывод
Дана строка. Нужно уметь отвечать на запросы вида: равны ли подстроки [a..b] и [c..d].
Сперва строка S (не более 10^5 строчных латинских букв). Далее число M — количество запросов.
В следующих M строках запросы a,b,c,d. 0 ≤ M ≤ 10^5, 1 ≤ a ≤ b ≤ |S|, 1 ≤ c ≤ d ≤ |S|
M строк. Выведите Yes, если подстроки совпадают, и No иначе.
входные данные
trololo
3
1 7 1 7
3 5 5 7
1 1 1 5
выходные данные
Yes
Yes
No
ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 256 мегабайт
ввод: стандартный ввод
вывод: стандартный вывод
Постройте префикс-функцию для заданной строки s.
Первая строка входного файла содержит s (1 ≤ |s| ≤ 10^6). Строка состоит из букв латинского алфавита.
Выведите значения префикс-функции строки s для всех индексов 1, 2, ..., |s|.
входные данные
aaaAAA
выходные данные
0 1 2 0 0 0
ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 256 мегабайт
ввод: стандартный ввод
вывод: стандартный вывод
Постройте Z-функцию для заданной строки s.
Первая строка входного файла содержит s (1 ≤ |s| ≤ 10^6). Строка состоит из букв латинского алфавита.
Выведите значения Z-функции строки s для индексов 2, 3, ..., |s|.
входные данные
aaaAAA
выходные данные
2 1 0 0 0
входные данные
abacaba
выходные данные
0 1 0 3 0 1
ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 256 мегабайт
ввод: стандартный ввод
вывод: стандартный вывод
Даны строки p и t. Требуется найти все вхождения строки p в строку t в качестве подстроки.
Первая строка входного файла содержит p, вторая — t (1 ≤ |p|, |t| ≤ 10^6). Строки состоят из букв латинского алфавита.
В первой строке выведите количество вхождений строки p в строку t. Во второй строке выведите в возрастающем порядке номера символов строки t, с которых начинаются вхождения p. Символы нумеруются с единицы.
входные данные
aba
abaCaba
выходные данные
2
1 5
ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 256 мегабайт
ввод: стандартный ввод
вывод: стандартный вывод
Дана строка s. Требуется найти минимальную по длине строку t, такую что s представима в виде конкатенации одной или нескольких строк t.
Первая строка входного файла содержит s (1 ≤ |s| ≤ 10^6). Строка состоит из букв латинского алфавита.
Выведите длину искомой строки t.
входные данные
abacaba
выходные данные
7
входные данные
abcabcabc
выходные данные
3
ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 256 мегабайт
ввод: стандартный ввод
вывод: стандартный вывод
Даны K строк из маленьких латинских букв. Требуется найти их наибольшую общую подстроку.
В первой строке число K (1 ≤ K ≤ 10).
В следующих K строках — собственно K строк (длины строк от 1 до 10 000).
Наибольшая общая подстрока.
входные данные
3
abacaba
mycabarchive
acabistrue
выходные данные
cab
ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 256 мегабайт
ввод: search4.in
вывод: search4.out
Дан массив строк si и строка t. Требуется для каждой строки si определить, встречается ли она в t как подстрока.
Первая строка входного файла содержит целое число n — число элементов в s (1 ≤ n ≤ 10^6). Следующие n строк содержат по одной строке si. Сумма длин всех строк из s не превосходит 10^6. Последняя строка входного файла содержит t (1 ≤ t ≤ 10^6). Все строки состоят из строчных латинских букв.
Для каждой строки si выведите «YES», если она встречается в t и «NO» в противном случае. Строки нумеруются в порядке появления во входном файле.
входные данные
3
abc
abcdr
abcde
xabcdef
выходные данные
YES
NO
YES
ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 256 мегабайт
ввод: search5.in
вывод: search5.out
Дан массив строк si и строка t. Требуется для каждой строки si определить, сколько раз она встречается в t как подстрока.
Первая строка входного файла содержит целое число n — число элементов в s (1 ≤ n ≤ 10^6). Следующие n строк содержат по одной строке si. Сумма длин всех строк из s не превосходит 10^6. Последняя строка входного файла содержит t (1 ≤ t ≤ 10^6). Все строки состоят из строчных латинских букв
Для каждой строки si выведите одно число: сколько раз она встречается в t. Строки нумеруются в порядке появления во входном файле.
входные данные
3
abc
abcdr
abcde
xabcdef
выходные данные
1
0
1
ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 512 мегабайт
ввод: search6.in
вывод: search6.out
Дан массив строк si и строка t. Требуется для каждой строки si найти самое левое и самое правое вхождение в t как подстроки.
Первая строка входного файла содержит целое число n — число элементов в s (1 ≤ n ≤ 10^6). Следующие n строк содержат по одной строке si. Сумма длин всех строк из s не превосходит 10^6. Последняя строка входного файла содержит t (1 ≤ t ≤ 10^6). Все строки состоят из строчных латинских букв.
Для каждой строки si выведите два числа: индексы самой левой и самой правой позиции, в которых она встречается в t. Если строка не встречается в t ни разу, выведите - 1 - 1. Строки нумеруются в порядке появления во входном файле. Позиции нумеруются с 0.
входные данные
3
ab
bcd
abde
abcdab
выходные данные
0 4
1 1
-1 -1
ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 512 мегабайт
ввод: стандартный ввод
вывод: стандартный вывод
Постройте суффиксный массив для заданной строки s, для каждых двух соседних суффиксов найдите длину максимального общего префикса.
Первая строка входного файла содержит строку s (1 ≤ |s| ≤ 400 000). Строка состоит из строчных латинских букв.
В первой строке выведите |s| различных чисел — номера первых символов суффиксов строки s так, чтобы соответствующие суффиксы были упорядочены в лексикографически возрастающем порядке. Во второй строке выведите |s| - 1 чисел — длины наибольших общих префиксов.
входные данные
ababb
выходные данные
1 3 5 2 4
2 0 1 1
ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 512 мегабайт
ввод: стандартный ввод
вывод: стандартный вывод
Вычислите количество различных подстрок строки s.
Единственная строка входного файла содержит строку s (1 ≤ |s| ≤ 400 000). Строка состоит из строчных латинских букв.
Выведите одно число — ответ на задачу.
входные данные
ababb
выходные данные
11
ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 512 мегабайт
ввод: стандартный ввод
вывод: стандартный вывод
k-м циклическим сдвигом строки S называется строка, полученная перестановкой k первых символов строки S в конец строки.
Рассмотрим все различные циклические сдвиги строки S и отсортируем их по возрастанию. Требуется вычислить i-ю строчку этого массива.
Например, для строки abacabac существует четыре различных циклических сдвига: нулевой (abacabac), первый (bacabaca), второй (acabacab) и третий (cabacaba). После сортировки по возрастанию получится такой массив: abacabac, acabacab, bacabaca, cabacaba.
В первой строке входного файла записана строка S, длиной не более 100 000 символов с ASCII-кодами от 32 до 126. Во второй строке содержится единственное целое число k (1 ≤ k ≤ 100 000).
В выходной файл выведите k-й по возрастанию циклический сдвиг строки S, или слово IMPOSSIBLE, если такого сдвига не существует.
входные данные
abacabac
4
выходные данные
cabacaba
входные данные
abacabac
5
выходные данные
IMPOSSIBLE
ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 512 мегабайт
ввод: common.in
вывод: common.out
Найдите наибольшую общую подстроку строк s и t.
Первая строка входного файла содержит строку s, вторая — t (1 ≤ |s|, |t| ≤ 100,000). Строки состоят из строчных латинских букв.
Выведите одну строку — наибольшую общую подстроку строк s и t. В случае, если ответ не единственный, выведите минимальный лексикографически.
входные данные
bababb
zabacabba
выходные данные
cabacaba
входные данные
abacabac
5
выходные данные
aba