题目大意
一个长度为(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),直接卷积即可。