Skip to content

Latest commit

 

History

History
 
 

hw14

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

Базовые алгоритмы на строках

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

Ограничение по времени на тест: 2 секунды

Ограничение по памяти на тест: 256 мегабайт

ввод: стандартный ввод

вывод: стандартный вывод

Дана строка s. Ответьте на m запросов вида: равны ли подстроки s[a..b] и s[c..d].

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

В первой строке ввода записана строка s (1 ≤ |s| ≤ 10^5).

Во второй строке записано целое число m — количество запросов (0 ≤ m ≤ 10^5).

В следующих m строках четверки чисел a, b, c, d (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

B. Z-функция

Ограничение по времени на тест: 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

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

Ограничение по времени на тест: 2 секунды

Ограничение по памяти на тест: 256 мегабайт

ввод: стандартный ввод

вывод: стандартный вывод

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

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

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

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

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

Пример

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

aba
abaCaba

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

2
1 5

D. Словарь

Ограничение по времени на тест: 5 секунд

Ограничение по памяти на тест: 256 мегабайт

ввод: стандартный ввод

вывод: стандартный вывод

Дан набор слов и текст, требуется определить для каждого слова, присутствует ли оно в тексте как подстрока.

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

В первой строке дан текст (не более 10^6 строчных латинских букв). Далее дано число M — количество слов в словаре.

В следующих M строках записаны слова (не более 30 строчных латинских букв). Слова различны и отсортированы в лексикографическом порядке.

Суммарная длина слов в словаре не более 10^5.

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

M строк вида Yes, если слово присутствует, и No иначе.

Пример

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

trololo
3
abacabadabacaba
olo
trol

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

No
Yes
Yes

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

Ограничение по времени на тест: 2 секунды

Ограничение по памяти на тест: 256 мегабайт

ввод: стандартный ввод

вывод: стандартный вывод

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

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

В первой строке число K (1 ≤ K ≤ 10).

В следующих K строках — собственно K строк (длины строк от 1 до 10 000).

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

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

Пример

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

3
abacaba
mycabarchive
acabistrue

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

cab