HDU 1402 A * B Problem Plus FFT
来源:互联网 发布:淘宝异常订单处理中心 编辑:程序博客网 时间:2024/05/21 07:05
A * B Problem Plus
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 13959 Accepted Submission(s): 2516
Problem Description
Calculate A * B.
Input
Each line will contain two integers A and B. Process to end of file.
Note: the length of each integer will not exceed 50000.
Note: the length of each integer will not exceed 50000.
Output
For each case, output A * B in one line.
Sample Input
1210002
Sample Output
22000
Author
DOOM III
由于数字信号系统正在学FFT,正好来写写相关的问题。
FFT快速求解循环卷积,从而得到线性卷积,具体理论我将整理后再发。
先写个经典的大数相乘吧XD。
/** Author: ☆·aosaki(*’(OO)’*) niconiconi★ **/#pragma comment(linker, "/STACK:1024000000,1024000000")//#include<bits/stdc++.h>#include <iostream>#include <sstream>#include <cstdio>#include <cstring>#include <algorithm>#include <functional>#include <cmath>#include <vector>#include <queue>#include <map>#include <set>#include <list>#include <stack>//#include <tuple>#define mem(a) memset(a,0,sizeof(a))#define mem1(a) memset(a,-1,sizeof(a))#define lp(k,a) for(int k=1;k<=a;k++)#define lp0(k,a) for(int k=0;k<a;k++)#define lpn(k,n,a) for(int k=n;k<=a;k++)#define lpd(k,n,a) for(int k=n;k>=a;k--)#define sc(a) scanf("%d",&a)#define sc2(a,b) scanf("%d %d",&a,&b)#define lowbit(x) (x&(-x))#define ll long long#define pi pair<int,int>#define vi vector<int>#define PI acos(-1.0)#define pb(a) push_back(a)#define mp(a,b) make_pair(a,b)#define TT cout<<"*****"<<endl;#define TTT cout<<"********"<<endl;inline int gcd(int a,int b){ return a==0?b:gcd(b%a,a);}#define INF 1e9#define eps 1e-8#define mod 10007#define MAX 400044using namespace std;char s1[50010],s2[50010];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[200010],x2[200010];int sum[200010];int main(){ //freopen("in.txt","r",stdin); register int i; while(~scanf("%s%s",s1,s2)) { int len1=strlen(s1); int len2=strlen(s2); int l=1; while(l<len1*2 || l<len2*2) l<<=1; for(i=0;i<len1;i++) { x1[i].r=s1[len1-i-1]-'0'; x1[i].i=0.0; } for(;i<l;i++) x1[i].r=x1[i].i=0.0; for(i=0;i<len2;i++) { x2[i].r=s2[len2-i-1]-'0'; x2[i].i=0.0; } for(;i<l;i++) x2[i].r=x2[i].i=0.0; fft(x1,l,1); fft(x2,l,1); for(i=0;i<l;i++) x1[i]=x1[i]*x2[i]; fft(x1,l,-1); for(i=0;i<l;i++) sum[i]=x1[i].r+0.5; for(i=0;i<l;i++) { sum[i+1]+=sum[i]/10; sum[i]%=10; } l=len1+len2-1; while(sum[l]<=0 && l>0) l--; for(i=l;i>=0;i--) putchar(sum[i]+'0'); putchar('\n'); } return 0;}
0 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 FFT
- hdu 1402 A * B Problem Plus(FFT)
- [HDU]1402 A * B Problem Plus [FFT]
- hdu 1402 A * B Problem Plus(FFT)
- HDU 1042 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 + 大数相乘)
- Latent dirichlet allocation note
- 输出二叉树中随机两个结点的最小公共父结点
- C语言中printf直接打出2进制数是%什么?16进制是什么?
- 黑马程序员——IO流
- iOS之代码混淆
- HDU 1402 A * B Problem Plus FFT
- VB.NET 章鱼哥 如何在项目中使用外部文字格式
- 列表checkbox效果
- Binary Tree Level Order Traversal
- 黑马程序员——网络编程
- poj 2429 GCD & LCM Inverse miller_rabin素数判定和pollard_rho因数分解
- 动态规划之装配线调度问题
- Android中如何优雅地自定义一个View
- BZOJ1097【状压DP】