dft + fft(模板)

dft(多项式相乘模板)

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>using namespace std;const double pi = acos(-1.0);const int N = 3e6 + 10;struct Complex {double r, i;Complex(double _r = 0, double _i = 0) : r(_r), i(_i) {}
}a[N], b[N];Complex operator + (const Complex & a, const Complex & b) {return Complex(a.r + b.r, a.i + b.i);
}Complex operator - (const Complex & a, const Complex & b) {return Complex(a.r - b.r, a.i - b.i);
}Complex operator * (const Complex & a, const Complex & b) {return Complex(a.r * b.r - a.i * b.i, a.r * b.i + a.i * b.r);
}int n, m;void dft(Complex *f, int lim, int rev) {if(!lim) return ;Complex a1[lim], a2[lim];for(int i = 0; i < lim; i++) {a1[i] = f[i << 1], a2[i] = f[i << 1 | 1];}dft(a1, lim >> 1, rev);dft(a2, lim >> 1, rev);Complex wn = Complex(cos(pi / lim), rev * sin(pi / lim)), w = Complex(1, 0);for(int i = 0; i < lim; i++, w = w * wn) {f[i] = a1[i] + w * a2[i];f[i + lim] = a1[i] - w * a2[i];}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);scanf("%d %d", &n, &m);for(int i = 0; i <= n; i++) {scanf("%lf", &a[i].r);}for(int i = 0; i <= m; i++) {scanf("%lf", &b[i].r);}int lim = 1;while(lim <= n + m) lim <<= 1;dft(a, lim >> 1, 1);//dftdft(b, lim >> 1, 1);//dftfor(int i = 0; i < lim; i++) {a[i] = a[i] * b[i];}dft(a, lim >> 1, -1);//idftfor(int i = 0; i <= n + m; i++) {printf("%d%c", int(a[i].r / lim + 0.5), i == n + m ? '\n' : ' ');}return 0;
}

fft(大数乘法模板)

