問題はこちら
問題概要
爆弾が解説
公式解説が急にグラフを作り出してるので,自然な流れ重視で説明します.公式解説の前半に書かれてる処理はすでに行っているものとします.隣り合う爆弾の状態のXOR(状態が違うなら,同じなら
)を考える.
番目の爆弾を切り替えるとき,
番目と
番目の爆弾の状態のXOR(これを
とします),
番目と
番目の爆弾の状態のXOR(
)のみが切り替わります.便宜上
番目と
番目の状態
の爆弾があるとします.このように考えることで,区間を変更し
にする問題が2点(
)を変更し
から
を
にする問題になりました.
入力例での例

ここで上図を見ると,を変更できるのは緑のコードだけです.
であることから緑のコードは必ず使うことになります.緑のコードを使うと次は
を変更できるのが青のコードだけになります.このとき
なので青のコードは使いません.このようにして変更できるコードが
つだけの
がある限り決めていけばいいです.

この方法では上図の場合で出来なくなりますが,あるつのコードは他のコードの組合せで表されるので適当なコードを消してもいいことがわかります(例えば赤のコードを使うのと青と緑のコードを使うのは同じこと).
このようにして使うコードを決めた後,すべてのが
になってればOK.
これでも解けますが,もう少し言い換えるとあるつのコードは他のコードの組合せで表されるというのは
の辺を張ったグラフ上で閉路を意味します.上の解法は閉路がある限りその閉路から辺を取り除くという操作に対応します.