Problem
Description
给出 \(n\) 个数 \(q_i\),给出 \(F_j\) 的定义如下:
\[F_j=\sum_{ij} \frac{q_iq_j}{(i-j)^2}\]
令 \(E_i=F_i/q_i\),求 \(E_i\)。
第一行一个整数\(n\)。
接下来 \(n\) 行每行输入一个数,第 \(i\) 行表示 \(q_i\)。
\(n\) 行,第 \(i\) 行输出 \(E_i\)。与标准答案误差不超过 \(10^{-2}\) 即可。
Sample
5
4006373.885184
15375036.435759
1717456.469144
8514941.004912
1410681.345880
Output
-16838672.693
3439.793
7509018.566
4595686.886
10903040.872
Range
对于所有的数据,\(n\leq 100000,\ 0。
Algorithm
\(FFT\)
Mentality
\[ E_i=\sum_{j=1}^{i-1}\frac{q_j}{(i-j)^2}-\sum_{j=i+1}^n\frac{q_j}{(j-i)^2} \]
设 \(g_i=\frac{1}{i^2}\) ,则有:
\[ E_i=\sum_{j=1}^{i-1}q_jg_{i-j}-\sum_{j=i+1}^nq_jg_{j-i} \]
单独算每个 \(E_i\) 的前一部分,再算所有 \(E_i\) 的后一部分。
由于 \(q_0=g_0=0\) ,则对于:
\[ \sum_{j=1}^{i-1}q_jg_{i-j}=\sum_{j=0}^{i}q_jg_{i-j} \]
直接 \(FFT\) 求得。
对于后一部分,将 \(q\) 数组翻转得到数组 \(p\) 。
则有:
\[ \sum_{j=i+1}^nq_jg_{j-i}=\sum_{j=0}^{n-i+1}p_jg_{n-i+1-j} \]
同样直接 \(FFT\) 计算。
Code
#include
#include
#include
#include
#include
#include
#include