ABC126 F - XOR Matching
解法
の場合
ならばもしくはもしくはを出力すればよく、それ以外ならばを出力します。それ以外の場合
の場合、数列に含まれる数字はまでの関係で、どう頑張ってもを作成することができないので答えはになります。
そうでない場合、
という数列を作成することで問題の条件を満たします。
まず、挟み込んでいる2つの数字については、それらでxorを取った時点で打ち消しあって0になるので、考えなくてよいです。
からの全ての数字についてのxorを取ると、全ての桁について、立っているビットは全体の半分で偶数であり、結局は0になります。
そこからある数についてのxorだけを取らないことを考えると、これはとについてのxorを取ることと変わらないため、結局になります。
ということは、2つので挟み込まれている部分のxorがとなるには、以外のについてのxorを取っていればよく、逆に以外の数字で挟みこまれている部分のxorがになるには、を1つだけ用意しておいて、それ以外の数字についてのxorが0になっていればよいので、上のような数列を用意してあげればよいことになります。
感想
せっかく考察がはやく終わったのに、デバッグに1時間ぐらいかかったうえ、結局バグはサンプルケース(の部分)だったということに気づいたのが終了数分前でした。
ACできる考察を用意する前では、コーナーケースとして処理していたのですが、ACできる考察のコードに、その処理を記述し忘れていました…
この手のバグ取りに時間をかけてしまう(+サンプルを通さない)のはよくない気がしているので気を付けたいですね。