[hdu1402]大数乘法(FFT模板)
题意:大数乘法
思路:FFT模板
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 
77 
78 
79 
80 
81 
82 
83 
84 
85 
86 
87 
88 
89 
90 
91 
92 
93 
94 
95 
96 
97 
98 
99 
100 
101 
102 
103 
104 
105 
106 
107 
108 
109 
110 
111 
112 
113 
114 
115 
116 
117 
118 
119 
120 
121 
122 
123 
124 
125 
126 
127 
128 
129 
130 
131 
132 
133 
134 
135 
136 
137 
138 
139 
140 
141 
142 
143 
 | 
/* ******************************************************************************** */#include <iostream>                                                                 //#include <cstdio>                                                                   //#include <cmath>                                                                    //#include <cstdlib>                                                                  //#include <cstring>                                                                  //#include <vector>                                                                   //#include <ctime>                                                                    //#include <deque>                                                                    //#include <queue>                                                                    //#include <algorithm>                                                                //#include <map>                                                                      //#include <cmath>                                                                    //using namespace std;                                                                //                                                                                    //#define pb push_back                                                                //#define mp make_pair                                                                //#define X first                                                                     //#define Y second                                                                    //#define all(a) (a).begin(), (a).end()                                               //#define foreach(a, i) for (typeof(a.begin()) i = a.begin(); i != a.end(); ++ i)     //#define foreach(a, n, i) for(typeof(*a) *i = a; i < a + n; i ++)                    //#define fillchar(a, x) memset(a, x, sizeof(a))                                      //                                                                                    //void RI(vector<int>&a,int n){a.resize(n);for(int i=0;i<n;i++)scanf("%d",&a[i]);}    //void RI(){}void RI(int&X){scanf("%d",&X);}template<typename...R>                    //void RI(int&f,R&...r){RI(f);RI(r...);}void RI(int*p,int*q){int d=p<q?1:-1;          //while(p!=q){scanf("%d",p);p+=d;}}void print(){cout<<endl;}template<typename T>      //void print(const T t){cout<<t<<endl;}template<typename F,typename...R>              //void print(const F f,const R...r){cout<<f<<", ";print(r...);}template<typename T>   //void print(T*p, T*q){int d=p<q?1:-1;while(p!=q){cout<<*p<<", ";p+=d;}cout<<endl;}   //                                                                                    //typedef pair<int, int> pii;                                                         //typedef long long ll;                                                               //typedef unsigned long long ull;                                                     //                                                                                    //template<typename T>bool umax(T&a, const T&b){return b>a?false:(a=b,true);}         //template<typename T>bool umin(T&a, const T&b){return b<a?false:(a=b,true);}         //template<typename T>                                                                //void V2A(T a[],const vector<T>&b){for(int i=0;i<b.size();i++)a[i]=b[i];}            //template<typename T>                                                                //void A2V(vector<T>&a,const T b[]){for(int i=0;i<a.size();i++)a[i]=b[i];}            //                                                                                    //const double PI = acos(-1);                                                         //                                                                                    ///* -------------------------------------------------------------------------------- */namespace FFT {    const static int maxn = 5e4 + 7;    #define L(x) (1 << (x))    double ax[maxn << 2], ay[maxn << 2], bx[maxn << 2], by[maxn << 2];//需要四倍空间    int revv(int x, int bits) {        int ret = 0;        for (int i = 0; i < bits; i++) {            ret <<= 1;            ret |= x & 1;            x >>= 1;        }        return ret;    }    void fft(double * a, double * b, int n, bool rev) {        int bits = 0;        while (1 << bits < n) ++bits;        for (int i = 0; i < n; i++) {            int j = revv(i, bits);            if (i < j)                swap(a[i], a[j]), swap(b[i], b[j]);        }        for (int len = 2; len <= n; len <<= 1) {            int half = len >> 1;            double wmx = cos(2 * PI / len), wmy = sin(2 * PI / len);            if (rev) wmy = -wmy;            for (int i = 0; i < n; i += len) {                double wx = 1, wy = 0;                for (int j = 0; j < half; j++) {                    double cx = a[i + j], cy = b[i + j];                    double dx = a[i + j + half], dy = b[i + j + half];                    double ex = dx * wx - dy * wy, ey = dx * wy + dy * wx;                    a[i + j] = cx + ex, b[i + j] = cy + ey;                    a[i + j + half] = cx - ex, b[i + j + half] = cy - ey;                    double wnx = wx * wmx - wy * wmy, wny = wx * wmy + wy * wmx;                    wx = wnx, wy = wny;                }            }        }        if (rev) {            for (int i = 0; i < n; i++)                a[i] /= n, b[i] /= n;        }    }    int solve(int a[], int na, int b[], int nb, int ans[]) {        int len = max(na, nb), ln;        for(ln = 0; L(ln) < len; ++ln);        len = L(++ln);        for (int i = 0; i < len ; ++i) {            if (i >= na) ax[i] = 0, ay[i] = 0;            else ax[i] = a[i], ay[i] = 0;        }        fft(ax, ay, len, 0);        for (int i = 0; i < len; ++i) {            if (i >= nb) bx[i] = 0, by[i] = 0;            else bx[i] = b[i], by[i] = 0;        }        fft(bx, by, len, 0);        for (int i = 0; i < len; ++i) {            double cx = ax[i] * bx[i] - ay[i] * by[i];            double cy = ax[i] * by[i] + ay[i] * bx[i];            ax[i] = cx, ay[i] = cy;        }        fft(ax, ay, len, 1);        for (int i = 0; i < len; ++i)            ans[i] = (int)(ax[i] + 0.5);        return len;    }    #undef L(x)}const int maxn = 5e4 + 7;char s1[maxn], s2[maxn];int x[maxn], y[maxn], ans[maxn << 2];int main() {#ifndef ONLINE_JUDGE    freopen("in.txt", "r", stdin);#endif // ONLINE_JUDGE    while (~scanf("%s", s1)) {        scanf("%s", s2);        int len1 = strlen(s1), len2 = strlen(s2);        for (int i = 0; i < len1; i ++) x[i] = s1[len1 - i - 1] - '0';        for (int i = 0; i < len2; i ++) y[i] = s2[len2 - i - 1] - '0';        fillchar(ans, 0);        int len = FFT::solve(x, len1, y, len2, ans), i;        for (i = 0; i < len || ans[i] >= 10; i ++) {            ans[i + 1] += ans[i] / 10;            ans[i] %= 10;        }        len = i;        while (ans[len] <= 0 && len) len --;        for (int i = len; i >= 0; i --) putchar(ans[i] + '0');        puts("");    }    return 0;}/* ******************************************************************************** */ | 
[hdu1402]大数乘法(FFT模板)的更多相关文章
- UOJ 34 多项式乘法 FFT 模板
		
