洛谷P4717 【模板】快速沃尔什变换(FWT)
这玩意儿太骚了……
参考了yyb巨佬的
//minamoto
#include<iostream>
#include<cstdio>
#define ll long long
#define add(x,y) ((x+=y)>=mod?x-=mod:x)
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
char sr[<<],z[];int C=-,Z;
inline void Ot(){fwrite(sr,,C+,stdout),C=-;}
inline void print(int x){
if(C><<)Ot();if(x<)sr[++C]=,x=-x;
while(z[++Z]=x%+,x/=);
while(sr[++C]=z[Z],--Z);sr[++C]=' ';
}
const int N=(<<)+,mod=,inv=;
int n,len,A[N],B[N],R[N];
void FWT_or(int *A,int type){
for(int i=;i<len;i<<=)
for(int p=i<<,j=;j<len;j+=p)
for(int k=;k<i;++k)
add(A[i+j+k],type==?A[j+k]:mod-A[j+k]);
}
void FWT_and(int *A,int type){
for(int i=;i<len;i<<=)
for(int p=i<<,j=;j<len;j+=p)
for(int k=;k<i;++k)
add(A[j+k],type==?A[i+j+k]:mod-A[i+j+k]);
}
void FWT_xor(int *A,int type){
for(int i=;i<len;i<<=)
for(int p=i<<,j=;j<len;j+=p)
for(int k=;k<i;++k){
int x=A[j+k],y=A[i+j+k];
A[j+k]=(x+y)%mod,A[i+j+k]=(x+mod-y)%mod;
if(type==-) A[j+k]=1ll*A[j+k]*inv%mod,A[i+j+k]=1ll*A[i+j+k]*inv%mod;
}
}
int main(){
// freopen("testdata.in","r",stdin);
n=read(),len=<<n;
for(int i=;i<len;++i) A[i]=read();
for(int i=;i<len;++i) B[i]=read(); FWT_or(A,),FWT_or(B,);
for(int i=;i<len;++i) R[i]=1ll*A[i]*B[i]%mod;
FWT_or(A,-),FWT_or(B,-),FWT_or(R,-);
for(int i=;i<len;++i) print(R[i]);sr[++C]='\n'; FWT_and(A,),FWT_and(B,);
for(int i=;i<len;++i) R[i]=1ll*A[i]*B[i]%mod;
FWT_and(A,-),FWT_and(B,-),FWT_and(R,-);
for(int i=;i<len;++i) print(R[i]);sr[++C]='\n'; FWT_xor(A,),FWT_xor(B,);
for(int i=;i<len;++i) R[i]=1ll*A[i]*B[i]%mod;
FWT_xor(R,-);
for(int i=;i<len;++i) print(R[i]);sr[++C]='\n'; Ot();
return ;
}
洛谷P4717 【模板】快速沃尔什变换(FWT)的更多相关文章
- 洛谷.4717.[模板]快速沃尔什变换(FWT)
题目链接 https://www.mina.moe/archives/7598 //285ms 3.53MB #include <cstdio> #include <cctype&g ...
- 快速沃尔什变换(FWT)学习笔记 + 洛谷P4717 [模板]
FWT求解的是一类问题:\( a[i] = \sum\limits_{j\bigoplus k=i}^{} b[j]*c[k] \) 其中,\( \bigoplus \) 可以是 or,and,xor ...
- 一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记
一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记 曾经某个下午我以为我会了FWT,结果现在一丁点也想不起来了--看来"学"完新东西不经常做题不写博客,就白学了 = = 我没啥智 ...
- 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...
- 快速沃尔什变换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模板(洛谷P4717 【模板】快速沃尔什变换)(FWT)
洛谷题目传送门 只是一个经过了蛇皮压行的模板... 总结?%%%yyb%%% #include<bits/stdc++.h> #define LL long long #define RG ...
- 关于快速沃尔什变换(FWT)的一点学习和思考
最近在学FWT,抽点时间出来把这个算法总结一下. 快速沃尔什变换(Fast Walsh-Hadamard Transform),简称FWT.是快速完成集合卷积运算的一种算法. 主要功能是求:,其中为集 ...
- 洛谷P3375 [模板]KMP字符串匹配
To 洛谷.3375 KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果 ...
随机推荐
- 设置netbeans文件编码格式
在项目ecmall上右键 选择属性,然后在项目属性里设置
- Jsp中操作页面显示
通常我们想改变网页中的显示可以用下面的方式. <script type="text/javascript">function show(){ document. ...
- The JSP specification requires that an attribute name is preceded by whitespace--异常
异常信息:org.apache.jasper.JasperException: /pages/selectedCourse.jsp (line: 4, column: 39) The JSP spec ...
- linux jdk更换
有时候会发现,安装了新的jdk,而java -version 之后发现仍旧是旧的jdk,即使自己已经更新了JAVA_HOME的环境变量,解决方法如下: 具体如下: 1. 查看相应的jdk是否在 ubu ...
- c# 获取当前行的位置信息
StackTrace st = new StackTrace(new StackFrame(true)); StackFrame sf = st.GetFrame(0); //文件位置 Console ...
- android——array中设置选项
Android中,R.array是提取XML资源文件中String数组的方法.具体定义和提取的方法如下: 1)在R.array中定义字符数组 <?xml version="1.0&qu ...
- 侧方位停车想一次过,掌握边线30cm很重要!
侧方位停车要想一次过关,关键在于保持车身距离库边线30cm左右的距离.但是,往往有很多学员掌控不好这个距离,导致倒库时压线.那么,如何找准这个30cm呢?下面,小编就来教大家方法,赶紧学习吧! 侧方位 ...
- BestCoder6 1002 Goffi and Squary Partition(hdu 4982) 解题报告
题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?pid=1002&cid=530 (格式有一点点问题,直接粘 ...
- IntelliJ IDEA 2018 设置代码提示对大小写不敏感
setting->Editor->General->Code Completion取消勾选Match case
- 关于yolo 模型中1X1卷积层的作用
1X1卷积层的作用: 1.实现跨通道的交互和信息整合.2.进行卷积核通道数的降维和升维.3.就是可以在保持feature map 尺寸不变(即不损失分辨率)的前提下大幅增加非线性特性,把网络做得很de ...