官方题解!
首先令 v=V+2。
考虑一个结点 [l,r]。
则实际上一次操作对它产生影响的概率即这次操作的区间包含它的概率,即 p=l(n−r+1)(n+12)。
设随机加 k 次 [−1,V] 中的整数,结果为 0 的方案数为 fk,那么枚举被操作次数,一个结点的贡献即为 m∑i=0(mi)pi(1−p)m−i(1−fivi)
观察到这其实是一个关于 p1−p 的多项式乘一个 (1−p)m,设其等于 (1−p)mm∑i=0ci(p1−p)i
一个简单的做法是直接多点求值,只要常数不爆炸应该都可以过。
不过存在不多点求值的做法。
将有贡献的结点(非叶结点)任意标号为 1,2,…,n−1,令 pi 表示第 i 个结点的以上提到的 p 值,令 ai=pi1−pi,bi=(1−pi)m,则总答案为 n−1∑i=1bim∑j=0cjaji=m∑j=0cjn−1∑i=1biaji
于是问题变为对 j=0,1,…,m 求出 ∑biaji。
发现 n−1∑i=1biaji=[xj]n−1∑i=1bi1−aix
可以考虑分治 NTT 实现通分并相加的过程,时间复杂度 O(nlog2n)。
接下来,问题只剩下求出 fk。
通过组合数最后可以推得一个 O(m2V) 的做法,可以参见出题人的题解,这里略去不谈。
通过大力生成函数处理,显然 fk=[x0](x−1+1+x+x2+⋯+xV)k
令 F(x)=x−1+1+x+x2+⋯+xV=1−xvx(1−x)
然后问题变成 [x0]Fk(x)
事实上这个问题的形式与一个经典问题极其相似,于是这启发我们考虑拉格朗日反演。
但是由于要提取常数项,所以并不能直接运用经典的拉格朗日反演;并且,F 显然不存在复合逆。
考虑令 G=1F,令 H 为 G 的复合逆,然后考虑另类拉格朗日反演: [x0]Fk(x)=[x0]G−k(x)=[xk]xH′(x)H(x)
至此,如果能求出 H(x),问题即迎刃而解。
注意到 G=x(1−x)1−xv
代入 x=H 得 xHv−H2+H−x=0
使用多项式牛顿迭代求解即可。
时间复杂度 O(nlog2n)(视 n,m 同阶)。
代码:
1 |
|