ARC173 E - Rearrange and Adjacent XORが超面白い

まえがき

こんにちは、ARC173で水落ちした獅子座じゃない人です。
ARC173のE問題が単純な問題設定で一見単純な答えでありつつも、とても非自明な場合分けが必要であると感じました。
また、ARC-Eだけあって解説もとても行間が広く、行間を埋めたり別のアプローチをとって証明を試みたところ、さらに面白く感じたのでまとめます。

問題

atcoder.jp
元の問題文で理解できる問題設定だと思いますが、一応書いておきます。
長さN(\geq 2)の非負整数列A=(A_1,A_2,\ldots,A_N)が入力として与えられます。
非負整数の二項演算で、二進表記の各桁についてXORをとるものを、ビット単位XOR演算\oplusと定義しておきます。

  • Aを好きなように並び替えたものを新たなAとする。
  • 現在のAの長さをnとして、(A_1\oplus A_2,A_2\oplus A_3,\ldots,A_{n-1}\oplus A_n)という長さn-1の数列を新たなAとする。

という操作を(N-1)回繰り返した後、Aは長さ1の整数列になっています。
その唯一の要素をXとしたとき、Xとしてありえる非負整数の最大値を出力する問題となります。

この問題は、Xとしてありえる非負整数の条件を考察し、条件を満たす非負整数の最大値を求めることで解くことができます。
そして、Xとしてありえる非負整数の条件がとても非自明で面白いと感じました。

操作の性質

操作の前半は、Aの長さをn、ある{1,2,\ldots,n}の置換をPとして、A\leftarrow(A_{P_1},A_{P_2},\ldots,A_{P_n})という変換を行うと考えることができます。
ここで、Pが等しい操作を同じ操作であると定義します。
また、長さがともにnである非負整数列ABについて、A\boldsymbol{\oplus}B=(A_1\oplus B_1,A_2\oplus B_2,\ldots,A_n\oplus B_n)という演算を定義しておきます。

長さがnABC=A\boldsymbol{\oplus}Bに同じ操作を行うことを考えます。
まず、操作の前半では、A(A_{P_1},A_{P_2},\ldots,A_{P_n})B(B_{P_1},B_{P_2},\ldots,B_{P_n})、そしてC(A_{P_1}\oplus B_{P_1},A_{P_2}\oplus B_{P_2},\ldots,A_{P_n}\oplus B_{P_n})に変換されます。
したがって、C=A\boldsymbol{\oplus}Bという関係は保たれます。

改めて添字をおき直し、操作の後半について考えます。
操作の後半では、A(A_1\oplus A_2,A_2\oplus A_3,\ldots,A_{n-1}\oplus A_n)B(B_1\oplus B_2,B_2\oplus B_3,\ldots,B_{n-1}\oplus B_n)、そしてC( (A_1\oplus B_1)\oplus (A_2\oplus B_2),(A_2\oplus B_2)\oplus (A_3\oplus B_3),\ldots,(A_{n-1}\oplus B_{n-1})\oplus (A_n\oplus B_n) )に変換されます。
\oplusの交換法則より、C=A\boldsymbol{\oplus}Bという関係は保たれます。

以上より、ABと同じ操作をA\boldsymbol{\oplus}Bに行った結果は、新たなABについてのA\boldsymbol{\oplus}Bになることがわかりました。

また、\oplusの性質より、列の要素は01であるとしてしまって問題ありません。
二進の各桁について新たな列を作り、それぞれに同じ操作を行ったと考えることができます。

条件の考察

01からなる長さNの列について、第i項のみが1で他の項は全て0であるものをe_i\ (1\leq i\leq N)とします。
操作の性質から、各e_iに同じ(N-1)回の操作を行って得られるXの組み合わせについて考えればよいです。

結論を先に述べます。
ある(N-1)回の操作によってk個のe_iX=1となった場合、k個のe_iX=1となる全ての組み合わせについて、それを得る(N-1)回の操作が存在します。
したがって、X=1となるe_iの個数kについてのみ注目すればよいです。
N=2またはN\not\equiv 2\ (\!\!\!\!\!\mod 4)の場合、k2以上N以下の全ての偶数をとります。
N\neq 2かつN\equiv 2\ (\!\!\!\!\!\mod 4)の場合、k2以上N-2以下の全ての偶数をとります。

