http://acm.hdu.edu.cn/showproblem.php?pid=1402

快速傅里叶变换优化的高精度乘法。

https://blog.csdn.net/ggn_2015/article/details/68922404 这个写的很详细了。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<vector>
#include<complex>
using namespace std;
#define LL long long
const int maxn=;
typedef complex< double >cd;
char s1[maxn]={},s2[maxn]={};
int ans[maxn]={};
int rev[maxn]={}; int s,bit;
cd a[maxn]={},b[maxn]={};
double Pi;
inline void getrev(){ for(int i=;i<s;i++)rev[i]=(rev[i>>]>>)|((i&)<<(bit-)); }
inline void fft(cd *c,int n,int dft){
for(int i=;i<=s;i++)if(rev[i]>i)swap(c[i],c[rev[i]]);
for(int step=;step<n;step<<=){
cd shu=exp(cd(,dft*Pi/step));
for(int i=;i<n;i+=step<<){
cd z=cd(,);
for(int j=i;j<i+step;j++){
cd x=c[j];cd y=c[j+step]*z;
c[j]=x+y; c[j+step]=x-y;
z*=shu;
}
}
}
if(dft==-)for(int i=;i<n;i++)c[i]/=n;
}
int main(){
cd cle(,);Pi=2.0*acos(0.0);
while(~scanf("%s%s",s1,s2)){
memset(rev,,sizeof(rev));
int l1=strlen(s1),l2=strlen(s2),n=l1+l2-;
bit=;s=; for(;s<n;++bit)s<<=;
getrev();
for(int i=;i<=s;i++){a[i]=cle;b[i]=cle;}
for(int i=;i<l1;i++)a[i]=(double)(s1[l1-i-]-'');
for(int i=;i<l2;i++)b[i]=(double)(s2[l2-i-]-'');
fft(a,s,);fft(b,s,);
for(int i=;i<s;i++)a[i]*=b[i];
fft(a,s,-);
memset(ans,,sizeof(ans));
for(int i=;i<s;i++){
ans[i]+=(int)(a[i].real()+0.5);
ans[i+]+=ans[i]/;
ans[i]%=;
}
int i;
for(i=l1+l2;!ans[i]&&i>;--i);
if(i==)printf("%d\n",ans[]);
else{
for(;i>=;--i)printf("%d",ans[i]);
printf("\n");
}
}
return ;
}

HDU 1402 A * B Problem Plus 快速傅里叶变换 FFT 多项式的更多相关文章

  1. HDU - 1402 A * B Problem Plus FFT裸题

    http://acm.hdu.edu.cn/showproblem.php?pid=1402 题意: 求$a*b$ 但是$a$和$b$的范围可以达到 $1e50000$ 题解: 显然...用字符串模拟 ...

  2. hdu 1402 A * B Problem Plus FFT

    /* hdu 1402 A * B Problem Plus FFT 这是我的第二道FFT的题 第一题是完全照着别人的代码敲出来的,也不明白是什么意思 这个代码是在前一题的基础上改的 做完这个题,我才 ...

  3. 快速傅里叶变换FFT

    多项式乘法 #include <cstdio> #include <cmath> #include <algorithm> #include <cstdlib ...

  4. [学习笔记] 多项式与快速傅里叶变换(FFT)基础

    引入 可能有不少OIer都知道FFT这个神奇的算法, 通过一系列玄学的变化就可以在 $O(nlog(n))$ 的总时间复杂度内计算出两个向量的卷积, 而代码量却非常小. 博主一年半前曾经因COGS的一 ...

  5. 快速傅里叶变换FFT& 数论变换NTT

    相关知识 时间域上的函数f(t)经过傅里叶变换(Fourier Transform)变成频率域上的F(w),也就是用一些不同频率正弦曲线的加 权叠加得到时间域上的信号. \[ F(\omega)=\m ...

  6. 多项式 之 快速傅里叶变换(FFT)/数论变换(NTT)/常用套路【入门】

    原文链接https://www.cnblogs.com/zhouzhendong/p/Fast-Fourier-Transform.html 多项式 之 快速傅里叶变换(FFT)/数论变换(NTT)/ ...

  7. 快速傅里叶变换(FFT)

    扯 去北京学习的时候才系统的学习了一下卷积,当时整理了这个笔记的大部分.后来就一直放着忘了写完.直到今天都腊月二十八了,才想起来还有个FFT的笔记没整完呢.整理完这个我就假装今年的任务全都over了吧 ...

  8. 快速傅里叶变换(FFT)_转载

    FFTFFT·Fast  Fourier  TransformationFast  Fourier  Transformation快速傅立叶变换 P3803 [模板]多项式乘法(FFT) 参考上文 首 ...

  9. 基于python的快速傅里叶变换FFT(二)

    基于python的快速傅里叶变换FFT(二)本文在上一篇博客的基础上进一步探究正弦函数及其FFT变换. 知识点  FFT变换,其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算法. ...

随机推荐

  1. vim基本技巧

    一.无插件vim使用 1.查看修改代码 1)光标移动 h j k l    前下上后 w b       词首.词尾 ^ $       句首.句尾 2)编辑 x d r y p a i o .   ...

  2. Spring RedisTemplate操作-List操作(4)

    @Autowired @Resource(name="redisTemplate") private RedisTemplate<String, String> rt; ...

  3. html5 canvas loading(这可怕的编辑器,自动把我的canvas转义了)---以前收藏的整理了一下

    /* super inefficient right now, could be improved */ var c = document.getElementById('canvasload'), ...

  4. 转:我是否该放弃VB.Net?

    我是否该放弃VB.Net呢?这个问题一次次的出现在我的脑海里,而且这种想法越来越强烈.放弃VB.Net至少能让我的生活变得轻松些.如果你是个C#程序员,那拷贝粘贴代码会很容易,因为可以找到的例子代码如 ...

  5. 问题:经典类的对象明明没有__class__属性,却可以调用。

    这个问题得深入python源码才能看. class a: pass aa =a() print dir(aa)#aa只有doc和module属性 print aa.__class__#__main__ ...

  6. parallelogram

    The parallelogram law in inner product spaces Vectors involved in the parallelogram law. In a normed ...

  7. [转]perf + 火焰图分析程序性能

    1.perf命令简要介绍 性能调优时,我们通常需要分析查找到程序百分比高的热点代码片段,这便需要使用 perf record 记录单个函数级别的统计信息,并使用 perf report 来显示统计结果 ...

  8. 20165230 ch02 课上测试

    题目一 1.参考附图代码,编写一个程序 "week0201学号.c",判断一下你的电脑是大端还是小端. 2.提交运行结果"学号XXXX的笔记本电脑是X端"的运行 ...

  9. Linux sleep命令

    Linux sleep命令可以用来将目前动作延迟一段时间. 使用权限:所有使用者. 语法 sleep [--help] [--version] number[smhd] 参数说明: --help : ...

  10. Linux下USB转串口的驱动【转】

    转自:http://www.linuxidc.com/Linux/2011-02/32218.htm Linux发行版自带usb to serial驱动,以模块方式编译驱动,在内核源代码目录下运行Ma ...