bzoj 3527: [Zjoi2014]力

都说这是个FFT模板题 可我这种蒟蒻还是看了大半天。。。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<cmath>
 6 #include<queue>
 7 #include<algorithm>
 8 #include<vector>
 9 #include<complex>
10 #define M 1000009
11 #define EPS 1e-10
12 #define MO 10000
13 #define ll long long
14 #define E complex<double>
15 #define pi acos(-1)
16 using namespace std;
17 ll read()
18 {
19     char ch=getchar();
20     ll x=0,f=1;
21     for(;ch<'0'||ch>'9';ch=getchar())
22         if(ch=='-')
23           f=-1;
24     for(;ch>='0'&&ch<='9';ch=getchar())
25         x=x*10+ch-'0';
26     return x*f;
27 }
28 E g[M],f[M],_f[M];
29 int n,L,R[M];
30 void fft(E a[M],int f)
31 {
32   for(int i=0;i<n;i++)
33     if(i>R[i])
34       swap(a[i],a[R[i]]);
35   for(int i=1;i<n;i<<=1)
36     {
37       E wn(cos(pi/i),f*sin(pi/i));
38       for(int j=0;j<n;j+=(i<<1))
39         {
40           E W(1,0);
41           for(int k=0;k<i;k++,W*=wn)
42             {
43               E x=a[j+k],y=W*a[i+j+k];
44               a[j+k]=x+y;
45               a[i+j+k]=x-y;
46             }
47         }
48     }
49   if(f==-1)
50     for(int i=0;i<n;i++)
51       a[i]/=n;
52 }
53 int main()
54 {
55    n=read();
56    n--;
57    for(int i=0;i<=n;i++)
58      {
59        double a1;
60        scanf("%lf",&a1);
61        f[i]=a1;
62        _f[n-i]=a1;
63      }
64    for(int i=1;i<=n;i++)
65      g[i]=(1.0/i/i);
66    int m=2*n;
67    for(n=1;n<=m;n<<=1)
68      L++;
69    for(int i=0;i<n;i++)
70      R[i]=(R[i>>1]>>1)|((i&1)<<(L-1));
71    fft(f,1);
72    fft(_f,1);
73    fft(g,1);
74    for(int i=0;i<n;i++)
75      {
76        f[i]*=g[i];
77        _f[i]*=g[i];
78      }
79    fft(f,-1);
80    fft(_f,-1);
81    for(int i=0;i<=m/2;i++)
82      printf("%.3lf\n",f[i].real()-_f[m/2-i].real());
83    return 0;
84 }

 

posted @ 2016-07-10 21:34  xiw5  阅读(115)  评论(0编辑  收藏  举报