ある(N-1)回の操作によってk個のe_iX=1となった場合、k個のe_iX=1となる全ての組み合わせについて、それを得る(N-1)回の操作が存在することを、まず証明します。
一回目の操作で並び替えを行うことは、e_iの列を置換したのと同じになります。
したがって、一回目の操作で並び替えを行わなかった場合とX=1となるe_iの個数は同じになり、一回目の操作で並び替えを適当に行うことでk個のe_iX=1となる任意の組み合わせに対応する操作を考えることができます。

次に、ありうるkが上のようになることを数学的帰納法で証明します。
まず、N=2について、e_1=(1,0)に操作を行うと1が得られ、e_2=(0,1)に操作を行うと1が得られることから示されます。

次に、N=n-1(\geq 2)で成り立つことを仮定し、N=nについて考えます。
一回目の操作で並び替えを行わないとします。
すると、e_iから得られるX({e_i}_1,{e_i}_2,\ldots,{e_i}_{N-1})({e_i}_2,{e_i}_3,\ldots,{e_i}_N)に同じ(N-2)回の操作を行って得られるX(それぞれX_1,X_2とします)についてのX_1\oplus X_2になります。

i項のみが1で他の項は全て0である長さN-1の列に、ある(N-2)回の操作を行って得られるXx_i\ (1\leq i\leq N-1)とします。以降、この記法を複数用いる場合、全て同じ操作であることを仮定します。
e_1から得られるXx_1e_i\ (2\leq i\lt N)から得られるXx_{i-1}\oplus x_ie_Nから得られるXx_{N-1}となります。
これをもとに、X=1となるe_iの個数としてありえるものを考えることになります。

ここで、先にX=1となるe_iの個数の偶奇について先に考えておきます。
和の偶奇のみを求めるのはまさしくXORそのものです。
x_1\oplus(x_1\oplus x_2)\oplus(x_2\oplus x_3)\oplus\cdots\oplus(x_{N-2}\oplus x_{N-1})\oplus x_{N-1}=0より、X=1となるe_iの個数は偶数であることがわかります。

1. N\equiv 1\ (\!\!\!\!\!\mod 4)またはN=3の場合
x_i=1となる個数は2,4,\ldots,N-1が考えられます。
したがって、x_{N-1}以外のx_iは自由に決めることができます。ただし、全てのx_i\ (i\lt N-1)0である場合のみ作れません。
つまり、e_{N-1},e_N以外から得られる(N-2)個のXは自由に決めることができます。ただし、e_i\ (i\lt N-1)までから得られる全てのX0である場合のみ作れません。
また、X=1となるe_{N-1},e_N以外のe_iの個数が奇数であった場合、必ずe_{N-1},e_Nから得られるXの片方のみが1となります。
よって、X=1となるe_iの個数として、2からN-1までの全ての偶数がありえることがいえました。
また、X=1となるe_iの個数を0にすることはできないこともいえるため、X=1となるe_iの個数としてありえるのは、2以上N以下の全ての偶数であることがわかりました。

2. N\equiv 3\ (\!\!\!\!\!\mod 4)かつN\gt 3の場合
x_i=1となる個数は2,4,\ldots,N-3が考えられます。
全てのx_i1にできないことのみ、1.の場合と異なります。
しかし、全てのx_i1である場合のX=1となるe_iの個数は(N+1)/2個であり、別のx_iの組み合わせによって達成できます。
よって、1.と同様の議論により、X=1となるe_iの個数としてありえるのは、2以上N以下の全ての偶数であることがわかりました。

