题目描述

有n个数组,第i个数组由,,组成,在每个数组中选出一个数,然后xor起来等于t,求方案数。对全部的 输出答案。

分析

题目等价于询问将n个这样的数组作xor卷积的结果:位置为,位置为,位置为, 其余位置为0.

简化问题,先将所有 xor起来作为结果,然后,bi^=ai, ci^=ai

问题转化成n个这样的数组作xor卷积:0位置为,位置为,位置为, 其余位置为0.

为了得到这题正解,我们得明白FWT的推导过程。

FWT 推导

FWT需要解决的是这样一个xor卷积问题:

我们目标是寻找一个线性变换FWT,令满足

既然是线性变换,就可以表示成矩阵,使得

我们的目标可以表示成

代入,

化简得,

也就是,

考虑的什么属性会是属性的乘积.

对于异或操作来说,异或前后1的个数的奇偶性不会改变,也就是说中1的个数加起来和中1的个数的奇偶性是一样的。

于是我们可以定义

每一项其实是二进制表示的集合,因此使用集合交符号与集合大小符号|S|

所以FWT就是

题解

代码

Submission