博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P1919 【模板】A*B Problem升级版(FFT)
阅读量:4688 次
发布时间:2019-06-09

本文共 1490 字,大约阅读时间需要 4 分钟。

 

话说FFT该不会真的只能用来做这种板子吧……

我们把两个数字的每一位都看作多项式的系数

然后这就是一个多项式乘法

上FFT就好了

然后去掉前导零

(然而连FFT的板子都背不来orz,而且空间又开小了……)

1 //minamoto 2 #include
3 #include
4 #include
5 using namespace std; 6 char sr[1<<21],z[20];int C=-1,Z; 7 inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;} 8 inline void print(int x){ 9 if(C>1<<20)Ot();if(x<0)sr[++C]=45,x=-x;10 while(z[++Z]=x%10+48,x/=10);11 while(sr[++C]=z[Z],--Z);12 }13 const int N=2e5+5;const double Pi=acos(-1.0);14 int r[N],l=0,limit=1,c[N],n;char sa[N],sb[N];15 struct complex{16 double x,y;17 complex(double xx=0,double yy=0){x=xx,y=yy;}18 inline complex operator +(complex b){
return complex(x+b.x,y+b.y);}19 inline complex operator -(complex b){
return complex(x-b.x,y-b.y);}20 inline complex operator *(complex b){
return complex(x*b.x-y*b.y,x*b.y+y*b.x);}21 }a[N],b[N];22 void FFT(complex *a,int type){23 for(int i=0;i
>1]>>1)|((i&1)<<(l-1));43 FFT(a,1),FFT(b,1);44 for(int i=0;i<=limit;++i) a[i]=a[i]*b[i];45 FFT(a,-1);46 for(int i=0;i<=limit;++i) c[i]=(int)(a[i].x/limit+0.5);47 for(int i=0;i<=limit;++i)48 if(c[i]>9){49 c[i+1]+=c[i]/10,c[i]%=10;50 if(i+1>limit) ++limit;51 }52 for(int i=limit;i>=0;--i)53 if(c[i]==0) --limit;54 else break;55 for(int i=limit;i>=0;--i) print(c[i]);56 Ot();57 return 0;58 }

 

转载于:https://www.cnblogs.com/bztMinamoto/p/9742468.html

你可能感兴趣的文章
CentOs 设置静态IP 方法(转)
查看>>
九. 常用类库、向量与哈希2.Object类
查看>>
[Java5新特性]Annotation注解
查看>>
冒泡排序
查看>>
多线程之进度条
查看>>
程序启动的完整过程
查看>>
java资料——哈希表(散列表)(转)
查看>>
反射,invoke()
查看>>
iServer6R使用WMTS自定义比例尺出图
查看>>
pinyin4j的使用
查看>>
Android_ 重写系统Crash处理类,保存Crash信息到SD卡 和 完美退出程序的方法
查看>>
tcpcopy用法
查看>>
34个加速页面载入速度的技巧
查看>>
MAC Objective-C 开发经典书籍推荐
查看>>
OSGi bundle之间互相通信的方法
查看>>
C++ 沉思录——Chap8:一个面向对象程序范例
查看>>
.NET 的编码
查看>>
数据存储——手机内部文件存储
查看>>
HDU 2586 LCA
查看>>
linux安装openldap步骤
查看>>