题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3527

首先卷积的形式是$h(i)=\sum_{i=0}^jf(i)g(i-j)$,如果我们可以把式子整理成这个样子再套上FFT就成功了。

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

$$E_i=\sum_{j=0}^{i-1}\frac{q_j}{(j-i)^2}^2-\sum_{j=0}^{n-i-1}\frac{q_{n-j}}{(n-i-j)^2}$$

令$f(i)=q_i$,$g(i)=\frac{1}{i^2}$,$t(i)=q_{n-i}$,则有

$$E_i=\sum_{j=0}^{i-1}f(i)g(i-j)-\sum_{j=0}^{n-i-1}t(j)g(n-i-j)$$

因为$j$无法取到$i$或者$n-i$,所以令$g(0)=0$来消除最后一项的影响。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const double pi=acos(-1.0);
struct complex{
double r,i;
complex (double _r=,double _i=){
r=_r,i=_i;
}
complex operator + (const complex &_){
return complex(r+_.r,i+_.i);
}
complex operator - (const complex &_){
return complex(r-_.r,i-_.i);
}
complex operator * (const complex &_){
return complex(r*_.r-i*_.i,r*_.i+_.r*i);
}
};
void reverse(complex y[],int len){
for(int i=,j=len>>,k;i+<len;i++){
if(i<j) swap(y[i],y[j]);
k=len>>;
while(j>=k){
j-=k;
k>>=;
}
if(j<k) j+=k;
}
}
void FFT(complex y[],int len,int on){
reverse(y,len);
for(int h=;h<=len;h<<=){
complex wn(cos(-on**pi/h),sin(-on**pi/h));
for(int j=;j<len;j+=h){
complex w(,);
for(int k=j;k<j+(h>>);k++){
complex u=y[k],t=w*y[k+(h>>)];
y[k]=u+t;
y[k+(h>>)]=u-t;
w=w*wn;
}
}
}
if(on==-) for(int i=;i<len;i++) y[i].r/=len;
}
double q[],ans[];
complex a[],b[],c[];
int main(){
int n,len=;
scanf("%d",&n);
while(len<n) len<<=;len<<=;
for(int i=;i<n;i++) scanf("%lf",&q[i]);
for(int i=;i<n;i++) a[i]=complex(q[i],);
for(int i=;i<n;i++) b[i]=complex(1.0/i/i,);
for(int i=n;i<len;i++) a[i]=b[i]=complex();
b[]=complex();
FFT(a,len,);
FFT(b,len,);
for(int i=;i<len;i++) c[i]=a[i]*b[i];
FFT(c,len,-);
for(int i=;i<n;i++) ans[i]=c[i].r;
for(int i=;i<n;i++) a[i]=complex(q[n-i-],);
for(int i=;i<n;i++) b[i]=complex(1.0/i/i,);
for(int i=n;i<len;i++) a[i]=b[i]=complex();
b[]=complex();
FFT(a,len,);
FFT(b,len,);
for(int i=;i<len;i++) c[i]=a[i]*b[i];
FFT(c,len,-);
for(int i=;i<n;i++) ans[i]-=c[n-i-].r;
for(int i=;i<n;i++) printf("%.3lf\n",ans[i]);
return ;
}

最新文章

  1. 今天开始学习java编程
  2. 【字符编码】Java字符编码详细解答及问题探讨
  3. Git 命令清单
  4. flash2x、flax
  5. DirectX.Capture Namespace
  6. ELF Format 笔记(四)—— 节(Section)
  7. linux重启命令学习
  8. BZOJ1588 HNOI2002 营业额统计 [Splay入门题]
  9. 在blade中定义一个可以被模版使用的变量
  10. Spark菜鸟学习营Day2 分布式系统需求分析
  11. Mysql重要配置参数的整理2
  12. servlet操作数据库
  13. POJ 2488 A Knight&#39;s Journey(深搜+回溯)
  14. ECMAScript6-解构
  15. MyBatis使用statementType=&quot;STATEMENT&quot;
  16. libev学习笔记
  17. Asp.net Core的Swagger接口根据模块、版本分组
  18. div里包含img底部多出3px的解决办法
  19. sqoop无法导出parquet文件到mysql
  20. PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)

热门文章

  1. UVA11624 Fire! —— BFS
  2. Intel&#174; Media Server Studio Support
  3. CodeForces979D:Kuro and GCD and XOR and SUM(Trie树&amp;指针&amp;Xor)
  4. nginx开发_配置项
  5. liunx操作系统安装&lt;一&gt;
  6. SKU的结构与页面渲染
  7. CentOS 6.5升级到CentOS 7
  8. linux部署web项目到tomcat下(图文详解)
  9. Crontab Build_setting的定期检查
  10. iView 实战系列教程(21课时)_1.iView 实战教程之配置篇