题目大意:给定序列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: 快速傅立叶之二相关推荐

  1. bzoj 2194 快速傅立叶之二

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2194 因为卷积的第 k 项是 sigma(i=0~k)a[ i ]*b[ k-i ] ,也就 ...

  2. 【刷题】BZOJ 2194 快速傅立叶之二

    Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. a,b中的元素均为小于等于100的非 ...

  3. bzoj2194 快速傅立叶之二

    2194: 快速傅立叶之二 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 1730  Solved: 1026 [Submit][Status][D ...

  4. 解题报告(二)C、(darkBZOJ 2194) 快速傅立叶之二(FFT、卷积的概念、常用变换)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  5. BZOJ_2194_快速傅立叶之二_(FFT+卷积)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=2194 给出序列\(a[0],a[1],...,a[n-1]\)和\(b[0],b[1],... ...

  6. bzoj2194: 快速傅立叶之二

    了解到了FFT求卷积,但是还是感性的认识.. 取反就可以了.输出一定要加int!!!! #include<cstdio> #include<iostream> #include ...

  7. BZOJ2194 快速傅立叶之二 【fft】

    题目 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. a,b中的元素均为小于等于100的非负整数. 输入格式 ...

  8. BZOJ-2194 快速傅立叶之二

    FFT模版题. 观察题目,我们可以发现,只要把序列b倒过来,再联想一下乘法运算... 我们会发现,将序列a和序列b当作100进制数,做一次乘法,然后从低到高每一位便是答案了(乘完无需进位) #incl ...

  9. c语言二维图像傅立叶变换,C语言数据结构算法之实现快速傅立叶变换.pdf

    C语语言言数数据据结结构构算算法法之之实实现现快快速速傅傅立立叶叶变变换换 C语语言言数数据据结结构构算算法法之之实实现现快快速速傅傅立立叶叶变变换换 本实例将实现二维快速傅立叶变换,同时也将借此实例 ...

最新文章

  1. python估计物体角度
  2. ffmpeg4编解码例子
  3. Linux jupyter安装位置,Linux下安装jupyter
  4. 云炬60s看世界20211128
  5. 【百度地图API】如何制作可拖拽的沿道路测距
  6. MySQL高级 - 常用工具 - mysql
  7. SQL Server 使用OPENROWSET访问ORACLE遇到的各种坑总结
  8. ansys怎么删除线段_科学网—ansys常用命令 - 刘敬寿的博文
  9. python窗体应用程序无阻塞_当GUI应用程序运行时,imshow阻塞线程
  10. Linux Service管理
  11. 【问题7】集群部署时的分布式 session 如何实现?
  12. 数学分析 积分表及常用积分公式
  13. android屏幕点击录制脚本,Android录制屏幕脚本
  14. 自定义控件:Flag标签
  15. Matlab求解椭球上运动的点B,满足到定点A、C的距离之和最短
  16. java graphics 模糊_使用Graphics2D模糊Java背景
  17. NYOJ -1364 (第十一届河南省赛)
  18. python中怎么打印出表格_Python 表格打印
  19. 省对应的市区经纬度信息
  20. Dynamodb 备份方案

热门文章

  1. 工厂打工10年,现在被工厂以能力不足为由辞退,可以去仲裁吗?
  2. 前端抓潜,必须设置门槛,筛选优质客户
  3. 培养“资源意识”,有助于职场晋升
  4. 踩了无数个坑,才写出稿费1000的文章
  5. 没人脉,没资源,没背景的人,最好的出路是什么?
  6. 从2019年开始,越来越多的人关注“副业”这个词
  7. t-sql 使用正则表达式_如何在T-SQL查询中使用可扩展表达式; 性能优势和实例
  8. week06 12 我们准备数据 前端调用rpc 前后端联调一下
  9. async与await详解
  10. Quartz简答介绍