AtCoder Beginner Contest 241EX(推式子)

Posted 吃花椒的妙酱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AtCoder Beginner Contest 241EX(推式子)相关的知识,希望对你有一定的参考价值。

题意: n个物品,每个物品有 b i b_i bi个,每个价值为 a i a_i ai,设总价值为所有物品的价值乘积,求选m个物品所有本质不同的方案的价值和。(本质不同即存在某个a_i)( 1 ≤ a i < 998244353 , 1 ≤ b i ≤ 1 e 7 , m ≤ 1 e 18 1 \\le a_i <998244353 , 1 \\le b_i \\le 1e7 ,m \\le 1e18 1ai<998244353,1bi1e7,m1e18)
Solution:
设第k种物品的生成函数为
F ( k ) = ∑ i = 0 b k a k i ∗ x i = 1 − ( a k x ) b k + 1 1 − a k x F(k) = \\sum_i=0^b_ka_k^i*x^i = \\frac1-(a_kx)^b_k+11-a^kx F(k)=i=0bkakixi=1akx1(akx)bk+1
n种物品的生成函数为
G = ∏ f ( k ) = ∏ 1 − ( a k x ) b k + 1 1 − a k x \\prod f(k) = \\prod \\frac1-(a_kx)^b_k+11-a^kx f(k)=1akx1(akx)bk+1

则 ans = [ x m ] [x^m] [xm]G
上面式子,分子可以直接暴力求,因为就是16个多项式,乘出来2^16个项。
假设分子有 A k x k , k ≤ m A_kx^k,k\\le m Akxk,km这个项,分母的多项式去找 [ x m − k ] [x^m-k] [xmk],两者乘积就是其中一个贡献。
所以,重点在于分母,也需要转化成形式幂级数。

分母 = ∏ 1 1 − ( a k x ) \\prod \\frac11-(a_kx) 1(akx)1,可以写成 ∑ c k 1 − a k x \\sum \\fracc_k1-a_kx 1akxck(由高数知识,若分母为多个多项式相乘的分式,可以化成若干个分母为多项式分子最高次数比分母少一次的多项式的和,有点绕😨),写成这样的好处是什么呢?,每一个分式其实是某个等比级数的封闭形式,可以转为形式幂级数,这样每项的系数都可以算了。

接下来求每个 c i c_i ci,由上
∏ 1 1 − ( a k x ) = ∑ c k 1 − a k x < = > 1 = c 1 ( 1 − a 1 x ) ( 1 − a 3 x ) . . ( 1 − a n x ) + c 3 ( 1 − a 1 x ) ( 1 − a 2 x ) . . ( 1 − a n x ) . . . . \\quad\\prod \\frac11-(a_kx)= \\sum \\fracc_k1-a_kx\\\\<=>1 =c_1(1-a_1x)(1-a_3x)..(1-a_nx)+c3(1-a_1x)(1-a_2x)..(1-a_nx).... 1(akx)1=1akxck<=>1=c1(1a1x)(1a3x)..(1anx)+c3(1a1x)(1a2x)..(1anx)....
令x为某个 a i a_i ai,则可以消掉n-1项,可以求出 c i = 1 ∏ ( 1 − a j a i ) , j ≠ i c_i=\\frac1\\prod(1-a_ja_i),j \\ne i ci=(1ajai)1,j=i(类似拉格朗日插值的构造)。
求出了所有 c i c_i ci,每个分式可以写成 c i 1 − a i x = c i ( 1 + a i x + a i 2 x 2 + . . . ) = c i ∑ a i j x j \\fracc_i1-a_ix =ci(1+a_ix+a_i^2x^2+...)=c_i \\sum a_i^jx^j 1aixci=ci(1+aix+ai2x2+...)=ciaijxj,那分母就可转化成形式幂级数即 1 + B 1 x + B 2 x 2 + . . . 1+B_1x+B_2x^2+... 1+B1x+B2x以上是关于AtCoder Beginner Contest 241EX(推式子)的主要内容,如果未能解决你的问题,请参考以下文章

AtCoder Beginner Contest 234

AtCoder Beginner Contest 115 题解

AtCoder Beginner Contest 154 题解

AtCoder Beginner Contest 103

AtCoder Beginner Contest 228

AtCoder Beginner Contest 242