洛谷 P3803 【模板】多项式乘法(FFT)传送门

存个板子,完全弄懂之后找机会再写个详解。

 #include<cstdio>
#include<cmath> struct cpx
{
double rl,im;
friend cpx operator + (cpx q,cpx w)
{
return (cpx){q.rl+w.rl,q.im+w.im};
}
friend cpx operator - (cpx q,cpx w)
{
return (cpx){q.rl-w.rl,q.im-w.im};
}
friend cpx operator * (cpx q,cpx w)
{
return (cpx){q.rl*w.rl-q.im*w.im,q.rl*w.im+q.im*w.rl};
}
friend cpx operator ~ (cpx q)
{
return (cpx){q.rl,-q.im};
}
}urt[][],af[],bf[]; void swap(cpx &q,cpx &w)
{
cpx t=q;q=w;w=t;
} int n=,cnt,na,nb;
int r[];
const double pi=acos(-); void prefft()
{
for(int i=;i<n;i++)
{
urt[i][]=(cpx){cos(*pi*i/n),sin(*pi*i/n)};
urt[i][]=~urt[i][];
r[i]=(r[i>>]>>)|((i&)<<(cnt-));
}
} void fft(cpx *a,int inv)
{
for(int i=;i<n;i++)if(i<r[i])swap(a[i],a[r[i]]);
for(int l=;l<=n;l<<=)
{
int m=l>>;
for(cpx *p=a;p!=a+n;p+=l)
{
for(int i=;i<m;i++)
{
cpx t=urt[n/l*i][inv]*p[i+m];
p[i+m]=p[i]-t;
p[i]=p[i]+t;
}
}
}
if(inv)for(int i=;i<n;i++)a[i].rl/=n;
} int main()
{
scanf("%d%d",&na,&nb);
while(n<=na+nb)n<<=,cnt++;
for(int i=;i<=na;i++)scanf("%lf",&af[i].rl);
for(int i=;i<=nb;i++)scanf("%lf",&bf[i].rl);
prefft();
fft(af,);
fft(bf,);
for(int i=;i<n;i++)af[i]=af[i]*bf[i];
fft(af,);
for(int i=;i<=na+nb;i++)printf("%d ",(int)(af[i].rl+0.5));
return ;
}

FFT(快速傅里叶变换) 模板的更多相关文章

  1. 「学习笔记」FFT 快速傅里叶变换

    目录 「学习笔记」FFT 快速傅里叶变换 啥是 FFT 呀?它可以干什么? 必备芝士 点值表示 复数 傅立叶正变换 傅里叶逆变换 FFT 的代码实现 还会有的 NTT 和三模数 NTT... 「学习笔 ...

  2. FFT 快速傅里叶变换 学习笔记

    FFT 快速傅里叶变换 前言 lmc,ikka,attack等众多大佬都没教会的我终于要自己填坑了. 又是机房里最后一个学fft的人 早背过圆周率50位填坑了 用处 多项式乘法 卷积 \(g(x)=a ...

  3. CQOI2018 九连环 打表找规律 fft快速傅里叶变换

    题面: CQOI2018九连环 分析: 个人认为这道题没有什么价值,纯粹是为了考算法而考算法. 对于小数据我们可以直接爆搜打表,打表出来我们可以观察规律. f[1~10]: 1 2 5 10 21 4 ...

  4. FFT —— 快速傅里叶变换

    问题: 已知A[], B[], 求C[],使: 定义C是A,B的卷积,例如多项式乘法等. 朴素做法是按照定义枚举i和j,但这样时间复杂度是O(n2). 能不能使时间复杂度降下来呢? 点值表示法: 我们 ...

  5. [C++] 频谱图中 FFT快速傅里叶变换C++实现

    在项目中,需要画波形频谱图,因此进行查找,不是很懂相关知识,下列代码主要是针对这篇文章. http://blog.csdn.net/xcgspring/article/details/4749075 ...

  6. matlab中fft快速傅里叶变换

    视频来源:https://www.bilibili.com/video/av51932171?t=628. 博文来源:https://ww2.mathworks.cn/help/matlab/ref/ ...

  7. 模板 FFT 快速傅里叶变换

    FFT模板,原理不难,优质讲解很多,但证明很难看太不懂 这模板题在bzoj竟然是土豪题,服了 #include <cmath> #include <cstdio> #inclu ...

  8. 洛谷P1919 A*B problem 快速傅里叶变换模板 [FFT]

    题目传送门 A*B problem 题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数 ...

  9. [ C++ 快速高精度模板 ] [ BigN类 ] 大整数类 高精度 模板 BigInt FFT 快速傅里叶变换

    [原创 转载请注明]瞎写的,如果代码有错,或者各位大佬有什么意见建议,望不吝赐教 更新日志: 对于规模较小的整数乘法使用$$O(n^2)$$方法,提高速度 modify()和operator[]的bu ...

随机推荐

  1. Baes.css

    这个公共样式还不错 html,body,ul,li,ol,img,a,p,div,form,input,h1,h2,h3,h4.h5,h6{ margin: 0; padding: 0; /*盒模型* ...

  2. Hadoop的常用指令

    -help:查看帮助 hadoop fs -help rm -rm [-f] [-r|-R] [-skipTrash] <src> ... : Delete all files that ...

  3. Python笔记_第四篇_高阶编程_进程、线程、协程_5.GPU加速

    Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码.Pyt ...

  4. Python笔记_第四篇_高阶编程_进程、线程、协程_3.进程vs线程

    1.多任务的实现原理: 通常我们会设计Mater-Workder模式,Master负责分配任务,Worker负责执行任务,因此多任务环境下,通常是一个Master,多个Worker 2.多进程: 主进 ...

  5. 计蒜客 王子救公主(DFS)

    一天,蒜头君梦见自己当上了王子,但是不幸的是,自己的公主被可恶的巫婆抓走了.于是蒜头君动用全国的力量得知,自己的公主被巫婆抓进一个迷宫里面.由于全国只有蒜头君自己可以翻越迷宫外的城墙,蒜头君便自己一人 ...

  6. python thrift demo

    简介Thrift最初由Facebook研发,主要用于各个服务之间的RPC通信,支持跨语言,常用的语言比如C++, Java, Python, PHP, Ruby, Erlang, Perl, Hask ...

  7. 京东云数据库 RDS助力企业便捷运维

    iPhone6发布那年,京东在国贸等商圈送货最快速度数分钟,包括从下单到送达.这是一个极端的富含营销因素例子.即便如此,常态来看,隔天到货的这种业务模式,也是基于同样的支撑:营销业务.物流业务,大数据 ...

  8. C#判断两个字符串是否相等的方法 ,还有char赋空值办法。

    string str1="Test"; string str2 = "Test"; if (str1==str2) //第一种判断方式 { //第二种判断方式 ...

  9. vue执行期间的函数

    先放上vue官方给的函数图

  10. java8新特性-函数式接口详细讲解及案例

    一.函数式接口 1.1 概念 函数式接口在Java中是指:有且仅有一个抽象方法的接口.函数式接口,即适用于函数式编程场景的接口.而Java中的函数式编程体现就是Lambda,所以函数式接口就是可 以适 ...