基础FFT应用题
Description
给出$n$个数$q_1, q_2, \cdots, q_n$,定义:
$$F_j = \sum_{i=1}^{j-1} \frac {q_i \times q_j}{(i - j)^2} - \sum_{i=j+1}^n \frac {q_i \times q_j}{(i-j)^2}$$
$$E_i = \frac {F_i}{q_i}$$
求$E_1, E_2, \cdots E_n$, $n \leq 10^5, q_i \leq 10^9$.
Samples
Sample Input #1
1 | 5 |
Sample Output #1
1 | -16838672.693 |
Solution
显然要推柿子,发现把$j$都加入两边的Sigma
不影响答案,那么
$$E_j = \sum_{i=1}^j \frac {q_i}{(i - j)^2} - \sum_{i=j}^n \frac {q_i}{(i-j)^2}$$
考虑设$f_i = q_i, g_i = \frac {1}{i^2}$, 那么
$$\sum_{i=1}^j f_ig_{j-i} - \sum_{i=j}^n f_ig_{i-j}$$
定一下边界$f_0 = g_0 = 0$, 可以发现
$$\sum_{i=0}^j f_ig_{j-i} - \sum_{i=j}^n f_ig_{i - j}$$
哎, 左半边柿子已经变成了线性卷积的形式,这样就可以用$\texttt{FFT}$在$\mathcal O(n\log n)$的时间内计算了。
那么我们尝试把右半边的柿子也化成卷积形式,考虑翻转$f_i$, 设$h_i = f_{n - i}$,那么右半边
$$\sum_{i=j}^n f_ig_{i - j} = \sum_{i=0}^{n-j} f_{i+j}g_i$$
$$\sum_{i=0}^{n-j} h_{n - i - j}g_i$$
令$m = n - j$, 那么整个柿子就化成了两个都是卷积形式的部分
$$\sum_{i=0}^j f_ig_{j-i} - \sum_{i=0}^m g_ih_{m-i}$$
那么分别用$\texttt{FFT}$计算即可啦。
Code
1 | /* Headers */ |