0415. Гроб или не гроб?

Имя входного файла: stdin
Имя выходного файла: stdout
Ограничение по времени: 2 s
Ограничение по памяти: 256 megabytes

Валентин любит играть в игру под названием Сапёр.

Правила данной игры достаточно просты: Есть поле размера 16 * 16. На поле расположено некоторое число мин. Некоторые клетки пустые. Цель игры – пометить все мины и открыть пустые клетки. Если открыть пустую клетку, то в ней будет написано число – количество мин в соседних клетках. Две различных клетки являются соседними если соприкасаются не менее чем одним углом. При открытии клетки в которой стоит число 0 сразу открываются все её соседние клетки. Игрок может делать три различных вида кликов.

  1. Одинарный клик по непроверенной клетке с целью открыть её. Если в клекте находится мина – игрок проигрывает. Иначе – клетка открывается.
  2. Сделать двойной клик по клетке, которая была открыта и содержит в себе число. Если количество меток в соседних клетках совпадает с числом, которое записано в клетке, то все закрытые соседние клетки открываются. Если метки были расставлены неверно, то игрок проигрывает.
  3. Пометить непроверенную клетку как клектку, в которой содержится мина. Если клетка уже была помечена ранее, то метка снимается.
  4. Завершить игру.
Если все пустые клетки открыты, а клетки с минами помечены, игрок побеждает. Иначе – проигрывает.

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

Ему стало интересно увидеть итоговое поле. Он сообщил вам координаты своего первого клика. Теперь он хочет, чтобы вы завершили игру. Он гарантирует, что это возможно.

Формат входного файла

На ввод дано 2 целых числа: x, y – координаты клетки, в которую кликнул Валентин. 1 ≤ x, y ≤ 16. x – номер строки, y – номер столбца. Далее будут содержаться ответы на запросы. Ответ на запрос выглядит следующим образом. Первая строка ответа содержит число N – число клеток поля, в которых изменилось значение. Далее следует N строк вида xi, yi, ci. xi, yi – координаты изменившейся клетки. ci – значение, которое появилось в этой клетке. 1 ≤ xi, yi ≤ 16. 0 ≤ ci ≤ 6, если клетка пуста. ci = "\texttt{\symbol{42}}" если игрок поставил в клетку метку мины. ci = "\texttt{\symbol{45}}" если игрок снял из клетки метку мины.

Формат выходного файла

Запрос на клик выглядит следующим образом. Сначала выведите тип клика. Если это не завершающий клик, то выведите координаты клетки, в которую совершается клик. Не забывайте сбрасывать буфер вывода после вывода каждого запроса. Это делается при помощи функции "fflush(stdout)"; в "C++" и "flush(output)"; в "Pascal".

Пример:

standart inputstandart output
1 1 6 1 1 0 1 2 0 2 1 1 2 3 1 1 3 0 2 2 2 1 3 2 * 1 3 2 - 1 3 1 * 1 3 2 2 1 3 3 * 1 1 1 3 3 2 3 3 2 3 3 1 2 2 1 3 3 3

Приведенный пример не является корректным, так как размер поля в нем равен 3 *3. Форматы запросов и ответов соответствуют условию.


Источник: Чемпионат ПетрГУ по программированию. 1 марта 2015 года

Обсудить       Отправить решение



Версия для печати