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)。

アルゴリズム

  1. 各照明について以下を繰り返す:
    • 初期状態 \(S_i\) が Yes ならON、No ならOFFとする
    • 押す回数 \(K_i\) が奇数ならば、現在の状態を反転させる
    • 最終的な状態を記録する
  2. すべての照明の最終状態を出力する

計算量

  • 時間計算量: \(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: