令 ai=Ai。
注意到 ∏i≠xai=n∏i=1ai−n∏i=1(ai−[i=x]),故转化为求 E(n∏i=1a′i),其中 a′i 表示 ai 所有操作后的值。
令 bi=ai−a′i,则有 E(n∏i=1(ai−bi))=1nk∑b1+b2+⋯+bn=kk!n∏i=1bi!n∏i=1(ai−bi)=k!nk∑b1+b2+⋯+bn=kn∏i=1ai−bibi!
如果有点生成函数知识的话,容易发现这很像某些生成函数之积的 xk 项系数。
设指数生成函数 Gi(x)=∞∑j=1ai−jj!xj。
容易发现 Gi(x)=ex(ai−x)。
则 ∑b1+b2+⋯+bn=kn∏i=1ai−bibi!=(n∏i=1Gi(x))[xk]。
然后发现 n∏i=1Gi(x)=enxn∏i=1(ai−x)。
考虑用普通的分治思想 + NTT 来求 n∏i=1(ai−x)(并不是 CDQ 分治)。
(大常数选手被卡)
又因为 enx=∞∑i=0nixii!,得 (n∏i=1Gi(x))[xk]=n∑i=0nk−i(k−i)!fi,其中 fi=(n∏i=1(ai−x))[xi]。
看起来是不能做的,但是本来还有个系数 k!nk。
k!nkn∑i=0nk−i(k−i)!fi=n∑i=0k!nk(k−i)!fi
注意到 k!(k−i)! 只有 i 项,于是直接算即可(其实就是下降幂)
实际上 n∏i=1ai=f0,故要求的为 −n∑i=1k!nk(k−i)!fi。
代码:
1 |
|