HDU 1402 A * B Problem Plus FFT
题目连接:
http://acm.hdu.edu.cn/showproblem.php?pid=1402
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
1
2
1000
2
Sample Output
2
2000
Hint
题意
题解:
考虑变成系数的形式,显然就是两个的多项式乘法
然后转化成FFT,直接莽一波就完了。
代码
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>using namespace std;const int N = 500005;
const double pi = acos(-1.0);char s1[N],s2[N];
int len,res[N];struct Complex
{double r,i;Complex(double r=0,double i=0):r(r),i(i) {};Complex operator+(const Complex &rhs){return Complex(r + rhs.r,i + rhs.i);}Complex operator-(const Complex &rhs){return Complex(r - rhs.r,i - rhs.i);}Complex operator*(const Complex &rhs){return Complex(r*rhs.r - i*rhs.i,i*rhs.r + r*rhs.i);}
} va[N],vb[N];void rader(Complex F[],int len) //len = 2^M,reverse F[i] with F[j] j为i二进制反转
{int j = len >> 1;for(int i = 1;i < len - 1;++i){if(i < j) swap(F[i],F[j]); // reverseint k = len>>1;while(j>=k){j -= k;k >>= 1;}if(j < k) j += k;}
}void FFT(Complex F[],int len,int t)
{rader(F,len);for(int h=2;h<=len;h<<=1){Complex wn(cos(-t*2*pi/h),sin(-t*2*pi/h));for(int j=0;j<len;j+=h){Complex E(1,0); //旋转因子for(int k=j;k<j+h/2;++k){Complex u = F[k];Complex v = E*F[k+h/2];F[k] = u+v;F[k+h/2] = u-v;E=E*wn;}}}if(t==-1) //IDFTfor(int i=0;i<len;++i)F[i].r/=len;
}void Conv(Complex a[],Complex b[],int len) //求卷积
{FFT(a,len,1);FFT(b,len,1);for(int i=0;i<len;++i) a[i] = a[i]*b[i];FFT(a,len,-1);
}void init(char *s1,char *s2)
{int n1 = strlen(s1),n2 = strlen(s2);len = 1;while(len < 2*n1 || len < 2*n2) len <<= 1;int i;for(i=0;i<n1;++i){va[i].r = s1[n1-i-1]-'0';va[i].i = 0;}while(i<len){va[i].r = va[i].i = 0;++i;}for(i=0;i<n2;++i){vb[i].r = s2[n2-i-1]-'0';vb[i].i = 0;}while(i<len){vb[i].r = vb[i].i = 0;++i;}
}void gao()
{Conv(va,vb,len);memset(res,0,sizeof res);for(int i=0;i<len;++i){res[i]=va[i].r + 0.5;}for(int i=0;i<len;++i){res[i+1]+=res[i]/10;res[i]%=10;}int high = 0;for(int i=len-1;i>=0;--i){if(res[i]){high = i;break;}}for(int i=high;i>=0;--i) putchar('0'+res[i]);puts("");
}int main()
{while(scanf("%s %s",s1,s2)==2){init(s1,s2);gao();}return 0;
}
转载于:https://www.cnblogs.com/qscqesze/p/5379677.html
HDU 1402 A * B Problem Plus FFT相关推荐
- HDU 1402——A * B Problem Plus
题意: 给定a,b,求a*b. 思路: a,b的长度都为50000,直接模拟计算n*m肯定超时,可以用快速傅里叶变化计算,然后再把相应的系数化简出来. code: #include <iostr ...
- hdu 5008 Boring String Problem(后缀数组+rmq)
题目链接:hdu 5008 Boring String Problem 题意: 给你一个字符串,有q个询问,每次询问该字符串所有的子串中字典序第k小的是哪个串,输出位置,如果有多个位置,输出最靠左的那 ...
- HDU.1002 A + B Problem II
原题 HDU.1002 A + B Problem II 分类 杂题·大位整数运算 题意 计算从任意两个长度在1000以内的正整数的和. 输入/输出 要求与格式 输入内容 最开始一行开始输入样例数,对 ...
- HDU.1000 A + B Problem
前言 本人目前大二,目前正值新型肺炎疫情期间,空余时间与其在家里无所事事,倒不如每天刷上一两道算法题.写写解题报告总结总结. 所以每天都写至少一篇题解博客吧,同时也希望全国的疫情能快速消退,加油! 原 ...
- HDOJ 1016 HDU 1016 Prime Ring Problem ACM 1016 IN HDU
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1016 题目描述: Prime Ring Problem Time Limit: 4000/2000 ...
- hdu 3706 Second My Problem First 单调队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3706 Second My Problem First Time Limit: 12000/4000 M ...
- hdu 1002 A+B problem II
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002 题目分析:高精度问题,大整数相加. 由此题可见java相较于C/C++的优势,即丰富多彩的类以及 ...
- hdu 5443 The Water Problem 线段树
The Water Problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...
- HDU 4267 A Simple Problem with Integers
方法参考http://blog.csdn.net/acm_cxlove/article/details/7854526 题目:给出n个数,每次将一段区间内满足(i-l)%k==0 (r>=i&g ...
最新文章
- 压缩,解压文件|*.tar.gz/.tar.bz2 文件
- 【登录异常解决】Ubuntu 输入正确的密码后重新返回到登陆界面
- SQL编程:模糊表关联不求人 --- concat + like就能行
- 第二十七讲 微分方程组解的图像
- VS调试ReactOS源码环境搭建5 - VS通过串口连接虚拟机
- C语言煎饼排序Pancake sort算法(附完整源码)
- Scala具体解释---------Scala是什么?可伸展的语言!
- android handle 阻塞,Android全面解析之Handler机制:常见问题汇总
- 拜登政府冻结加密钱包规则以待审查 加密市场或迎来转机
- 数据从机房迁移到阿里ECS弹性云
- python生成100个随机数、写入文件后再读取显示内容_Python3 实现随机生成一组不重复数并按行写入文件...
- 力扣-204 计数质数
- JavaWeb初级篇-HttpPost使用教程
- python实现excel筛选功能并输出_学习用python筛选数据并导出excel表
- SpringBoot国际化失败的原因,切换中英文无效
- 浅谈nvme sata pci-e m.2,协议 总线 接口的关系。
- 【Java基础】Java IO编程:输入输出流、内存流、打印流、缓冲流BufferedReader、扫描流Scanner、序列化与反序列化
- 中国规模最大速度最快 伦敦车源信息是世界地铁发源地
- python调音_Linux实现远程控制ALSA调音台?!
- 从“平板之父”到连续创业者, Jerry Kaplan传奇来袭
热门文章
- [Redux/Mobx] 你有了解Rxjs是什么吗?它是做什么的?
- [Redux/Mobx] 在redux中,什么是store?
- 前端学习(3035):vue+element今日头条管理-关于问题的一个解析
- [html] html页面中如何实现gif图片重新播放?
- [软技能] 在前后端分离项目里,请说说前端传递的token的流程?
- [jQuery] jquery.extend与jquery.fn.extend的区别?
- [css] 为什么说对opacity进行动画要比box-shadow进行动画性能更好呢?
- [css] 举例说明background-repeat的新属性值:round和space的作用是什么?
- 前端学习(2844):ui另一种按需加载
- 工作235:splice