bzoj2194 快速傅立叶之二
2194: 快速傅立叶之二
Time Limit: 10 Sec Memory Limit: 259 MB
Submit: 1730 Solved: 1026
[Submit][Status][Discuss]
Description
请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5。 a,b中的元素均为小于等于100的非负整数。
Input
Output
输出N行,每行一个整数,第i行输出C[i-1]。
Sample Input
3 1
2 4
1 1
2 4
1 4
Sample Output
12
10
6
1
#include <cstdio> #include <cmath> #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int maxn = (1 << 18) + 5; const double pai = acos(-1.0); int n,a[maxn],b[maxn],len;struct node {double real, imag;node(double real = 0.0, double imag = 0.0){this->real = real, this->imag = imag;}node operator - (const node&elem) const{return node(this->real - elem.real, this->imag - elem.imag);}node operator + (const node&elem) const{return node(this->real + elem.real, this->imag + elem.imag);}node operator * (const node&elem) const{return node(this->real * elem.real - this->imag * elem.imag, this->real * elem.imag + this->imag * elem.real);}void set(double real = 0.0, double imag = 0.0){this->real = real, this->imag = imag;} } A[maxn],B[maxn];void pre() {for (int i = 0; i < n; i++)scanf("%d%d",&a[i],&b[i]);len = 1;while (len < (n << 1))len <<= 1;for (int i = 0; i < n; i++)A[i].set(a[i],0),B[i].set(b[n - i - 1],0);for (int i = n; i < len; i++)A[i].set(),B[i].set(); }void Swap(node &a,node &b) {node temp = a;a = b;b = temp; }void zhuan(node *y) {for (int i = 1,j = len >> 1,k; i < len - 1; i++){if (i < j)Swap(y[i],y[j]);k = len >> 1;while (j >= k){j -= k;k >>= 1;}if (j < k)j += k;} }void FFT(node *y,int op) {zhuan(y);for (int h = 2; h <= len; h <<= 1){node temp(cos(op * pai * 2 / h),sin(op * pai * 2 / h));for (int i = 0; i < len; i += h){node W(1,0);for (int j = i; j < i + h / 2; j++){node u = y[j];node v = W * y[j + h / 2];y[j] = u + v;y[j + h / 2] = u - v;W = W * temp;}}}if (op == -1)for (int i = 0; i < len; i++)y[i].real /= len; }void solve(node *A,node *B) {FFT(A,1);FFT(B,1);for (int i = 0; i < len; i++)A[i] = A[i] * B[i];FFT(A,-1); }int main() {scanf("%d",&n);pre();solve(A,B);for (int i = n - 1; i < 2 * n - 1; i++)printf("%d\n",(int)(A[i].real + 0.5));return 0; }
转载于:https://www.cnblogs.com/zbtrs/p/8639793.html
bzoj2194 快速傅立叶之二相关推荐
- bzoj2194: 快速傅立叶之二
了解到了FFT求卷积,但是还是感性的认识.. 取反就可以了.输出一定要加int!!!! #include<cstdio> #include<iostream> #include ...
- BZOJ2194 快速傅立叶之二 【fft】
题目 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. a,b中的元素均为小于等于100的非负整数. 输入格式 ...
- BZOJ-2194 快速傅立叶之二
FFT模版题. 观察题目,我们可以发现,只要把序列b倒过来,再联想一下乘法运算... 我们会发现,将序列a和序列b当作100进制数,做一次乘法,然后从低到高每一位便是答案了(乘完无需进位) #incl ...
- 解题报告(二)C、(darkBZOJ 2194) 快速傅立叶之二(FFT、卷积的概念、常用变换)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- [BZOJ]2194: 快速傅立叶之二
题目大意:给定序列a,b,求序列c满足c[k]=sigma(a[i]*b[i-k]) (k<=i<n).(n<=10^5) 思路:观察发现就是普通的卷积反一反(翻转ab其中一个后做卷 ...
- BZOJ_2194_快速傅立叶之二_(FFT+卷积)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=2194 给出序列\(a[0],a[1],...,a[n-1]\)和\(b[0],b[1],... ...
- 【刷题】BZOJ 2194 快速傅立叶之二
Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. a,b中的元素均为小于等于100的非 ...
- bzoj 2194 快速傅立叶之二
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2194 因为卷积的第 k 项是 sigma(i=0~k)a[ i ]*b[ k-i ] ,也就 ...
- c语言二维图像傅立叶变换,C语言数据结构算法之实现快速傅立叶变换.pdf
C语语言言数数据据结结构构算算法法之之实实现现快快速速傅傅立立叶叶变变换换 C语语言言数数据据结结构构算算法法之之实实现现快快速速傅傅立立叶叶变变换换 本实例将实现二维快速傅立叶变换,同时也将借此实例 ...
最新文章
- Chorme Error 312 (net::ERR_UNSAFE_PORT) | Chorme 不信任端口
- Android开发笔记(一百三十七)自定义行为Behavior
- 转----cer文件和pfx文件的区别
- vue导出excel并修改样式
- hua图软件 mac_实用电脑绘图软件~推荐_mac_微软怎么样_智能_魅可怎么样_圣诞节去哪玩_ipad_绘图软件_科技数码_应用推荐...
- 如何解除计算机上的安全警报,怎么关闭windows的安全警报
- Windows下的random_device
- android转发短信到邮箱,利用短信通知的方式在Tasker中实现收到Android手机短信自动转发到邮箱...
- 操作系统和指弹吉他的联系
- 深入理解什么是Beta分布
- 【智能电视必装软件】小鲸电视、hdp直播国庆假期经典好剧随心看
- 用计算机弹发如雪,计算器弹音乐谱子
- imooc《Python入门与实战》学习总结(七)Python中的面向对象
- 图解Fiddler如何抓手机APP数据包【超详细】
- DevOps Master课程总结:知否知否,应是DevOps肥ITIL瘦(送ITIL4前生今世)
- OPEN(SAP) UI5 学习入门系列之二: 最佳实践练习(下)
- 切片器可以设置日期格式?_Excel切片器,原来有这么多厉害的用法
- 关闭交互式服务检测(UI0Detect)
- android 自动化 微信,C#手把手教你玩微信自动化
- JSON转换为JS对象和JS对象转换为JSON