题目就是题解系列

既然题目告诉了我们用FFT,我们就用去想FFT.
我们看这个式子,好像和平时的式子差不多
那么我们直接裸上FFT就好了
我们知道,FFT处理的是卷积的问题。
我们在多项式乘法的时候,得到的下标为\(k\)上面
实际上是\(\sum(i*j)*[i+j=k]\)
所以我们发现,使用FFT处理问题的时候,只会统计所有和为k的项,而原题中的
\[C_k = \sum_i(a_i*b_{i-k})\]
\(i + (i-k)\)明显不是定值,所以不能用FFT直接统计
那么我们把a数组倒过来
式子就变成了
\[C_k = \sum_i(a_{n-i-1}*b_{i-k})\]
所以我们发现\((n-i-1) + (i-k) = n-k-1\)
是一个只与n,k有关的定值
所以我们使用FFT加速即可

#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(int &x){x=0;char ch;bool flag = false;while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
inline int cat_max(const int &a,const int &b){return a>b ? a:b;}
inline int cat_min(const int &a,const int &b){return a<b ? a:b;}
const int maxn = 410010;
const double pi = acos(-1);
struct complex{double x,y;complex(){}complex(double a,double b){x=a;y=b;}complex operator + (const complex &r){return complex(x+r.x,y+r.y);}complex operator - (const complex &r){return complex(x-r.x,y-r.y);}complex operator * (const complex &r){return complex(x*r.x-y*r.y,x*r.y+y*r.x);}complex operator / (const double &r){return complex(x/r,y/r);}
};
void FFT(complex *x,int n,int p){for(int i=0,t=0;i<n;++i){if(i > t) swap(x[i],x[t]);for(int j=n>>1;(t^=j) < j;j >>= 1);}for(int m=2;m<=n;m<<=1){complex wn(cos(p*2*pi/m),sin(p*2*pi/m));for(int i=0;i<n;i+=m){complex w(1,0),u;int k = m>>1;for(int j=0;j<k;++j,w=w*wn){u = x[i+j+k]*w;x[i+j+k] = x[i+j] - u;x[i+j] = x[i+j] + u;}}}if(p == -1) for(int i=0;i<n;++i) x[i] = x[i]/n;
}
complex a[maxn],b[maxn],c[maxn];
int main(){int n;read(n);for(int i=0,x;i<n;++i){read(x);a[n-i-1].x = x;read(x);b[i].x = x;}int len;for(int i=1;(i>>2)<n;i<<=1) len = i;FFT(a,len,1);FFT(b,len,1);for(int i=0;i<len;++i) c[i] = a[i]*b[i];FFT(c,len,-1);for(int i = n-1;i>=0;--i){printf("%lld\n",(ll)(c[i].x+0.5));}getchar();getchar();return 0;
}

转载于:https://www.cnblogs.com/Skyminer/p/6354317.html

bzoj 2194: 快速傅立叶之二 FFT相关推荐

  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. [BZOJ]2194: 快速傅立叶之二

    题目大意:给定序列a,b,求序列c满足c[k]=sigma(a[i]*b[i-k]) (k<=i<n).(n<=10^5) 思路:观察发现就是普通的卷积反一反(翻转ab其中一个后做卷 ...

  4. bzoj2194 快速傅立叶之二

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

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

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

  6. 快速傅立叶变换(FFT)

    FFT 作用:快速求两个多项式的乘积/卷积 文章目录 FFT 前置知识 复数(Complex) 单位根 离散傅立叶变换(Discrete Fourier Transform , DFT) 快速傅立叶变 ...

  7. 快速傅立叶变换:FFT算法原理及C++实现

    傅立叶变换以高等数学(微积分)中的傅立叶级数为基础发展而来,它是信号处理(特别是图像处理)中非常重要的一种时频变换手段,具有重要应用.在图像编码.压缩.降噪.数字水印方面都有重要意义.此外,快速傅立叶 ...

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

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

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

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

  10. bzoj2194: 快速傅立叶之二

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

最新文章

  1. vmware克隆centos修改linux mac地址
  2. HDU 6052 To my boyfriend(容斥+单调栈)
  3. (9)跨段跳转,短调用和长调用堆栈图
  4. QUETY使用标准数据源的报表传输到新系统没有数据取出
  5. Parsing XML in J2ME
  6. 微信小程序前端支付代码
  7. 利用反射做类参数的校验
  8. elementui可编辑单元格_ElementUI 表格可编辑单元格
  9. oracle怎么以时间排序,oracle指定数据排序在前面怎么处理
  10. (王道408考研操作系统)第二章进程管理-第四节3:死锁处理策略之检测和解除
  11. input验证码框,输入非数字或非12位时,红框提示;每4位加一个空格
  12. RegCloseKey函数
  13. java 弹框_java弹框
  14. Visio绘制网络拓扑图
  15. 3d建模渲染效果图步骤
  16. 微信小程序文档api
  17. 欧姆龙485通讯示例程序_黄冈欧姆龙plc培训班
  18. 数据透视表字段名无效,遇到这种情况怎么解决?
  19. 小说APP开发,实现小说阅读的翻页动画
  20. 安卓开发 监听虚拟按键_Android 虚拟按键适配动态调整布局的方法

热门文章

  1. MySQL学习(二、简单查询和多行、单行函数)
  2. Leader:这样的 Bug 你也写的出来???
  3. win10 预览版启用 Hyper-V 虚拟机 装 boot2docker找不到菜单按钮问题
  4. discuz-ucenter-api-for-java 中文乱码问题
  5. js 图片加载时 按比例设置图片宽高_JS自动等比例缩放图片,判断网页与图片加载完成。...
  6. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_13-删除页面-前端-Api调用...
  7. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_22-CMS前端页面查询开发-Api调用-跨域解决...
  8. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_16-CMS前端工程创建-导入系统管理前端工程...
  9. 小D课堂 - 新版本微服务springcloud+Docker教程_6-01 微服务网关介绍和使用场景
  10. centos mpeg acc 解码器安装