[BZOJ]2194: 快速傅立叶之二
题目大意:给定序列a,b,求序列c满足c[k]=sigma(a[i]*b[i-k]) (k<=i<n)。(n<=10^5)
思路:观察发现就是普通的卷积反一反(翻转ab其中一个后做卷积,倒着输出即可),FFT模板复习。
#include<cstdio> #include<cmath> #include<algorithm> using namespace std; inline int read() {int x;char c;while((c=getchar())<'0'||c>'9');for(x=c-'0';(c=getchar())>='0'&&c<='9';)x=(x<<3)+(x<<1)+c-'0';return x; } #define MN 262144 struct cp {double r,i;cp(double r=0,double i=0):r(r),i(i){}cp operator+(cp b){return cp(r+b.r,i+b.i);}cp operator-(cp b){return cp(r-b.r,i-b.i);}cp operator*(cp b){return cp(r*b.r-i*b.i,r*b.i+i*b.r);} }w[2][MN+5],a[MN+5],b[MN+5],c[MN+5]; const double pi=acos(-1); int N,R[MN+5]; void init(int n) {for(N=1;N<n;N<<=1);int i,j,k;cp g(cos(2*pi/N),sin(2*pi/N));for(i=w[0][0].r=1;i<N;++i)w[0][i]=w[0][i-1]*g;for(i=w[1][0].r=1;i<N;++i)w[1][i]=w[0][N-i];for(i=j=0;i<N;R[++i]=j)for(k=N>>1;(j^=k)<k;k>>=1); } void fft(cp*x,int v) {int i,j,k;for(i=j=0;i<N;++i)if(i<R[i])swap(x[i],x[R[i]]);for(i=1;i<N;i<<=1)for(j=0;j<N;j+=i<<1)for(k=0;k<i;++k){cp p=x[i+j+k]*w[v][N/(i<<1)*k];x[i+j+k]=x[j+k]-p;x[j+k]=x[j+k]+p;}if(v)for(i=0;i<N;++i)x[i].r/=N,x[i].i/=N; } int main() {int n=read(),i;for(i=0;i<n;++i)a[n-i-1].r=read(),b[i]=read();init(n<<1);fft(a,0);fft(b,0);for(i=0;i<N;++i)c[i]=a[i]*b[i];fft(c,1);for(i=n;i--;)printf("%d\n",int(c[i].r+0.5)); }
转载于:https://www.cnblogs.com/ditoly/p/BZOJ2194.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的非 ...
- 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的非负整数. 输入格式 ...
- BZOJ-2194 快速傅立叶之二
FFT模版题. 观察题目,我们可以发现,只要把序列b倒过来,再联想一下乘法运算... 我们会发现,将序列a和序列b当作100进制数,做一次乘法,然后从低到高每一位便是答案了(乘完无需进位) #incl ...
- c语言二维图像傅立叶变换,C语言数据结构算法之实现快速傅立叶变换.pdf
C语语言言数数据据结结构构算算法法之之实实现现快快速速傅傅立立叶叶变变换换 C语语言言数数据据结结构构算算法法之之实实现现快快速速傅傅立立叶叶变变换换 本实例将实现二维快速傅立叶变换,同时也将借此实例 ...
最新文章
- python估计物体角度
- ffmpeg4编解码例子
- Linux jupyter安装位置,Linux下安装jupyter
- 云炬60s看世界20211128
- 【百度地图API】如何制作可拖拽的沿道路测距
- MySQL高级 - 常用工具 - mysql
- SQL Server 使用OPENROWSET访问ORACLE遇到的各种坑总结
- ansys怎么删除线段_科学网—ansys常用命令 - 刘敬寿的博文
- python窗体应用程序无阻塞_当GUI应用程序运行时,imshow阻塞线程
- Linux Service管理
- 【问题7】集群部署时的分布式 session 如何实现?
- 数学分析 积分表及常用积分公式
- android屏幕点击录制脚本,Android录制屏幕脚本
- 自定义控件:Flag标签
- Matlab求解椭球上运动的点B,满足到定点A、C的距离之和最短
- java graphics 模糊_使用Graphics2D模糊Java背景
- NYOJ -1364 (第十一届河南省赛)
- python中怎么打印出表格_Python 表格打印
- 省对应的市区经纬度信息
- Dynamodb 备份方案