Skip to content →

a+b=a^b+2(a&b)の一般化

bit毎の排他的論理和を \(\oplus\)、論理積を \(\odot\) と置くと、
任意の非負整数 $a, b$ に対して $$a+b= a \oplus b + 2(a \odot b) $$ が成り立ちます。
これは
\begin{align}
0 \oplus 0 + 2(1 \odot 1) &= 0 + 0 = 0 \\
1 \oplus 1 + 2(1 \odot 1) &= 0 + 2 = 2 \\
0 \oplus 1 + 2(0 \odot 1) &= 1 + 0 = 1 \\
\end{align}
を観察すれば成り立つことが示せます。
この等式は競技プログラミングで非常によく使われるテクニックの一つです。
Yukiちゃんはこの等式を一般化して、
$$x_1+x_2+\dots+x_N = \bigoplus_{i=1}^N x_i + \sum_{k=2}^N a_k\sigma_{k}$$
の形で表せないか気になりました。ここで \(\sigma_k\) は \(x_1, x_2, \ldots, x_N\) の \(k\) 次対称式です。
例えば、\(N=3\) のときは、
$$x_1+x_2+x_3 = x_1 \oplus x_2 \oplus x_3 + a_2(x_1 \odot x_2 + x_2 \odot x_3 + x_3 \odot x_1 )+a_3(x_1 \odot x_2 \odot x_3)$$
です。
実は帰納法により、
$$x_1+x_2+\dots+x_N = \bigoplus_{i=1}^N x_i + 2\sigma_{2}-4\sigma_{3}+8\sigma_{4}-16\sigma_{5}+\ldots$$
であることが示せます。

追記:既出でした
yukicoder 1100
追記:なにこれ
sugarknriさん

Published in データ構造

Comments

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA