现在发现新的多项式板子写分治 NTT 真麻烦……
显然 k 次价值的期望是 1nmn∑i=1m∑j=1(ai+bj)k
先别管那个 1nm,考虑剩下的那个部分: n∑i=1m∑j=1(ai+bj)k=n∑i=1m∑j=1k∑e=0(ke)aeibk−ej=n∑i=1m∑j=1k∑e=0k!e!(k−e)!aeibk−ej=k!n∑i=1m∑j=1k∑e=0aeie!bk−ej(k−e)!=k!k∑e=0n∑i=1aeie!m∑j=1bk−ej(k−e)!
于是变成了 k∑e=0xee!n∑i=1aei,k∑e=0xee!n∑i=1bei 的卷积……
考虑如何对于所有 e 求出 n∑i=1aei。
众所周知生成函数是万能的,故可以对于每个 ai 构造生成函数然后加起来。
即 n∑i=1aei=[xe]n∑i=111−aix
注意到如果右边是个 ∏ 就好办了,直接提分母出来分治 NTT 然后求逆就行了。
但是人家是 ∑ 喔!
怎么把 ∑ 变成 ∏ 呢?当然是 ln 辣!
但是直接 ln 似乎依然不可做……
注意到我们实际上是想要 n∏i=1(1−aix),又注意到如果结合 ln 和求导的话就可以把它放回分母上。
即 [ln(1−aix)]′=−ai1−aix
并且展开来会发现 11−aix=−x[ln(1−aix)]′+1
于是得到 n∑i=111−aix=n−xn∑i=1[ln(1−aix)]′=n−x[lnn∏i=1(1−aix)]′
惊了!居然得到了一个神奇的形式!
于是一遍分治 NTT 一遍多项式 ln 外加求个导就搞定了,最后再做一次卷积。
复杂度 O(nlog2n)(视 n,m,t 均同阶)。
以及我从神鱼那里学来的多项式板子有些操作并不能直接适配分治 NTT……
随着 WA / TLE 的次数增多我总算是调出来了……
(一开始还以为是常数问题来着)
代码:
1 |
|