3. N\equiv 0\ (\!\!\!\!\!\mod 4)の場合
x_i=1となる個数は2,4,\ldots,N-2が考えられます。
したがって、x_{N-1}以外のx_iは自由に決めることができます。
つまり、e_{N-1},e_N以外から得られる(N-2)個のXは自由に決めることができます。
ほとんどの偶数については1.と同様の議論により、達成できることがいえます。しかし、0Nについては別に考える必要があります。
X=1となるe_iの個数を0にするには、x_i=1となる個数が0である必要があり、これは無理です。
一方、X=1となるe_iの個数を1にするには、x_i=1となる個数がN/2である必要があります。N/2は偶数であり、問題ありません。
よって、X=1となるe_iの個数としてありえるのは、2以上N以下の全ての偶数であることがわかりました。

4. N\equiv 2\ (\!\!\!\!\!\mod 4)かつN\gt 2の場合
x_i=1となる個数は2,4,\ldots,N-2が考えられます。
3.と同様の議論をすることができますが、3.の場合と異なり、N/2は奇数となります。
よって、X=1となるe_iの個数をNにすることはできないことがいえ、X=1となるe_iの個数としてありえるのは、2以上N-2以下の全ての偶数であることがわかりました。

以上より、ありうるkが上のようになることがいえました。
この条件を、一般のAに応用します。

A_iの二進でのd桁目をA_i^{(d)}とします。
元の非負整数列Aの二進の各桁について新たな列を作り、それぞれに同じ操作を行ったと考えます。
すると、各列はe_iを使って、\pmb{\bigoplus}_{\{i\ |\ A_i^{(d)}=1\}} e_iと表せます。
したがって、e_iからある(N-1)回の操作を行って得られるXx_iとして、各列から得られるX\bigoplus_{\{i\ |\ A_i^{(d)}=1\}} x_iと表せます。
XORの単位元0であり、A_i^{(d)}x_iもともに01をとることから、\bigoplus_{\{i\ |\ A_i^{(d)}=1\}} x_i=\bigoplus_{\{i\ |\ x_i=1\}} A_i^{(d)}と書き換えられます。
各桁に対してのこの結果を合わせると、Aから得られるXとしてありえるのは\bigoplus_{\{i\ |\ x_i=1\}} A_iの形であることがわかりました。

結局、長さNAから得られるXとして、Aから好きにk個とった総ビット単位XOR演算の結果が全てありえることがわかりました。
ここで、N=2またはN\not\equiv 2\ (\!\!\!\!\!\mod 4)の場合、k2以上N以下の全ての偶数をとり、N\neq 2かつN\equiv 2\ (\!\!\!\!\!\mod 4)の場合、k2以上N-2以下の全ての偶数をとります。

条件を踏まえた解法

まず、A_1\oplus A_2,A_1\oplus A_3,\ldots,A_1\oplus A_Nを考えると、それから一部をとっての総ビット単位XOR演算は必ずAから偶数個とった総ビット単位XOR演算と同じになります。
A_1\oplus A_1=0より、A_1\oplus A_2,A_1\oplus A_3,\ldots,A_1\oplus A_Nから奇数個とっての総ビット単位XOR演算はA_1を含んで偶数個とった総ビット単位XOR演算となります。
そして、A_1\oplus A_2,A_1\oplus A_3,\ldots,A_1\oplus A_Nから偶数個とっての総ビット単位XOR演算はA_1を含まず偶数個とった総ビット単位XOR演算となります。

したがって、この問題はA_1\oplus A_2,A_1\oplus A_3,\ldots,A_1\oplus A_Nの部分集合の総ビット単位XOR演算の最大値を求める問題に帰着されます。
この問題は有名問題であり、たとえばこのような方法で時間\Theta(Nd)(ただしdは二進での桁数)で求めることができます。
www.geeksforgeeks.org

Aから一つもとらない場合は0なので気にする必要はないですが、N\neq 2かつN\equiv 2\ (\!\!\!\!\!\mod 4)の場合はAから全て選んでしまう場合を考慮する必要があります。
A_iを使わない場合を全探索すればよく、この場合でも時間\Theta(N^2 d)で求められます。
公式解説では、noshi基底を用いて線形独立でない場合やそもそもAから全て選んで最大値にならない場合を先に省いていますが、それをしなくても最悪計算量のオーダーは変わりません。(もちろん最良計算量のオーダーは変わります。)