这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入格式 第一行两个整数 nn 和 mm,分别表示两个多项式的次数. 第二行 n+1n+1 个整数,表示第一个多项式的 00 到 nn 次项 ...
 - HDU 1402 大数乘法  FFT、NTT
		
A * B Problem Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
 - 51nod 1027大数乘法
		
题目链接:51nod 1027大数乘法 直接模板了. #include<cstdio> #include<cstring> using namespace std; ; ; ; ...
 - hdu1402(大数a*b&fft模板)
		
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1402 题意: 给出两个长度1e5以内的大数a, b, 输出 a * b. 思路: fft模板 详情参 ...
 - ACM学习历程—51NOD1028 大数乘法V2(FFT)
		
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1028 题目大意就是求两个大数的乘法. 但是用普通的大数乘法,这 ...
 - FFT模板(多项式乘法)
		
FFT模板(多项式乘法) 标签: FFT 扯淡 一晚上都用来捣鼓这个东西了...... 这里贴一位神犇的博客,我认为讲的比较清楚了.(刚好适合我这种复数都没学的) http://blog.csdn.n ...
 - HDU 1402 FFT 大数乘法
		
$A * B$ FFT模板题,找到了一个看起来很清爽的模板 /** @Date : 2017-09-19 22:12:08 * @FileName: HDU 1402 FFT 大整数乘法.cpp * ...
 - 1028 大数乘法 V2(FFT or py)
		
1028 大数乘法 V2 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B ...
 - hdu_1042(模拟大数乘法)
		
计算n! #include<cstring> #include<cstdio> using namespace std; ]; int main() { int n; whil ...
 
随机推荐
- overload 与override的区别
			
Override 是重写: 方法名称.参数个数,类型,顺序,返回值类型都是必须和父类方法一致的.它的关系是父子关系Overload 是重载: 方法名称不变,其余的都是可以变更的.它的关系是同一个类 ...
 - 关于JS垃圾回收机制
			
一.垃圾回收机制的必要性 由于字符串.对象和数组没有固定大小,所以当它们的大小已知时,才能对它们进行动态的存储分配.JavaScript程序每次创建字符串.数组或对象时,解释器都必须分配内存来存储那个 ...
 - 谈谈MySQL的索引
			
目录 索引 前言 是什么 B树 B+树 B树和B+树结构上异同 有什么用 怎么用 索引 前言 总所周知,数据库查询是数据库的最主要功能之一.我们都希望查询数据的速度能尽可能的快.而支撑这一快速的背后就 ...
 - linux常用命令--打包和压缩文件
			
bunzip2 file1.bz2 解压一个叫做 'file1.bz2'的文件 bzip2 file1 压缩一个叫做 'file1' 的文件 gunzip file1.gz 解压一个叫做 'file1 ...
 - 全网最全最细的jmeter接口测试教程以及接口测试流程详解
			
一.Jmeter简介  Jmeter是由Apache公司开发的一个纯Java的开源项目,即可以用于做接口测试也可以用于做性能测试. Jmeter具备高移植性,可以实现跨平台运行. Jmeter可以实 ...
 - [PHP][thinkphp5] 学习二:路由、配置调用、常量定义调用
			
路由: 其实TP5就是一个集多家框架所长而成的,感觉失去了自己的特色!路由这块呢类似于laravel框架!废话不说直接上码! 路由配置,类似laravel,就在route.php文件里配置路由(文件所 ...
 - 使用宝塔面板部署tp5网站
			
来源:https://www.cnblogs.com/e0yu/p/9102902.html 遇到一个问题,就是当thinkphp5部署在宝塔面板上,会出现这个问题: 参考解决办法: http://w ...
 - 非阻塞算法(Lock-Free)的实现
			
目录 非阻塞的栈 非阻塞的链表 非阻塞算法(Lock-Free)的实现 上篇文章我们讲到了使用锁会带来的各种缺点,本文将会讲解如何使用非阻塞算法.非阻塞算法一般会使用CAS来协调线程的操作. 虽然非阻 ...
 - 无法打开到SQL Server的连接 (Microsoft SQL Server, 错误:53) .
			
标题: 连接到服务器 ------------------------------ 无法连接到 MSSQLSERVER. ------------------------------ 其他信息: 在与 ...
 - 《SQL初学者指南》——第1章 关系型数据库和SQL
			
第1章 关系型数据库和SQL SQL初学者指南在本章中,我们将介绍一些背景知识,以便于你能够很快地上手,能在后续的章节中编写SQL语句.本章有两个主题.首先是对本书所涉及到的数据库做一个概述,并且介绍 ...