显然fft维护卷积就可以了
发现fft里面会改变很多东西 要还原一下
#include <bits/stdc++.h>
#define dob complex<double>
using namespace std;
const int N=3e5;
const double pi=acos(-1.0);
dob a[N],a2[N],b[N];
int r[N],l;
double ans1[N],sum[N];
int n,m;
void fft(dob *a,int o)
{
for (int i=;i<n;i++)
if (i>r[i]) swap(a[i],a[r[i]]);
for (int i=;i<n;i*=)
{
dob wn(cos(pi/i),sin(pi*o/i)),x,y;
for (int j=;j<n;j+=(i*))
{
dob w(,);
for (int k=;k<i;k++,w*=wn)
{
x=a[j+k]; y=w*a[i+j+k];
a[j+k]=x+y,a[i+j+k]=x-y;
}
}
}
}
char s1[N],s2[N];
void query()
{
l=;
for (n = ; n <= m; n <<= ) l++;
for (int i=;i<n;i++) r[i]=(r[i/]/)|((i&)<<(l-));
fft(a,),
fft(b,);
for (int i=;i<n;i++) a[i]*=b[i];
fft(a,-);
for (int i=;i<=m;i++) sum[i]=a[i].real()/n;
}
int main()
{
cin>>n; int tmp=n;
for (int i=;i<=n-;i++) cin>>a[i];
memcpy(a2,a,sizeof(a));
for (int i=;i<=n-;i++) b[i]=1.0000000/i/i;
n--;m=n*;
query();
n=tmp;
for (int i=;i<=n-;i++)
ans1[i+]=sum[i];
memset(a,,sizeof(a));
memset(b,,sizeof(b));
memset(sum,,sizeof(sum));
n=tmp;
for (int i=;i<n;i++) a[n-i-]=a2[i];
for (int i=;i<=n-;i++) b[i]=1.0000000/i/i;
query();
n=tmp;
for (int i=;i<=n-;i++) ans1[i]-=sum[n-i];
for (int i=;i<=n;i++) printf("%.7f\n",ans1[i]);
return ;
}