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\) 次单位复根 消去引理 ...
随机推荐
- hdoj1272 小希的迷宫
并查集 = =.一开始判断连通,没有判断环,后来判断了环,没有判断连通... 还有就是一开始是0 0,也是Yes,有道理么?我不是很懂.. #include <iostream> #inc ...
- P5163 WD与地图(整体二分+权值线段树)
传送门 细节要人命.jpg 这题思路太新奇了--首先不难发现可以倒着做变成加边,但是它还需要我们资瓷加边的同时维护强连通分量.显然加边之后暴力跑是不行的 然后有一个想法,对于一条边\((u,v)\), ...
- 第三章 Python运算符
1.算数运算符 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 31 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 * 乘 - 两个数相乘或是返回一个被重复若干 ...
- 修改Cloudera Manager 管理机器的IP
原本在3台机器中部署了Cloudera CDH4.8的集群环境,运行状况良好,后来由于机房搬迁,导致那3台机器的ip地址被改变(hostname 没有变化). 再次启动Cloudera-scm-ser ...
- hdu3926 Hand in Hand 同构图
#include<cstring> #include<cstdio> #include<algorithm> using namespace std; ]; str ...
- Tomcat | 修改默认端口
Tomcat安装目录下 conf 目录下 server.xml 找到 <Connector connectionTimeout="/> 修改其中port值即可
- 清橙A1339. JZPLCM(顾昱洲)
http://www.tsinsen.com/ViewGProblem.page?gpid=A1339 题解:https://blog.csdn.net/LOI_DQS/article/details ...
- Unity3d中UnityEngine.Object
UnityEngine.Object继承自system.Object,是Unity所涉及所有物体的基类. Static Functions 静态函数 下面的都是静态函数 Destroy Remov ...
- MonoBehaviour生命周期
MonoBehaviour生命周期 上图中重要的信息点很多,需要特别注意的是所有脚本的Awake方法都执行完才会执行Start,但是如果在Awake 中开启了一个协程这个协程中每一帧执行一些操作然后等 ...
- 非常强大的前端插件:emmet
安装 Emmet 也有快速生成文件头的功能啊,而且更强大啊输入下边加粗的缩写,然后Tab,就OK了啊http://docs.emmet.io/cheat-sheet/ html:4t <!DOC ...