hdu 1402 A * B Problem Plus[【FFT】
2016-09-15 11:53
411 查看
这是一道FFT模板题,然而菜鸟还是WA好多发。。。
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<map> #include<string> #include<queue> #include<vector> #include<list> #include<bitset> //#pragma comment(linker,"/STACK:1024000000,1024000000") using namespace std; typedef long long ll; #define INF 0x3f3f3f3f #define N 200005 const double PI = acos(-1.0); struct complex { double r,i; complex(double _r = 0,double _i = 0) { r = _r; i = _i; } complex operator +(const complex &b) { return complex(r+b.r,i+b.i); } complex operator -(const complex &b) { return complex(r-b.r,i-b.i); } complex operator *(const complex &b) { return complex(r*b.r-i*b.i,r*b.i+i*b.r); } }; void change(complex y[],int len) { int i,j,k; for(i = 1, j = len/2;i < len-1;i++) { if(i < j)swap(y[i],y[j]); k = len/2; while( j >= k) { j -= k; k /= 2; } if(j < k)j += k; } } void fft(complex y[],int len,int on) { change(y,len); for(int h = 2;h <= len;h <<= 1) { complex wn(cos(-on*2*PI/h),sin(-on*2*PI/h)); for(int j = 0;j < len;j += h) { complex w(1,0); for(int k = j;k < j+h/2;k++) { complex u = y[k]; complex t = w*y[k+h/2]; y[k] = u+t; y[k+h/2] = u-t; w = w*wn; } } } if(on == -1) for(int i = 0;i < len;i++) y[i].r /= len; } complex x1 ,x2 ; char a[N/4],b[N/4]; int num ; int main() { while(~scanf("%s%s",a,b)) { int len1=strlen(a); int len2=strlen(b); int l=1; while(l<len1+len2) l<<=1; for(int i=len1-1;i>=0;i--) x1[i]=complex(a[len1-i-1]-'0',0); for(int i=len1;i<l;i++) x1[i]=complex(0,0); for(int i=len2-1;i>=0;i--) x2[i]=complex(b[len2-i-1]-'0',0); for(int i=len2;i<l;i++) x2[i]=complex(0,0); fft(x1,l,1); fft(x2,l,1); for(int i=0;i<l;i++) x1[i]=x1[i]*x2[i]; fft(x1,l,-1); for(int i=0;i<l;i++) num[i]=x1[i].r+0.5; for(int i=0;i<l;i++) { num[i+1]+=num[i]/10; num[i]%=10; } l=len1+len2-1; int f=0; for(int i=l;i>=0;i--) { if(!f&&num[i]==0) continue; f=1; printf("%d",num[i]); } if(!f) puts("0"); else puts(""); } return 0; }
相关文章推荐
- HDU 1402(A * B Problem Plus-FFT速度测试)
- [HDU]1402 A * B Problem Plus [FFT]
- 【HDU】1402 A * B Problem Plus 【FFT】
- HDU 1402 A * B Problem Plus FFT
- HDU 1402 A * B Problem Plus [FFT]【数论】
- hdu 1402 A * B Problem Plus 【快速傅里叶变换FFT】
- HDU 1402 A * B Problem Plus FFT
- 【HDU】1402 A * B Problem Plus 【FFT】
- HDU 1402 A * B Problem Plus
- HDU 1042 A * B Problem Plus [FFT]
- 杭电 HDU 1402 A * B Problem Plus JavaJ大数
- HDU 1402 A * B Problem Plus 高精度乘法
- HDOJ 1402 A * B Problem Plus -- FFT
- <模板> Hdu 1402 A * B Problem Plus 大数乘法
- hdu 1402 A * B Problem Plus || poj 2389 Bull Math
- hdu 1402 A * B Problem Plus 快速傅里叶变换
- hdu 1402 A * B Problem Plus
- hdu 1402 A * B Problem Plus 快速傅里叶变换
- hdu 1402 A * B Problem Plus 快速傅里叶变换/FFT
- hdu - 1402 - A * B Problem Plus(FFT)