「ZJOI2019」开关
「ZJOI2019」开关
神题
前言
设$\text{FWT}_{\oplus}(F(x))=F’(x)$
关于$\text{FWT}_{\oplus}$的展开式子,我发现大部分人都不晓得。。。。
$[x^S]F’(x)=\sum_T(-1)^{|S\cap T|} [x^T]F(x)$
$F(x)=\frac{F’’(x)} {2^n}$
详细可以看这个
定义$\bigoplus$为两个多项式的异或卷积
$\times$为两个多项式对应项直接相乘
$[x^S]F(x)$表示$F(x)$的第$S$项的系数
正文
翻转过程是一个$\oplus$的过程,所以考虑用集合幂指数配合$\text{FWT}_\oplus$构造和求解方程
事实上问题等价于从初始状态$S$跑到$\empty$的期望次数
设从$S$到$\empty$的期望次数生成函数为$F(x)$,其中$[x^{\empty}]F(x)=0$
设转移函数$G(x),[x^{ \{i\} }]G(x)=p_i$
那么我们的方程就是$F(x)\bigoplus G(x)+\sum x^S+cx^{\empty}=F(x)$
其中$x^S$表示这次转移之后答案要加一
由于直接这样转移得到的方程显然是无穷解的,因为无法保证$[x^{\empty}]F(x)=0$
所以我们用一个常数项$cx^{\empty}$平衡这个问题,$c$现在是未知的
$\because F(x)\bigoplus G(x)+\sum x^S+cx^{\empty}=F(x)$
$\therefore (F(x)\bigoplus G(x)+\sum x^S+cx^{\empty})’=F’(x)$
$\therefore F’(x)\times G’(x)+(\sum x^S+cx^{\empty})’=F’(x)$
我们模拟一下$G’(x)$
$[x^S]G’(x)=\sum_i(-1)^{|S\cap \{i\}|}[x^{ \{i\} }]G(x)=\sum_{i\notin S}p_i-\sum_{i\in S}p_i$
再卷一下$(\sum x^S+cx^{\empty})’$
$(\sum x^S)’=\sum_S\sum_T(-1)^{|S\cap T|}x^S$
$\because (-1)^{|S\cap T|} =\sum_{T\subset S}(-1)^|T|\cdot 2^{n-|S|}=[S=\empty]2^{n-|S|}$
$\therefore (\sum x^S)’=2^n x^{\empty}$
$(cx^{\empty})’=\sum c\cdot x^S$
然后我们带入反解$[x^S]F’(x)$
当$S=\empty$时,
则$[x^S]F’(x)\cdot [x^S]G’(x)+2^n+c=[x^S]F’(x)$
然后发现此时$[x^S]G’(x)=1$,那么就意味着$2^n+c=0$
解出了$c=-2^n$,但是此时我们实际上并不知道$[x^{\empty}]F’(x)$的值
当$S\ne \empty$时
$[x^S]F’(x)\cdot [x^S]G’(x)+c=[x^S]F’(x)$
$[x^S]F’(x)(1-[x^S]G’(x))=c$
我们考虑要求出$[x^\empty]F’(x)$的值
由$[x^{\empty}]F(x)=2^{-n}\cdot \sum [x^S] F’(x)=0$
那么我们由$F’(x)$回代得到$[x^S]F(x)(S \ne \empty)$
下面是一个背包,跑的同时统计一下就好了$|S\cap T|$的奇偶性就好了
然后会发现事实上并没有必要特判$S=\empty$的情况
1 |
|