FWT推导 + Codeforces 1119H 题解

题目描述

有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

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 17:10
什么素质,我请问呢,要掉小珍珠了。。。又憋屈又生气
Steven267:这不喷回去?花钱是大爷,记住这个道理
点赞 评论 收藏
分享
07-10 14:08
已编辑
江西农业大学 Java
念旧select:做完把项目放到自己硬盘里给他看,看完拷走
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务