洛谷P4705 玩游戏

题目描述

https://www.luogu.com.cn/problem/P4705

题解

首先对于 $k\in[1,t]$ 我们列出其答案的式子:$$ans_k=\frac{\sum_{i=1}^n \sum_{j=1}^m (a_i+b_j)^k}{nm}$$
观察分子的式子,把它用二项式定理展开:
$$=\sum_{x=0}^k\sum_{i=1}^n\sum_{j=1}^m(_k^x)a_i^xb_j^{k-x}$$
$$=k!\sum_{x=0}^k(\sum_{i=1}^n\frac{a_i^x}{x!})(\sum_{j=1}^m\frac{b_j^{k-x}}{(k-x)!})$$
这两个括号里的式子是等价的,所以我们考虑怎样快速求出对于每个 $k\in[1,t]$ , $\sum_{i=1}^na_i^k$
于是我们假设对于每个 $i\in[1,n]$ , $$f_i(x)=\sum_{j=0}^{inf}a_i^jx^j
$$ 那上述式子就是 $$(\sum_{i=1}^nf_i(x))[x^k]$$
然后做一些转化:$$f_i(x)=\frac{1}{1-a_ix}$$
然后我们发现 $$(\ln(1-a_ix))'=\frac{-a_i}{1-a_ix}$$
设 $g_i(x)=\frac{-a_i}{1-a_ix}$ ,那么 $$f_i(x)=-x\times g_i(x)+1$$
所以 $$sum_f(x)=-x \times sum_g(x)+n$$
所以我们考虑怎么算出 $sum_g(x)$
$$sum_g(x)=\sum_{i=1}^ng_i(x)$$
$$=\sum_{i=1}^n(\ln(1-a_ix))'$$
$$=(\ln(\prod_{i=1}^n(1-a_ix)))'$$
于是我们可以分治+ $Ntt$求出累乘的式子即可
效率: $O(nlog^2n)$

posted @ 2020-01-28 15:29  xjqxjq  阅读(91)  评论(0编辑  收藏  举报