[HNOI2011]卡农 更为优秀做法
题意:求
[[x^{varnothing}y^m]prod_{S
evarnothing}(1+x^{S}y)
]
其中(x)的乘法是异或,(y)的乘法是普通的乘法。
考虑对((1+x^Sy))做FWT得到
[sum_{T}(1+(-1)^{|Scap T|}y)x^T
]
最后FWT的结果是所有的上式点乘在一起,
[F=sum_{T}x^Tprod_{S
evarnothing}(1+(-1)^{|Scap T|}y)
]
而答案变成了(2^{-n}sum_{S}[x^Sy^m]F)
[=2^{-n}sum_{T}[y^m]prod_{S
evarnothing}(1+(-1)^{|Scap T|}y)
]
考虑(prod_{S evarnothing}(1+(-1)^{|Scap T|}y)),发现它形如((1+y)^a(1-y)^b)
打表可得,
[prod_{S
evarnothing}(1+(-1)^{|Scap T|}y)=
egin{align}
left{
egin{array}{lr}
(1+y)^{2^n-1}&T=varnothing\
(1-y)^{2^{n-1}}(1+y)^{2^{n-1}-1}&T
evarnothing\
end{array}
ight.
otag
end{align}
]
则答案变成
[=2^{-n}[y^m]((1+y)^{2^n-1}+(2^n-1)(1-y)^{2^{n-1}}(1+y)^{2^{n-1}-1})
]
考虑前半部分,显然是一个组合数
后半部分是((1-y)^{2^{n-1}}(1+y)^{2^{n-1}-1}=(1-y)(1-y^2)^{2^{n-1}-1}),显然也是一个组合数
组合数的上标(O(mod)),下标(O(m)),那么当输入的(n,m)都与(mod)同阶时就得到了一个(O(计算组合数))的做法。