FWT模板(洛谷P4717 【模板】快速沃尔什变换)(FWT)

洛谷题目传送门

只是一个经过了蛇皮压行的模板。。。

总结?%%%yyb%%%

#include<bits/stdc++.h>
#define LL long long
#define RG register
#define R RG int
#define G if(++ip==ie)fread(ip=buf,1,S,stdin)
#define For						\
	R i,j,k,d;					\
	for(i=2;i<=N;i<<=1)			\
		for(d=i>>1,j=0;j<N;j+=i)\
			for(k=j;k<j+d;++k)
using namespace std;
const LL I=499122177;
const int S=1<<17,YL=998244353;
char buf[S],*ie=buf+S,*ip=ie-1;
int N,a[S],b[S],p[S],q[S];
inline int in(){
	G;while(*ip<'-')G;
	R x=*ip&15;G;
	while(*ip>'-'){x*=10;x+=*ip&15;G;}
	return x;
}
void FWTo(R*a){For(a[k+d]+=   a[k])%=YL;}
void IWTo(R*a){For(a[k+d]+=YL-a[k])%=YL;}
void FWTa(R*a){For(a[k]+=   a[k+d])%=YL;}
void IWTa(R*a){For(a[k]+=YL-a[k+d])%=YL;}
void FWTx(R*a){For{R x=a[k+d];a[k+d]=(a[k]+YL-x)  %YL;a[k]=(a[k]+x)  %YL;}}
void IWTx(R*a){For{R x=a[k+d];a[k+d]=(a[k]+YL-x)*I%YL;a[k]=(a[k]+x)*I%YL;}}
void(*Fun[6])(R*)={FWTo,IWTo,FWTa,IWTa,FWTx,IWTx};
int main(){
	freopen("fwt.in","r",stdin);
	R n=in(),i,j;N=1<<n;
	for(i=0;i<N;++i)a[i]=in();
	for(i=0;i<N;++i)b[i]=in();
	for(j=0;j<6;j+=2){
		memcpy(p,a,N<<2);Fun[j](p);
		memcpy(q,b,N<<2);Fun[j](q);
		for(i=0;i<N;++i)p[i]=(LL)p[i]*q[i]%YL;
		Fun[j+1](p);
		for(i=0;i<N;++i)printf("%d ",p[i]);puts("");
	}
	return 0;
}
posted @   Flash_Hu  阅读(410)  评论(2编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示
剑桥
17:14发布
剑桥
17:14发布
5°
西风
7级
空气质量
相对湿度
34%
今天
多云
-3°/5°
周六
-1°/3°
周日
-2°/7°