AtCoder Beginner Contest 247 D問題 Cylinder
問題
提出解答
問題の概要
空の筒がある. 次の 個のクエリを順に処理せよ.
- (Type 1) と書かれたボールを 個筒の右から入れる.
- (Type 2) 筒の左から のボールを取り出し, 取り出したボールに書かれている数の総和を求め, 出力する.
制約
- (Type 2) において, 筒の中にあるボールの個数は 個以上
解法
筒の中にあるボールの個数は高々 個となり, そのまま管理はできない.
しかし, 整数はある程度固まっていることを利用し, 筒の中にあるボールを 「 と書かれたボールが 個連なっている」というブロックで記録することにすると, 最大でも 個のブロックになり, 管理できるようになる.
よって, 以下のアルゴリズム求めることができる.
- を空の両側 Queue とする.
- の順に以下を実行する.
- (Type 1) のとき: に を right enqueue する.
- (Type 2) のとき: とする.
- である限り, 以下を実行する.
- から deque し, を得たとする.
- ならば, から を減らし, に を加える.
- ならば, に を left enqueue し, に を加え, とする.
- から deque し, を得たとする.
- を出力する.
- である限り, 以下を実行する.
これにより, 時間計算量 で処理することができた.