페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#10326
인터랙티브
채점 보류

양 몽유병 20s 1024MB

문제

블레이트릭스 트로터(Bleatrix Trotter)는 2차원 들판에 사는 양으로, 그 들판은 한 변의 길이가 1인 칸들로 이루어진 무한한 격자이다. 블레이트릭스의 집은 (0, 0)으로 표시되는 칸에 있으며, 모든 좌표는 블레이트릭스의 집을 기준으로 한다. 하지만 몽유병 때문에, 지금 블레이트릭스는 좌표가 (X, Y)인 칸에 있다. 즉, 집에서 동쪽으로 X칸, 북쪽으로 Y칸 떨어진 칸이다. 블레이트릭스를 보호하도록 배정된 두 마리의 양치기개가 양이 사라진 것을 방금 알아차렸고, 이제 블레이트릭스를 집으로 몰아가려 한다.

블레이트릭스가 한 번 움직이기 전에, 두 양치기개는 원하는 어떤 격자 칸으로든 이동할 수 있다. 단, 두 마리가 같은 칸으로 이동할 수는 없고, 어느 쪽도 블레이트릭스가 현재 있는 칸으로 이동할 수도 없다. 양치기개들이 자리를 잡고 나면, 몽유병에 걸린 블레이트릭스는 양치기개가 있는 칸으로 들어가지 않는 방향으로 길이 1의 무작위 이동을 한다. 즉, 가능한 네 방향 이동(북/남/서/동) 중에서 양치기개가 있는 칸으로 들어가게 되는 이동은 모두 버리고, 남은 이동들 중에서 균등한 확률로 하나를 선택한다. 그 다음 다시 양치기개들이 위치를 정할 수 있고, 이 과정을 반복한다. (블레이트릭스와 달리, 양치기개들은 한 번에 한 칸씩 이동할 필요가 없다는 점에 유의하라.)

블레이트릭스가 집이 있는 (0, 0)에 도착하면, 몽유병이 멈추고 깨어나서 평화롭게 풀을 뜯으며, 그 이후로는 더 이상 움직이지 않는다.

두 양치기개가 블레이트릭스가 집에 도착하기까지의 이동 횟수의 기댓값을 최소화하도록 협력한다면, 그 기댓값은 얼마인가?


입력

입력의 첫 줄에는 테스트 케이스 수 T가 주어진다. T개의 테스트 케이스가 이어진다. 각 테스트 케이스는 정수 X, Y 두 개가 주어진 한 줄로 이루어지며, 이는 위에서 설명한 블레이트릭스의 시작 위치 좌표를 나타낸다.


출력

각 테스트 케이스마다 Case #x: y 형식의 한 줄을 출력하라. 여기서 x는 (1부터 시작하는) 테스트 케이스 번호이고, y는 위에서 설명한 블레이트릭스의 이동 횟수의 기댓값이다. y는 정답과의 절대 오차 또는 상대 오차가 10-6 이내이면 정답으로 인정된다. 그 의미와 허용되는 실수 출력 형식에 대한 설명은 FAQ의 Competing 섹션을 참고하라.


예제

1
-1 1
Case #1: 4.000000
X 및/또는 Y 값은 음수일 수 있다. 예를 들어 X가 -1이면 그 칸은 Bleatrix의 집 칸에서 서쪽으로 한 칸 떨어진 곳을 뜻한다. (마찬가지로 Y가 음수이면 집 칸의 남쪽을 뜻한다.) 샘플 케이스에서 Bleatrix는 집에서 북쪽 한 칸, 서쪽 한 칸 떨어진 곳에서 시작한다. 첫 이동 전에 두 양치기 개는 (-2, 1)과 (-1, 2) 칸에 설 수 있다. 그러면 Bleatrix가 어느 방향을 선택하더라도 집에서 한 칸 떨어진 곳으로 가게 되지만… 다음 이동에서 집으로 가도록 보장할 수는 없다! 나머지 세부 사항은 직접 찾아보라.

출처

GCJ 2019iow C

로그인해야 코드를 작성할 수 있어요.