51nod 1028 大数乘法 V2 【FFT模板题】
模板题。。
#include<bits/stdc++.h>
using namespace std;
typedef int LL;
typedef double db;
namespace FFT //使用前需要用 fft_init()函数 初始化
{
<<;
.14159265358979323846264338327950288L;
struct cp
{
db a,b;
cp(,)
{
a=a_,b=b_;
}
cp operator +(const cp&rhs)const
{
return cp(a+rhs.a,b+rhs.b);
}
cp operator -(const cp&rhs)const
{
return cp(a-rhs.a,b-rhs.b);
}
cp operator *(const cp&rhs)const
{
return cp(a*rhs.a-b*rhs.b,a*rhs.b+b*rhs.a);
}
cp operator !()const
{
return cp(a,-b);
}
}nw[FFT_MAXN+],f[FFT_MAXN],g[FFT_MAXN],t[FFT_MAXN]; //a<->f,b<->g,t<->c
int bitrev[FFT_MAXN];
void fft_init() //初始化 nw[],bitrev[]
{
;<<L)!=FFT_MAXN) L++;
;i<FFT_MAXN;i++) bitrev[i]=bitrev[i>>]>>|((i&)<<(L-));
;i<=FFT_MAXN;i++) nw[i]=cp((db)cosl(*pi/FFT_MAXN*i),(db)sinl(*pi/FFT_MAXN*i));
}
// n已保证是2的整数次幂
// flag=1:DFT | flag=-1: IDFT
)
{
;<<d)*n!=FFT_MAXN) d++;
;i<n;i++) if(i<(bitrev[i]>>d))
swap(a[i],a[bitrev[i]>>d]); // NOTICE!
;l<=n;l<<=)
{
int del=FFT_MAXN/l*flag; // 决定 wn是在复平面是顺时针还是逆时针变化,以及变化间距
;i<n;i+=l) // ?????????????????
{
cp *le=a+i,*ri=a+i+(l>>); // ?????????????????
cp *w=flag==? nw:nw+FFT_MAXN; // 确定wn的起点
;k<(l>>);k++)
{
cp ne=*ri * *w;
*ri=*le-ne,*le=*le+ne;
le++,ri++,w+=del;
}
}
}
) ;i<n;i++) a[i].a/=n,a[i].b/=n;
}
// convo(a,n,b,m,c) a[0..n]*b[0..m] -> c[0..n+m]
void convo(LL *a,int n,LL *b,int m,LL *c)
{//if(n<=100 && m<=100 || min(n,m)<=5) 标程用了直接暴力的方式,或许可以更快
;; // N+1是c扩展后的长度
;i<N;i++) // 扩展 a[],b[] ,存入f[],g[] ,以0填充新空间
{
f[i]=cp((db)(i<=n? a[i]:),);
g[i]=cp((db)(i<=m? b[i]:),);
}
dft(f,N),dft(g,N);
;i<N;i++) // 频域求积
t[i]=f[i]*g[i];
dft(t,N,-);
;i<=n+m;i++) c[i]=LL(t[i].a+0.5);
}
}
<<|],s2[<<|],s3[<<|];
LL a[<<|],b[<<|],c[<<|];
int main()
{
FFT::fft_init();
while(~scanf("%s%s",s1,s2))
{
memset(s3,,sizeof(s3));
,m=strlen(s2)-;
;i<=n;i++) a[i]=s1[i]-';
;i<=m;i++) b[i]=s2[i]-';
FFT::convo(a,n,b,m,c);
c[n+m+]=;
;i<n+m-i;i++) swap(c[i],c[n+m-i]);
;i<=n+m;i++)
{
c[i+]+=c[i]/;
c[i]%=;
}
;
&&len>) len--;
;i--) s3[len-i]=c[i]+';
s3[len+]=;
puts(s3);
}
}
51nod 1028 大数乘法 V2 【FFT模板题】的更多相关文章
- 1028 大数乘法 V2(FFT or py)
1028 大数乘法 V2 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B ...
- FFT/NTT [51Nod 1028] 大数乘法 V2
题目链接:51Nod 传送门 没压位,效率会低一点 1.FFT #include <cstdio> #include <cstring> #include <algori ...
- 51Nod 1028 大数乘法 V2
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1028 分析: FFT/NTT板子题... 代码: NTT板子: #inc ...
- 51 Nod 1028 大数乘法 V2【Java大数乱搞】
1028 大数乘法 V2 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B (A ...
- UOJ 34: 多项式乘法(FFT模板题)
关于FFT 这个博客的讲解超级棒 http://blog.miskcoo.com/2015/04/polynomial-multiplication-and-fast-fourier-transfor ...
- 51nod 1027大数乘法
题目链接:51nod 1027大数乘法 直接模板了. #include<cstdio> #include<cstring> using namespace std; ; ; ; ...
- HDU 1402 A * B Problem Plus (FFT模板题)
FFT模板题,求A*B. 用次FFT模板需要注意的是,N应为2的幂次,不然二进制平摊反转置换会出现死循环. 取出结果值时注意精度,要加上eps才能A. #include <cstdio> ...
- ACM学习历程—51NOD1028 大数乘法V2(FFT)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1028 题目大意就是求两个大数的乘法. 但是用普通的大数乘法,这 ...
- 51NOD 1027 大数乘法
1027 大数乘法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B (A,B ...
随机推荐
- Linux下查看分区内目录及文件占用空间容量
转载linux下使用 du查看某个文件或目录占用磁盘空间的大小 du -ah --max-depth=1 这个是我想要的结果 a显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘 ...
- ORACLE DG 库参数db_file_name_convert和log_file_name_convert的作用
https://www.cnblogs.com/xqzt/p/5089826.html ORACLE DG 库参数db_file_name_convert和log_file_name_convert的 ...
- 织梦自定义表单导出为excel功能
1.首先在后台修改/dede/templets/diy_main.htm <a href="../plus/diy.php?action=daochu&diyid={dede: ...
- 《JavaScript 高级程序设计》
第 3 章 基本概念 3.5.2 位操作符 ECMAScript 中所有数值都是以 IEEE-754 64 位格式存储,但位操作符并不直接操作 64 位的值.而是先将 64 位的值转换成 32 位的整 ...
- Chromely
Chromely Chromely is a lightweight alternative to Electron.NET, Electron for .NET/.NET Core develope ...
- 修改属性item1(1变化)
给imgList1,7,12,16添加数据 数据层data:{imgList1:[],imgList7:[],imgList12:[],imgList16:[],} 处理层let _this=this ...
- python程序的模块与包
python的程序是由模块组成的,一个python文件就是一个模块,而模块一般由代码,函数,或者类组成.创建baiduHq.py模块(文件),在该模块中编写变量,函数,类,来说明在一个模块中,变量的输 ...
- MethodBase.GetCurrentMethod 方法
如果当前正在执行的方法定义泛型类型上MethodInfo返回GetCurrentMethod通过泛型类型定义 (即,MethodInfo.ContainsGenericParameters返回true ...
- SpringBoot 使用JPA+MySQL+Thymeleaf 总结 一
SpringBoot 使用JPA+MySQL+Thymeleaf 总结 一 SpringBoot 使用JPA+MySQL+Thymeleaf 总结 二 pom引用 <?xml version=& ...
- 浅谈格雷码(Grey Code)在信息学竞赛中的应用
1.格雷码的概念 1.性质 格雷码(Grey Code),又叫循环二进制码或反射二进制码,是一种编码方式,它的基本特点是任意两个相邻的格雷码只有一位二进制数不同. 常用的二进制数与格雷码间的转换关系如 ...