XOR World
ABC121-D "XOR World"
提出コード
考察
着目したのは以下の性質です.
任意の偶数に対して,
大雑把な証明をしておきます.
任意の偶数に対して,の最下位ビットはです.
一方でを考えると,最下位ビットがで,その他のビットはと等しいです.
よって,とのXORをとるとになることがわかります.
上の性質を用いると,からの中に偶数から奇数に切り替わるタイミングが何回あるか(numとおきます)を考えることで計算量を大幅に小さくできます.
また,num回ののXORについて,numが奇数であればになり,numが偶数であればになります.
私はが偶数か奇数か,が偶数か奇数かの通りの場合分けをしました.
(i) が奇数で,が奇数
からまでが繰り返し部分で,numです.
つまり,num回だけをXORした後,余ったをXORすればOK.
(ii) が奇数で,が偶数
からまでが繰り返し部分で,numです.
つまり,num回だけをXORした後,余ったとをXORすればOK.
(iii) が偶数で,が奇数
からまでが繰り返し部分で,numです.
つまり,num回だけをXORするだけでいいです.
(iv) が偶数で,が偶数
からまでが繰り返し部分で,numです.
つまり,num回だけをXORした後,余ったをXORすればOK.
以上により,で解けました.
感想
久しぶりの精進ツイートです.新生活でバタバタしていました.
この問題のdiffはですが,今この問題が出たらぐらいな気がしますね.
模範解答がきれいすぎて感動しました笑