CF1119H-Triple【FWT】

正题

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


题目大意

nnn个可重集,第iii个里有xxxaia_iaiyyybib_ibizzzcic_ici

对于每个t∈[0,2k)t\in[0,2^k)t[0,2k)求每个集合里取出一个数使它们异或起来等于ttt的方案数。


解题思路

如果直接nnn个东西FWTFWTFWT起来肯定过不了,我们需要根据每个集合里只有三种数这个性质来优化。

因为是xorxorxor卷积,所以第iii个位置FWTFWTFWT之后对jjj造成的影响是(−1)cnt(i&j)(-1)^{cnt(i\&j)}(1)cnt(i&j)(其中cnt(x)cnt(x)cnt(x)表示xxx在二进制下111的个数)

那么就有
FWT(Si)=∑i=12k−1(−1)cnt(j&ai)x+(−1)cnt(j&bi)y+(−1)cnt(j&bi)zFWT(S_i)=\sum_{i=1}^{2^k-1}(-1)^{cnt(j\&a_i)}x+(-1)^{cnt(j\& b_i)}y+(-1)^{cnt(j\&b_i)}zFWT(Si)=i=12k1(1)cnt(j&ai)x+(1)cnt(j&bi)y+(1)cnt(j&bi)z
现在我们就可以单独考虑每个x,y,zx,y,zx,y,z的贡献了,然后每个FWT(Si)[j]FWT(S_i)[j]FWT(Si)[j]888个状态,为了方便我们缩减一下状态先。

首先我们先让所有的xxx都取到,也就是让所有的bi=bixorai,ci=cixoraib_i=b_i\ xor\ a_i,c_i=c_i\ xor\ a_ibi=bi xor ai,ci=ci xor ai,然后询问答案的时候我们再异或上一个aaa的异或和即可。

现在每个FWT(Si)[j]FWT(S_i)[j]FWT(Si)[j]444种状态,分别是(x+y+z),(x+y−z),(x−y+z),(x−y−z)(x+y+z),(x+y-z),(x-y+z),(x-y-z)(x+y+z),(x+yz),(xy+z),(xyz)。定义这些状态数量分别为a1,a2,a3,a4a_1,a_2,a_3,a_4a1,a2,a3,a4

我们先考虑集合iii的每种状态中yyy的影响FiF_iFi,有Fi[k]=cnt(k&ai)F_i[k]=cnt(k\& a_i)Fi[k]=cnt(k&ai),而所有集合的影响和就是∑i=1nFi\sum_{i=1}^nF_ii=1nFi。设Gi=IFWT(Fi)G_i=IFWT(F_i)Gi=IFWT(Fi)那么显然有Gi[bi]=1G_i[b_i]=1Gi[bi]=1其他都为000

然后影响和就是∑i=1nFWT(Gi)=FWT(∑i=1nGi)\sum_{i=1}^nFWT(G_i)=FWT(\sum_{i=1}^nG_i)i=1nFWT(Gi)=FWT(i=1nGi)
所以直接把GGG都加起来然后FWTFWTFWT就好了,定义yyy的影响为c1c_1c1

