Решение задачи Трубы с Codeforces
С пояснением   Просмотров: 76
Всего существует шесть типов труб: два типа прямых труб и четыре типа изогнутых труб. Ниже приведены примеры всех шести типов:
Типы труб
Вы можете поворачивать каждую из заданных труб на 90 градусов по часовой или против часовой стрелки любое (возможно, нулевое) количество раз (таким образом, типы 1 и 2 могут переходить друг в друга, а также 3,4,5,6 могут переходить друг в друга).
Вы хотите повернуть некоторые трубы таким образом, чтобы поток воды мог начать свое движение в (1,0) (слева от верхней левой трубы), пойти по трубе в (1,1), как-то потечь по связным трубам до трубы (2,n) и потечь вправо в (2,n+1).
Трубы называются связными, если они являются соседними в системе и их концы соединены. Ниже несколько примеров связных труб:
Примеры связных труб
Попробуем описать задачу при помощи примера:
Входные данные первого примера
И его решение ниже:
Решение первого примера
Как вы можете заметить, поток воды — это плохо нарисованная синяя линия. Чтобы достичь ответа, нам необходимо повернуть трубу на позиции (1,2) на 90 градусов по часовой стрелке, трубу на позиции (2,3) на 90 градусов, трубу на позиции (1,6) на 90 градусов, трубу на позиции (1,7) на 180 градусов и трубу на позиции (2,7) на 180 градусов. Тогда поток воды сможет достичь (2,n+1) из (1,0).
Вам необходимо ответить на q независимых запросов.
Пояснение к задаче
Давайте посмотрим, как может течь вода, когда она встречает трубу типа 1 или 2 и в ином случае. Когда вода встречает трубу типа 1 или 2, мы не можем сделать ничего, кроме как позволить ей течь вправо от текущей клетки. Иначе (если текущая труба изогнута) существует два случая: если труба на той же позиции, но в другом ряду не является изогнутой, то ответ «NO», потому что вода должна изменить ряд, но мы не можем повернуть следующую трубу таким образом, чтобы позволить ей течь вправо или влево. Таким образом, текущая труба является изогнутой и труба на той же позиции, но в другом ряду тоже является изогнутой, так давайте изменим текущую строку и перейдем право (очевидно, что нам никогда не нужно поворачивать влево).
Таким образом, ответ (и последовательность труб) однозначно определяется типами труб. Если после прохода по всем n позициям мы не встретили случая «NO» и текущий ряд является вторым, ответ равен «YES».