만드는 중입니다

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

유리수 트리 (작은 입력)

면접 대비

시간 제한5초메모리 제한512 MB

요약
유리수 트리를 레벨 순서로 나열했을 때 n번째 분수를 구하고 주어진 분수의 위치를 구합니다.
난이도

보통10점 중 4점

유형
트리, BFS, 해시맵
정답자
아직 제출이 없습니다

문제

무한한 포화 이진 트리를 생각한다. 루트는 1/11/1이고, 노드 p/qp/q의 왼쪽 자식은 p/(p+q)p/(p+q), 오른쪽 자식은 (p+q)/q(p+q)/q이다. 트리의 위쪽은 다음과 같은 모양이다.

         1/1
    ______|______
    |           |
   1/2         2/1
 ___|___     ___|___
 |     |     |     |
1/3   3/2   2/3   3/1
...

모든 양의 유리수가 이 트리에 정확히 한 번씩 나타난다는 사실이 알려져 있다. 트리를 레벨 순서로 훑으면 다음 배열을 얻는다.

1/1, 1/2, 2/1, 1/3, 3/2, 2/3, 3/1, ...

다음 두 가지 질의를 처리한다.

  1. 배열의 nn번째 원소를 구한다. nn은 1부터 센다. 예를 들어 nn이 2이면 답은 1/21/2이다.
  2. 기약분수 p/qp/q가 배열에서 몇 번째인지 구한다. 예를 들어 1/21/2이 주어지면 답은 2이다.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 한 줄에 하나씩 주어진다. 각 줄은 질의 번호(1 또는 2)와 정수 한 개 또는 두 개로 이루어진다.

  1. 질의 번호가 1이면 정수 nn 하나가 주어진다. 배열의 nn번째 원소를 구해야 한다.
  2. 질의 번호가 2이면 정수 pp와 qq가 주어진다. p/qp/q가 배열에서 몇 번째인지 구해야 한다.

출력

각 테스트 케이스마다 한 줄을 출력한다.

  1. 질의 번호가 1이면 Case #x: p q를 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, p와 q는 구한 원소의 분자와 분모이다.
  2. 질의 번호가 2이면 Case #x: n을 출력한다. x는 테스트 케이스 번호이고, n은 주어진 수의 위치이다.

제한

  • 1≤T≤1001 \le T \le 100
  • 1≤n,p,q≤216−11 \le n, p, q \le 2^{16} - 1
  • pp와 qq는 서로소이다.
  • p/qp/q는 레벨 번호가 16 이하인 노드에 있다. 루트의 레벨 번호는 1이다.

예제3

  1. 예제 1

    입력
    4
    1 2
    2 1 2
    1 5
    2 3 2
    
    예상 출력
    Case #1: 1 2
    Case #2: 2
    Case #3: 3 2
    Case #4: 5
    
  2. 예제 2

    입력
    2
    1 1
    2 1 1
    
    예상 출력
    Case #1: 1 1
    Case #2: 1
    
  3. 예제 3

    입력
    7
    1 1
    1 2
    1 3
    1 4
    1 5
    1 6
    1 7
    
    예상 출력
    Case #1: 1 1
    Case #2: 1 2
    Case #3: 2 1
    Case #4: 1 3
    Case #5: 3 2
    Case #6: 2 3
    Case #7: 3 1