영웅이 작은 격자에서 이동하고 직사각형 함정이 미끄러지며 벽에서 멈춘다. 함정 칸에 한 번도 서지 않고 출구에 도달하는 최소 시간을 구한다.
보통7BFS시뮬레이션그래프구현면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB용사가 함정으로 가득한 던전에 들어갔다. 던전은 R행 C열 격자이고, 각 칸은 좌표 (r,c)로 나타낸다. 여기서 0≤r<R, 0≤c<C이다. 용사는 지금 (0,0)에 있고 출구는 (R−1,C−1)에 있다.
1분마다 용사는 인접한 칸으로 움직일 수 있다. 두 칸이 변을 공유하면 인접하다. 제자리에 그대로 있어도 된다.
던전에는 함정이 K개 있다. 각 함정은 칸을 덮는 직사각형이고, 왼쪽 아래 칸 (pr,pc)와 오른쪽 위 칸 (qr,qc)로 주어진다. 이 함정은 pr≤a≤qr, pc≤b≤qc를 만족하는 모든 칸 (a,b)를 덮는다. 한 칸이 두 개 이상의 함정에 덮일 수도 있다.
함정이 덮은 칸에는 들어갈 수 없다. 게다가 함정도 움직인다. i번 함정의 속도는 ⟨dri,dci⟩이고 1분에 그만큼 이동한다. 어떤 함정의 왼쪽 아래가 (pr,pc), 오른쪽 위가 (qr,qc)이면 1분 뒤 그 함정의 왼쪽 아래는 (pr+dri,pc+dci), 오른쪽 위는 (qr+dri,qc+dci)가 된다. 단, 그 이동으로 함정의 일부라도 던전 밖으로 나가면 그 함정은 그 1분 동안 움직이지 않는다. 두 성분 중 한쪽만 적용하는 일은 없고 이동 전체가 취소된다. 이렇게 막힌 함정은 위치가 그대로이므로 그 뒤에도 계속 같은 자리에 머문다.
1분은 두 단계로 진행된다. 먼저 용사가 움직이고, 그다음 모든 함정이 움직인다. 용사가 함정 위에 있는지는 둘 다 움직인 뒤에 판정한다. 함정끼리 겹쳐도 이동은 멈추지 않는다. 시각 0에 (0,0)을 덮는 함정은 없다.
용사가 함정에 한 번도 걸리지 않고 출구 칸에 도달하는 최소 시간을 구하라.
첫째 줄에 테스트 케이스의 개수 T가 주어진다 (1≤T≤20). 이어서 각 테스트 케이스가 다음 형식으로 주어진다.
시각 0에 (0,0)을 덮는 함정은 없음이 보장된다.
각 테스트 케이스마다 용사가 출구에 도달하는 최소 시간을 한 줄에 출력한다. 도달할 수 없으면 −1을 출력한다.
다음 그림은 R=5, C=4인 던전이다. 문자 A와 B는 함정이고 O는 용사이다. 그림은 0행이 맨 아래에 오도록 그렸다.
Fig (1)은 함정 A가 (0,2)부터 (1,3)까지, 함정 B가 (2,2)부터 (3,3)까지 덮고 두 함정 모두 정지한 경우다. Fig (2)와 Fig (3)은 함정 B의 속도가 ⟨0,−1⟩일 때 각각 1분 뒤와 2분 뒤의 모습이다. 2분 뒤부터는 함정 B가 더 왼쪽으로 갈 수 없어서 제자리에 머문다.
