都说这是个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 }
时间: 2024-12-04 19:48:24