この手のシミュレーションになれることはとても大事!
問題概要
あるチケット売り場は、待合行列がなければ、来た人の受付に 秒かかる。
人の人
は、それぞれ時刻
に到着する。まだ受付されていない人がいる場合は後ろに並ぶ。
人 がそれぞれ受付される時刻を求めよ。
制約
考えたこと
「現在時刻」 curtime を管理しながらシミュレーションしよう。
人 それぞれについて、前の人
の受付が終わった時刻を
curtime としたとき (人 1 については curtime = 0 とする)、次のように考えます。
- もし
T[i] >= curtimeであれば、人が売り場に到着したときには受付手続きを開始できる状態であるため、
T[i]から秒経過後の値を答える
- もし
T[i] < curtimeであれば、人が売り場に到着してもすぐに受付できる状態ではなく、
curtimeまで待つ必要がある。時刻curtimeから秒経過後の値を答える
- いずれの場合も、
curtimeの値を適切な値に更新しておく
あとは、この手続きを実装すればよいでしょう。
コード
#include <bits/stdc++.h> using namespace std; int main() { int N, A; cin >> N >> A; vector<int> T(N); for (int i = 0; i < N; ++i) cin >> T[i]; int curtime = 0; for (int i = 0; i < N; ++i) { if (curtime < T[i]) curtime = T[i]; curtime += A; cout << curtime << endl; } }