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