몽유병에 걸린 양

두 목양견이 매 차례 이웃한 칸 두 개를 막아 무작위로 움직이는 양을 집으로 유도할 때 기대 이동 횟수의 최솟값을 구합니다.

어려움9확률게임 이론수학아직 제출이 없습니다시간 제한20초메모리 제한1024 MB

문제

양 블리트릭스는 단위 칸이 무한히 이어진 격자 위에 산다. 집은 (0,0)(0, 0) 칸이고 모든 좌표는 이 집 칸을 기준으로 한다. 블리트릭스는 몽유병이 있어서 지금 집에서 동쪽으로 XX 칸, 북쪽으로 YY 칸 떨어진 (X,Y)(X, Y) 칸에 있다. 블리트릭스를 지키던 양치기 개 두 마리가 방금 이 사실을 알아채고 블리트릭스를 집으로 몰아가려 한다.

블리트릭스가 한 번 움직이기 직전에 두 개는 각자 원하는 칸으로 이동한다. 단 두 마리가 같은 칸에 설 수는 없고, 블리트릭스가 서 있는 칸으로도 갈 수 없다. 개가 자리를 잡으면 블리트릭스는 북, 남, 서, 동 네 방향의 단위 이동 가운데 개가 있는 칸으로 가는 이동을 버리고, 남은 이동 중 하나를 균등한 확률로 고른다. 그다음 개가 다시 자리를 잡고 같은 과정을 반복한다. 블리트릭스와 달리 개는 단위 이동만 해야 한다는 제약이 없다.

블리트릭스가 집 (0,0)(0, 0)에 도착하면 잠에서 깨어 풀을 뜯고, 그 뒤로는 움직이지 않는다.

두 개가 서로 협력해서 블리트릭스가 집에 도착할 때까지 하는 이동 횟수의 기댓값을 최소로 만든다고 하자. 그 기댓값을 구하여라.

입력

첫째 줄에 테스트 케이스의 수 TT가 주어진다. 이어지는 TT개의 줄에 각각 두 정수 XXYY가 주어진다. 블리트릭스가 몽유병 상태로 서 있는 칸의 좌표이다.

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. xx11부터 시작하는 테스트 케이스 번호이고, yy는 블리트릭스가 하는 이동 횟수의 기댓값을 소수점 아래 여섯 자리까지 나타낸 값이다. 정답이 소수점 아래 여섯 자리 반올림 경계에 정확히 놓이는 경우는 없으므로 출력할 값은 하나로 정해진다.

제한

  • 1T1001 \le T \le 100
  • 1000X1000-1000 \le X \le 1000
  • 1000Y1000-1000 \le Y \le 1000
  • (X,Y)(0,0)(X, Y) \ne (0, 0)

힌트

XXYY는 음수일 수 있다. XX1-1이면 그 칸은 집에서 서쪽으로 한 칸 떨어져 있고, YY가 음수이면 그 칸은 집보다 남쪽에 있다.

X=1X = -1, Y=1Y = 1인 경우를 보자. 블리트릭스는 집에서 서쪽으로 한 칸, 북쪽으로 한 칸 떨어진 자리에서 시작한다. 첫 이동 직전에 두 개가 (2,1)(-2, 1)(1,2)(-1, 2)에 서면 블리트릭스는 어느 쪽으로 움직이든 집에서 한 칸 떨어진 칸에 도착한다. 그렇다고 다음 이동에서 집에 도착한다고 보장할 수는 없다. 개는 칸을 두 개까지만 막을 수 있고, 남은 두 칸 중 어디로 갈지는 블리트릭스가 무작위로 고르기 때문이다. 나머지는 직접 알아내야 한다.