만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

힐베르트의 생울타리 미로

시간 제한1초메모리 제한1024 MB

요약
차수 n의 생울타리 미로에서 두 위치 사이의 최단 이동 거리를 구합니다.
난이도

어려움10점 중 8점

유형
재귀, 분할 정복, 최단 경로, 수학
정답자
아직 제출이 없습니다

문제

David은 정원에 정교한 생울타리 미로를 가지고 있다. 각 미로마다 미로 안이나 주변에 있는 임의의 두 위치 사이를 걸어서 이동하는 데 얼마나 걸리는지 알고 싶어 한다. 차수가 n≥1n\geq 1인 생울타리 미로는 다음 절차로 만든다.

  1. S=AS=A로 시작한다.
  2. 다음 과정을 nn번 반복한다.
    1. SS의 각 AA를 LBFRAFARFBL로, 각 BB를 RAFLBFBLFAR로 바꾼 새 문자열 TT를 만든다.
    2. S=TS=T로 둔다.
  3. SS에서 모든 AA와 BB를 지운다.

남은 문자열이 미로를 만드는 지시어다. 무한 평면의 원점 (0,0)(0,0)에서 (1,0)(1,0) 방향을 보고 출발한다. F는 한 단위 앞으로 이동, R은 오른쪽으로 90도, L은 왼쪽으로 90도 회전이다.

미로를 만든 뒤 위치 (x,y)(x,y)는 꼭짓점이 (x,y),(x+1,y),(x,y+1),(x+1,y+1)(x,y),(x+1,y),(x,y+1),(x+1,y+1)인 단위 정사각형 칸과 대응한다. 두 위치 (x1,y1)(x_1,y_1), (x2,y2)(x_2,y_2)는 ∣x1−x2∣=1|x_1-x_2|=1과 ∣y1−y2∣=1|y_1-y_2|=1 중 하나만 성립하고 두 칸 사이에 생울타리가 없을 때 직접 이동할 수 있다. 이때 거리는 1이다. 주어진 nn과 두 위치에 대해 최단 거리를 구하라.

제한

시간 제한은 1000 ms, 메모리 제한은 1024 MB이다.

입력

첫 줄에 테스트 케이스 수를 나타내는 양의 정수 kk (1≤k≤100)(1\leq k\leq 100)가 주어진다. 이어지는 kk개 줄에는 정수 5개 nn, x1x_1, y1y_1, x2x_2, y2y_2가 주어진다. 여기서 1≤n≤501\leq n\leq 50이고 −252≤x1,y1,x2,y2≤252-2^{52}\leq x_1,y_1,x_2,y_2\leq 2^{52}이다. 테스트 케이스끼리는 서로 영향을 주지 않으며, 각 케이스는 무한 평면에 홀로 놓인 미로 하나를 나타낸다.

출력

kk개 줄에 각 테스트 케이스의 두 위치 사이 최단 거리를 한 줄에 정수 하나씩 출력한다.

힌트

첫 번째 케이스의 최단 경로는 다음 그림과 같다.

예제1

  1. 예제 1

    입력
    2
    3 5 3 4 0
    2 4 3 0 2
    
    예상 출력
    16
    11