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


https://codeforces.com/contest/1562/problem/A
1秒、512 MBメモリ
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.
    各テストキャビネットで残りの演算を実行したときに得られる最大残高を出力します.
  • 条件:
    2つの入力l,rの
  • を受信する.次に、(a modb)演算を実行したときに得られる最大残存値を検索する.
  • この問題は例で役に立つ.
    3番目の例と4番目の例から、両方の答えがr/2に近いことがわかる.
    だから直接除いて、+1で残りを求めて、それは最大の値ですか?考えました.
    対応する例では軽く見るとそうだったので出力させました.
    lがr/2より大きい場合、lを使用して残りの演算を実行できます.
    rは最大の数字なので固定されており、残りを最大限に求めたい場合は2で割った値に1を加えると最大の値になります.
    3を4で割った値と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))