まえがき
こんにちは、ARC173で水落ちした獅子座じゃない人です。
ARC173のE問題が単純な問題設定で一見単純な答えでありつつも、とても非自明な場合分けが必要であると感じました。
また、ARC-Eだけあって解説もとても行間が広く、行間を埋めたり別のアプローチをとって証明を試みたところ、さらに面白く感じたのでまとめます。
問題
atcoder.jp
元の問題文で理解できる問題設定だと思いますが、一応書いておきます。
長さの非負整数列が入力として与えられます。
非負整数の二項演算で、二進表記の各桁についてXORをとるものを、ビット単位XOR演算と定義しておきます。
- を好きなように並び替えたものを新たなとする。
- 現在のの長さをとして、という長さの数列を新たなとする。
という操作を回繰り返した後、は長さの整数列になっています。
その唯一の要素をとしたとき、としてありえる非負整数の最大値を出力する問題となります。
この問題は、としてありえる非負整数の条件を考察し、条件を満たす非負整数の最大値を求めることで解くことができます。
そして、としてありえる非負整数の条件がとても非自明で面白いと感じました。
操作の性質
操作の前半は、の長さを、あるの置換をとして、という変換を行うと考えることができます。
ここで、が等しい操作を同じ操作であると定義します。
また、長さがともにである非負整数列とについて、という演算を定義しておきます。
長さがのと、に同じ操作を行うことを考えます。
まず、操作の前半では、は、は、そしてはに変換されます。
したがって、という関係は保たれます。
改めて添字をおき直し、操作の後半について考えます。
操作の後半では、は、は、そしてはに変換されます。
の交換法則より、という関係は保たれます。
以上より、、と同じ操作をに行った結果は、新たな、についてのになることがわかりました。
また、の性質より、列の要素はかであるとしてしまって問題ありません。
二進の各桁について新たな列を作り、それぞれに同じ操作を行ったと考えることができます。
条件の考察
かからなる長さの列について、第項のみがで他の項は全てであるものをとします。
操作の性質から、各に同じ回の操作を行って得られるの組み合わせについて考えればよいです。
結論を先に述べます。
ある回の操作によって個のがとなった場合、個のがとなる全ての組み合わせについて、それを得る回の操作が存在します。
したがって、となるの個数についてのみ注目すればよいです。
またはの場合、は以上以下の全ての偶数をとります。
かつの場合、は以上以下の全ての偶数をとります。
ある回の操作によって個のがとなった場合、個のがとなる全ての組み合わせについて、それを得る回の操作が存在することを、まず証明します。
一回目の操作で並び替えを行うことは、の列を置換したのと同じになります。
したがって、一回目の操作で並び替えを行わなかった場合ととなるの個数は同じになり、一回目の操作で並び替えを適当に行うことで個のがとなる任意の組み合わせに対応する操作を考えることができます。
次に、ありうるが上のようになることを数学的帰納法で証明します。
まず、について、に操作を行うとが得られ、に操作を行うとが得られることから示されます。
次に、で成り立つことを仮定し、について考えます。
一回目の操作で並び替えを行わないとします。
すると、から得られるはとに同じ回の操作を行って得られる(それぞれとします)についてのになります。
第項のみがで他の項は全てである長さの列に、ある回の操作を行って得られるをとします。以降、この記法を複数用いる場合、全て同じ操作であることを仮定します。
から得られるは、から得られるは、から得られるはとなります。
これをもとに、となるの個数としてありえるものを考えることになります。
ここで、先にとなるの個数の偶奇について先に考えておきます。
和の偶奇のみを求めるのはまさしくXORそのものです。
より、となるの個数は偶数であることがわかります。
またはの場合
となる個数はが考えられます。
したがって、以外のは自由に決めることができます。ただし、全てのがである場合のみ作れません。
つまり、以外から得られる個のは自由に決めることができます。ただし、までから得られる全てのがである場合のみ作れません。
また、となる以外のの個数が奇数であった場合、必ずから得られるの片方のみがとなります。
よって、となるの個数として、からまでの全ての偶数がありえることがいえました。
また、となるの個数をにすることはできないこともいえるため、となるの個数としてありえるのは、以上以下の全ての偶数であることがわかりました。
かつの場合
となる個数はが考えられます。
全てのをにできないことのみ、の場合と異なります。
しかし、全てのがである場合のとなるの個数は個であり、別のの組み合わせによって達成できます。
よって、と同様の議論により、となるの個数としてありえるのは、以上以下の全ての偶数であることがわかりました。
の場合
となる個数はが考えられます。
したがって、以外のは自由に決めることができます。
つまり、以外から得られる個のは自由に決めることができます。
ほとんどの偶数についてはと同様の議論により、達成できることがいえます。しかし、とについては別に考える必要があります。
となるの個数をにするには、となる個数がである必要があり、これは無理です。
一方、となるの個数をにするには、となる個数がである必要があります。は偶数であり、問題ありません。
よって、となるの個数としてありえるのは、以上以下の全ての偶数であることがわかりました。
かつの場合
となる個数はが考えられます。
と同様の議論をすることができますが、の場合と異なり、は奇数となります。
よって、となるの個数をにすることはできないことがいえ、となるの個数としてありえるのは、以上以下の全ての偶数であることがわかりました。
以上より、ありうるが上のようになることがいえました。
この条件を、一般のに応用します。
の二進での桁目をとします。
元の非負整数列の二進の各桁について新たな列を作り、それぞれに同じ操作を行ったと考えます。
すると、各列はを使って、と表せます。
したがって、からある回の操作を行って得られるをとして、各列から得られるはと表せます。
XORの単位元がであり、ももともにかをとることから、と書き換えられます。
各桁に対してのこの結果を合わせると、から得られるとしてありえるのはの形であることがわかりました。
結局、長さのから得られるとして、から好きに個とった総ビット単位XOR演算の結果が全てありえることがわかりました。
ここで、またはの場合、は以上以下の全ての偶数をとり、かつの場合、は以上以下の全ての偶数をとります。
条件を踏まえた解法
まず、を考えると、それから一部をとっての総ビット単位XOR演算は必ずから偶数個とった総ビット単位XOR演算と同じになります。
より、から奇数個とっての総ビット単位XOR演算はを含んで偶数個とった総ビット単位XOR演算となります。
そして、から偶数個とっての総ビット単位XOR演算はを含まず偶数個とった総ビット単位XOR演算となります。
したがって、この問題はの部分集合の総ビット単位XOR演算の最大値を求める問題に帰着されます。
この問題は有名問題であり、たとえばこのような方法で時間(ただしは二進での桁数)で求めることができます。
www.geeksforgeeks.org
から一つもとらない場合はなので気にする必要はないですが、かつの場合はから全て選んでしまう場合を考慮する必要があります。
を使わない場合を全探索すればよく、この場合でも時間で求められます。
公式解説では、noshi基底を用いて線形独立でない場合やそもそもから全て選んで最大値にならない場合を先に省いていますが、それをしなくても最悪計算量のオーダーは変わりません。(もちろん最良計算量のオーダーは変わります。)