博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【HDU 1402】A * B Problem Plus(FFT)
阅读量:6967 次
发布时间:2019-06-27

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

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.

Output


For each case, output A * B in one line.

Sample Input

1210002

Sample Output

22000

题解


做卷积主要思想是,先把系数表达式转化为点值表达式,而点值表达式相乘的时间复杂度是\(O(n)\)的,唯一需要优化的是这个转化的过程,需要使用fft进行优化,时间负责度可以降为\(O(nlogn)\),具体算法思想参看

资料:

参考代码

#include 
#include
#include
#include
#include
#include
#include
#include
#define ll long long#define inf 1000000000#define PI acos(-1)#define mem(a,x) memset(a,x,sizeof(a))using namespace std;ll read(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}void Out(ll a){ if(a<0) putchar('-'),a=-a; if(a>=10) Out(a/10); putchar(a%10+'0');}const int N=200005;typedef complex
E;E a[N],b[N],A[N],c[N];char s1[N],s2[N];int sum[N],a1[N],a2[N],dig[N],rev[N];void FFT(E a[],int n,int flag){ E x,y; for(int i=0;i
>=1) dig[len++]=t&1; for(int j=0;j
0)l--; for(int i=l;i>=0;i--) putchar(sum[i]+'0'); putchar('\n'); } return 0;}

转载于:https://www.cnblogs.com/zsyacm666666/p/7204414.html

你可能感兴趣的文章
CPU 虚拟化
查看>>
circRNA 在人和小鼠脑组织中的表达
查看>>
新人替代旧人
查看>>
2步安装1个hive docker运行环境[centos7]
查看>>
Android Keystore 对称-非对称加密
查看>>
工作总结 获取html 标签 自定义属性值 根据html 自定义属性 获取 到标签...
查看>>
window.external的使用
查看>>
wait/waitpid函数与僵尸进程、fork 2 times
查看>>
iOS中Storyboard使用要点记录
查看>>
payload和formData有什么不同?
查看>>
【文件监控】之一:理解 ReadDirectoryChangesW part1
查看>>
Objective-C
查看>>
PyCharm搭建pyqt5开发环境
查看>>
微信小程序实战–集阅读与电影于一体的小程序项目(七)
查看>>
摄像机、投影、3D旋转、缩放
查看>>
给大家分享两款正在使用的ref“.NET研究”lector插件
查看>>
关于presentModalViewController的一点儿思考
查看>>
【128】Word中的VBA
查看>>
PowerCollections
查看>>
禁用gridview,listview回弹或下拉悬停
查看>>