【Luogu3808】多项式乘法FFT
2017-10-02 19:39
253 查看
题目戳我
一道模板题
自己尝试证明了大部分。。。
剩下的还是没太证出来。。。
所以就是一个模板放在这里
以后再来补东西吧。。。。
一道模板题
自己尝试证明了大部分。。。
剩下的还是没太证出来。。。
所以就是一个模板放在这里
以后再来补东西吧。。。。
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<complex> #include<algorithm> using namespace std; #define MAX 2700000 inline int read() { register int x=0,t=1; register char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-'){t=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();} return x*t; } const double Pi=acos(-1); int N,M,r[MAX],l; complex<double> a[MAX],b[MAX]; void FFT(complex<double> *P,int opt) { for(int i=0;i<N;++i)if(i<r[i])swap(P[i],P[r[i]]); for(int i=1;i<N;i<<=1) { complex<double> W(cos(Pi/i),opt*sin(Pi/i)); for(int p=i<<1,j=0;j<N;j+=p) { complex<double> w(1,0); for(int k=0;k<i;k++,w*=W) { complex<double> X=P[j+k],Y=w*P[j+k+i]; P[j+k]=X+Y;P[j+k+i]=X-Y; } } } } int main() { N=read();M=read(); for(int i=0;i<=N;++i)a[i]=read(); for(int i=0;i<=M;++i)b[i]=read(); M+=N; for(N=1;N<=M;N<<=1)++l; for(int i=0;i<N;++i)r[i]=(r[i>>1]>>1)|((i&1)<<(l-1)); FFT(a,1); FFT(b,1); for(int i=0;i<=N;++i)a[i]=a[i]*b[i]; FFT(a,-1); for(int i=0;i<=M;++i)printf("%d ",(int)(a[i].real()/N+0.5)); return 0; }
相关文章推荐
- 利用FFT和逆FFT求多项式乘法 的原理:
- 多项式乘法,FFT与NTT
- FFT与多项式乘法
- UVALive - 6886 Golf Bot 多项式乘法(FFT)
- [uoj 34 多项式乘法] FFT&NTT 模板
- [省选前题目整理][UOJ 34]多项式乘法(FFT)
- 洛谷P3803 【模板】多项式乘法(FFT)
- FFT/NTT总结+洛谷P3803 【模板】多项式乘法(FFT)(FFT/NTT)
- FFT uoj34 多项式乘法
- 【模版】多项式乘法 FFT
- 洛谷P3803 【模板】多项式乘法(FFT) 【fft】
- [UOJ#34]多项式乘法(FFT)
- 【LuoguP3803】多项式乘法-FFT/NTT模板题(附带FFT/NTT简单介绍)
- FFT uoj34 多项式乘法
- [uoj 34 多项式乘法] FFT&NTT 模板
- 洛谷P3803 【模板】多项式乘法(FFT和NTT)
- 【UOJ 34】 #34. 多项式乘法 (FFT)
- [挖坑][uoj]多项式乘法 FFT
- UOJ 34 多项式乘法(FFT)
- uoj34 多项式乘法(FFT板子)