【洛谷p4705】玩游戏

题目大意

一个长度为(n)的序列(a)和长度为(m)的序列(b),对于(1..t)的每个(k),求

[frac{1}{nm}sum_{x=1}^n sum_{y=1}^m (a_x+b_y)^k ]

(n,m,tleq 10^5)

题解

[egin{aligned} ans&=frac{1}{nm}sum_{x=1}^n sum_{y=1}^m sum_{i=0}^k {kchoose i} a_x^i b_y^{k-i}\ &=frac{1}{nm} sum_{i=0}^k sum_{x=1}^n sum_{y=1}^m {kchoose i} a_x^i b_y^{k-i}\ &=frac{k!}{nm} sum_{i=0}^k sum frac{a^i}{i!} sum frac{b^{k-i}}{(k-i)!} end{aligned} ]

下面考虑如何对所有(k)求出(sum_{j=1}^n a_j^i)
写出(OGF)后变换枚举顺序。

[egin{aligned} A&=sum_{i=0}^infty x^i sum_{j=1}^n a_j^i\ &=sum_{i=1}^n sum_{j=0}^infty a_i^j x^j\ &=sum_{i=1}^n frac{1}{1-a_ix} end{aligned} ]

其实这里就可以分治然后通分了,但是常数比较大。
如果对函数嵌套起来求导的那个玩意比较熟悉的话可以想到(ln(1-ax)'=frac{-a}{1-ax})

[egin{aligned} A&=sum frac{1}{1-ax}\ &=sum 1-xfrac{-a}{1-ax}\ &=n-xsum ln(1-ax)'\ &=n-x*ln(prod 1-ax)' end{aligned} ]

分治求出那个积之后带回去求可以求出(A,B),直接卷积即可。

原文地址:https://www.cnblogs.com/zzqtxdy/p/12081287.html