몽유병에 걸린 양
시간 제한20초메모리 제한1024 MB
두 목양견이 매 차례 이웃한 칸 두 개를 막아 무작위로 움직이는 양을 집으로 유도할 때 기대 이동 횟수의 최솟값을 구합니다.
문제
양 블리트릭스는 단위 칸이 무한히 이어진 격자 위에 산다. 집은 칸이고 모든 좌표는 이 집 칸을 기준으로 한다. 블리트릭스는 몽유병이 있어서 지금 집에서 동쪽으로 칸, 북쪽으로 칸 떨어진 칸에 있다. 블리트릭스를 지키던 양치기 개 두 마리가 방금 이 사실을 알아채고 블리트릭스를 집으로 몰아가려 한다.
블리트릭스가 한 번 움직이기 직전에 두 개는 각자 원하는 칸으로 이동한다. 단 두 마리가 같은 칸에 설 수는 없고, 블리트릭스가 서 있는 칸으로도 갈 수 없다. 개가 자리를 잡으면 블리트릭스는 북, 남, 서, 동 네 방향의 단위 이동 가운데 개가 있는 칸으로 가는 이동을 버리고, 남은 이동 중 하나를 균등한 확률로 고른다. 그다음 개가 다시 자리를 잡고 같은 과정을 반복한다. 블리트릭스와 달리 개는 단위 이동만 해야 한다는 제약이 없다.
블리트릭스가 집 에 도착하면 잠에서 깨어 풀을 뜯고, 그 뒤로는 움직이지 않는다.
두 개가 서로 협력해서 블리트릭스가 집에 도착할 때까지 하는 이동 횟수의 기댓값을 최소로 만든다고 하자. 그 기댓값을 구하여라.
입력
첫째 줄에 테스트 케이스의 수 가 주어진다. 이어지는 개의 줄에 각각 두 정수 와 가 주어진다. 블리트릭스가 몽유병 상태로 서 있는 칸의 좌표이다.
출력
각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. 는 부터 시작하는 테스트 케이스 번호이고, 는 블리트릭스가 하는 이동 횟수의 기댓값을 소수점 아래 여섯 자리까지 나타낸 값이다. 정답이 소수점 아래 여섯 자리 반올림 경계에 정확히 놓이는 경우는 없으므로 출력할 값은 하나로 정해진다.
제한
힌트
와 는 음수일 수 있다. 가 이면 그 칸은 집에서 서쪽으로 한 칸 떨어져 있고, 가 음수이면 그 칸은 집보다 남쪽에 있다.
, 인 경우를 보자. 블리트릭스는 집에서 서쪽으로 한 칸, 북쪽으로 한 칸 떨어진 자리에서 시작한다. 첫 이동 직전에 두 개가 과 에 서면 블리트릭스는 어느 쪽으로 움직이든 집에서 한 칸 떨어진 칸에 도착한다. 그렇다고 다음 이동에서 집에 도착한다고 보장할 수는 없다. 개는 칸을 두 개까지만 막을 수 있고, 남은 두 칸 중 어디로 갈지는 블리트릭스가 무작위로 고르기 때문이다. 나머지는 직접 알아내야 한다.