CF1336E2

CF1336E2

考虑答案为:

\[F(x)=\prod (1+x^{a_i}) \]

\(G_c(x)=\sum [\textrm{popcount}(i)=c]x^i\),那么有对于某个 \(c\),答案为 \(F(x)G_c(x)[x^0]\)

\(F(x)\) 取 FWT,观察到 FWT\((1+x^{a_i})\) 的点值只有 \(0/2\),所以整体做完 FWT 之后的点值只有 \(2^n\)\(0\),且任意一位为 \(0\) 此位的点值就是 \(0\)

且不为 \(0\)\(i\) 会满足 \(\forall j,\textrm{popcount}(i\&a_j)\mod 2=0\),设 \(c(i,j)\) 表示 \([\textrm{popcount}(i\&j)\mod 2=0]\),则有如果 \(c(i,j)=1,c(k,j)=1\),那么 \(c(i\oplus j,k)=1\)

不难看出 \(c(x,y)\) 的左右两边都满足此性质,于是两边均为封闭的集合(构成异或意义下的一个群)显然的事实是,\(y\) 部分的集合就是 \(a_i\) 处任意异或可以得到的所有可能的值,当此集合变大时,相应的 \(x\) 处的集合会变小,两个部分均可以使用线性基描述,可以证明两个部分的线性基大小之和为 \(m\)

此时,我们有两种思路:

  • 维护可能异或出来的值并暴力。
  • 维护 FWT 后有点值的位置并暴力。

至此,可以在 \(\mathcal O(2^{m/2})\) 的复杂度解决此问题。

posted @ 2020-12-01 11:36  Soulist  阅读(218)  评论(2编辑  收藏  举报