然后再同理搞出zzzy+zy+zy+z的影响,分别为c2,c3c_2,c_3c2,c3,那么就有方程组
{a1+a2+a3+a4=na1+a2−a3−a4=c1a1−a2+a3−a4=c2a1−a2−a3+a4=c3\left\{\begin{matrix} a_1+a_2+a_3+a_4=n\\ a_1+a_2-a_3-a_4=c_1\\ a_1-a_2+a_3-a_4=c_2\\ a_1-a_2-a_3+a_4=c_3 \end{matrix}\right.a1+a2+a3+a4=na1+a2a3a4=c1a1a2+a3a4=c2a1a2a3+a4=c3
解出来就好了,然后用快速幂算出来F=∏i=1nFWT(Si)F=\prod_{i=1}^nFWT(S_i)F=i=1nFWT(Si),求一遍IFWT(F)IFWT(F)IFWT(F)即可。

时间复杂度O(2kk+nlog⁡(x+y+z))O(\ 2^kk+n\log(x+y+z)\ )O( 2kk+nlog(x+y+z) )


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2e5+10,P=998244353;
const ll inv2=(P+1)/2;
ll n,k,x,y,z,xs;
ll f1[N],f2[N],f3[N],f[N];
ll power(ll x,ll b){ll ans=1;x%=P;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
void FWT(ll *f,ll n,ll op){for(ll p=2;p<=n;p<<=1)for(ll k=0,len=p>>1;k<n;k+=p)for(ll i=k;i<k+len;i++){ll x=f[i],y=f[i+len];if(op==1){f[i]=x+y;f[i+len]=x-y;}else{f[i]=(x+y)*inv2%P;f[i+len]=(x-y)*inv2%P;}}return;
}
signed main()
{scanf("%lld%lld",&n,&k);k=1<<k;scanf("%lld%lld%lld",&x,&y,&z);for(ll i=1;i<=n;i++){ll a,b,c;scanf("%lld%lld%lld",&a,&b,&c);xs^=a;b^=a;c^=a;f1[b]++;f2[c]++;f3[b^c]++;}FWT(f1,k,1);FWT(f2,k,1);FWT(f3,k,1);for(ll i=0;i<k;i++){ll c1=f1[i],c2=f2[i],c3=f3[i];ll a1,a2,a3,a4;a4=(c3-c1-c2+n)/4;a3=-(c1-n+2ll*a4)/2;a2=-(c2-n+2ll*a4)/2;a1=n-a2-a3-a4;f[i]=power(x+y+z,a1)%P*power(x+y-z,a2)%P;f[i]=f[i]*power(x-y+z,a3)%P*power(x-y-z,a4)%P;}FWT(f,k,-1);for(ll i=0;i<k;i++)printf("%lld ",(f[i^xs]+P)%P);return 0;
}

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

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

相关文章

【数学】整数个数(金牌导航 欧拉函数-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 …

斐波那契数列求法

文章目录求斐波那切数列的几个方法&#xff1a;经典做法&#xff1a;递推&#xff1a;动态规划矩阵快速幂原理&#xff1a;代码&#xff1a;例题&#xff1a;模拟过程求斐波那切数列的几个方法&#xff1a; 经典做法&#xff1a; 众所周知&#xff1a;斐波那契数列的定义是f(…

ASP.Net Core2.1中的HttpClientFactory系列一

引言&#xff1a;ASP.NET Core2.1 中出现了一个新的 HttpClientFactory 功能, 它有助于解决开发人员在使用 HttpClient 实例从其应用程序中访问外部 web 资源时可能遇到的一些常见问题。关于HttpClientFactory 到底解决了那些HttpClient的严重问题&#xff0c;下面是我罗列出来…

欧拉回路哈密顿回路

欧拉回路 总结 百度百科 混合图的欧拉回路 Fleury算法 Hierholzer算法 //寻找无向图的欧拉路径 #include<iostream> #include<vector> #include<stack> using namespace std; vector<int> g[1001]; int n,m,x,y,d[1001],s-1,t-1; bool vis[1001][100…

【CDQ分治】三维偏序(luogu 3801/金牌导航 CDQ分治-1)

三维偏序 luogu 3801 金牌导航 CDQ分治-1 题目大意 有n个元素&#xff0c;第i个元素有ai,bi,cia_i,b_i,c_iai​,bi​,ci​三个属性&#xff0c;设 f(i)表示满足aj⩽aia_j\leqslant a_iaj​⩽ai​且bj⩽bib_j \leqslant b_ibj​⩽bi​且cj⩽cic_j \leqslant c_icj​⩽ci​且…

P4929-[模板]舞蹈链(DLX)

正题 题目链接:https://www.luogu.com.cn/problem/P4929 题目大意 n∗mn*mn∗m的矩形有0/10/10/1&#xff0c;要求选出若干行使得每一列有且仅有一个111。 解题思路 精确覆盖问题指的是一个集合SSS和它的若干个子集集合TTT&#xff0c;要求选出TTT的一个子集使得里面的集合元…

最大子矩阵(普通和01)

文章目录普通矩阵&#xff08;单个矩阵值为任何数&#xff09;最大子段和扩展到二维情况01矩阵&#xff08;单个矩阵值为0或1&#xff09;代码&#xff1a;普通矩阵&#xff08;单个矩阵值为任何数&#xff09; 例题&#xff1a;POJ 1074 求出其中最大的子矩阵 答案是&#x…

自动化流程开源框架BotSharp

BotSharp是一款为方便构建智能对话机器人平台而开发的开源框架&#xff0c;最大的特点是所有模型算法都是基于.NET Core开发实现&#xff0c;甚至最基本的Penn Treebank分词标准&#xff0c;都重新用C#实现了。在机器学习python占绝对优势的时代算是不可多得的项目。该项目涉及…

二分图匹配

定义&#xff1a; 二分图&#xff1a;一个图被分成了两部分&#xff0c;相同的部分没有边 匹配&#xff1a;二分图G的子图M中&#xff0c;M的边集{E}中的任意两条边都不指向同一个顶点 极大匹配&#xff1a;在当前已完成的匹配下,无法再通过增加未完成匹配的边的方式来增加匹…

【整体二分】区间第k小(金牌导航 整体二分-1)

区间第k小 金牌导航 整体二分-1 题目大意 给出一个序列&#xff0c;有若干查询&#xff0c;每次查询给出l,r,k&#xff0c;让你求l~r这个区间的第k大 输入样例 7 3 1 5 2 6 3 7 4 2 5 3 4 4 1 1 7 3输出样例 5 6 3数据范围 1⩽n⩽105,1⩽m⩽50000,1⩽∣ai∣⩽1091\leqsla…

积极参与开源项目,促进.NET Core生态社区发展

今天早上在微信群里聊天聊到百度的SDK 已经支持.NET Core, 百度已经在3月份就支持了&#xff0c;想起当时还是我在他们的github上提的issue&#xff1a; https://github.com/Baidu-AIP/dotnet-sdk/issues/3。.NET Core生态社区的发展已经四年多时间&#xff0c;日趋完善&#x…