看名字,然后准备转化为多项式乘法。

\[c_k=\sum_{i=0}^{n-k-1}a_{i+k}b_i
\]

将 \(a\) 反转,得:

\[c_k=\sum_{i=0}^{n-k-1}a_{n-i-k-1}b_i
\]

这已经是多项式乘法的格式了,直接多项式乘法,最后对函数 \(c\) 的 \(0\) 到 \(n-1\) 次项倒序输出即可。

时间复杂度 \(O(n\log n)\)。

#include<bits/stdc++.h>
using namespace std;
const int N=3e5+5;
const double pi=acos(-1);
int n,m,rev[N];
struct comn{double a,b;}f[N],g[N];
comn operator+(comn x,comn y){
return {x.a+y.a,x.b+y.b};
}comn operator-(comn x,comn y){
return {x.a-y.a,x.b-y.b};
}comn operator*(comn x,comn y){
return {x.a*y.a-x.b*y.b,x.b*y.a+x.a*y.b};
}void operator+=(comn &x,comn y){x=x+y;}
void operator*=(comn &x,comn y){x=x*y;}
void init(int k,int len){
for(int i=0;i<len;i++)
rev[i]=(rev[i>>1]>>1)|((i&1)<<(k-1));
}void fft(comn *a,int n,int fl){
for(int i=0;i<n;i++)
if(i<rev[i]) swap(a[i],a[rev[i]]);
comn om={cos(pi),fl*sin(pi)},w={1,0};
for(int i=1;i<n;i*=2,om={cos(pi/i),fl*sin(pi/i)})
for(int j=0;j<n;j+=i*2,w={1,0})
for(int k=j;k<j+i;k++){
comn x=a[k],y=w*a[k+i];
a[k]+=y,a[k+i]=x-y,w*=om;
}
}int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n;int k=0,mx=1;
while(mx<=n+n-2) mx*=2,k++;
for(int i=0;i<n;i++)
cin>>f[n-i-1].a>>g[i].a;
init(k,mx),fft(f,mx,1),fft(g,mx,1);
for(int i=0;i<mx;i++) f[i]*=g[i];
fft(f,mx,-1);
for(int i=n-1;~i;i--)
cout<<(int)(f[i].a/mx+0.5)<<"\n";
return 0;
}//fast fourier transform

[BZOJ2194] 快速傅立叶之二 题解的更多相关文章

  1. bzoj2194 快速傅立叶之二 ntt

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

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

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

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

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

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

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

  5. BZOJ2194: 快速傅立叶之二 FFT_卷积

    Code: #include <cstdio> #include <algorithm> #include <cmath> #include <cstring ...

  6. bzoj2194: 快速傅立叶之二

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

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

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

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

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

  9. BZOJ2194: 快速傅立叶之二(NTT,卷积)

    Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1776  Solved: 1055[Submit][Status][Discuss] Descript ...

  10. 【BZOJ2194】快速傅立叶之二

    [BZOJ2194]快速傅立叶之二 Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. ...

随机推荐

  1. web移动端常见问题(一)

    1.1物理像素 产生原因:css样式的最小值是1px,不过这个1px只是代表css像素,在高清屏上展示的物理像素要>1(iphone6 1css像素=2物理像素.而iph6p则是1css像素=3 ...

  2. 数据湖加速器GooseFS,加速湖上数据分析性能

    数据湖加速器 GooseFS 是由腾讯云推出的高性能.高可用.弹性的分布式缓存方案.依靠对象存储(Cloud Object Storage,COS)作为数据湖存储底座的成本优势,为数据湖生态中的计算应 ...

  3. Advanced .NET Remoting: 第 9 章 4.改变编程模型

    Advanced .NET Remoting: 第 9 章 4.改变编程模型 前面的所有连接器在 .NET Remoting 应用程序的服务器端和客户端两方面增强功能.可插拔的连接器架构不仅支持创建连 ...

  4. Teams 无法访问的问题

    排除以下 login.partner.microsoftonline.cn; login.microsoftonline.com; microsoft.com; live.com; hotmail.c ...

  5. [python]Markdown图片引用格式批处理桌面应用程序

    需求 使用python编写一个exe,实现批量修改图片引用,将修改后的文件生成为 文件名_blog.md.有一个编辑框,允许接收拖动过来md文件,拖入文件时获取文件路径,有一个编辑框编辑修改后的文件的 ...

  6. [springboot] mvn编译实现代码混淆

    pom配置   <project>   <build>   <plugins>   <plugin>   <groupId>org.spri ...

  7. 【转载】基于timestamp和nonce的防重放攻击

    https://www.cnblogs.com/mymelody/p/7325325.html   以前总是通过timestamp来防止重放攻击,但是这样并不能保证每次请求都是一次性的.今天看到了一篇 ...

  8. 2024 Nuxt3 年度生态总结

    hello,大家好,我是程序员海军.很荣幸能与大家分享我今年的第三篇文章.在过去的一年里,我深入探索了Nuxt3,并在多个项目中实际应用了这一前沿框架,从而对其功能和应用有了全面而深刻的理解.今天,我 ...

  9. Qt/C++音视频开发67-保存裸流加入sps/pps信息/支持264/265裸流/转码保存/拉流推流

    一.前言 音视频组件除了支持保存MP4文件外,同时还支持保存裸流即264/265文件,以及解码后最原始的yuv文件.在实际使用过程中,会发现部分视频文件保存的裸流文件,并不能直接用播放器播放,查阅资料 ...

  10. Qt编写地图综合应用19-地图服务

    一.前言 国内提供地图服务的厂家基本上是五家,百度地图.高德地图.腾讯地图.搜狗地图.天地图,国外的一般还有谷歌地图.微软地图(BING地图),这几家的地图服务的api接口都大同小异,甚至很多函数的名 ...