【AtCoder】ABC 442 B - Music Player

B - Music Playeratcoder.jp favicon

実行時間制限: 2 sec / メモリ制限: 1024 MiB / Difficulty: 27 / NoviSteps: 6Q / 配点: 200 点

問題概要

高橋君は音楽プレイヤーを持っている。 はじめ、音量は 00 であり、曲は停止中である。

これから、QQ 回の操作を順に行う。 ii 回目の操作は整数 AiA_i によって表され、操作の内容は以下の通り。

  • Ai=1A_i = 1 : 音量を 11 上げる。
  • Ai=2A_i = 2 : 現在の音量が 11 以上であれば音量を 11 下げ、00 であれば何もしない。
  • Ai=3A_i = 3 : 曲が停止中であれば曲を再生し、曲が再生中であれば曲を停止する。

i=1,2,,Qi = 1, 2, \ldots, Q に対して、以下の問題を解け。

  • ii 回目の操作を終えた直後に音量 33 以上で音楽が再生されているか判定せよ。

制約

  • 1Q2×1051 \leq Q \leq 2 \times 10^5
  • Ai{1,2,3}A_i \in \lbrace 1, 2, 3 \rbrace
  • 入力される値はすべて整数

考察

  • プレイヤーの再生状態と音量を変数で管理し、QQ 回の操作をシミュレーションしていけばよい。

実装例

CPP
1.#include <bits/stdc++.h>
2.using namespace std;
3.
4.// ======================================== //
5.
6.int main()
7.{
8. int Q;
9. cin >> Q;
10.
11. bool is_playing = false;
12. int volume = 0;
13. while (Q--)
14. {
15. int A;
16. cin >> A;
17.
18. if (A == 1)
19. {
20. volume++;
21. }
22. else if (A == 2)
23. {
24. volume = max(volume - 1, 0);
25. }
26. else if (A == 3)
27. {
28. is_playing = !is_playing;
29. }
30.
31. if (is_playing && volume >= 3)
32. cout << "Yes" << endl;
33. else
34. cout << "No" << endl;
35. }
36.
37. return 0;
38.}
atcoder.jp favicon

実装時間: 5 分以内

コメント

いい感じのシミュレーション問題だった。