====== FFT ====== 补充板子 #include #include #include #include using namespace std; const int MAXN=4000100; const double Pi=acos(-1.0); struct complex { double x,y; complex (double xx=0,double yy=0) { x=xx,y=yy; } } a[MAXN],b[MAXN]; complex operator + (complex a,complex b) { return complex(a.x+b.x , a.y+b.y); } complex operator - (complex a,complex b) { return complex(a.x-b.x , a.y-b.y); } complex operator * (complex a,complex b) { return complex(a.x*b.x-a.y*b.y , a.x*b.y+a.y*b.x); //不懂的看复数的运算那部分 } long long l,r[MAXN]; long long limit=1; void fast_fast_tle(complex *A,int type) { for(int i=0; i>n>>m; for(int i=0; i<=n; i++) cin>>a[i].x; for(int i=0; i<=m; i++) cin>>b[i].x; while(limit<=n+m) limit<<=1,l++; for(int i=0; i>1]>>1 )| ( (i&1)<<(l-1) ) ; fast_fast_tle(a,1); fast_fast_tle(b,1); for(int i=0; i<=limit; i++) a[i]=a[i]*b[i]; fast_fast_tle(a,-1); for(int i=0; i<=n+m; i++) c[i]=(long long)(a[i].x/limit+0.5); for(int i=0; i<=n+m; i++) printf("%lld ",c[i]); return 0; }