P4717-[模板]快速莫比乌斯/沃尔什变换(FMT/FWT)

正题

题目链接:https://www.luogu.com.cn/problem/P4717


题目大意

给出两个长度为2n2^n2n的数列A,BA,BA,B
Cn=∑iorj=nAiBjC_{n}=\sum_{i\ or\ j=n}A_iB_jCn=i or j=nAiBj
Cn=∑iandj=nAiBjC_{n}=\sum_{i\ and\ j=n}A_iB_jCn=i and j=nAiBj
Cn=∑ixorj=nAiBjC_{n}=\sum_{i\ xor\ j=n}A_iB_jCn=i xor j=nAiBj


解题思路

FFTFFTFFT一样的思路,我们需要将A,BA,BA,B转换为点集表达式相乘再转回去,这里就直接抛结论了。

对于orororFWT(A)=(FWT(A),FWT(A)+FWT(B))FWT(A)=(FWT(A),FWT(A)+FWT(B))FWT(A)=(FWT(A),FWT(A)+FWT(B))

IFWT(A)=(IFWT(A),IFWT(A)−IFWT(B))IFWT(A)=(IFWT(A),IFWT(A)-IFWT(B))IFWT(A)=(IFWT(A),IFWT(A)IFWT(B))
对于andandandFWT(A)=(FWT(A)+FWT(B),FWT(B))FWT(A)=(FWT(A)+FWT(B),FWT(B))FWT(A)=(FWT(A)+FWT(B),FWT(B))

IFWT(A)=(IFWT(A)−IFWT(B),IFWT(B))IFWT(A)=(IFWT(A)-IFWT(B),IFWT(B))IFWT(A)=(IFWT(A)IFWT(B),IFWT(B))
对于xorxorxorFWT(A)=(FWT(A)+FWT(B),FWT(A)−FWT(B))FWT(A)=(FWT(A)+FWT(B),FWT(A)-FWT(B))FWT(A)=(FWT(A)+FWT(B),FWT(A)FWT(B))

