A. The Miracle and the Sleeper | Round #741 Div.2

3368 단어 2021.08.272021.08.27

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))

좋은 웹페이지 즐겨찾기