hdu 1402 A * B Problem Plus (FFT模板)
A * B Problem Plus
Note: the length of each integer will not exceed 50000.
2
1000
2
FFT的模板题。我们把数字的每一位看成i*(x^j),当我们把x取成10的时候我们就得到了这个大整数
- #include <bits/stdc++.h>
- using namespace std;
- const int maxn = +;
- const double pi = acos(-1.0);
- const double PI = acos(-1.0);
- #define fft FFT
- #define r real
- struct Complex
- {
- double r,i;
- Complex(double _r,double _i):r(_r),i(_i){}
- Complex(){}
- Complex operator +(const Complex &b)
- {
- return Complex(r+b.r,i+b.i);
- }
- Complex operator -(const Complex &b)
- {
- return Complex(r-b.r,i-b.i);
- }
- Complex operator *(const Complex &b)
- {
- return Complex(r*b.r-i*b.i,r*b.i+i*b.r);
- }
- };
- void change(Complex y[],int len)
- {
- int i,j,k;
- for(i = , j = len/;i < len-;i++)
- {
- if(i < j)swap(y[i],y[j]);
- k = len/;
- while( j >= k)
- {
- j -= k;
- k /= ;
- }
- if(j < k)j += k;
- }
- }
- void fft(Complex y[],int len,int on)
- {
- change(y,len);
- for(int h = ;h <= len;h <<= )
- {
- Complex wn(cos(-on**pi/h),sin(-on**pi/h));
- for(int j = ;j < len;j += h)
- {
- Complex w(,);
- for(int k = j;k < j+h/;k++)
- {
- Complex u = y[k];
- Complex t = w*y[k+h/];
- y[k] = u+t;
- y[k+h/] = u-t;
- w = w*wn;
- }
- }
- }
- if(on == -)
- for(int i = ;i < len;i++)
- y[i].r /= len;
- }
- char numA[maxn],numB[maxn];
- Complex a[maxn*],b[maxn*];
- int ans[maxn*];
- int main()
- {
- //freopen("de.txt","r",stdin);
- while (~scanf("%s",numA)){
- int lenA = strlen(numA);
- int sa = ;
- while ((<<sa)<lenA) sa++;
- scanf("%s",numB);
- int lenB = strlen(numB);
- int sb = ;
- while ((<<sb)<lenB) sb++;
- int len = (<<(max(sa,sb)+));
- for (int i=;i<len;++i){
- if (i<lenA) a[i] = Complex(numA[lenA-i-]-'',);
- else a[i] = Complex(,);
- if (i<lenB) b[i] = Complex(numB[lenB-i-]-'',);
- else b[i] = Complex(,);
- }
- fft(a,len,);
- fft(b,len,);//将a b 换成点值表达
- for (int i=;i<len;++i)
- a[i] = a[i]*b[i];//点值相乘
- fft(a,len,-);//DFT逆变换回去
- for (int i=;i<len;++i)
- ans[i] = (int)(a[i].r+0.5);//误差处理
- for (int i=;i<len-;++i){
- ans[i+]+=ans[i]/;//处理进位问题
- ans[i]%=;
- }
- bool flag = ;//调整输出格式处理前导零问题
- for (int i=len-;i>=;--i){
- if (ans[i]) printf("%d",ans[i]),flag=;
- else if (flag||i==) printf("");
- }
- printf("\n");
- }
- return ;
- }
hdu 1402 A * B Problem Plus (FFT模板)的更多相关文章
- HDU 1402 A * B Problem Plus (FFT模板题)
FFT模板题,求A*B. 用次FFT模板需要注意的是,N应为2的幂次,不然二进制平摊反转置换会出现死循环. 取出结果值时注意精度,要加上eps才能A. #include <cstdio> ...
- hdu 1402 A * B Problem Plus FFT
/* hdu 1402 A * B Problem Plus FFT 这是我的第二道FFT的题 第一题是完全照着别人的代码敲出来的,也不明白是什么意思 这个代码是在前一题的基础上改的 做完这个题,我才 ...
- HDU - 1402 A * B Problem Plus FFT裸题
http://acm.hdu.edu.cn/showproblem.php?pid=1402 题意: 求$a*b$ 但是$a$和$b$的范围可以达到 $1e50000$ 题解: 显然...用字符串模拟 ...
- HDU 1402 A * B Problem Plus (FFT求高精度乘法)
A * B Problem Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU - 1402 A * B Problem Plus (FFT实现高精度乘法)
题意:计算A*B,A,B均为长度小于50000的整数. 这是FFT在大整数相乘中的一个应用,我本来想用NTT做的,但NTT由于取模很可能取炸,所以base必须设得很小,而且效率也比不上FFT. A和B ...
- P1919 【模板】A*B Problem升级版 /// FFT模板
题目大意: 给定l,输入两个位数为l的数A B 输出两者的乘积 FFT讲解 这个讲解蛮好的 就是讲解里面贴的模板是错误的 struct cpx { double x,y; cpx(double _x= ...
- HDU 1402 A * B Problem Plus 快速傅里叶变换 FFT 多项式
http://acm.hdu.edu.cn/showproblem.php?pid=1402 快速傅里叶变换优化的高精度乘法. https://blog.csdn.net/ggn_2015/artic ...
- HDU 1402 A * B Problem Plus(FFT)
Problem Description Calculate A * B. Input Each line will contain two integers A and B. Process to ...
- FFT(快速傅立叶变换):HDU 1402 A * B Problem Plus
Calculate A * B. Input Each line will contain two integers A and B. Process to end of file. Note: th ...
随机推荐
- git 切换分支开发并合并提交到远程仓库
- SpringMVC的 几个注解
1.@RequestMapping: 是一个用来处理请求地址映射的注解,可用于类或方法上. 1):用在类上:是父路径. 2):用在方法上:是子路径. @Controller //设置想要跳转的父路径 ...
- R中unlist函数的使用
买的书里面实例讲的不清不楚,所以看帮助文档了 用法:unlist(x, recursive = TRUE, use.names = TRUE) 帮助文档讲x可以是向量或者列表,如果是向量,则原样返回, ...
- [HDU3117]Fibonacci Numbers
题目:Fibonacci Numbers 链接:http://acm.hdu.edu.cn/showproblem.php?pid=3117 分析: 1)后四位可以用矩阵快速幂解决.$T= \left ...
- php 统计每天价格,货币种类,汇总得算法和数据处理 (后端和前段实现自动统计价格和币种类型)
整体实现逻辑介绍 1.对查询数据做一个总体查询,需要根据查询自己主要业务逻辑数据. 2.对总体查询数据和时间和币种类型做三部分数据处理. 3.总体查询数据按照币种和日期组装二维数据对应得键值是价格. ...
- JSP 获取访问者真正的IP地址
request.getRemoteAddr(),这种方法在大部分情况下都是有效的,但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了, 如果使用了反向代理软件,用re ...
- nginx中如何设置gzip(总结)
nginx中如何设置gzip(总结) 一.总结 一句话总结: 真正用的时候,花一小点时间把gzip的各个字段的意思都看一下,会节约大量时间 直接gzip on:在nginx的配置中就可以开启gzip压 ...
- 查看IOS-app证书到期时间
参照: iOS企业版证书到期 https://www.jianshu.com/p/44b0dc46ef37 如果不能十分确定每一个打出来的ipa的有效期(过期时间),而又需要关注它具体什么时候需要强制 ...
- 建议66,67 注意Arrays.asList()的使用
代码 public static void main(String[] args) { int[]data = {1,2,3,4,5}; List list = Arrays.asList(data) ...
- 配送单MYSQL ,一点都不机智
这是配送单制作,后面修改了下表 . 写的太乱. 不过也不想去修改了. 放在这里了.反正还能用. 不然就坑爹了. 以后写好一点. 这都是些神马, 太难受了. /* 配送单制作,缺少商品规格,以及库存查询 ...