A * B Problem Plus

题目连接:

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相关推荐

  1. HDU 1402——A * B Problem Plus

    题意: 给定a,b,求a*b. 思路: a,b的长度都为50000,直接模拟计算n*m肯定超时,可以用快速傅里叶变化计算,然后再把相应的系数化简出来. code: #include <iostr ...

  2. hdu 5008 Boring String Problem(后缀数组+rmq)

    题目链接:hdu 5008 Boring String Problem 题意: 给你一个字符串,有q个询问,每次询问该字符串所有的子串中字典序第k小的是哪个串,输出位置,如果有多个位置,输出最靠左的那 ...

  3. HDU.1002 A + B Problem II

    原题 HDU.1002 A + B Problem II 分类 杂题·大位整数运算 题意 计算从任意两个长度在1000以内的正整数的和. 输入/输出 要求与格式 输入内容 最开始一行开始输入样例数,对 ...

  4. HDU.1000 A + B Problem

    前言 本人目前大二,目前正值新型肺炎疫情期间,空余时间与其在家里无所事事,倒不如每天刷上一两道算法题.写写解题报告总结总结. 所以每天都写至少一篇题解博客吧,同时也希望全国的疫情能快速消退,加油! 原 ...

  5. 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 ...

  6. hdu 3706 Second My Problem First 单调队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3706 Second My Problem First Time Limit: 12000/4000 M ...

  7. hdu 1002 A+B problem II

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002 题目分析:高精度问题,大整数相加. 由此题可见java相较于C/C++的优势,即丰富多彩的类以及 ...

  8. hdu 5443 The Water Problem 线段树

    The Water Problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  9. HDU 4267 A Simple Problem with Integers

    方法参考http://blog.csdn.net/acm_cxlove/article/details/7854526 题目:给出n个数,每次将一段区间内满足(i-l)%k==0 (r>=i&g ...

最新文章

  1. 压缩,解压文件|*.tar.gz/.tar.bz2 文件
  2. 【登录异常解决】Ubuntu 输入正确的密码后重新返回到登陆界面
  3. SQL编程:模糊表关联不求人 --- concat + like就能行
  4. 第二十七讲 微分方程组解的图像
  5. VS调试ReactOS源码环境搭建5 - VS通过串口连接虚拟机
  6. C语言煎饼排序Pancake sort算法(附完整源码)
  7. Scala具体解释---------Scala是什么?可伸展的语言!
  8. android handle 阻塞,Android全面解析之Handler机制:常见问题汇总
  9. 拜登政府冻结加密钱包规则以待审查 加密市场或迎来转机
  10. 数据从机房迁移到阿里ECS弹性云
  11. python生成100个随机数、写入文件后再读取显示内容_Python3 实现随机生成一组不重复数并按行写入文件...
  12. 力扣-204 计数质数
  13. JavaWeb初级篇-HttpPost使用教程
  14. python实现excel筛选功能并输出_学习用python筛选数据并导出excel表
  15. SpringBoot国际化失败的原因,切换中英文无效
  16. 浅谈nvme sata pci-e m.2,协议 总线 接口的关系。
  17. 【Java基础】Java IO编程:输入输出流、内存流、打印流、缓冲流BufferedReader、扫描流Scanner、序列化与反序列化
  18. 中国规模最大速度最快 伦敦车源信息是世界地铁发源地
  19. python调音_Linux实现远程控制ALSA调音台?!
  20. 从“平板之父”到连续创业者, Jerry Kaplan传奇来袭

热门文章

  1. [Redux/Mobx] 你有了解Rxjs是什么吗?它是做什么的?
  2. [Redux/Mobx] 在redux中,什么是store?
  3. 前端学习(3035):vue+element今日头条管理-关于问题的一个解析
  4. [html] html页面中如何实现gif图片重新播放?
  5. [软技能] 在前后端分离项目里,请说说前端传递的token的流程?
  6. [jQuery] jquery.extend与jquery.fn.extend的区别?
  7. [css] 为什么说对opacity进行动画要比box-shadow进行动画性能更好呢?
  8. [css] 举例说明background-repeat的新属性值:round和space的作用是什么?
  9. 前端学习(2844):ui另一种按需加载
  10. 工作235:splice