RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
R00675

분수의 양 끝에서

Diamond II 다이아몬드 II
난이도
3s
시간 제한
256MB
메모리 제한
0
맞았습니다!!
0
제출 수
0.0%
정답률
레이팅

의견: 0

설명

양의 분수 \(\dfrac{p}{q}\) 와 양의 정수 \(N\)이 주어진다. 분모가 \(N\) 이하인 분수 중에서 \(\dfrac{p}{q}\) 에 가장 가까운 두 분수를 찾아야 한다.

구체적으로, 정수 \(a \ge 0\), \(1 \le b \le N\) 인 분수 \(\dfrac{a}{b}\) 들 가운데

  • \(\dfrac{a}{b} \le \dfrac{p}{q}\) 를 만족하면서 \(\dfrac{p}{q}\) 에 가장 가까운 (즉 가장 큰) 분수 (아래쪽 근사)

  • \(\dfrac{a}{b} \ge \dfrac{p}{q}\) 를 만족하면서 \(\dfrac{p}{q}\) 에 가장 가까운 (즉 가장 작은) 분수 (위쪽 근사)

를 각각 기약분수로 구하라. 두 조건을 만족하는 가장 가까운 분수가 여러 개라면 분모가 가장 작은 것을 택한다 (같은 값의 분수는 기약분수로 유일하다). 만약 \(\dfrac{p}{q}\) 자신을 분모 \(N\) 이하로 표현할 수 있다면 두 답은 모두 \(\dfrac{p}{q}\) 의 기약분수가 된다.

\(T\)개의 질의가 주어진다. \(p, q, N\)\(10^{18}\)에 달하므로 분모를 일일이 시도하는 방법으로는 풀 수 없다.

제약

\(1 \le T \le 10^4\)

\(1 \le p \le 10^{18}\)

\(1 \le q \le 10^{18}\)

\(1 \le N \le 10^{18}\)

입력 형식

첫 줄에 질의의 수 \(T\)가 주어진다.

이어지는 \(T\)개의 줄에 각각 세 정수 \(p\), \(q\), \(N\)이 공백으로 구분되어 주어진다.

출력 형식

각 질의마다 한 줄에 네 정수 \(a_{\text{lo}}\), \(b_{\text{lo}}\), \(a_{\text{hi}}\), \(b_{\text{hi}}\) 를 공백으로 구분하여 출력한다. 앞의 두 수는 아래쪽 근사 \(\dfrac{a_{\text{lo}}}{b_{\text{lo}}}\), 뒤의 두 수는 위쪽 근사 \(\dfrac{a_{\text{hi}}}{b_{\text{hi}}}\) 이며 모두 기약분수이다.

예제 1
입력
2
22 7 5
3 2 10
출력
3 1 16 5
3 2 3 2
설명

첫 질의 p/q=22/7≈3.142857, N=5. 분모 5 이하에서 22/7 이하로 가장 가까운 것은 3/1=3 (다른 후보 19/6 등은 분모>5). 22/7 이상으로 가장 가까운 것은 16/5=3.2. 따라서 3 1 16 5.
둘째 질의 p/q=3/2=1.5, N=10. 3/2은 분모 2≤10로 그대로 표현 가능하므로 아래·위 모두 3/2. 따라서 3 2 3 2.

예제 2
입력
2
5 1 1
1 3 2
출력
5 1 5 1
0 1 1 2
설명

첫 질의 p/q=5/1=5, N=1. 분모 1로 5/1 그대로 표현되므로 5 1 5 1.
둘째 질의 p/q=⅓≈0.333, N=2. 분모 2 이하에서 ⅓ 이하 최댓값은 0/1=0, ⅓ 이상 최솟값은 ½=0.5. 따라서 0 1 1 2.

문제 정보

riseoj 작성

출처 Original

평가 및 의견

분수의 양 끝에서

개요
출제자 난이도 Diamond II 다이아몬드 II 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

분수의 양 끝에서

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8