FWT板子
板子:
- #include<cmath>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- typedef long long ll;
- const int N = ;
- const int MOD = ;
- template<typename T>
- inline void read(T&x)
- {
- T f = ,c = ;char ch=getchar();
- while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
- while(ch>=''&&ch<=''){c=c*+ch-'';ch=getchar();}
- x = f*c;
- }
- int n;
- ll inv_2=(MOD+)/;
- ll a[(<<N)+],b[(<<N)+],c[(<<N)+];
- void Mod(ll&x){if(x>=MOD)x-=MOD;}
- void fwt_or(ll *a,int len,int k)
- {
- for(int i=;i<len;i<<=)
- for(int j=;j<len;j+=(i<<))
- for(int o=;o<i;o++)
- {
- if(k==)Mod(a[j+o+i]+=a[j+o]);
- else Mod(a[j+o+i]+=-a[j+o]+MOD);
- }
- }
- void fwt_and(ll *a,int len,int k)
- {
- for(int i=;i<len;i<<=)
- for(int j=;j<len;j+=(i<<))
- for(int o=;o<i;o++)
- {
- if(k==)Mod(a[j+o]+=a[j+o+i]);
- else Mod(a[j+o]+=-a[j+o+i]+MOD);
- }
- }
- void fwt_xor(ll *a,int len,int k)
- {
- for(int i=;i<len;i<<=)
- for(int j=;j<len;j+=(i<<))
- for(int o=;o<i;o++)
- {
- int w1 = a[j+o],w2 = a[j+o+i];
- a[j+o] = (w1+w2)%MOD;
- a[j+o+i] = (w1-w2+MOD)%MOD;
- if(k==-)a[j+o]=a[j+o]*inv_2%MOD,a[j+o+i]=a[j+o+i]*inv_2%MOD;
- }
- }
- void mul()
- {
- for(int i=;i<(<<n);i++)
- c[i] = a[i]*b[i]%MOD;
- }
- void print()
- {
- for(int i=;i<(<<n);i++)
- printf("%lld ",c[i]);
- puts("");
- }
- int main()
- {
- read(n);int len = (<<n);
- for(int i=;i<len;i++)
- read(a[i]);
- for(int i=;i<len;i++)
- read(b[i]);
- fwt_or(a,len,),fwt_or(b,len,);
- mul();
- fwt_or(c,len,-);
- print();
- fwt_or(a,len,-),fwt_or(b,len,-);
- fwt_and(a,len,),fwt_and(b,len,);
- mul();
- fwt_and(c,len,-);
- print();
- fwt_and(a,len,-),fwt_and(b,len,-);
- fwt_xor(a,len,),fwt_xor(b,len,);
- mul();
- fwt_xor(c,len,-);
- print();
- fwt_xor(a,len,-),fwt_xor(b,len,-);
- return ;
- }
FWT板子的更多相关文章
- 能轻松背板子的FWT(快速沃尔什变换)
FWT应用 我不知道\(FWT\)的严格定义 百度百科和维基都不知道给一坨什么****东西** FWT(Fast Walsh Fransform),中文名快速沃尔什变换 然后我也不知道\(FWT\)到 ...
- bzoj4589: Hard Nim fwt
题意:求n个m以内的素数亦或起来为0的方案数 题解:fwt板子题,先预处理素数,把m以内素数加一遍(下标),然后fwt之后快速幂即可,在ifwt之后a[0]就是答案了 /*************** ...
- Noip前的大抱佛脚----数论
目录 数论 知识点 Exgcd 逆元 gcd 欧拉函数\(\varphi(x)\) CRT&EXCRT BSGS&EXBSGS FFT/NTT/MTT/FWT 组合公式 斯特林数 卡塔 ...
- 【51nod】1773 A国的贸易
题解 FWT板子题 可以发现 \(dp[i][u] = \sum_{i = 0}^{N - 1} dp[i - 1][u xor (2^i)] + dp[i - 1][u]\) 然后如果把异或提出来可 ...
- 卷积FFT、NTT、FWT
先简短几句话说说FFT.... 多项式可用系数和点值表示,n个点可确定一个次数小于n的多项式. 多项式乘积为 f(x)*g(x),显然若已知f(x), g(x)的点值,O(n)可求得多项式乘积的点值. ...
- CF914G Sum the Fibonacci FWT、子集卷积
传送门 一道良心的练习FWT和子集卷积的板子-- 具体来说就是先把所有满足\(s_a \& s_b = 0\)的\(s_a \mid s_b\)的值用子集卷积算出来,将所有\(s_a \opl ...
- FWT快速沃尔什变换学习笔记
FWT快速沃尔什变换学习笔记 1.FWT用来干啥啊 回忆一下多项式的卷积\(C_k=\sum_{i+j=k}A_i*B_j\) 我们可以用\(FFT\)来做. 甚至在一些特殊情况下,我们\(C_k=\ ...
- 一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记
一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记 曾经某个下午我以为我会了FWT,结果现在一丁点也想不起来了--看来"学"完新东西不经常做题不写博客,就白学了 = = 我没啥智 ...
- [学习笔记&教程] 信号, 集合, 多项式, 以及各种卷积性变换 (FFT,NTT,FWT,FMT)
目录 信号, 集合, 多项式, 以及卷积性变换 卷积 卷积性变换 傅里叶变换与信号 引入: 信号分析 变换的基础: 复数 傅里叶变换 离散傅里叶变换 FFT 与多项式 \(n\) 次单位复根 消去引理 ...
随机推荐
- hdoj5821【贪心-神题】
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,比赛的时候直接读错题了,实力带坑队友.... 题意: 有两个序列都代表筐,每个筐里只有一个球,然后序列的值代表筐里的球的颜色,问你在m次操作后,a序列的球能否变成b ...
- poj1664【DFS】
思路:搜一下,还想多了,记得以前做过把一个数搞成几个数的相加组合,然后这题无非就是多了个组合的个数<=m的,那么只要多加一个条件,当num>m的时候也return掉就好了. //#incl ...
- hdoj1160【DP】
现在还很弱,贴一个我bin的结题报告日后写到一定会了加油 说说感觉,读题不读好,然后读完想不出,知道是dp不好好想,先排序一列,再求另一列,dp[ i ]代表长度,那么需要输出整个序列需要路径和一个标 ...
- python __builtins__ map类 (44)
44.'map', 根据提供的函数对指定序列做映射. class map(object) | map(func, *iterables) --> map object | | Make an ...
- bzoj 4010: [HNOI2015]菜肴制作【拓扑排序】
也就是给定有向图,求最小字典序的拓扑序,直接用小根堆就行(或者反着建图用大根堆) #include<iostream> #include<cstdio> #include< ...
- 鸟哥私房菜基础篇:学习 Shell Scripts习题
猫宁!!! 参考链接:http://cn.linux.vbird.org/linux_basic/0340bashshell-scripts.php 鸟哥是为中国信息技术发展做出巨大贡献的人. 1-请 ...
- P1223 [小数据版]边权差值最小的生成树
这道题和最小生成树kruskal的代码几乎相同,只不过不一定是最小生成树,所以不一定从最短的边开始做生成树:所以将每一条边分别作为起点,然后枚举就行了...... #include <bits/ ...
- 跟我一起玩Win32开发(10):绘图(C)
今天我们来欣赏一下用于填充图形的函数,当然我不会逐个去介绍,因为我们参考MSDN直接套参数就可以了. SetDCBrushColor函数有必要扯一下,它的声明如下: COLORREF SetDCBru ...
- JQUERY 获取 DIV 宽度与高度(width,padding,margin,border)
一般讲的宽度指的是内容宽度,但一个 div 的实际宽度不仅只于内容宽度,尤其在做 CSS 排版时更不能搞错,必须同时考虑 Padding.Border 与 Margin 的宽度,四个加起来才是 di ...
- (023) 关于51单片机的A5指令
可看见一篇讲51单片机加密的文章这么讲: [加密方法:在A5后加一个二字节或三字节操作码,因为所有反汇编软件都不会反汇编A5指令,造成正常程序反汇编乱套,执行程序无问题仿制者就不能改变你的源程序.] ...