ABC 367 G 题解

ABC367G

神奇题目

场上想到了引入多元生成函数之后就嗝屁了。

定义两个多项式的运算 A(z)B(z)=ijzijaibj,也就是异或卷积。

定义两个二元生成函数 A(x,y)B(x,y)=i,pj,qxijyp+qai,pbj,q

我们仍然选用 计算连续的

显然 k 很大,我们需要求出每个 xor 和的出现次数 ci

ci 可以简单的表示为:

C(z)=i=1zi(d=1dmN[xiydm]i=1n(1+xaiy))

现在问题在于计算 (1+xaiy)

这其实是 FWT ,而我们考虑计算其卷积,最后 IFWT

如果我们先不考虑 y 的影响,那么有 FWT(1+xai)=FWT(1)+FWT(xai) 计算结果中的第 j 项系数为 2[d(ai&j)=0],也就是二进制 & 有偶数个 1 的位置为 2,否则为 0

根据这个我们可以计算 (1+xai),具体的我们考虑一个 DP fi,0/1 表示所有数中 &i 有偶数/奇数个 1 的数的个数,还原每一项即可。事实上有 fi,0+fi,1=N

但是带上了 y 怎么办。实质上是把 ydm 的项拿出来。对于 xi 而言,如果 d(i&j)=0 ,那么就有选它,值增加一,或者不选它,如果 d(i&j)=1,就有选它,值减少一,或者不选它。选了的话选了的个数就会增加。

y 的实质是记录选了的个数,所以对应了 (1+y),(1y) 的两个决策。

所以实际上拿出 xiy 的系数是一个多项式 (1+y)fi,0(1y)fi,1。甚至我们可以据此定义广义的 FWT(第一维 xor,第二维多项式积)

FWTex(F(x,y))=zji(1)d(i&j)fi,kyk

显然我们还是得到了一个二维多项式,且可以有 FWTex(1+xaiy)=zk+zk(1)d(k&ai)y

也可以佐证上述结论。

所以我们对于每个 xi,拿出 ydm 的系数后就可以做 IFWT 得到 C(z) 了。

怎么拿?不妨设 dp1i,j(1+y)iyk,kmodm=j 的系数,dp2i,j(1y)iyk,kmodm=j 的系数。

那么 dp1fi,0,jdp2fi,1,(j)modm 就是所求系数。

code

posted @   spdarkle  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示