记 (l = lceillog_2k ceil),在本题中你可以粗暴地认为 (l = 4)。
对于某一个 (x) 而言,(x-0, x-1, dots, x-k) 有极强的相关性,具体而言有以下两种情况:
(1)(x) 二进制下末 (l) 位 (geq k),此时 (x-0dots x-k) 除了末 (l) 位全部相同。
提前给答案异或上 (x) 末 (l) 位以外的位(这些位始终不变),不难发现 (x) 有效部分其实只有末 (l) 位。
(2)(x) 二进制下末 (l) 位 (< k),此时取 (x) 除末 (l) 位以外的最低非零位 (p)。
那么 (x-0dots x-k) 除了末 (l) 位,末 (l + 1sim p) 位一定形如
0...01
或1...10
,其他位始终相同。一样可以发现 (x) 有效部分仅取决于末 (l) 位与 (p)。
这导出一个重要的事实:本质不同的 (x) 只有 (O(c2^l) = O(ck)) 种。
p.s.:我们稍后将会看到,这里的分析其实还导出了另一个非常重要的事实。
我们记 (F(y, mathrm s)) 这个二元 GF,其中 (y) 是 EGF,(mathrm s) 是集合幂级数,第 (y^imathrm s^j) 项对应系数含义为 “选 (i) 个数异或和为 (j) 的方案数”。
容易发现,题目本身就是求 (n) 个形如 (left(sum_{i=0}^kfrac{y^i}{i!}mathrm s^{x-i} ight)) 的二元 GF 的卷积。
由于我们将本质相同的 (x) 放在了一起,问题变成求 (O(ck)) 个形如 (left(sum_{i=0}^kfrac{y^i}{i!}mathrm s^{x-i} ight)^t) 的卷积。
将 (mathrm s) 视作主元做 fwt,只需要分别将每一位所有的 ((sum_{i=0}^k a_iy^i)^t) 卷起来,最后取第 (k) 项并 ifwt 回去即可得到答案。
注意到项数只有 (O(k)) 项,可以考虑做 (O(k^2)) 的 ln + exp 优化求 (t) 次幂的过程。由于始终是做卷积,可以在 ifwt 之前再 exp。
对 (O(ck)) 个 GF 做 fwt 的复杂度为 (O(ck imes c2^c imes k))(注意我们的对象是 (O(k)) 的多项式);
对 (O(ck)) 个 fwt 后的每个多项式做 ln 的总复杂度为 (O(ck imes 2^c imes k^2))(求 ln 时需要常数项为 1,注意处理符号)。
合并只需要对应位相加,复杂度为 (O(2^c imes ck imes k))。
最后 exp 的总复杂度为 (O(2^c imes k^2))。
最后 ifwt 的复杂度为 (O(c2^c))。
由此,我们得到一个 (O((c+k)ck^22^c)) 的朴素实现。
一个简单的观察:(left(sum_{i=0}^kfrac{y^i}{i!}mathrm s^{x-i} ight)) 项数很少。考虑从此入手优化。
直接用定义做 fwt 可以做到 (O(ck imes k2^c))。
依照 fwt 的定义,最后求 ln 的多项式一定形如 (1 + left(sum_{i=1}^{k} pmfrac{y^i}{i!} ight)),一共只会有 (O(2^k)) 种可能性,因此做个 (O(2^k imes k^2)) 的预处理即可。
这样可以将其优化到 (O(ck^22^c))。
回到一开始的性质。
情况(1)只有末 (l) 项,这意味着 fwt 之后的结果本质只有 (2^l) 个不同的位。
情况(2)虽然可能会有 (p) 位发生改变,但它的信息量只有 (l + 1) 位(其中一个信息为 “(l + 1sim p) 是 0...01
还是 1...10
”),所以类似的有 fwt 之后的结果本质只有 (2^{l+1}) 个不同的位。
严格来说,fwt 之后的结果只跟它们张成的线性空间维数有关。
这意味着我们可以将 (O(2^c)) 的 fwt 缩成 (O(2^l) = O(k)) 的 fwt(也没有预处理 ln 的必要了)。
如果不预处理 ln,则 fwt + ln 这两部分的复杂度降到 (O(ck imes 2^l imes k^2) = O(ck^4))。
然而合并还是 (O(2^c imes ck imes k)) 的复杂度,依然考虑把 (O(2^c)) 降到 (O(2^l))。
把情况(1)中的所有多项式,与情况(2)中 (p) 相同的所有多项式先合并,复杂度变为 (O(2^c imes c imes k + 2^l imes ck imes k))。
那么,最终的总复杂度为 (O(c(c+k)2^c + ck^4))。
参考实现:https://codeforces.com/contest/1408/submission/114282085 。
我并不太清楚异或卷积能否使用 ln + exp 优化幂运算,感觉不太懂,总之先跑路了。
希望有懂哥能教教我.jpg。