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