Official
A - スイッチの切り替え / Flipping Switches Editorial by admin Editorial for printing
Qwen3-Coder-480B概要
各照明の初期状態とスイッチを押す回数から、最終的な照明のON/OFF状態を求めます。
考察
この問題では、各照明が独立して処理できるため、それぞれ個別に考えることができます。
重要な観察は、スイッチを押す回数 \(K_i\) の偶奇によって照明の状態が決まるということです: - スイッチを偶数回押すと、照明の状態は変わらない(元に戻る) - スイッチを奇数回押すと、照明の状態が反転する
例えば、初期状態が Yes(ON)で \(K_i = 3\)(奇数)の場合、最終状態は No(OFF)になります。
この性質を利用することで、実際に \(K_i\) 回スイッチを押す必要はなく、単に \(K_i\) が奇数かどうかだけを見ればよいです。これにより、非常に大きな \(K_i\)(最大 \(10^9\))でも効率的に処理できます。
素朴な方法(例えばループで \(K_i\) 回反転させる)では、\(K_i\) が大きいときに時間内に終わりません(TLE)。
アルゴリズム
- 各照明について以下を繰り返す:
- 初期状態 \(S_i\) が
YesならON、NoならOFFとする - 押す回数 \(K_i\) が奇数ならば、現在の状態を反転させる
- 最終的な状態を記録する
- 初期状態 \(S_i\) が
- すべての照明の最終状態を出力する
計算量
- 時間計算量: \(O(N)\)
- 空間計算量: \(O(N)\)
実装のポイント
入力を文字列として受け取った後、整数に変換すること(
K = int(K))状態の反転は
not演算子で簡単に実現できる最後にまとめて出力するよりも、各結果をリストに保存して最後に改行で結合すると効率的
ソースコード
N = int(input())
results = []
for _ in range(N):
S, K = input().split()
K = int(K)
# 初期状態が "Yes" (ON) かどうか
is_on = (S == "Yes")
# K回押した後の状態: Kが偶数なら変化なし、奇数なら反転
if K % 2 == 1:
is_on = not is_on
# 最終状態を結果に追加
results.append("Yes" if is_on else "No")
print("\n".join(results))
この解説は qwen3-coder-480b によって生成されました。
posted:
last update: