Luogu4717 【模板】快速沃尔什变换(FWT)
https://www.cnblogs.com/RabbitHu/p/9182047.html
完全没有学证明的欲望因为这个实在太好写了而且FFT就算学过也忘得差不多了只会写板子
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
#define N (1<<17)
#define P 998244353
#define inv2 499122177
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,a[N],b[N],f[N],g[N];
void OR(int *a,int n,int op)
{
for (int i=;i<=n;i<<=)
for (int j=;j<n;j+=i)
for (int k=j;k<j+(i>>);k++)
{
int x=a[k],y=a[k+(i>>)];
if (op==) a[k]=x,a[k+(i>>)]=(x+y)%P;
else a[k]=x,a[k+(i>>)]=(y-x+P)%P;
}
}
void AND(int *a,int n,int op)
{
for (int i=;i<=n;i<<=)
for (int j=;j<n;j+=i)
for (int k=j;k<j+(i>>);k++)
{
int x=a[k],y=a[k+(i>>)];
if (op==) a[k]=(x+y)%P,a[k+(i>>)]=y;
else a[k]=(x-y+P)%P,a[k+(i>>)]=y;
}
}
void XOR(int *a,int n,int op)
{
for (int i=;i<=n;i<<=)
for (int j=;j<n;j+=i)
for (int k=j;k<j+(i>>);k++)
{
int x=a[k],y=a[k+(i>>)];
a[k]=(x+y)%P,a[k+(i>>)]=(x-y+P)%P;
if (op==) a[k]=1ll*a[k]*inv2%P,a[k+(i>>)]=1ll*a[k+(i>>)]*inv2%P;
}
}
void FWT(int *a,int *b,int n,int op)
{
if (op==) OR(a,n,),OR(b,n,);
else if (op==) AND(a,n,),AND(b,n,);
else if (op==) XOR(a,n,),XOR(b,n,);
for (int i=;i<n;i++) a[i]=1ll*a[i]*b[i]%P;
if (op==) OR(a,n,);
else if (op==) AND(a,n,);
else if (op==) XOR(a,n,);
for (int i=;i<n;i++) printf("%d ",f[i]);cout<<endl;
}
int main()
{
freopen("FWT.in","r",stdin);
freopen("FWT.out","w",stdout);
n=<<read();
for (int i=;i<n;i++) a[i]=read();
for (int i=;i<n;i++) b[i]=read();
memcpy(f,a,sizeof(f));memcpy(g,b,sizeof(g));
FWT(f,g,n,);
memcpy(f,a,sizeof(f));memcpy(g,b,sizeof(g));
FWT(f,g,n,);
memcpy(f,a,sizeof(f));memcpy(g,b,sizeof(g));
FWT(f,g,n,);
return ;
}
Luogu4717 【模板】快速沃尔什变换(FWT)的更多相关文章
- 洛谷.4717.[模板]快速沃尔什变换(FWT)
题目链接 https://www.mina.moe/archives/7598 //285ms 3.53MB #include <cstdio> #include <cctype&g ...
- 一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记
一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记 曾经某个下午我以为我会了FWT,结果现在一丁点也想不起来了--看来"学"完新东西不经常做题不写博客,就白学了 = = 我没啥智 ...
- 快速沃尔什变换FWT
快速沃尔什变换\(FWT\) 是一种可以快速完成集合卷积的算法. 什么是集合卷积啊? 集合卷积就是在集合运算下的卷积.比如一般而言我们算的卷积都是\(C_i=\sum_{j+k=i}A_j*B_k\) ...
- 集合并卷积的三种求法(分治乘法,快速莫比乌斯变换(FMT),快速沃尔什变换(FWT))
也许更好的阅读体验 本文主要内容是对武汉市第二中学吕凯风同学的论文<集合幂级数的性质与应用及其快速算法>的理解 定义 集合幂级数 为了更方便的研究集合的卷积,引入集合幂级数的概念 集合幂级 ...
- 【学习笔鸡】快速沃尔什变换FWT
[学习笔鸡]快速沃尔什变换FWT OR的FWT 快速解决: \[ C[i]=\sum_{j|k=i} A[j]B[k] \] FWT使得我们 \[ FWT(C)=FWT(A)*FWT(B) \] 其中 ...
- 关于快速沃尔什变换(FWT)的一点学习和思考
最近在学FWT,抽点时间出来把这个算法总结一下. 快速沃尔什变换(Fast Walsh-Hadamard Transform),简称FWT.是快速完成集合卷积运算的一种算法. 主要功能是求:,其中为集 ...
- 快速沃尔什变换 FWT 学习笔记【多项式】
〇.前言 之前看到异或就担心是 FWT,然后才开始想别的. 这次学了 FWT 以后,以后判断应该就很快了吧? 参考资料 FWT 详解 知识点 by neither_nor 集训队论文 2015 集合幂 ...
- Codeforces 662C(快速沃尔什变换 FWT)
感觉快速沃尔什变换和快速傅里叶变换有很大的区别啊orz 不是很明白为什么位运算也可以叫做卷积(或许不应该叫卷积吧) 我是看 http://blog.csdn.net/liangzhaoyang1/ar ...
- 快速沃尔什变换(FWT)学习笔记 + 洛谷P4717 [模板]
FWT求解的是一类问题:\( a[i] = \sum\limits_{j\bigoplus k=i}^{} b[j]*c[k] \) 其中,\( \bigoplus \) 可以是 or,and,xor ...
- 洛谷P4717 【模板】快速沃尔什变换(FWT)
题意 题目链接 Sol 背板子背板子 #include<bits/stdc++.h> using namespace std; const int MAXN = (1 << 1 ...
随机推荐
- P1983 车站分级
题目描述 一条单向的铁路线上,依次有编号为 1, 2, …, n 的 n 个火车站.每个火车站都有一个级别,最低为 1 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车 ...
- kafka 部署
Windows平台kafka环境的搭建 https://blog.csdn.net/u010054969/article/details/70241478
- ASP.NET Response.Redirect 丢失 Session的问题(作废,仅供参考)
以前在做ASP.NET开发时一直没注意到一个问题,就是广泛使用的Response.Redirect方法并不会将服务器端在Response中新增或修改的Cookie返回给客户端浏览器,而网站的Sessi ...
- Docker一键部署Hadoop心得(二)
今天在运行MapReduce程序时,虽然wordcount实例运行成功了,但后面出现了重新使用历史服务器失败的错误 17/12/22 13:33:19 INFO ipc.Client: Retryin ...
- BZOJ4999: This Problem Is Too Simple!树链剖分+动态开点线段树
题目大意:将某个节点的颜色变为x,查询i,j路径上多少个颜色为x的点... 其实最开始一看就是主席树+树状数组+DFS序...但是过不去...MLE+TLE BY FCWWW 其实树剖裸的一批...只 ...
- storm报错:Exception in thread "main" java.lang.RuntimeException: InvalidTopologyException(msg:Component: [mybolt] subscribes from non-existent stream: [default] of component [kafka_spout])
问题描述: storm版本:1.2.2,kafka版本:2.11. 在使用storm去消费kafka中的数据时,发生了如下错误. [root@node01 jars]# /opt/storm-1. ...
- 20155203 杜可欣《网络对抗技术》Exp1 PC平台逆向破解
1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,ge ...
- Kubernetes学习之路(二十五)之Helm程序包管理器
目录 1.Helm的概念和架构 2.部署Helm (1)下载helm (2)部署Tiller 3.helm的使用 4.chart 目录结构 5.chart模板 6.定制安装MySQL chart (1 ...
- Windows下面的常用的快捷键
最小化的快捷键: 最小化当前窗口:Alt+ESC 还原刚刚最小化的窗口:Alt+Tab(次快捷键组合可以在多个窗口中切换) 显示桌面,切换之前的桌面:Win+D 在浏览器页面之间切换:Ctrl+T ...
- Mysql基础命令(二)select查询操作
条件查询 使用Where进行数据筛选结果为True的会出现在结果集里面 select 字段 from 表名 where 条件; # 例: select * from test_table where ...