【模板】多项式乘法(FFT)
题目描述
给定一个n次多项式F(x),和一个m次多项式G(x)。
请求出F(x)和G(x)的卷积。
输入输出格式
输入格式:
第一行2个正整数n,m。
接下来一行n+1个数字,从低到高表示F(x)的系数。
接下来一行m+1个数字,从低到高表示G(x))的系数。
输出格式:
一行n+m+1个数字,从低到高表示F(x)∗G(x)的系数。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=3000100;
const double Pi=acos(-1.0);
int sum,l,n,m,c[MAXN];
struct Node{
double x,y;
Node (double x1=0,double y1=0){x=x1,y=y1;}
}a[MAXN],b[MAXN];
Node operator * (Node x,Node y){
return Node(x.x*y.x-x.y*y.y,x.x*y.y+x.y*y.x);
}
Node operator + (Node x,Node y){
return Node(x.x+y.x,x.y+y.y);
}
Node operator - (Node x,Node y){
return Node(x.x-y.x,x.y-y.y);
}
void fft(Node *x,int tf){
for (int i=0;i<sum;i++)
if (i<c[i])
swap(x[i],x[c[i]]);
for (int i=1;i<sum;i<<=1){
Node T(cos(Pi/i),tf*sin(Pi/i));
for (int k=0;k<sum;k+=(i<<1)){
Node t(1,0);
for (int j=0;j<i;j++,t=t*T){
Node xx=x[k+j];
Node yy=t*x[k+i+j];
x[k+j]=xx+yy;
x[k+i+j]=xx-yy;
}
}
}
}
int main(){
scanf("%d%d",&n,&m),sum=1;
for (int i=0;i<=n;i++)
scanf("%lf",&a[i].x);
for (int i=0;i<=m;i++)
scanf("%lf",&b[i].x);
while (sum<=n+m) sum<<=1,l++;
for (int i=0;i<sum;i++)
c[i]=(c[i>>1]>>1)|((i&1)<<(l-1));
fft(a,1),fft(b,1);
for (int i=0;i<=sum;i++)
a[i]=a[i]*b[i];
fft(a,-1);
for (int i=0;i<=n+m;i++)
printf("%d ",(int)(a[i].x/sum+0.5));
return 0;
}
【模板】多项式乘法(FFT)的更多相关文章
- 洛谷.3803.[模板]多项式乘法(FFT)
题目链接:洛谷.LOJ. FFT相关:快速傅里叶变换(FFT)详解.FFT总结.从多项式乘法到快速傅里叶变换. 5.4 又看了一遍,这个也不错. 2019.3.7 叕看了一遍,推荐这个. #inclu ...
- P3803 [模板] 多项式乘法 (FFT)
Rt 注意len要为2的幂 #include <bits/stdc++.h> using namespace std; const double PI = acos(-1.0); inli ...
- 多项式乘法(FFT)学习笔记
------------------------------------------本文只探讨多项式乘法(FFT)在信息学中的应用如有错误或不明欢迎指出或提问,在此不胜感激 多项式 1.系数表示法 ...
- @总结 - 1@ 多项式乘法 —— FFT
目录 @0 - 参考资料@ @1 - 一些概念@ @2 - 傅里叶正变换@ @3 - 傅里叶逆变换@ @4 - 迭代实现 FFT@ @5 - 参考代码实现@ @6 - 快速数论变换 NTT@ @7 - ...
- 【learning】多项式乘法&fft
[吐槽] 以前一直觉得这个东西十分高端完全不会qwq 但是向lyy.yxq.yww.dtz等dalao们学习之后发现这个东西的代码实现其实极其简洁 于是趁着还没有忘记赶紧来写一篇博 (说起来这篇东西的 ...
- [uoj#34] [洛谷P3803] 多项式乘法(FFT)
新技能--FFT. 可在 \(O(nlogn)\) 时间内完成多项式在系数表达与点值表达之间的转换. 其中最关键的一点便为单位复数根,有神奇的折半性质. 多项式乘法(即为卷积)的常见形式: \[ C_ ...
- UOJ 34 多项式乘法 FFT 模板
这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入格式 第一行两个整数 nn 和 mm,分别表示两个多项式的次数. 第二行 n+1n+1 个整数,表示第一个多项式的 00 到 nn 次项 ...
- [模板] 多项式: 乘法/求逆/分治fft/微积分/ln/exp/幂
多项式 代码 const int nsz=(int)4e5+50; const ll nmod=998244353,g=3,ginv=332748118ll; //basic math ll qp(l ...
- 【Luogu3808】多项式乘法FFT(FFT)
题目戳我 一道模板题 自己尝试证明了大部分... 剩下的还是没太证出来... 所以就是一个模板放在这里 以后再来补东西吧.... #include<iostream> #include&l ...
随机推荐
- CMake--模块的使用和自定义模块
1.链接外部库 如果程序中使用了外部库,事先并不知道它的头文件和链接库的位置,就要给出头文件和链接库的查找方法,并将他们链接到程序中. FIND_PACKAGE(<name> [major ...
- HTML5经典案例学习-----新元素添加文档结构
直接上代码了,大家如果发现问题了,记得提醒我哦,谢谢啦,嘻嘻 <!DOCTYPE html> <!-- 不区分大小写 --> <html lang="en&qu ...
- java内部类 和外部类的区别
java 内部类和静态内部类的区别 详细连接https://www.cnblogs.com/aademeng/articles/6192954.html 下面说一说内部类(Inner Class)和 ...
- 在python中定义二维数组
发表于 http://liamchzh.0fees.net/?p=234&i=1 一次偶然的机会,发现python中list非常有意思. 先看一段代码 [py]array = [0, 0, 0 ...
- @Autowired 与@Resource的区别(详细)
参考:@Autowired 与@Resource的区别(详细) spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@Pos ...
- mvn clean deploy
如果是 mthrift的话,需要部署,就用 mvn clean deploy; 先进入 cd qcs.appeal.client ,然后执行:mvn clean deploy;
- 去掉dede织梦position当前位置最后一个箭头的方法
理论是,dede的当前位置标签{dedefield name='position'}结构是 首页 > 主栏目 > 子栏目 > ,这就说明,而箭头符号字段数据都是在后台设置后存储在数据 ...
- C# Web开发中弹出对话框的函数[转载]
public void Alert(string str_Message) { ClientScriptManager scriptManager =((Page)System.Web.HttpCon ...
- 为WebRTC 应用部署Turn Server
部署WebRTC 或 SIP p2p 方案时经常会遇到p2p 无法穿透的环境, 这时就是TunServer 的用武之地了. 这里我们使用turnserver-0.7.3 下载confuse依赖库 wg ...
- c++ string类型的定义及方法
1.c++ 有两种风格的字符串形式 c风格字符串 定义及初始化 char a[]={'h','e','l','l','o','\0'} 或者 char a[]="hello&quo ...