ABC 098 D - Xor Sum 2
最近しゃくとり方を実装していなかったので解き直しました.
解法
問題を見るに, いかにもなしゃくとり法です.
この問題を解くうえで, xor演算の重要な性質を用います.
xor演算において以下の性質が成り立ちます.
1の性質は, この演算においては自身が逆元となることを示しています. (自明に0が単位元となっています.)
2の性質は, 可換な演算であることを示しています.
3の性質は, 結合法則が成り立つことを示しています.
これを利用すると, しゃくとり法を実装することができます.
具体的には, 以下のアルゴリズムを適用することができます.
入力の配列を, サイズをとします.
- 初期化 :
- ならばを出力して終了する.
- ならば4へ, そうでなければ5へ
- , , , 2へ
- , , 2へ
しゃくとりの右端を右に進めるときに答えを加算するようにしています.
計算量はで済みます.
感想
しゃくとり法は本番でバグらせやすいので演習を積んでいきたいです.