IFWT(A)=(IFWT(A)+IFWT(B)2,IFWT(A)−IFWT(B)2)IFWT(A)=(\frac{IFWT(A)+IFWT(B)}{2},\frac{IFWT(A)-IFWT(B)}{2})IFWT(A)=(2IFWT(A)+IFWT(B),2IFWT(A)IFWT(B))
因为不用转成虚数所以代码好写很多,时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll inv2=499122177,N=(1<<18),P=998244353;
ll lg,n,aa[N],bb[N],a[N],b[N],c[3][N];void mul(ll *c,ll *a,ll *b){for(ll i=0;i<n;i++)c[i]=a[i]*b[i]%P;return;
}void FWT_or(ll *f,ll op){for(ll p=2;p<=n;p<<=1){ll len=p>>1;for(ll k=0;k<n;k+=p)for(ll i=k;i<k+len;i++)(f[i+len]+=f[i]*op+P)%=P;}return;
}
void solve_or(ll *c){memcpy(a,aa,sizeof(a));memcpy(b,bb,sizeof(b));FWT_or(a,1);FWT_or(b,1);mul(c,a,b); FWT_or(c,P-1);return;
}void FWT_and(ll *f,ll op){for(ll p=2;p<=n;p<<=1){ll len=p>>1;for(ll k=0;k<n;k+=p)for(ll i=k;i<k+len;i++)(f[i]+=f[i+len]*op+P)%=P;}return;
}
void solve_and(ll *c){memcpy(a,aa,sizeof(a));memcpy(b,bb,sizeof(b));FWT_and(a,1);FWT_and(b,1);mul(c,a,b); FWT_and(c,P-1);return;
}void FWT_xor(ll *f,ll op){for(ll p=2;p<=n;p<<=1){ll len=p>>1;for(ll k=0;k<n;k+=p)for(ll i=k;i<k+len;i++){ll x=f[i],y=f[i+len];f[i]=(x+y)*op%P;f[i+len]=(x-y+P)*op%P;}}return;
}
void solve_xor(ll *c){memcpy(a,aa,sizeof(a));memcpy(b,bb,sizeof(b));FWT_xor(a,1);FWT_xor(b,1);mul(c,a,b); FWT_xor(c,inv2);return;
}signed main()
{scanf("%lld",&lg);n=1<<lg;for(ll i=0;i<n;i++)scanf("%lld",&aa[i]);for(ll i=0;i<n;i++)scanf("%lld",&bb[i]);solve_or(c[0]);solve_and(c[1]);solve_xor(c[2]);for(ll i=0;i<n;i++)printf("%lld ",c[0][i]);putchar('\n');for(ll i=0;i<n;i++)printf("%lld ",c[1][i]);putchar('\n');for(ll i=0;i<n;i++)printf("%lld ",c[2][i]);putchar('\n');return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P4016 负载平衡问题

文章目录题目描述题解&#xff1a;方法一&#xff1a;代码&#xff1a;方法二&#xff1a;P4016 负载平衡问题题目描述 G 公司有 n 个沿铁路运输线环形排列的仓库&#xff0c;每个仓库存储的货物数量不等。如何用最少搬运量可以使 n 个仓库的库存数量相同。搬运货物时&#xff…

Ocelot简易教程(二)之快速开始2

为什么这篇的标题叫“Ocelot简易教程&#xff08;二&#xff09;之快速开始2”呢&#xff0c;因为很多朋友跟我说上一篇“ Ocelot简易教程&#xff08;二&#xff09;之快速开始1”内容太少了&#xff0c;只是简单介绍Ocelot的一些简单配置&#xff0c;让Ocelot能跑起来&#x…

【线性基】彩灯(luogu 3857/金牌导航 线性基-1)

彩灯 luogu 3857 金牌导航 线性基-1 题目大意 给若干个01串&#xff0c;让你选择其中一些&#xff0c;问你异或的值有多少种 输入样例 2 3 OO XO OX输出样例 4数据范围 1⩽N,M⩽501\leqslant N,M\leqslant 501⩽N,M⩽50 解题思路 对于原来的01串&#xff0c;先求出其线…

[POI2015] Pustynia(差分约数,线段树优化建图,拓扑)

传送门 Description 给定一个长度为n的正整数序列aaa&#xff0c;每个数都在111到10910^9109范围内&#xff0c;告诉你其中sss个数&#xff0c;并给出mmm条信息&#xff0c;每条信息包含三个数l,r,kl,r,kl,r,k以及接下来kkk个正整数x1,x2,...,xkx_1,x_2,...,x_kx1​,x2​,...…

CF662C-Binary Table【FWT】

正题 题目链接:https://www.luogu.com.cn/problem/CF662C 题目大意 n∗mn*mn∗m的网格上有0/10/10/1&#xff0c;可以任意翻转行和列&#xff0c;求剩下最少的111。 解题思路 知道是FWTFWTFWT之后就好做很多了。 首先因为nnn很小&#xff0c;所以可以考虑枚举翻转的行数&…

【高斯消元】球形空间产生器(luogu 4035/金牌导航 高斯消元-1)

球形空间产生器 luogu 4035 金牌导航 高斯消元-1 题目大意 给出n1个n维的点&#xff0c;让你求一个点&#xff0c;使该点到所有点欧几里得距离相等 输入样例 2 0.0 0.0 -1.0 1.0 1.0 0.0输出样例 0.500 1.500数据范围 1⩽N⩽101\leqslant N \leqslant 101⩽N⩽10 解题思…

.NET的前世今生与将来

笔者注谨以此文纪念我敬重的2016年9月17日去世的 装配脑袋 逝世两周年让大家久等了&#xff0c;前后花了1年的时间&#xff0c;几经改版&#xff0c;终于完成撰写了一万字长文&#xff0c;回顾和展望.NET这16年来的成功与失败。最终能成文是因为我给自己承诺必须赶在 装配脑袋 …

P4011 孤岛营救问题

P4011 孤岛营救问题 文章目录输入输出样例题意&#xff1a;题解&#xff1a;代码&#xff1a;输入输出样例 输入 4 4 9 9 1 2 1 3 2 1 2 2 2 0 2 1 2 2 0 2 1 3 1 0 2 3 3 3 0 2 4 3 4 1 3 2 3 3 0 3 3 4 3 0 4 3 4 4 0 2 2 1 2 4 2 1输出 14题意&#xff1a; (原题太长我就…

[NOI2014] 起床困难综合症(二进制,贪心)

#include<bits/stdc.h> int n,m,ans,x,a10,a2-1; //-1的补码:11111111111... char str[5]; int main(){scanf("%d%d",&n,&m);while(n--){scanf("%s%d",str,&x);if(str[0]A) a1&x, a2&x;if(str[0]X) a1^x, a2^x;if(str[0]O) a1|…

CF1119H-Triple【FWT】

正题 题目链接:https://www.luogu.com.cn/problem/CF1119H 题目大意 nnn个可重集&#xff0c;第iii个里有xxx个aia_iai​&#xff0c;yyy个bib_ibi​&#xff0c;zzz个cic_ici​。 对于每个t∈[0,2k)t\in[0,2^k)t∈[0,2k)求每个集合里取出一个数使它们异或起来等于ttt的方案数…

【数学】整数个数(金牌导航 欧拉函数-1)

整数个数 金牌导航 欧拉函数-1 题目大意 问1~n-1中满足x∤\nmid∤n且不与n互质的数有多少个 输入样例 10输出样例 3样例解释 3个数分别是4,6,8 数据范围 0⩽n⩽2310\leqslant n\leqslant 2^{31}0⩽n⩽231 解题思路 因为互质和整除的子集是独立的&#xff08;1除外&am…

P4015 运输问题

P4015 运输问题 文章目录题目描述&#xff1a;输入格式&#xff1a;输出格式&#xff1a;输入输出样例&#xff1a;题解&#xff1a;代码&#xff1a;题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 两行分别输出最小运输费用和最大运输费用。 输入输出样例…

NetCore使用Jwtbearer给WebAPI添加访问控制

现在JWT代替session来做访问控制已经成为大部分webapi的做法&#xff0c;今天我们也来尝试一下WebAPI使用NetCore2.1创建,无身份认证信息nuget安装包IdentityModel 选择稳定版3.9.0Microsoft.AspNetCore.Authorization 版本2.1.1Microsoft.AspNetCore.Authentication.JwtBearer…

图论复习——网络流

最大流 与 最小费用最大流 Blog 有上下界网络流 Blog 最小割 Blog 模拟费用流 CF724E Goods transportation 摘自此Blog 建图优化 若同一行或者同一列的点互相可达&#xff0c;那么其实不需要两两连边&#xff0c;只需要对于每行和每列建一个辅助节点作为中转 [ARC…

【分块】区间众数(金牌导航 分块-1)

区间众数 金牌导航 分块-1 题目大意 给出一个数列&#xff0c;和若干询问&#xff0c;每个询问让你求一个区间内的众数 输入样例 6 3 1 2 3 2 1 2 1 5 3 6 1 5输出样例 1 2 1数据范围 1⩽N⩽4104,1⩽M⩽5104,1⩽ai⩽1091\leqslant N \leqslant 4\times 10^4,1\leqs…

CF235C-Cyclical Quest【SAM】

正题 题目链接:https://www.luogu.com.cn/problem/CF235C 题目大意 一个文本串sss。询问nnn个匹配的本质不同的循环同构在文本串中出现了几次。 解题思路 我们匹配完原串之后&#xff0c;相当与每次在头部删去一个字符然后又在末尾加上一个字符。使用SAMSAMSAM匹配的话&…

离散大创项目——图片识别笔记

1.我才知道ainput()读入的竟然是字符串。。。还要强制转化成int型&#xff0c;这玩意搞了我好久 2.对照片进行裁剪&#xff0c;将照片周围多余的白色部分去除&#xff08;也就是让图像尽可能撑满整个框&#xff09; 由上一张裁成下一张 from PIL import Image import os SCA…

最小割小记

参考博客&#xff1a;最小割浅谈 关于最小割 常用描述 表述一&#xff1a;删去若干条边使得源点到汇点不连通&#xff0c;求删边的权值和的最小可能值。 表述二&#xff1a;将点集分为(S,T)(S,T)(S,T)&#xff0c;记所有从SSS中出发到TTT中的边的权值和为c(S,T)c(S,T)c(S,T)&a…

CF204E-Little Elephant and Strings【广义SAM,线段树合并】

正题 题目链接:https://www.luogu.com.cn/problem/CF204E 题目大意 nnn个字符串的一个字符串集合&#xff0c;对于每个字符串求有多少个子串是这个字符串集合中至少kkk个字符串的子串。 解题思路 因为对于每个字符串我们需要维护的信息不同&#xff0c;不能累加&#xff0c;所…

【莫队】区间不同数(金牌导航 莫队-1)

区间不同数 金牌导航 莫队-1 题目大意 给出n个数&#xff0c;然后询问m次&#xff0c;每次询问一个区间内不同的数的个数 样例输入 6 1 2 3 4 3 5 3 1 2 3 5 2 6样例输出 2 2 4数据范围 1⩽n⩽5104,1⩽m⩽2105,0⩽ai⩽1061\leqslant n\leqslant 5\times 10^4,1\leqslant …