/*Author : lifehappy
*/
#include <bits/stdc++.h>using namespace std;const double pi = acos(-1.0);const int N = 5e6 + 10;struct Complex {double r, i;Complex(double _r = 0, double _i = 0) : r(_r), i(_i) {}}a[N], b[N];Complex operator + (const Complex & a, const Complex & b) {return Complex(a.r + b.r, a.i + b.i);
}Complex operator - (const Complex & a, const Complex & b) {return Complex(a.r - b.r, a.i - b.i);
}Complex operator * (const Complex & a, const Complex & b) {return Complex(a.r * b.r - a.i * b.i, a.r * b.i + a.i * b.r);
}char str1[N], str2[N];int r[N], ans[N];void fft(Complex * f, int lim, int rev) {for(int i = 0; i < lim; i++) {if(r[i] < i) {swap(f[i], f[r[i]]);}}for(int i = 1; i < lim; i <<= 1) {Complex wn = Complex(cos(pi / i), rev * sin(pi / i));for(int p = i << 1, j = 0; j < lim; j += p) {Complex w = Complex(1, 0);for(int k = 0; k < i; k++, w = w * wn) {Complex x = f[j + k], y = w * f[i + j + k];f[j + k] = x + y, f[i + j + k] = x - y;}}}if(rev == -1) {for(int i = 0; i < lim; i++) {f[i].r /= lim;}}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int n, m, lim;while(scanf("%s %s", str1, str2) != EOF) {n = strlen(str1), m = strlen(str2);for(int i = 0; i < n; i++) {a[i] = Complex(str1[n - i - 1] - '0', 0);}for(int i = 0; i < m; i++) {b[i] = Complex(str2[m - i - 1] - '0', 0);}lim = 1;while(lim  < (n << 1) || lim < (m << 1)) lim <<= 1;for(int i = 0; i < lim; ++i) {r[i] = (i & 1) * (lim >> 1) + (r[i >> 1] >> 1);}for(int i = n; i < lim; i++) {a[i] = Complex(0, 0);}for(int i = m; i < lim; i++) {b[i] = Complex(0, 0);}fft(a, lim, 1);fft(b, lim, 1);for(int i = 0; i < lim; i++) {a[i] = a[i] * b[i];}fft(a, lim, -1);for(int i = 0; i < lim; i++){ans[i] = int(a[i].r + 0.5);}for(int i = 0; i < lim; i++){ans[i + 1] += ans[i] / 10;ans[i] %= 10;}lim = n + m - 1;while(ans[lim] <= 0 && lim > 0) lim--;for(int i = lim; i >= 0; i--){printf("%d", ans[i]);}printf("\n");}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P4245 【模板】任意模数多项式乘法

P4245 【模板】任意模数多项式乘法 https://www.luogu.com.cn/blog/AzusaCat/solution-p4245 首先这类问题指的是对于一个非NTT模数&#xff0c;我们如何计算多项式乘法&#xff0c;对于NTT不容易找到单位根&#xff0c;对于FFT又会爆精度。 方法1&#xff1a;三模数NTT 寻找…

2019-02-22-算法-进化

题目描述&#xff1a; 给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2: 输入: "bbbbb" 输出: 1 …

TomatoLog-1.1.0实现ILoggerFactory

TomatoLogTomatoLog 是一个基于 .NETCore 平台的产品。The TomatoLog 是一个中间件&#xff0c;包含客户端、服务端&#xff0c;非常容易使用和部署。客户端实现了ILoggerFactory&#xff0c;使用服务注入成功后即可使用&#xff0c;对业务入侵非常小&#xff0c;也支持通过客户…

HDU 4609 3-idiots(FFT)

3-idiots 思路 多项式卷积的经典应用了&#xff1a; 看样例一: 4 1 3 3 4我们用多项式系数表示得到一个与aia_iai​有关的多项式&#xff1a;010210\ 1\ 0\ 2\ 10 1 0 2 1&#xff0c; 也就说明原序列有0个1&#xff0c;1个1&#xff0c;0个2&#xff0c;2个3&#xff0c;…

P5488 差分与前缀和(多项式/生成函数)

P5488 差分与前缀和 对于这道题需要我们快速对一个数列求解前缀和和差分&#xff0c;那么我们利用生成函数的知识&#xff0c;就可以知道实际上等价于乘一个多项式&#xff0c;然后我们就有了一个ln和exp的方法&#xff0c;然后比较简短的方法就是将其利用广义二项式定理展开&…

2019-02-23-算法-进化

题目描述&#xff1a;给定一个字符串 s&#xff0c;找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1&#xff1a; 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。示例 2&#xff1a; 输入: "cbbd" 输…

Docker(二)-在Docker中部署Nginx实现负载均衡(视频)

一、前言在前面的文章中我们已经介绍了如何在Centos7系统中安装Docker以及利用Docker进行Asp.Net Core应用的部署。在本文中&#xff0c;我们将继续介绍利用Docker部署Nginx服务实现负载均衡&#xff0c;我们通过视频方式向大家进行演示。注&#xff1a;查看公众号历史文章&…

P4389 付公主的背包(生成函数/多项式)

P4389 付公主的背包 https://www.luogu.com.cn/problem/solution/P4389 经典生成函数问题 求解无限背包问题&#xff0c;我们可以将每个物品看作一个多项式&#xff0c;那么最后的结果就是这些多项式的卷积的系数&#xff0c;然后我们实际上就可以考虑分治NTT了&#xff0c;但…

HDU 6265 Master of Phi

Master of Phi 推式子 ∑d∣nϕ(nd)d给出了n的唯一分解形式我们先对上面式子进行化简通过组合枚举d&#xff0c;d的取值分别可以通过∏i1m∑j0qipij&#xff0c;一个多项式组合得到那么上述的式子有没有可能也通过这种新式得到呢&#xff0c;好像是可以的∑d∣nϕ(nd)d∏i1m∑…

Docker系列之镜像瘦身(五)

本节我们来讲讲在我们在构建镜像过程中不出问题&#xff0c;同时使得最后所构建的镜像文件大小尽可能最小。缓存(cache)Docker的优势之一在于提供了缓存&#xff0c;加速镜像迭代构建&#xff0c;我们知道构建镜像使用docker build命令&#xff0c;也就是说通过docker build的缓…

2019-02-24-算法-进化

题目描述 将一个给定字符串根据给定的行数&#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时&#xff0c;排列如下&#xff1a; L C I R E T O E S I I G E D H N之后&#xff0c;你的输出需要从左往右逐行读…

P5641 【CSGRound2】开拓者的卓识(多项式)

P5641 【CSGRound2】开拓者的卓识 https://www.luogu.com.cn/problem/solution/P5641 经典的讨论贡献的题目&#xff0c;如果一层一层展开就太暴力了&#xff0c;我们直接考虑每个数被计算了多少次&#xff0c;那么应该是它的左边放k-1个左括号&#xff0c;右边放k-1个右括号的…

2019-02-25-算法-进化

题目描述&#xff1a; 给出一个 32 位的有符号整数&#xff0c;你需要将这个整数中每位上的数字进行反转。 示例1&#xff1a; 输入: 123 输出: 321示例2&#xff1a; 输入: -123 输出: -321示例3&#xff1a; 输入: 120 输出: 21我的解法&#xff1a; public int reverse(…

一张图了解.Net Core和.NetFx和.Net Standard和Xamarin关系

一张图了解.Net Core和.Net Framework和.Net Standard和Xamarin关系总结.NET Standard是一项API规范&#xff0c;每一个特定的版本&#xff0c;都定义了必须实现的基类库。.NET Core是一个托管框架&#xff0c;针对构建控制台、云、ASP.NET Core和UWP应用程序进行了优化。每一种…

Java修炼之路——基础篇——String

String 1&#xff1a;字符串的不可变性 什么是不可变对象&#xff1f;不可变对象是指创建后无法变更的对象 String为什么是不可变的&#xff1f;String类为final&#xff0c;并且内部字符数组也为final。所以String对象是不可变对象。 String类为什么要设计为不可变&#xff1…

P3338 [ZJOI2014]力(FFT)

P3338 [ZJOI2014]力 Fj∑i1j−1qiqj(i−j)2−∑ij1nqiqj(i−j)2Ej∑i1j−1qi(i−j)2−∑ij1nqi(i−j)2f(i)qi,g(i)1i2,f(0)0,g(0)0Ej∑i0jf(i)g(j−i)−∑ijnf(i)g(i−j)F_j \sum_{i 1} ^{j - 1} \frac{q_i \times q_j}{(i - j) ^ 2} - \sum_{i j 1} ^{n} \frac{q_i \times…

CF755G PolandBall and Many Other Balls(多项式/倍增fft)

CF755G PolandBall and Many Other Balls 倍增fft模版题 这种问题关键在于两个状态转移&#xff0c;一个是单点加1&#xff0c;还有一个是乘2&#xff0c;这样我们就相当于拥有了二进制下的左移操作和加1操作&#xff0c;那么可以在O(logn)的时间内表示出任何一个数。 然后对…

VS, VS Code, VS Online, VS xxx, 你都分清了吗?

首先说说部分童鞋容易混淆的 Visual Studio 和 Visual Studio Code 吧。其实&#xff0c;它们俩的关系&#xff0c;就相当于 Java 和 JavaScript&#xff0c;没啥关系。再说说 Visual Studio Online。这就复杂了。历史上&#xff0c;出现过两个 Visual Studio Online&#xff0…

Java修炼之路——基础篇——Java关键字

1&#xff1a;transient 当对象被序列化时&#xff0c;transient阻止其修饰的对象进行序列化&#xff1b;当反序列化时&#xff0c;此对象的值不会被恢复。 2&#xff1a;instanceof 判断引用指向的对象&#xff0c;是不是某个类及其子类的实例对象&#xff1b; class Person …

.NetCore从零开始使用Skywalking分布式追踪系统

将本文从0开始搭建两个webapi项目&#xff0c;使用Skywalking来追踪他们之间的调用关系及响应时间。开发环境为VisualStudio20191&#xff1a;安装Skywalking,可参考&#xff1a;https://www.cnblogs.com/sunyuliang/p/11422576.html&#xff0c;本列中搭建好后的Skywalking服务…