Logo
(追記) (追記ここまで)

30753번 - Включи свет, закрой двери! 다국어인터랙티브

시간 제한메모리 제한제출정답맞힌 사람정답 비율
3 초 1024 MB0000.000%

문제

Это интерактивная задача. В секции <<Протокол взаимодействия>> вы найдёте информацию о том, как сбрасывать буфер вывода (делать операцию 'flush').

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

Изначально все комнаты открыты, и в некоторых из них горит свет. Целью игры является включить свет во всех комнатах лабиринта, а также закрыть все комнаты, кроме одной (любой). Данная задача была бы простой, если бы у игрока была возможность оставлять в комнатах какие-то отметки, но это запрещено правилами квеста. Когда игрок заходит в какую-либо комнату, он видит только количество дверей в этой комнате, горит или не горит в ней свет, а также знает через какую дверь он только что вошёл. Заходя в комнату, игрок всегда видит двери в одном и том же порядке и нумерует из одинаково.

Игрок может выполнять следующие действия:

  • Включить свет в комнате, где он сейчас находится.
  • Выключить свет в комнате, где он сейчас находится.
  • Попробовать пройти через какую-то из дверей, данное действие завершится успехом, если комната по ту сторону двери не заперта. Проходя через какую-либо из дверей можно также активировать закрытие покидаемой комнаты.
  • Завершить игру, если игрок считает, что он уже запер все комнаты кроме текущей и включил везде свет.

입력

Изначально программе на ввод подаётся информация о том включен ли свет в стартовой комнате, сколько в этой комнате дверей и число 0ドル$ (поскольку игрок не пришёл в эту комнату через какую-то из дверей).

Гарантируется, что число комнат не превосходит 50ドル,ドル а число дверей не превосходит 100ドル$ (каждая дверь соединяет две комнаты и считается один раз). Также гарантируется, что из любой комнаты можно дойти до любой другой, двигаясь только с использованием имеющихся дверей, и что никакая пара комнат не соединена более чем одной дверью.

В секции <<Примеры>> приведены некоторые варианты возможных конфигураций лабиринта. Первая строка содержит количество комнат и количество дверей в лабиринте, затем идёт описание начального состояния лампочки в комнате (1ドル$ если лампочка горит, и 0ドル,ドル если не горит), далее следуют пары комнат, соединённых дверьми, а в конце содержится одно число --- номер стартовой комнаты. Обратите внимание, данное описание показывает структуру первых трёх тестов, но не соответствует тому, что ваша программа получит на вход. Пример возможного взаимодействия вашей и проверяющей программ приведён в разделе <<Замечание>>.

출력

Число запросов, сделанных вашей программой, не должно превосходить 30ドル,000円$. При нарушении этого ограничения вы получите вердикт Wrong Answer (неправильный ответ). Завершение игры также считается одним запросом.

После выполнения каждого запроса необходимо сбрасывать буфер вывода (делать операцию 'flush'), для этого можно использовать:

  • fflush(stdout) в языке C++;
  • System.out.flush() в Java;
  • stdout.flush() в Python;
  • flush(output) в Pascal;
  • смотрите документацию для других языков.

В секции <<Примеры>> в графе выходные данные приведено число запросов, использованных некоторым из решений жюри. Данное число следует игнорировать.

제한

인터랙션 프로토콜

Для выполнения запросов используйте следующий протокол взаимодействия с проверяющей программой:

  • <<turn on>> --- включить свет в текущей комнате. Если свет уже включен, то ничего не происходит. Проверяющая программа никак не отвечает на данный запрос.
  • <<turn off>> --- выключить свет в текущей комнате. Если свет уже выключен, то ничего не происходит. Проверяющая программа никак не отвечает на данный запрос.
  • <<go edgeId keep|lock>> --- пойти в дверь номер $edgeId,ドル считая что двери нумеруются начиная с 1ドル$. При этом параметр keep означает, что комната остается открытой, а lock означает, что после выхода из комнаты она закроется и больше не будет доступна. Ответом проверяющей программы будет:
    • locked, если комната, в которую ведёт данная дверь, закрыта. В этом случае игрок остаётся в данной комнате а действие lock (если оно было указано) не выполняется.
    • строка on|off edgeCount edgeId, если игрок успешно перейдёт в другую комнату. Слово on означает, что свет в текущей комнате включен, а слово off --- что выключен. $edgeCount$ равняется количеству дверей в данной комнате, а $edgeId$ --- номеру двери, через которую игрок только что пришёл.
  • <<done>> --- завершить игру. Данный запрос выполняется в конце, когда игрок считает, что уже включил свет во всех комнатах и запер все комнаты, кроме той в которой сейчас находится. Обратите внимание, что игрок может закончить игру в любой комнате. Если в какой-то комнате свет будет выключен или какая-то комната кроме данной будет не заперта, то решение получит вердикт Wrong Answer. После выполнения данного запроса программа должна немедленно завершить работу.

Если Ваша программа выведет какую-то другую команду или попытается перейти по двери с номером, которого не существует, то она получит вердит Presentation error.

예제 입력 1

2 1
0 0
1 2
1

예제 출력 1

7

예제 입력 2

3 2
1 1 1
1 2
2 3
2

예제 출력 2

17

예제 입력 3

3 3
0 1 1
1 2
2 3
3 1
1

예제 출력 3

43

노트

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

Комментарий о том, что граф является циклом, означает что все комнаты лежат на одном циклическом маршруте, не посещающем никакую комнату дважды.

Ниже приведён пример возможного протокола взаимодействия на первом тестовом примере. Левый столбец соответствует выводу проверяющей программы, а правый --- возможному выводу программы участника.

off 1 0
 turn on
 go 1 keep
off 1 1
 turn off
 turn on
 turn on
 go 1 lock
on 1 1
 go 1 lock
locked
 turn off
 turn on
 done

출처

Olympiad > Moscow Open Olympiad in Informatics > Moscow Open Olympiad in Informatics Long Qualification 2016-17 G번

채점 및 기타 정보

  • 예제는 채점하지 않는다.
(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /