AtCoder Regular Contest 135 C問題 XOR to All
問題
提出解答
問題の概要
非負整数列 に対して, 次の操作を 回以上行う.
- を選ぶ.
このとき, 操作後の の最大値を求めよ.
制約
解法1 (操作後の整数列)
操作後の にどのような特徴があるかをみる. まず, 1回も操作しないことで, 自身が実現可能である.
1回以上操作した場合において, 実は以下が成立する.
操作後の整数列 に対して, ある 以上 以下の整数 が存在して, である.
証明
回の操作の結果について示せば十分である. まず, とすると, 整数列は になる. その後, (元の第 項) を選ぶと, 第 項は となる. これが任意の で成立するので, 2回の操作の場合については示せた. 3回以上についてもこれを繰り返し用いることによって示すことができる.
解法2 (最大値を求める)
よって, 求めるべきは
となる.
について考える. ここで, 一般的に非負整数 において, の2進表記を としたとき,
が成り立つ. ただし, の上限が となっているが, は有限であることから, は十分大きい整数に置き換えても良いことに注意する. 例えば, で置き換えれば良い.
この等式から, において, いくつ の位が であるかを見れば総和を求めることができる.
のうち の位が である整数の個数を とする. すると, 1回の操作において第 項を選んだ場合の の位が であるような項の個数を は の2進表記を としたとき,
である.
よって, であり, 各 において総和は で求められる.
以上から,
は で求められることができる.