Олимпиады по программированию olympiads.ru |
Олимпиада проводится при поддержке Московского физико-технического института, Благотворительного фонда "Династия", компьютерной компании НИКС, Компании Yandex, компании Genius Информационная поддержка: III Всероссийская заочная олимпиада школьников по информатике, 2008/09 учебный годЗадача K. Квест
Одна программистская компания решила разработать серию игр в жанре "Квест". Один из игроков сумел похитить сценарии игр, и теперь планирует составить описания прохождения всех квестов. Во всех квестах приключения происходят в некотором здании, где имеется несколько комнат. Комнаты соединены друг с другом дверями. Чтобы открывать двери, можно использовать ключи. Также в игре присутствуют персонажи, объекты и предметы. Основная цель игры - спасти принцессу, которая находится в одной из комнат. Игрок в квесте может поговорить с любым персонажем. После этого он узнает названия нескольких предметов, которые требуется принести этому персонажу, чтобы тот в свою очередь дал игроку некоторые другие предметы. Некоторые предметы можно найти на полу комнат. Также игрок может использовать предметы на объектах. В результате этого он получает некоторые другие предметы. Напишите программу, которая, получив описание игрового мира квеста, создает описание его прохождения - последовательность действий, которые игрок должен совершить, чтобы успешно пройти квест - спасти принцессу. Формат входных данных Первая строка входного файла содержит число N - количество комнат в игре. Следующие N строк содержат названия комнат. Следующая строка содержит M - количество дверей. Следующие M строк описывают двери - каждая строка содержит номера комнат, разделенных дверью, и название ключа, который открывает эту дверь. Затем следует описание содержимого комнат. Каждое описание начинается с трех целых чисел: c - количество персонажей в комнате, o - количество объектов в комнате и i - количество предметов на полу в комнате. Следующие строки содержат описание персонажей. Каждое описание состоит из трех строк. Первая строка содержит имя персонажа. Следующая строка содержит названия одного или более предметов - те предметы, которые игрок должен принести данному персонажу. Последняя строка также содержит названия одного или более предметов - предметы, которые персонаж даст игроку после того, как тот принесет ему запрошенные предметы. Описание объектов в том же формате идет после персонажей. Отличие объектов от персонажей заключается в следующем: после того как игрок отдает предметы персонажу, они остаются у персонажа, а после использования на объекте предметы остаются у игрока. Также прежде чем дать что-либо персонажу требуется поговорить с ним. Последние i строк описания комнаты содержат названия предметов, которые находятся в ней на полу. Если в одной строке перечисляется несколько предметов, их названия разделяются запятой. Последние две строки входного файла содержат название комнаты, в которой игрок исходно находится, и название комнаты, в которой заперта принцесса. Все имена и названия состоят только из букв латинского алфавита, цифр и пробелов. Вы должны игнорировать пробелы в начале и конце имен и названий. Регистр букв во всех именах и названиях имеет значение. Длина каждого имени и названия не превышает 100 символов. Все имена и названия различны. Количество комнат не меньше двух и не превышает восьми. Все двери можно проходить в обоих направлениях. Общее число персонажей, объектов и предметов не превосходит 200. Вы всегда начинаете в комнате, отличной от комнаты, в которой находится принцесса. Никакой предмет не требуется более чем одному персонажу, ни один предмет не требуется одновременно использовать на объекте и отдать персонажу. Ни один предмет нельзя одновременно получить у персонажа, объекта или найти на полу. Ни один ключ не открывает более одной двери, ни один ключ не требуется ни одному персонажу или объекту. Формат выходных данных Выведите последовательность действий, которую требуется выполнить, чтобы выиграть. Игрок может:
Следуйте формату, приведенному в примере. Игрок должен всегда давать персонажу или использовать на объекте все необходимые предметы, а также забирать объекты у персонажа или объекта в одно действие. Если выиграть невозможно, выведите "dead princess" в первой строке выходного файла. Примеры
|