beet's soil

競プロのことなど

AtCoder Grand Contest 034 F - RNG and XOR

お気持ち議論で解けた(気分になった)ので共有

元凶

rsm9.hatenablog.com

???「OR版がゼータ変換で解けるならXOR版もWHTで同じように解けるのでは?」

立式

まず0がiになるまでの期待値はiが0になるまでの期待値と同じなのでそっちを求める。(天才的言い換え)

求める期待値をh0,h1,,h2N1 とする

gj=ajiai とする

1i について hi=j=02N1gj(hij+1)

S=i=02N1hi とすると

Sh0

=i=12N1hi

=i=12N1j=02N1gj(hij+1)

=j=02N1gji=12N1(hij+1)

=j=02N1gj(Shj+2N1)

=Sj=02N1gjhj+(2N1)

したがって h0=j=02N1gjhj(2N1)

ここで、長さ 2N の列 e=(1,1,,1) を考えると

h=conv(g,h+e)2N

となる。

h0 に対応する式を線形結合から作ったので、ランク(のようなもの)が1足りないことに注意

Walsh-Hadamard Transforms

h=conv(g,h+e)2N の両辺をアダマール変換すると

0i<2N について、 wht(h)i=wht(g)i×(wht(h)+wht(e))i2N

ここで wht(e)ii=02Ni00 である。

i0 のとき

wht(h)i=wht(g)i×wht(h)i2N

wht(g)i×wht(h)iwht(h)i=2N

wht(h)i=2Nwht(g)i1

wht(g)i1 であることに注意

i=0 のとき

wht(h)0=wht(g)0×wht(h)0

ここで、 wht(g)0=1 であるから、wht(h)0 がどんな値でも条件を満たす

(この部分はランクが足りないことが原因だと考えられる)

一方で、h0=0 であるから、i=02N1wht(h)i=2N×h0=0 より、 wht(h)0=i=12N1wht(h)i

以上より、wht(h) のすべての項が求まったので、h=iwht(wht(h)) を計算すればよい

提出

atcoder.jp