삼각형 모험
시간 제한2초메모리 제한1024 MB
N×M 격자의 각 칸을 대각선 벽으로 나눈 삼각형들 사이에서, 두 삼각형을 잇는 최소 이동 횟수를 Q개의 질의마다 구합니다. 갈 수 없으면 -1을 출력합니다.
문제
포닉스는 크기의 격자에서 살고 있었다. 각 칸은 정사각형이며, 포닉스는 상하좌우로 인접한 칸으로 자유롭게 이동할 수 있었다.
어느 날 사악한 마법사가 각 칸에 넘을 수 없는 대각선 모양의 벽을 설치했다. 그 결과 각 칸은 직각이등변삼각형 모양의 두 영역으로 나뉘었다. 포닉스는 상하좌우로는 이전처럼 이동할 수 있지만, 대각선 벽을 넘을 수는 없다. 즉, 대각선이 아닌 변을 통해 인접한 삼각형으로만 이동할 수 있다. 포닉스는 자주 다니던 개의 경로에 대해 새로운 최소 이동 횟수를 계산하려 한다. 개의 질문은 다음과 같이 주어진다.
- : 에서 출발해 로 도착하기 위한 이동 횟수의 최솟값을 구하여라.
입력
첫 번째 줄에 격자의 크기를 나타내는 정수 , 과 질문의 개수 가 공백으로 구분되어 주어진다. ()
두 번째 줄부터 개의 줄에 걸쳐 길이 의 문자열이 주어진다. 번째 줄의 번째 문자는 번째 행 번째 열 칸에 나타난 대각선 벽의 형태를 의미한다. Z는 우상향 대각선, N은 우하향 대각선을 의미한다.
번째 줄부터 개의 줄에 걸쳐 형태의 질문이 주어진다. ()
주어지는 수는 모두 정수이다. 은 해당 좌표의 위쪽 삼각형 영역을, 은 아래쪽 삼각형 영역을 의미한다.
출력
각 질문에 대해 에서 출발해 로 도착하기 위한 이동 횟수의 최솟값을 한 줄에 하나씩 순서대로 출력한다. 해당하는 경로가 존재하지 않으면 -1을 출력한다.
힌트
포닉스의 모험기는 후대에도 포스테키안들에게 전설로 전해진다. 포스텍은 이를 기억하기 위해 학생회관 한편에 모험 당시의 격자를 재현해 두었다.
