快速沃尔变换 FWT
P4717 【模板】快速沃尔什变换
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define sc(x) scanf("%lld",&(x));
#define si signed
const int maxn=<<+;
int A[maxn];
int B[maxn];
int C[maxn];
#define mod 998244353
#define inv2 ((mod+1)/2)
int n;
int t;
void FWT_or(int *C,int op)
{
for(int i=;i<n;i<<=){
for(int p=i<<,j=;j<n;j+=p){
for(int k=;k<i;k++){
if(op==)C[i+j+k]=(C[i+j+k]+C[j+k])%mod;
if(op==-)C[i+j+k]=(C[i+j+k]-C[j+k]+mod)%mod;
}
}
}
}
void FWT_and(int *C,int op)
{
for(int i=;i<n;i<<=){
for(int p=i<<,j=;j<n;j+=p){
for(int k=;k<i;k++){
if(op==)C[j+k]=(C[i+j+k]+C[j+k])%mod;
if(op==-)C[j+k]=(C[j+k]+mod-C[i+j+k])%mod;
}
}
}
}
void FWT_xor(int *C,int op)
{
for(int i=;i<n;i<<=){
for(int p=i<<,j=;j<n;j+=p){
for(int k=;k<i;k++){
int x=C[j+k],y=C[i+j+k];
C[j+k]=(x+y)%mod;
C[j+k+i]=(x-y+mod)%mod;
if(op==-){
C[j+k]=C[j+k]*inv2%mod;
C[j+k+i]=C[j+k+i]*inv2%mod;
}
}
}
}
}
si main()
{ sc(t);
n=(<<t);
for(int i=;i<n;i++){
sc(A[i]);
}
for(int i=;i<n;i++){
sc(B[i]);
}
FWT_or(A,);FWT_or(B,);
for(int i=;i<n;i++){
C[i]=(A[i]*B[i])%mod;
}
FWT_or(A,-);FWT_or(B,-);
FWT_or(C,-);
for(int i=;i<n;i++){
cout<<C[i]<<' ';
}
cout<<'\n';
FWT_and(A,);FWT_and(B,);
for(int i=;i<n;i++){
C[i]=(A[i]*B[i])%mod;
}
FWT_and(A,-);FWT_and(B,-);
FWT_and(C,-);
for(int i=;i<n;i++){
cout<<C[i]<<' ';
}
cout<<'\n';
FWT_xor(A,);FWT_xor(B,);
for(int i=;i<n;i++){
C[i]=(A[i]*B[i])%mod;
}
FWT_xor(A,-);FWT_xor(B,-);
FWT_xor(C,-);
for(int i=;i<n;i++){
cout<<C[i]<<' ';
}
cout<<'\n'; }
快速沃尔变换 FWT的更多相关文章
- 集合并卷积的三种求法(分治乘法,快速莫比乌斯变换(FMT),快速沃尔什变换(FWT))
也许更好的阅读体验 本文主要内容是对武汉市第二中学吕凯风同学的论文<集合幂级数的性质与应用及其快速算法>的理解 定义 集合幂级数 为了更方便的研究集合的卷积,引入集合幂级数的概念 集合幂级 ...
- 快速沃尔什变换(FWT) 与 快速莫比乌斯变换 与 快速沃尔什变换公式推导
后面的图片将会告诉: 如何推出FWT的公式tf 如何推出FWT的逆公式utf 用的是设系数,求系数的方法! ============================================== ...
- 知识点简单总结——FWT(快速沃尔什变换),FST(快速子集变换)
知识点简单总结--FWT(快速沃尔什变换),FST(快速子集变换) 闲话 博客园的markdown也太傻逼了吧. 快速沃尔什变换 位运算卷积 形如 $ f[ i ] = \sum\limits_{ j ...
- FFT【快速傅里叶变换】FWT【快速沃尔什变换】
实在是 美丽的数学啊 关于傅里叶变换的博客 讲的很细致 图片非常易于理解http://blog.jobbole.com/70549/ 大概能明白傅里叶变换是干吗的了 但是还是不能明白为什么用傅里叶变换 ...
- 快速沃尔什变换&快速莫比乌斯变换小记
u1s1 距离省选只剩 5 days 了,现在学新算法真的合适吗(( 位运算卷积 众所周知,对于最普通的卷积 \(c_i=\sum\limits_{j+k=i}a_jb_k\),\(a_jb_k\) ...
- 为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换
写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,绝大部分内容非我所原创.在此向多位原创作者致敬!!!一.傅立叶变换的由来关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶 ...
- 离散傅立叶变换与快速傅立叶变换(DFT与FFT)
自从去年下半年接触三维重构以来,听得最多的词就是傅立叶变换,后来了解到这个变换在图像处理里面也是重点中的重点. 本身自己基于高数知识的理解是傅立叶变换是将一个函数变为一堆正余弦函数的和的变换.而图像处 ...
- 快速傅里叶变换 & 快速数论变换
快速傅里叶变换 & 快速数论变换 [update 3.29.2017] 前言 2月10日初学,记得那时好像是正月十五放假那一天 当时写了手写版的笔记 过去近50天差不多忘光了,于是复习一下,具 ...
- 快速傅立叶变换(FFT)算法
已知多项式f(x)=a0+a1x+a2x2+...+am-1xm-1, g(x)=b0+b1x+b2x2+...+bn-1xn-1.利用卷积的蛮力算法,得到h(x)=f(x)g(x),这一过程的时间复 ...
随机推荐
- C++:string操作函数
要想使用标准C++中string类,必须要包含 #include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件 ...
- hibernate update-->参数绑定
Hibernate 更新数据库 参数绑定总结: 一.query.setParameter(属性名,真实值,类型); String hql="update User u set u.userN ...
- goods商品类
- python 写简单的职员信息管理系统
职员信息管理系统要求依次从键盘录入每位员工的信息,包括姓名.员工id.身份证号要求:1.身份证号十八位,要求除了第18位可以为x,其余都只能为数字2.id须由5位数字组成3.否则提示用户重新输入不符合 ...
- MVC和MVVM设计模式简单理解
1.mvc设计模式理解 Model: 模型 持有所有的数据状态和业务逻辑; 泛指数据库,链接数据库,建立数据模型 View: 视图 用来展示数据模型在页面上,泛指前端 Controller: 控制器, ...
- CSS高度坍塌问题的原因以及解决办法
原因: 在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高.但是当为子元素设置浮动以后,子元素会完全脱离文档流,此时将会导致子元素无法撑起父元素的高度,导致父元素的高度塌陷. ...
- init, telinit - 进程处理初始化
总览 /sbin/init [ -a ] [ -s ] [ -b ] [ -z xxx ] [ 0123456Ss ] /sbin/telinit [ -t 秒 ] [ 0123456sSQqabcU ...
- composer 被墙后镜像设置
这一步主要更改镜像,不从外网直接取,现在改成了中国的一家镜像站.就是下面这个地址. https://packagist.phpcomposer.com#阿里云的composer镜像源composer ...
- AIX中的网络管理
1.AIX中网络配置 AIX支持的适配器: #lsdev -Cc adapter 查看网络适配器: #lsdev -Cc if 修改网卡属性 #smitty chgenet ...
- Android 静态代码分析工具
简评: 作者在文中提到的三个静态代码分析工具不是互相替代的关系,各有各的侧重点,如果有需要完全可以同时使用. 静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法.结构.过程.接口等来检查程 ...