B - Garbage Collection Editorial by evima

別解

日付を \(q\) で割ったあまりが \(r\) であるような日に回収される種類のゴミが \(d\) 日に出された場合を考えます。

\(d\) 日から何日後に回収されるかを考えると、この日数は \(r - d\)\(q\) で割ったあまりと一致します。ここで、\(r - d\) が負の場合もあまりは \(0\) 以上であるとします。(例えば、\(-9\)\(7\) で割ったあまりは \(5\) です。)よって、答えは \(d + (r - d) \bmod q\) です。

for ループを用いてこの処理を \(Q\) 回行えば元の問題が解けます。C++ などの言語ではあまりの計算に注意してください。(a % b の代わりに (a % b + b) % b などとする必要があります。)

実装例 (Python):

N = int(input())
q, r = [0] * N, [0] * N
for i in range(N):
    q[i], r[i] = map(int, input().split())
Q = int(input())
for _ in range(Q):
    t, d = map(int, input().split())
    print(d + (r[t - 1] - d) % q[t - 1])

posted:
last update: