题意:给定序列a,b,求序列c,\(c(k)=\sum_{i=k}^{n-1}a(i)b(i-k)\)

Solution:

\[c(k)=\sum_{i=k}^{n-1}a(i)b(i-k)\\
c(k)=\sum_{i=0}^{n-k-1}a(i+k)b(i)\\
设ar(i)=a(n-i-1)\\
c(k)=\sum_{i=0}^{n-k-1}ar(n-i-k-1)b(i)\\
可以看出这是个卷积的形式,直接裸套fft
\]

Code:

#include<bits/stdc++.h>
#define ll long long
#define Pi acos(-1.0)
using namespace std;
const int N=262144;
int n,len=1,tim,rtt[N];
struct cp{double x,y;}aa[N],bb[N];
cp operator + (cp a,cp b){return (cp){a.x+b.x,a.y+b.y};}
cp operator - (cp a,cp b){return (cp){a.x-b.x,a.y-b.y};}
cp operator * (cp a,cp b){return (cp){a.x*b.x-a.y*b.y,a.y*b.x+a.x*b.y};}
void FFT(cp *a,int flag){
for(int i=0;i<len;i++)
if(i<rtt[i]) swap(a[i],a[rtt[i]]);
for(int l=2;l<=len;l<<=1){
cp wn=(cp){cos(flag*2*Pi/l),sin(flag*2*Pi/l)};
for(int st=0;st<len;st+=l){
cp w=(cp){1,0};
for(int u=st;u<st+(l>>1);u++,w=w*wn){
cp x=a[u],y=w*a[u+(l>>1)];
a[u]=x+y,a[u+(l>>1)]=x-y;
}
}
}
}
int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
int main(){
n=read();
for(int i=0;i<n;i++){
scanf("%lf",&aa[n-i-1].x);
scanf("%lf",&bb[i].x);
}
while(len<=(n<<1)) len<<=1,++tim;
for(int i=0;i<len;i++)
rtt[i]=(rtt[i>>1]>>1)|((i&1)<<(tim-1));
FFT(aa,1);FFT(bb,1);
for(int i=0;i<len;i++) aa[i]=aa[i]*bb[i];
FFT(aa,-1);for(int i=0;i<len;i++) aa[i].x/=len;
for(int i=0;i<n;i++)
printf("%d\n",(int){aa[n-i-1].x+0.5});
return 0;
}

【bzoj2194】快速傅立叶之二 FFT的更多相关文章

  1. BZOJ2194:快速傅立叶之二(FFT)

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

  2. bzoj2194 快速傅立叶之二 ntt

    bzoj2194 快速傅立叶之二 链接 bzoj 思路 对我这种和式不强的人,直接转二维看. 发现对\(C_k\)贡献的数对(i,j),都是右斜对角线. 既然贡献是对角线,我们可以利用对角线的性质了. ...

  3. [bzoj2194]快速傅立叶之二_FFT

    快速傅立叶之二 bzoj-2194 题目大意:给定两个长度为$n$的序列$a$和$b$.求$c$序列,其中:$c_i=\sum\limits_{j=i}^{n-1} a_j\times b_{j-i} ...

  4. bzoj 2194: 快速傅立叶之二 -- FFT

    2194: 快速傅立叶之二 Time Limit: 10 Sec  Memory Limit: 259 MB Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k & ...

  5. 2018.11.18 bzoj2194: 快速傅立叶之二(fft)

    传送门 模板题. 将bbb序列反过来然后上fftfftfft搞定. 代码: #include<bits/stdc++.h> #define ri register int using na ...

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

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

  7. bzoj2194: 快速傅立叶之二

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  8. bzoj千题计划256:bzoj2194: 快速傅立叶之二

    http://www.lydsy.com/JudgeOnline/problem.php?id=2194 相乘两项的下标 的 差相同 那么把某一个反过来就是卷积形式 fft优化 #include< ...

  9. BZOJ.2194.快速傅立叶之二(FFT 卷积)

    题目链接 \(Descripiton\) 给定\(A[\ ],B[\ ]\),求\[C[k]=\sum_{i=k}^{n-1}A[i]*B[i-k]\ (0\leq k<n)\] \(Solut ...

随机推荐

  1. 微信小程序开发 [00] 写在前面的话,疯狂唠唠

    我总是喜欢在写东西之前唠唠嗑,按照惯例会在博文的开篇写这么一段"写在前面的话",这次却为了这个唠嗑单独开了一篇文,大概预想着要胡说八道的话有点多. 前段时间突然对小程序来了兴趣,说 ...

  2. 开关电源五种PWM反馈控制模式

    开关电源五种PWM反馈控制模式 来源:--作者:--浏览:178时间:2016-08-10 14:18 关键词: 1 引言 PWM开关稳压或稳流电源基本工作原理就是在输入电压变化.内部参数变化.外接负 ...

  3. 如何一步一步建立CAN通讯

    如何一步一步建立CAN通讯 2016-04-12 20:38:14来源: eefocus 关键字:CAN通讯  硬件环境   收藏 评论(0) 分享到 微博 QQ 微信 LinkedIn CAN通讯的 ...

  4. iOS进阶学习笔记

    熟练掌握C/C++/Objective-C/Swift语言: 熟悉Cocoa Touch(Foundation,UIKit).Objective-C中block,gcd,NSOperation等: 熟 ...

  5. office2016word 每次打开都有进度条问题 解决方式

      最佳答案   每次打开Office 2016都提示配置进度(包括Word.PPT.Excel等等Office产品都有这种现象),如图,先是显示“安装程序正在准备必要的文件”,接着显示“正在配置Mi ...

  6. vim打开多窗口、多文件之间的切换

    打开多个文件: 一.vim还没有启动的时候: 1.在终端里输入  vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :e file 可以再打开一 ...

  7. 【HNOI2016】序列

    题面 题解 设\([l, r]\)的最小值的位置为\(p\),那么对于左端点在区间\([l, p]\),右端点在区间\([p, r]\)的区间最小值都为\(a[p]\). 这一部分的贡献就是\(a[p ...

  8. Selenium之前世今生

    前世 Selenium RC 早期的Selenium使用的是JavaScript注入技术与浏览器打交道,需要Selenium RC启动一个Server,将操作Web元素的API调用转化为一段段Java ...

  9. JavaScript快速入门-实战(例子)

    1.模拟bootstrap中的模态框 效果图:(点我后,弹出对话框,最下面的内容可以看到,但是有一定的透明度.) 思路分析: 整体分为三层,最底层(点我),中间透明层(实现透明效果),最顶层(最新内容 ...

  10. vs2013 std::sort 分析

    由于之前在debug模式下发现stl的sort简直慢到不能忍,所以自己写了一个sgi的sort,后来发现在release模式下,vs自带的sort快的不行,就研究了下. 这里有些和sgi-stl相通的 ...