Grakn Forces 2020 I. Bitwise Magic
题意
给定\(k,c\),再给定长度为\(n\)的序列(\(1\le n\le 2^c-k\),\(k\le a_i\le 2^c-1\))
进行\(k\)次操作,每次选择一个位置给\(a_i-1\)
问\(k\)次操作后,最后异或和为\(x\)的概率为多少
输出\(x\)分别为\(0\sim 2^c-1\)时的答案
\(k,c\le 16\)
做法
求方案数,写成指数多项式的形式。另外对常数项\(x\),定义\(x^i\times x^j=x^{i\oplus j}\)
\(\begin{aligned}
F(z)=\prod\limits_{i=1}^n(\sum\limits_{j=0}^k x^{a_i-k\oplus a_i}\frac{z^j}{j!})
\end{aligned}\)
对\(x\)沃什变换,对每一位单独处理
暴力计算是\(O(2^ck^2n+2^cc)\)的
我们发现,对于序列\(\{b_i=a-i\oplus a\}\),对于题目给出的限制,最多只有\(192\)种不同的序列
这样直接算是\(O(2^ck^2192)\)的,不过这样还是过不了
有个小优化,对于位置\(i\),可以把\(\{c_k=i\oplus k\% 2\}\)相同的再压一下,然后用\(k^2\)算某多项式的次幂
然后总共只要算\(1400490\)个不同的多项式
复杂度\(O(1400490k^2)\)