A. The Miracle and the Sleeper | Round #741 Div.2
https://codeforces.com/contest/1562/problem/A
시간 1초, 메모리 512MB
input :
- t (1 ≤ t ≤ 104)
- l r (1 ≤ l ≤ r ≤ 109)
output :
- For every test case, output the largest possible value of a mod b over all pairs (a,b) of integers for which r≥a≥b≥l.
각 테스트 케이스에서 나머지 연산을 수행했을 떄 얻을 수 있는 가장 큰 나머지를 출력하시오.
조건 :
- 두 수 l, r을 입력을 받습니다. 그 때에 (a mod b)연산을 수행할 때 얻을 수 있는 가장 큰 나머지를 찾으시오.
이 문제는 예제에서 도움을 받았다.
3번째 예제와 4번째 예제를 보면 답이 둘 다 r // 2에 근접한 것을 볼 수 있다.
그래서 그냥 나눈 다음 + 1 한 것으로 나머지를 구하면 그게 가장 큰 값인가? 하고 생각을 한 다음
해당 예제에 끄적여보니 그런거 같아서 그렇게 출력을 하도록 하였다.
혹시 l이 r // 2한 것보다 크다면 l을 가지고 나머지 연산을 수행하면 된다.
r이 가장 큰 숫자이기 때문에 얘는 고정이고 얘를 통해 나머지를 가장 크게 구하려고 한다면 얘를 2로 나눈 값에서 1을 더한 값이 가장 큰 값을 준다.
3을 나눈 값, 4를 나눈 값과 비교를 해서 봐도 그럴 것이다.
import sys
for _ in range(int(sys.stdin.readline())):
l, r = map(int, sys.stdin.readline().split())
if l == r:
print(0)
continue
start = r // 2
if start < l:
print(r % l)
continue
print(r % (start + 1))
Author And Source
이 문제에 관하여(A. The Miracle and the Sleeper | Round #741 Div.2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jsin2475/A.-The-Miracle-and-the-Sleeper-Round-741-Div.2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)