[挖坑][uoj]多项式乘法 FFT
2017-08-05 20:19
197 查看
#34. 多项式乘法
统计描述
提交
自定义测试
这是一道模板题。
给你两个多项式,请输出乘起来后的多项式。
输入格式
第一行两个整数 nn 和 mm,分别表示两个多项式的次数。第二行 n+1n+1 个整数,分别表示第一个多项式的 00 到 nn 次项前的系数。
第三行 m+1m+1 个整数,分别表示第一个多项式的 00 到 mm 次项前的系数。
输出格式
一行 n+m+1n+m+1 个整数,分别表示乘起来后的多项式的 00 到 n+mn+m 次项前的系数。
样例一
input
1 2 1 2 1 2 1
output
1 4 5 2
explanation
(1+2x)⋅(1+2x+x2)=1+4x+5x2+2x3(1+2x)⋅(1+2x+x2)=1+4x+5x2+2x3。
限制与约定
0≤n,m≤1050≤n,m≤105,保证输入中的系数大于等于 00 且小于等于 99。时间限制:1s1s
空间限制:256MB
由于博主是个智障,数学没学好, 复数都不会,所以此题仅仅是挖坑,抄了下模板
等到noip,我一定会更新(AFO)的
#include<bits/stdc++.h>
#define pi acos(-1)
using namespace std;
typedef complex<double> E;
int n,m;
E a[262145],b[262145];
void fft( E *x, int n, int type ){
if( n == 1 ) return ;
E l[n>>1], r[n>>1];
for( int i = 0; i < n; i += 2 ) l[i>>1] = x[i], r[i>>1] = x[i+1];
fft( l, n>>1, type ); fft( r, n>>1, type );
E wn(cos(2*pi/n),sin(type*2*pi/n)),w(1,0),t;
for( int i = 0; i < n>>1; i++, w *= wn )
t = w*r[i], x[i] = l[i]+t, x[i+(n>>1)] = l[i]-t;
}
int main(){
scanf("%d%d", &n, &m);
for( int i = 0,x; i <= n; i++ ) scanf("%d", &x), a[i] = x;
for( int i = 0,x; i <= m; i++ ) scanf("%d", &x), b[i] = x;
m = n+m; for( n = 1; n <= m; n <<= 1 );
fft( a, n, 1 ); fft( b, n, 1 );
for( int i = 0; i <= n; i++ ) a[i] *= b[i];
fft( a, n, -1 );
for( int i = 0; i <= m; i++ ) printf("%d ", (int)(a[i].real()/n+0.5));
return 0;
}
相关文章推荐
- [省选前题目整理][UOJ 34]多项式乘法(FFT)
- [UOJ#34]多项式乘法(FFT)
- UOJ34 多项式乘法 fft板子
- 【FFT优化】[UOJ#34]多项式乘法
- UOJ 34 多项式乘法(FFT)
- [UOJ 34]多项式乘法(FFT)
- 【UOJ 34】 多项式乘法 (FFT)
- [UOJ#34]多项式乘法(FFT)
- [UOJ34]多项式乘法(快速傅立叶变换FFT)
- uoj 34 多项式乘法(fft入门)
- 【UOJ 34】 #34. 多项式乘法 (FFT)
- [uoj 34 多项式乘法] FFT&NTT 模板
- [uoj 34 多项式乘法] FFT&NTT 模板
- FFT uoj34 多项式乘法
- 利用FFT和逆FFT求多项式乘法 的原理:
- 【Luogu3808】多项式乘法FFT
- UOJ34 多项式乘法(非递归版)
- UOJ 34 多项式乘法 ——NTT
- 洛谷P3803 【模板】多项式乘法(FFT和NTT)
- 【快速傅里叶变换】[UOJ#34]多项式乘法