Official

B - Music Player Editorial by cn449


現在の音量を表す変数と曲が再生中であるかを表す変数の \(2\) つの変数を管理しながら操作をしていけばよいです。

\(x\) を現在の音量を表す変数、\(y\) を曲が停止中ならば \(y = 0\)、曲が再生中ならば \(y = 1\) であるような変数とすると、各操作に対して \(x, y\) は以下のように変化します。

  • \(A_i = 1\) のとき、\(x\)\(x + 1\) で置き換える。
  • \(A_i = 2\) のとき、\(x > 0\) ならば \(x\)\(x - 1\) で置き換える。そうでないならば何もしない。
  • \(A_i = 3\) のとき、\(y\)\(1-y\) で置き換える。

\(y\)\(1-y\) で置き換える操作は \(0\)\(1\) を切り替える操作になっていることに注意してください。

操作を終えたとき、\(x \geq 3\) かつ \(y = 1\) ならば答えは Yes、そうでないならば答えは No です。

実装例

#include <bits/stdc++.h>
using namespace std;

int main() {
	int x = 0, y = 0;
	int q;
	cin >> q;
	while (q--) {
		int a;
		cin >> a;
		if (a == 1) x++;
		else if (a == 2 && x > 0) x--;
		else if (a == 3) y = 1 - y;
		if (x >= 3 && y == 1) cout << "Yes\n";
		else cout << "No\n";
	}
}

posted:
last update: