BZOJ3527 - [Zjoi2014]力

BZOJ3527 - Click Here

  

Description

  给出n个数qi,给出Fj的定义如下:

  $F_j=\sum_{i>j} \frac{q_i q_j}{(i-j)^2}-\sum_{i<j} \frac{q_i q_j}{(i-j)^2}$

  令Ei=Fi/qi,求Ei.

  

Input

  第一行一个整数n。

  接下来n行每行输入一个数,第i行表示qi。

  n≤100000,0<qi<1000000000

  

Output

  n行,第i行输出Ei。与标准答案误差不超过1e-2即可。

  

Solution

  FFT裸题。但还是记录一下,毕竟有个常见的trick。

  

  为了看起来更直观,我们定义两个函数$f(i)=q_i, \, g(i)=\begin{cases} \frac{1}{i},i>0 \\ 0,i=0 \end{cases}$

  题目求$E_i=\sum_{i>j}\frac{q_j}{(i-j)^2}-\sum_{i<j} \frac{q_j}{(i-j)^2}$

  该式等价于$E_i=\sum_{j=0}^{i}f(j) \times g(i-j)-\sum_{j=i}^{n}f(j) \times g(j-i)$

  

  定义$E1_i=\sum_{j=0}^{i}f(j) \times g(i-j), \, E2_i=\sum_{j=i}^{n}f(j) \times g(j-i)$

  则$E1_i$是一个卷积形式,直接FFT加速即可。

  

  考虑$E2_i$的求解。

  $E2_i=\sum_{j=i}^{n}f(j) \times g(j-i) = \sum_{j=0}^{n-i} f(j+i) \times g(j)$

  定义一个新的函数$f’(i)=f(n-i)$,然后上式等价于$E2_i=\sum_{j=0}^{n-i} f’(n-j-i) \times g(j)$

  这样$E2_i$也是一个卷积形式,直接FFT加速就好啦。

  

CODE

CODE - Click Here

本站总访问量次 | 本站访客数人次

Powered by Hexo | Designed by iTimeTraveler | Refined by CSHwang