아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

유리수 수열

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

요약
기약분수 p/q가 Calkin-Wilf 트리의 너비 우선 순서에서 몇 번째에 나타나는지 구합니다.
난이도

보통10점 중 5점

유형
수학, 트리, 비트 연산
정답자
아직 제출이 없습니다

문제

양의 유리수를 이름표로 갖는 무한 완전 이진 트리를 다음과 같이 정의한다.

  • 루트의 이름표는 1/11/1이다.
  • 이름표가 p/qp/q인 노드의 왼쪽 자식은 p/(p+q)p/(p+q)이다.
  • 이름표가 p/qp/q인 노드의 오른쪽 자식은 (p+q)/q(p+q)/q이다.

트리의 윗부분은 다음 그림과 같다.

수열 FF는 이 트리를 레벨 순서로(너비 우선으로) 순회해서 얻는다. 그림의 가는 점선이 순회 순서를 나타낸다. 즉 F(1)=1/1F(1) = 1/1, F(2)=1/2F(2) = 1/2, F(3)=2/1F(3) = 2/1, F(4)=1/3F(4) = 1/3, F(5)=3/2F(5) = 3/2, F(6)=2/3F(6) = 2/3과 같이 이어진다.

pp와 qq가 주어질 때 F(n)=p/qF(n) = p/q인 nn을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 데이터 집합의 개수 PP가 주어진다. (1≤P≤10001 \le P \le 1000) 각 데이터 집합은 서로 독립이며 모두 같은 방식으로 처리한다.

다음 PP개의 줄에 데이터 집합이 한 줄씩 주어진다. 각 줄은 데이터 집합 번호 KK, 공백 하나, 분자 pp, 슬래시(/), 분모 qq로 이루어진다. 주어지는 분수는 모두 기약분수이므로 트리에 정확히 한 번 나타난다.

출력

데이터 집합마다 한 줄씩 출력한다. 데이터 집합 번호 KK, 공백 하나, F(n)=p/qF(n) = p/q를 만족하는 nn을 차례로 출력한다. nn이 부호 있는 32비트 정수에 들어가도록 입력이 주어진다.

예제2

  1. 예제 1

    입력
    4
    1 1/1
    2 1/3
    3 5/2
    4 2178309/1346269
    
    예상 출력
    1 1
    2 4
    3 11
    4 1431655765
    
  2. 예제 2

    입력
    15
    1 1/1
    2 1/2
    3 2/1
    4 1/3
    5 3/2
    6 2/3
    7 3/1
    8 1/4
    9 4/3
    10 3/5
    11 5/2
    12 2/5
    13 5/3
    14 3/4
    15 4/1
    
    예상 출력
    1 1
    2 2
    3 3
    4 4
    5 5
    6 6
    7 7
    8 8
    9 9
    10 10
    11 11
    12 12
    13 13
    14 14
    15 15