洛谷 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. UML-GRASP后4种模式

    1.多态 1).什么是多态 问题:if-else耦合度过高 解决: 方法1:接口 方法2:超类里需多态的方法前加上{abstract} 2).相关模式 防止异变 大量GoF,如适配器(Adapter) ...

  2. B - Given Length and Sum of Digits... CodeForces - 489C (贪心)

    You have a positive integer m and a non-negative integer s. Your task is to find the smallest and th ...

  3. pycharm调试、设置汇总

    目录: 1.pycharm中不能run 2.pycharm基本调试操作 3.pycharm使用技巧 4.pycharm Error running draft: Cannot run program ...

  4. D10 基本数据类型(各种职业的技能分析) 主要为 int 和 str

    在python中具有魔法的  职业  类型 召唤每种职业  在pychar 中 打出该职业的名称 按住Ctrl 光标在该职业名称上 点击就能看该职业的技能 1   数字   int a = " ...

  5. 计算机网络(6): http cookie

    Cookie作用: 1)帮助管理用户会话信息(用户需要记录的信息:登陆状态等) 2)跟踪浏览器的行为 3)用户自定义设置 实现方式: 当用户浏览带有Cookie的网站时,网站自动为其生成一个唯一的标志 ...

  6. Java Properties基础知识总结

    在Java语言中,使用一种以.properties为扩展名的文本文件作为资源文件,该类型的文件的内容格式为类似: some_key=some_value #注释描述 还有一种是使用xml文件保存项目的 ...

  7. 解析java实体类

    对java实体类的众多理解: A .就是属性类,通常定义在model层里面 B. 一般的实体类对应一个数据表,其中的属性对应数据表中的字段. 好处: 1.对对象实体的封装,体现OO思想. 2.属性可以 ...

  8. Problem for Nazar CodeForces - 1151C (前缀和)

    Problem for Nazar Nazar, a student of the scientific lyceum of the Kingdom of Kremland, is known for ...

  9. sublime text2设置快捷键打开浏览器

    1 编辑一个py文件,内容如下: import sublime, sublime_plugin import webbrowser url_map = { 'C:\\server\\www\\' : ...

  10. 【范式与函数依赖】3NF与BCNF的区别

    *本文中码指代候选码,主属性为构成码的属性. 先简要引入几个概念 图1 图2 单拿出来我认为不是很好理解的3NF和BCNF详细的说说. 书上写了,BCNF是完善后的3NF.从图2中显然得出,1-3NF ...