推式子:
$$
\begin {aligned}
E _ j & = \frac {F _ i} {q _ i} \\
& = \frac {\sum _ {i = 1} ^ {j - 1} \frac {q _ i q _ j} {(i - j) ^ 2} - \sum _ {i = j + 1} ^ n \frac {q _ i q _ j} {(i - j) ^ 2}} {q _ i} \\
& = \sum _ {i = 1} ^ {j - 1} \frac {q _ i} {(i - j) ^ 2} - \sum _ {i = j + 1} ^ n \frac {q _ i} {(i - j) ^ 2}
\end {aligned}
$$
令 $j - i = k$ ,则
$$
E _ j = \sum _ {k = 1} ^ {j - 1} \frac {q _ {j - k}} {k ^ 2} - \sum _ {k = -1} ^ {j - n} \frac {q _ {j - k}} {k ^ 2}
$$
发现形式像卷积,令 $f(x) = q _ x$ ,$g(x) = \frac 1 {x ^ 2}$ ,则
$$
E _ j = \sum _ {k = 1} ^ {j - 1} f(j - k) g(k) - \sum _ {k = -1} ^ {j - n} f(j - k) g(k)
$$
将其转化为卷积形式,将两项分开考察:
$$
\begin {aligned}
& \sum _ {k = 1} ^ {j - 1} f(j - k) g(k) \\
= & \sum _ {k = 0} ^ j f(j - k) g(k) - f(0)g(j) - f(j)g(0) \\
= & F * G(j) - f(0)g(j) - f(j)g(0)
\end {aligned}
$$
通过 $f(0) = g(0) = 0$ ,直接卷积即可。
第二项的 $k$ 是负的,先把它变成正的,
$$
\begin {aligned}
& \sum _ {k = -1} ^ {j - n} f(j - k) g(k) \\
= & \sum _ {k = 1} ^ {n - j} f(j + k) g(k) \\
\end {aligned}
$$
$G(x) = \displaystyle \sum _ ig(i) x ^ i$ 将会贡献到 $i$ 上,不满足卷积了。我们希望构造一个不影响答案的另一个生成函数贡献到 $-i$ 上,且需要计算的项在正的幂上。 $\displaystyle G ^ {‘} (x) = \sum _ i g(i) x ^ {-i} = \sum _ i g(i - n - 1) x ^ {n - i + 1}$ ,实际上将答案贡献到了 $n - i + 1$ 上,所以取答案时增加 $n$ 。
$$
\begin {aligned}
& \sum _ {k = 1} ^ {n - j} f(j + k) g(k) \\
= & \sum _ {k = j + 1} ^ {n + j} f(k) g ^ {‘}(n + j - k + 1) \\
= & F * G ^ {‘} (n + j + 1) - \sum _ {k = 0} ^ j f(k) g ^ {‘}(n + j - k + 1) - \sum _ {k = n + 1} ^ {n + j} f(k) g ^ {‘}(n + j - k + 1)
\end {aligned}
$$
$f$ 和 $g$ 中大于 $n$ 的值为 $0$ 即可。
查看代码
1 |
|