実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 118
問題概要
ある市では 種類のゴミを定期的に収集しており、 種類目のゴミは、日付を で割ったあまりが の日に収集される。次の 個のクエリを処理せよ。
- 番目のクエリ : 日に 種類目のゴミが出たときに、次にそれが収集される日を出力せよ。ただし、 種類目のゴミが出た日が 種類目のゴミが回収される日であった場合、そのゴミは同じ日に収集されるとする。
制約
- 入力はすべて整数。
考察
とすれば、 がゴミ を出してから回収されるまでの日数となる。つまり、これを に加えたものが各クエリの答えとなる。
...しかし、よく考えると は負になりうる (サンプルケース1の最後のクエリとか) 。
これを無理やり正にするために、 であることを利用して とし、これを に加えればよい。これにより各クエリは で処理できるので、全体の計算量は となる。
コード
#include <bits/stdc++.h> using namespace std; using ll = long long; #define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++) // ======================================== // int main() { int N; cin >> N; vector<ll> q(N), r(N); rep(i, 0, N) cin >> q[i] >> r[i]; int Q; cin >> Q; while (Q--) { ll t, d; cin >> t >> d; t--; ll m = d % q[t]; cout << d + ((r[t] - m + q[t]) % q[t]) << endl; } }
実装時間: 5分