Skip to content

Files

Latest commit

 

History

History

A. Сравнения подстрок


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

Условие:
Дана строка. Нужно уметь отвечать на запросы вида: равны ли подстроки [a..b] и [c..d].

Входные данные:
Сперва строка S (не более 105 строчных латинских букв). Далее число M — количество запросов.

Выходные данные:
M строк. Выведите Yes, если подстроки совпадают, и No иначе.

Пример

Входные данные
trololo
3
1 7 1 7
3 5 5 7
1 1 1 5
Выходные данные
Yes
Yes
No


B. Префикс-функция


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

Условие:
Постройте префикс-функцию для заданной строки s.

Входные данные:
Первая строка входного файла содержит s (1 ≤ |s| ≤ 106). Строка состоит из букв латинского алфавита.

Выходные данные:
Выведите значения префикс-функции строки s для всех индексов 1, 2, ..., |s|.

Пример

Входные данные
aaaAAA
Выходные данные
0 1 2 0 0 0


C. Z-функция


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

Условие:
Постройте Z-функцию для заданной строки s.

Входные данные:
Первая строка входного файла содержит s (1 ≤ |s| ≤ 106). Строка состоит из букв латинского алфавита.

Выходные данные:
Выведите значения Z-функции строки s для индексов 2, 3, ..., |s|.

Пример

Входные данные
aaaAAA
Выходные данные
2 1 0 0 0

Входные данные
abacaba
Выходные данные
0 1 0 3 0 1


D. Быстрый поиск подстроки в строке


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

Условие:
Даны строки p и t. Требуется найти все вхождения строки p в строку t в качестве подстроки.

Входные данные:
Первая строка входного файла содержит p, вторая — t (1 ≤ |p|, |t| ≤ 106). Строки состоят из букв латинского алфавита.

Выходные данные:
В первой строке выведите количество вхождений строки p в строку t. Во второй строке выведите в возрастающем порядке номера символов строки t, с которых начинаются вхождения p. Символы нумеруются с единицы.

Пример

Входные данные
aba
abaCaba
Выходные данные
2
1 5


E. Поиск периода


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

Условие:
Дана строка s. Требуется найти минимальную по длине строку t, такую что s представима в виде конкатенации одной или нескольких строк t.

Входные данные:
Первая строка входного файла содержит s (1 ≤ |s| ≤ 106). Строка состоит из букв латинского алфавита.

Выходные данные:
Выведите длину искомой строки t.

Пример

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

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


F. Подстроки-3


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

Условие:
Даны K строк из маленьких латинских букв. Требуется найти их наибольшую общую подстроку.

Входные данные:
В первой строке число K (1 ≤ K ≤ 10).

Выходные данные:
Наибольшая общая подстрока.

Пример

Входные данные
3
abacaba
mycabarchive
acabistrue
Выходные данные
cab


G. Множественный поиск


ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 256 мегабайт
ввод: search4.in
вывод: search4.out

Условие:
Дан массив строк si и строка t. Требуется для каждой строки si определить, встречается ли она в t как подстрока.

Входные данные:
Первая строка входного файла содержит целое число n — число элементов в s (1 ≤ n ≤ 106). Следующие n строк содержат по одной строке si. Сумма длин всех строк из s не превосходит 106. Последняя строка входного файла содержит t (1 ≤ t ≤ 106). Все строки состоят из строчных латинских букв.

Выходные данные:
Для каждой строки si выведите «YES», если она встречается в t и «NO» в противном случае. Строки нумеруются в порядке появления во входном файле.

Пример

Входные данные
3
abc
abcdr
abcde
xabcdef
Выходные данные
YES
NO
YES


H. Множественный поиск 2


ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 256 мегабайт
ввод: search5.in
вывод: search5.out

Условие:
Дан массив строк si и строка t. Требуется для каждой строки si определить, сколько раз она встречается в t как подстрока.

Входные данные:
Первая строка входного файла содержит целое число n — число элементов в s (1 ≤ n ≤ 106). Следующие n строк содержат по одной строке si. Сумма длин всех строк из s не превосходит 106. Последняя строка входного файла содержит t (1 ≤ t ≤ 106). Все строки состоят из строчных латинских букв.

Выходные данные:
Для каждой строки si выведите одно число: сколько раз она встречается в t. Строки нумеруются в порядке появления во входном файле.

Пример

Входные данные
3
abc
abcdr
abcde
xabcdef
Выходные данные
1
0
1


I. Множественный поиск 3


ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 512 мегабайт
ввод: search6.in
вывод: search6.out

Условие:
Дан массив строк si и строка t. Требуется для каждой строки si найти самое левое и самое правое вхождение в t как подстроки.

Входные данные:
Первая строка входного файла содержит целое число n — число элементов в s (1 ≤ n ≤ 106). Следующие n строк содержат по одной строке si. Сумма длин всех строк из s не превосходит 106. Последняя строка входного файла содержит t (1 ≤ t ≤ 106). Все строки состоят из строчных латинских букв.

Выходные данные:
Для каждой строки si выведите два числа: индексы самой левой и самой правой позиции, в которых она встречается в t. Если строка не встречается в t ни разу, выведите  - 1  - 1. Строки нумеруются в порядке появления во входном файле. Позиции нумеруются с 0.

Пример

Входные данные
3
ab
bcd
abde
abcdab
Выходные данные
0 4
1 1
-1 -1


J. Суффиксный массив


ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 512 мегабайт
ввод: array.in
вывод: array.out

Условие:
Постройте суффиксный массив для заданной строки s, для каждых двух соседних суффиксов найдите длину максимального общего префикса.

Входные данные:
Первая строка входного файла содержит строку s (1 ≤ |s| ≤ 400 000). Строка состоит из строчных латинских букв.

Выходные данные:
В первой строке выведите |s| различных чисел — номера первых символов суффиксов строки s так, чтобы соответствующие суффиксы были упорядочены в лексикографически возрастающем порядке. Во второй строке выведите |s| - 1 чисел — длины наибольших общих префиксов.

Пример

Входные данные
ababb
Выходные данные
1 3 5 2 4
2 0 1 1


K. Количество подстрок


ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 512 мегабайт
ввод: count.in
вывод: count.out

Условие:
Вычислите количество различных подстрок строки s.

Входные данные:
Единственная строка входного файла содержит строку s (1 ≤ |s| ≤ 400 000). Строка состоит из строчных латинских букв.

Выходные данные:
Выведите одно число — ответ на задачу.

Пример

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


L. Циклические сдвиги


ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 512 мегабайт
ввод: shifts.in
вывод: shifts.out

Условие:
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


M. Наибольшая общая подстрока


ограничение по времени на тест: 2 секунды
ограничение по памяти на тест: 512 мегабайт
ввод: common.in
вывод: common.out

Условие:
Найдите наибольшую общую подстроку строк s и t.

Входные данные:
Первая строка входного файла содержит строку s, вторая — t (1 ≤ |s|, |t| ≤ 100, 000). Строки состоят из строчных латинских букв.

Выходные данные:
Выведите одну строку — наибольшую общую подстроку строк s и t. В случае, если ответ не единственный, выведите минимальный лексикографически.

Пример

Входные данные
bababb
zabacabba
Выходные данные
aba