Блог пользователя Sergio86

Автор Sergio86, история, 12 часов назад, По-русски

Есть следующая задача: Хорошо известно, что анекдоты меняются из уст в уста и проследить за всеми изменениями довольно сложно.

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

«push_x» – добавить букву «x» в конец слова; «pop» – удалить последнюю букву (этот тип применим только для непустых слов). Анекдотолог Иван собрал историю одного анекдота – все версии анекдота, полученные корректной последовательностью изменений начиная с пустого слова, но есть нюанс. К сожалению, версии даны в произвольном порядке, а для публикации в научном журнале нужно восстановить последовательность изменений.

Помогите Ивану – найдите последовательность изменений такую, что применив её к изначально пустому слову, набор всех промежуточных версий совпадёт с имеющейся историей не учитывая порядка.

Входные данные Первая строка входного файла INPUT.TXT содержит целое число n – количество версий (1 ≤ n ≤ 3 000).

В следующих n строках содержится по одному слову, состоящему из строчных букв латинского алфавита и записанному в кавычках.

Суммарная длина слов не превосходит 10^6.

Гарантируется, что слова получены корректной последовательностью изменений, описанных в условии задачи, начиная с пустого слова.

Выходные данные В выходной файл OUTPUT.TXT выведите список из n−1 изменений в том порядке, в котором их нужно выполнять. Каждое изменение должно быть описано в отдельной строке.

Список слов, полученных этим списком действий, должен совпадать с данным списком слов, не учитывая порядка.

Пример входного теста: 6 "" "" "a" "b" "ab" "a"

Пример выходного: push_b pop push_a push_b pop

Сначала строим Бор по входных данным, причем со счётчиком (учитывает сколько раз каждое слово встречается во входном multiset). Далее нужно как-то обойти дерево, причем обход необязательно от корня до корня, он может заканчиваться в любой вершине, так чтобы после выполнения действий в выходном файле получался такой же multiset как и во входном. Какие идеи решения?

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится