BZOJ-2194 快速傅立叶之二
FFT模版题。
观察题目,我们可以发现,只要把序列b倒过来,再联想一下乘法运算。。。
我们会发现,将序列a和序列b当作100进制数,做一次乘法,然后从低到高每一位便是答案了(乘完无需进位)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <cctype>
#include <complex>
#define rep(i, l, r) for(int i=l; i<=r; i++)
#define down(i, l, r) for(int i=l; i>=r; i--)
#define maxn 400009
#define cd complex <double>
#define PI acos(0.0)*2.0
#define ll long long
using namespace std;
inline int read()
{int x=0, f=1; char ch=getchar();while (!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}while (isdigit(ch)) x=x*10+ch-'0', ch=getchar();return x*f;
}
cd a[maxn], b[maxn], c[maxn], A[maxn];
int n, m, n1[maxn], n2[maxn], s[maxn];
int ans[maxn];void fft(cd *a, bool flag)
{rep(i, 0, n-1) s[i]=0;for(int i=1, j=n; i<n; i*=2, j/=2) rep(h, j/2, j-1) s[h]+=i;for(int i=1; i<n; i*=2) rep(j, 0, i-1) s[j+i]+=s[j];rep(i, 0, n-1) A[i]=a[s[i]];double pi=flag?PI:-PI;for(int step=1; step<n; step*=2){cd e=exp(cd(0, 2.0*pi/double(step*2))), w=cd(1, 0);for (int pos=0; pos<step; pos++, w*=e) for(int i=pos; i<n; i+=step*2){cd ret=A[i], rec=w*A[i+step];A[i]=ret+rec, A[i+step]=ret-rec;}}if (!flag) rep(i, 0, n-1) A[i]/=n;rep(i, 0, n-1) a[i]=A[i];
}int main()
{m=read(); rep(i, 1, m) n1[m-i]=read(), n2[i-1]=read();n=1; while (n<m*2) n*=2;rep(i, 0, n-1) a[i]=cd(n1[i], 0); fft(a, true);rep(i, 0, n-1) b[i]=cd(n2[i], 0); fft(b, true);rep(i, 0, n-1) c[i]=a[i]*b[i]; fft(c, false);rep(i, 0, m-1) ans[i]=c[i].real()+0.5;down(i, m-1, 0) printf("%d\n", ans[i]);
}
转载于:https://www.cnblogs.com/NanoApe/p/4479405.html
BZOJ-2194 快速傅立叶之二相关推荐
- bzoj 2194 快速傅立叶之二
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2194 因为卷积的第 k 项是 sigma(i=0~k)a[ i ]*b[ k-i ] ,也就 ...
- 【刷题】BZOJ 2194 快速傅立叶之二
Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. a,b中的元素均为小于等于100的非 ...
- [BZOJ]2194: 快速傅立叶之二
题目大意:给定序列a,b,求序列c满足c[k]=sigma(a[i]*b[i-k]) (k<=i<n).(n<=10^5) 思路:观察发现就是普通的卷积反一反(翻转ab其中一个后做卷 ...
- bzoj2194 快速傅立叶之二
2194: 快速傅立叶之二 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 1730 Solved: 1026 [Submit][Status][D ...
- 解题报告(二)C、(darkBZOJ 2194) 快速傅立叶之二(FFT、卷积的概念、常用变换)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- BZOJ_2194_快速傅立叶之二_(FFT+卷积)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=2194 给出序列\(a[0],a[1],...,a[n-1]\)和\(b[0],b[1],... ...
- 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的非负整数. 输入格式 ...
- c语言二维图像傅立叶变换,C语言数据结构算法之实现快速傅立叶变换.pdf
C语语言言数数据据结结构构算算法法之之实实现现快快速速傅傅立立叶叶变变换换 C语语言言数数据据结结构构算算法法之之实实现现快快速速傅傅立立叶叶变变换换 本实例将实现二维快速傅立叶变换,同时也将借此实例 ...
最新文章
- Delphi开发人员的编程习惯
- Eclipse 引导阮卓项目 No projects are found to import解
- 201521123070 《JAVA程序设计》第13周学习总结
- python 魔法方法常用_12个常用的IPython魔法命令
- Hibernate学习笔记_查询
- 2.1 - 递归练习题
- 190710每日一句
- 微信小程序码生成时报data format error
- python爬虫之爬取微信公众号文章中的图片
- idc机房安装服务器系统,IDC机房运维之(硬件篇)
- CH Dream(侠客行)
- 1U、2U、标准19寸机架是什么意思?这篇文章讲的很明白
- 北邮 计算机网络实验二
- 用python制作英文字典的分析_分享一个自己做的英文科学写作检查器
- GOP、IDR、CAR、BLA、RASL、RADL
- jenkins配置master-slave并发布dubbo服务
- oracle form set_block_property,ORACLEERP开发基础之OracleForms基础(二)
- c语言实现一致性hash算法,一致性哈希算法(Consistent Hashing)
- C语言笔记 | 一元三次方程
- 干货学起来!分享4个简单实用的Word技巧,请低调收藏!
热门文章
- 让窗体获得焦点,一定会有您用到的时候
- [react] React中验证props的目的是什么?
- [html] 你知道什么是反向链接吗?它有什么应用场景呢?
- [html] 你认为一个好的布局应该是什么样的?有哪些需要注意的地方?
- 前端学习(2732):重读vue电商网站42之添加富文本编辑器
- 前端学习(2151):webpack之使用vue
- 前端学习(2046)vue之电商管理系统电商系统之通过externals加载外部资源
- 前端学习(1867)vue之电商管理系统电商系统之登录退出实现表单的重置
- plsql轻量版游标的使用
- linux awstats搭建