AtCoder Regular Contest 092 D - Two Sequences
数列 が与えられるので、 のすべてのxorを求めよという問題。解法は愚直にやればよいので、 程度の解法を求める必要がある。
xorの値を求める問題はbitごとに独立して行うというのが鉄則。そこで下位bitから求めていこう。最下位ビットはの偶奇で4パターンに分かれるが、そのうち2パターンの数が奇数なら1、偶数なら0になることがわかる。上位bitも同じようにやりたいが、足し算なので繰り上がりが発生する。一般にxorの問題は足し算と組み合わせた瞬間難易度が跳ね上がる。
そこで を順次考えていく。これは直感的にいうと上位ビットを徐々に0に落としていくイメージである。するとk bit目が1になる条件は の上位ビットが11または01であればよいため、例えば をソートしておくことで、 を固定すれば二分探索で組み合わせのパターンを探すことが可能になる。具体的には 及び をカウントすればよい。
計算量は とやや重いが、制限時間3秒なので間に合う。