Автор: | СПб 2005 | Ограничение времени: | 2 сек | |
Входной файл: | restore.in | Ограничение памяти: | 64 Мб | |
Выходной файл: | restore.out |
В одном алгоритме сжатия используется преобразование строк, суть которого состоит в следующем. Рассмотрим некоторую строку. Возьмем все ее возможные циклические сдвиги и расположим их в словарном порядке в виде квадратной таблицы. В получившейся таблице выделим последний столбец, который, если его записать в виде строки, и будет являться результатом описанного преобразования.
Рассмотрим, что происходит при таком преобразовании со строкой «abraca»:
abraca
→
abraca
bracaa
racaab
acaabr
caabra
aabrac
→
1: aabrac
2: abraca
3: acaabr
4: bracaa
5: caabra
6: racaab
→
caraab
Итак, в результате мы получили строку «caraab». В дополнение к найденной строке мы определяем также позицию исходной строки в отсортированном списке циклических сдвигов (в данном случае 2). Оказывается, что исходя из этих двух данных, первоначальная строка восстанавливается однозначно. Напишите программу, которая сделает это.
№ | Входной файл (restore.in ) |
Выходной файл (restore.out ) |
---|---|---|
1 |
|
|
2 |
|
|
3 |
|
|