Processing math: 100%

3-й этап Республиканской олимпиады по информатике 2021-2022, 2 тура


Задача C. Восстановление строки

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

Вам дана строка s длины n, состоящая из строчных латинских букв и символов `?'. Также, вам даны m условий. Каждое условие описывается тремя целыми числами l1, l2 и x, которые означают что подстрока (sl1sl1+x1) должна быть равна подстроке (sl2sl2+x1). Вам нужно заменить каждый символ `?' на строчную латинскую букву так чтобы выполнялись все m условия. Среди всех таких строк, найдите лексикографически минимальную. Строка a лексикографический меньше строки b, если
Формат входного файла
В первой строке находится одно целое число n(1<=n<=300000). Во второй строке находится строка s, состоящая из n строчных латинских букв и символов `?'. В третьей строке находится одно целое число m(1<=m<=300000). В следующих m строках записаны по три целых числа l1, l2 и x (1<=l1,l2<=nx+1), означающие что подстрока (sl1sl1+x1) равна подстроке (sl2sl2+x1).
Формат выходного файла
Выведите лексикографически минимальную строку, которая удовлетворяет всем условиям, либо 1, если такой строки не существует.
Примеры:
Вход
10
a?b?b???b?
3
1 4 3
7 9 2
3 10 1
Ответ
abbabbbbbb
Вход
6
a????b
5
1 2 1
2 3 1
3 4 1
4 5 1
5 6 1
Ответ
-1
( Narkhan Kamzabek )
посмотреть в олимпиаде

Комментарий/решение:

  0
2 года 1 месяца назад #

Разве после соблюдения всех условий нельзя все оставшиеся вопросительные знаки заменить на маленькую "a"?

  0
2 года 1 месяца назад #

показать/скрыть код

C++

Задача интересная