首页 > 其他分享 >ABC 367 G 题解

ABC 367 G 题解

时间:2024-08-18 16:16:34浏览次数:8  
标签:dm ABC 题解 sum 系数 多项式 FWT 367 prod

ABC367G

神奇题目

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

定义两个多项式的运算 \(A(z)*B(z)=\sum_{i}\sum_{j}z^{i\oplus j}a_ib_j\),也就是异或卷积。

定义两个二元生成函数 \(A(x,y)*B(x,y)=\sum_{i,p}\sum_{j,q}x^{i\oplus j}y^{p+q}a_{i,p}b_{j,q}\)

我们仍然选用 \(\prod\) 计算连续的 \(*\) 积

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

而 \(c_i\) 可以简单的表示为:

\[C(z)=\sum_{i=1}z^i\left(\sum_{d=1}^{dm\le N}[x^iy^{dm}]\prod_{i=1}^n(1+x^{a_i}y)\right) \]

现在问题在于计算 \(\prod(1+x^{a_i}y)\)

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

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

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

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

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

所以实际上拿出 \(x_i\) 后 \(y\) 的系数是一个多项式 \((1+y)^{f_{i,0}}(1-y)^{f_{i,1}}\)。甚至我们可以据此定义广义的 \(FWT\)(第一维 \(xor\),第二维多项式积)

\[FWT_{ex}(F(x,y))=\sum z^j\sum_{i}(-1)^{d(i\& j)}f_{i,k}y^k \]

显然我们还是得到了一个二维多项式,且可以有 \(FWT_{ex}(1+x^{a_i}y)=\sum z^k+\sum_{z^k}{(-1)^{d(k\& a_i)}}y\)

也可以佐证上述结论。

所以我们对于每个 \(x^i\),拿出 \(y^{dm}\) 的系数后就可以做 \(IFWT\) 得到 \(C(z)\) 了。

怎么拿?不妨设 \(dp1_{i,j}\) 为 \((1+y)^i\) 中 \(y^{k},k\bmod m=j\) 的系数,\(dp2_{i,j}\) 为 \((1-y)^i\) 中 \(y^k,k\bmod m=j\) 的系数。

那么 \(\sum dp1_{f_{i,0},j}dp2_{f_{i,1},(-j)\bmod m}\) 就是所求系数。

code

标签:dm,ABC,题解,sum,系数,多项式,FWT,367,prod
From: https://www.cnblogs.com/spdarkle/p/18365748

相关文章

  • [LeetCode] 1367. Linked List in Binary Tree 二叉树中的链表
    Givenabinarytree root anda linkedlistwith head asthefirstnode.ReturnTrueifalltheelementsinthelinkedliststartingfromthe head correspondtosome downwardpath connectedinthebinarytree otherwisereturnFalse.Inthiscontext......
  • 题解:AT_abc367_d [ABC367D] Pedometer
    首先肯定要单层循环枚举元素,然后想方法求出一个元素的所有答案。一开始我写了一个二分找\(m\)倍数的方法,发现\(m\)小的时候还不如暴力。于是联想到之前做过的一道题,可以借助于取模的前缀和数组。对于当前元素\(i\),如果一个元素之前的前缀和与\(i\)之前的前缀和对\(m\)......
  • Atcoder [ABC367F] Rearrange Query 题解
    简要题意给定两个长度为\(N\)的序列\(A\)和\(B\)。有\(Q\)个查询,每个查询给定\(l,r,L,R\),其中\(l\leqr,L\leqR\),要求判断\(A\)的第\(l\)项到第\(r\)项构成的集合与\(B\)的第\(L\)项到第\(R\)项构成的集合是否相等。题解显然两个相等的集合所有元素......
  • Atcoder [ABC367C] Enumerate Sequences 题解
    简要题意给定\(n,k\)和\(R_i\),你需要输出所有满足下列条件的整数序列:长度为\(n\)。第\(i\)个元素的范围为\([1,R_i]\)。一个序列的所有元素的总和为\(k\)的倍数。输出请按照按照从左至右按位从小到大的顺序输出。题解注意到数据范围很小,我们可以直接爆搜,这里用......
  • 【动态规划、dp】[CSP-J 2022] 上升点列 题解
    题目描述在一个二维平面内,给定nnn个整数点(xi......
  • 题解:AT_abc367_e [ABC367E] Permute K times
    题意给你一个长度为\(N\)的序列\(X\),其中每个元素都介于\(1\)和\(N\)之间(含),以及一个长度为\(N\)的序列\(A\)。打印在\(A\)上执行以下操作\(K\)次的结果。将\(A_i\)替换为\(A_{X_i}\)。每个操作同时进行。思路元素\(i\)经过\(k\)次变化后的值就是元素......
  • 对树链剖分的爱 题解
    前言题目链接:洛谷。题意简述给出一棵\(n\)个节点以\(1\)为根的有根树。对于第\(2\leqi\leqn\)个节点,其父亲\(f_i\)在\([l_i,r_i]\)中均匀随机。每个树的边有边权,初始为\(0\)。现在有\(m\)次操作,第\(i\)次操作表示将\((u_i,v_i)\)的路径上所有的边的权值统......
  • AtCoder Beginner Contest 367 题解(E~G)
    E转换关系看作有向边,\(n\)点\(n\)边构成基环树森林,基环树森林k后继唯一,记f[i][j]为点\(i\)的\(2^j\)级祖先,随便倍增。F一眼哈希,不知道有没有不哈希的做法。在这里我们不关心元素的顺序,只关心元素是否出现以及出现几次,考虑一个\(n\)位\(n+1\)进制数,\(a_i\)出现一......
  • Atcoder Beginner Contest 367
    A.ShoutEveryday\(\text{Diff}43\)给你\(24\)小时制下的\(A,B,C\)三个时刻,问\(A\)是否在\([B,C]\)范围内考虑到先将\(B,C\)加上一个\(24\),假如\(C\)比\(B\)小,将\(C\)再加上一个\(24\),这样可以保证严格的\(A\ltB,C\),此时直接判断是否存在一个\(k\),使得......
  • [题解]CF76B Mice
    思路比较简单的贪心。对于可以选择两个奶酪的老鼠,我们先将它们忽略掉。现在所有老鼠所吃的奶酪是唯一确定的。考虑加上可以选择两个奶酪的老鼠如何选择。显然,如果它可以选择一个没有任何老鼠吃过的奶酪,它必然这样选择。其次,如果它可以选择的奶酪被吃掉的时间\(t\)与它到达奶......