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的更多相关文章

  1. 集合并卷积的三种求法(分治乘法,快速莫比乌斯变换(FMT),快速沃尔什变换(FWT))

    也许更好的阅读体验 本文主要内容是对武汉市第二中学吕凯风同学的论文<集合幂级数的性质与应用及其快速算法>的理解 定义 集合幂级数 为了更方便的研究集合的卷积,引入集合幂级数的概念 集合幂级 ...

  2. 快速沃尔什变换(FWT) 与 快速莫比乌斯变换 与 快速沃尔什变换公式推导

    后面的图片将会告诉: 如何推出FWT的公式tf 如何推出FWT的逆公式utf 用的是设系数,求系数的方法! ============================================== ...

  3. 知识点简单总结——FWT(快速沃尔什变换),FST(快速子集变换)

    知识点简单总结--FWT(快速沃尔什变换),FST(快速子集变换) 闲话 博客园的markdown也太傻逼了吧. 快速沃尔什变换 位运算卷积 形如 $ f[ i ] = \sum\limits_{ j ...

  4. FFT【快速傅里叶变换】FWT【快速沃尔什变换】

    实在是 美丽的数学啊 关于傅里叶变换的博客 讲的很细致 图片非常易于理解http://blog.jobbole.com/70549/ 大概能明白傅里叶变换是干吗的了 但是还是不能明白为什么用傅里叶变换 ...

  5. 快速沃尔什变换&快速莫比乌斯变换小记

    u1s1 距离省选只剩 5 days 了,现在学新算法真的合适吗(( 位运算卷积 众所周知,对于最普通的卷积 \(c_i=\sum\limits_{j+k=i}a_jb_k\),\(a_jb_k\) ...

  6. 为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换

    写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,绝大部分内容非我所原创.在此向多位原创作者致敬!!!一.傅立叶变换的由来关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶 ...

  7. 离散傅立叶变换与快速傅立叶变换(DFT与FFT)

    自从去年下半年接触三维重构以来,听得最多的词就是傅立叶变换,后来了解到这个变换在图像处理里面也是重点中的重点. 本身自己基于高数知识的理解是傅立叶变换是将一个函数变为一堆正余弦函数的和的变换.而图像处 ...

  8. 快速傅里叶变换 & 快速数论变换

    快速傅里叶变换 & 快速数论变换 [update 3.29.2017] 前言 2月10日初学,记得那时好像是正月十五放假那一天 当时写了手写版的笔记 过去近50天差不多忘光了,于是复习一下,具 ...

  9. 快速傅立叶变换(FFT)算法

    已知多项式f(x)=a0+a1x+a2x2+...+am-1xm-1, g(x)=b0+b1x+b2x2+...+bn-1xn-1.利用卷积的蛮力算法,得到h(x)=f(x)g(x),这一过程的时间复 ...

随机推荐

  1. [转帖]软件的变革与 AOT

    软件的变革与 AOT https://www.colabug.com/851475.html 文章写的很牛B .. 前言 AOT 即 Ahead of Time Compilation,即运行前编,与 ...

  2. cpu和内存的使用率统计

    统计cpu和内存一个月的平均使用率: #!/bin/bash totalcpu_rate=0.0 totalmem_rate=0.0 num_days=$(ls -l /var/log/sa/sa[0 ...

  3. 2018icpc宁夏邀请赛_L_Continuous Intervals

    题意 给定一个序列,定义连续区间为区间的数排序后,任意两个相邻的数之差不超过1. 分析 假设区间最大值为\(max\),最小值为\(min\),不同数个数为\(cnt\),那么问题转化为求满足\(ma ...

  4. 22、nlpir 人工智能

    练习介绍 [程序功能] 我们将完成一个和语义识别相关的爬虫程序,输入任意词汇.句子.文章或段落,会返回联想的词汇. [背景信息] 有一个非常牛的处理语言的网站nlpir,上面有非常多的处理语言的功能( ...

  5. 在springboot中集成jsp开发

    springboot就是一个升级版的spring.它可以极大的简化xml配置文件,可以采用全注解形式开发,一个字就是很牛.在springboot想要使用jsp开发,需要集成jsp,在springboo ...

  6. SAP发布wbservice,如果有权限管控的话,需要给这个webservice加权限

    1. PFCG床架角色 2.在角色菜单上,添加其他,选中Authorization Default Values for Services 如下图 3.选中发布的webservice 后保存,如下图: ...

  7. Python 列表元素里面含有字典或者列表进行排序

    示例1:列表里面含有列表进行排序 s = [[1, 2], [100, 2], [33, 3], [25, 6]] s.sort(key=lambda k: k[0]) print(s) 结果: [[ ...

  8. 进制转换以及byted与str的区别

    二进制与十六进制数之间的转换 https://jingyan.baidu.com/article/47a29f24292608c0142399cb.html byted与str的区别 https:// ...

  9. Tomb Raider HihoCoder - 1829 (二进制枚举+暴力)(The 2018 ACM-ICPC Asia Beijing First Round Online Contest)

    Lara Croft, the fiercely independent daughter of a missing adventurer, must push herself beyond her ...

  10. php正则表达式修饰符详解

    preg_match_all("/(.+)<\/form>/isU" , $string, $result); 这里/ 后面加了 3个修饰符 i 是 不区分大小写的匹配 ...