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

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

RealPhobia

면접 대비

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

요약
각 분수 A/B에 대해 D < B이면서 오차 |A/B - C/D|를 최소로 만드는 C/D를 찾고, 오차가 같으면 분모가 가장 작은 것을 고른다.
난이도

보통10점 중 7점

유형
정수론, 수학, 이분 탐색, 완전 탐색
정답자
아직 제출이 없습니다

문제

버트(Bert)는 부동소수점 연산을 정말로 무서워하는 프로그래머입니다. 그는 대신 유리수를 사용해 프로그램을 훌륭하게 작성해 왔지만, 분모가 커지는 것은 싫어합니다.

버트를 도와, 유리수의 분모를 줄이면서 생기는 오차를 최소화하는 프로그램을 작성하세요. B>2B > 2이고 0<A<B0 < A < B인 유리수 A/BA/B에 대해, 다음 조건을 만족하는 유리수 C/DC/D를 찾으면 됩니다.

  1. 0<C<D<B0 < C < D < B이고,
  2. 오차 ∣AB−CD∣\left|\dfrac{A}{B} - \dfrac{C}{D}\right|가 가능한 모든 CC, DD 중에서 최소이며,
  3. 그 최소 오차를 만드는 쌍들 중에서 DD가 가장 작은 양의 정수입니다.

조건 3에서 DD를 최소화하므로, 답 분수 C/DC/D는 항상 기약분수입니다.

입력

첫째 줄에 테스트 케이스의 개수를 나타내는 정수 KK (1<K<10001 < K < 1000)가 주어집니다. 이어지는 KK개의 줄에는 각각 하나의 테스트 케이스가 주어지며, 각 테스트 케이스는 두 정수 AA와 BB를 슬래시(/)로 구분한 분수 형태입니다. 이때,

  1. BB는 22보다 큰 32비트 정수이고,
  2. 0<A<B0 < A < B입니다.

출력

각 테스트 케이스마다, 분수 C/DC/D를 두 정수를 슬래시(/)로 구분한 형태로 한 줄에 출력합니다.

예제1

  1. 예제 1

    입력
    3
    1/4
    2/3
    13/21
    
    예상 출력
    1/3
    1/2
    8/13