這是一道模板題。
給你兩個多項式,請輸出乘起來後的多項式。
第一行兩個整數
n 和
m,分別表示兩個多項式的次數。
第二行 n+
1 個整數,分別表示第乙個多項式的
0 到
n 次項前的係數。
第三行 m+
1 個整數,分別表示第乙個多項式的
0 到
m 次項前的係數。
一行 n+m
+1個整數,分別表示乘起來後的多項式的
0 到 n+
m 次項前的係數。
input
1 2output1 21 2 1
1 4 5 2explanation(1
+2x)
⋅(1+
2x+x
2)=1
+4x+
5x2+
2x3。
0≤n,
m≤105
,保證輸入中的係數大於等於
0 且小於等於 9。
時間限制:1s
空間限制:
256mb
本部落格主要用於存ff
t優化模板.
對於兩個實係數的多項式a(
x),b
(x),長度均為n(
n為2的整次數冪),令 p(
x)=a
(x)+
ib(x
)q(x
)=a(
x)−i
b(x)
fp[k
],fq
[k]為
p(x)
,q(x
)進行df
t後的值. 令x
=2πj
kn f
p[k]
=a(ω
kn)+
ib(ω
kn)=
∑j=0
n−1a
jωjk
n+i∑
j=0n
−1bj
ωjkn
=∑j=
0n−1
(aj+
ibj)
∗(cos(x)
+isin(x)
)fq[
k]=a
(ωkn
)−ib
(ωkn
)=∑j
=0n−
1ajω
jkn−
i∑j=
0n−1
bjωj
kn=∑
j=0n
−1(a
j−ib
j)∗(
cos(x)
+isin(x)
)=∑j
=0n−
1aj∗
cos(x)
+iaj
sin(x)
−ibj
cos(x)
+bjsin(x
)=∑j
=0n−
1(aj
cos(x)
+bjsin(x
))+i
(ajsin(x
)−bj
cos(x)
)=∑j
=0n−
1con
j((a
jcos(x
)+bj
sin(x)
)−i(
ajsin(x)
−bjcos(x
)))=
∑j=0
n−1c
onj(
(ajcos(−
x)−b
jsin(−
x))+
i(aj
sin(−x
)+bj
cos(−x
)))=
∑j=0
n−1c
onj(
aj(cos(−
x)+i
sin(−x
))+i
bj(cos(−
x)+i
sin(−x
)))=
∑j=0
n−1c
onj(
(aj+
ibj)
∗(cos(−x
)+isin(−
x))=
∑j=0
n−1c
onj(
ajω−
jkn+
ibj(
ω−jk
n))=
conj
(a(ω
−kn)
+ib(
ω−kn
))=c
onj(
a(ωn
−kn)
+ib(
(ωn−
kn))
=con
j(fp
[n−k
])這樣我們就可以通過一次dft求出fp
,fq
dft(
a[k]
)=fp
[k]+
fq[k
]2df
t(b[
k])=
fp[k
]−fq
[k]2
i=−i
fp[k
]−fq
[k]2
如果只是做多項式乘法c(
x)=a
(x)∗
b(x)
,直接使n變為
a,b長度的和,然後df
t(c[
k])=
(fp[
k]2−
fq[k
]2)∗
−i4=
(fp[
k]2−
fp[n
−k]2
)∗−i
4
#include
#include
#include
#include
#define maxn 300000
using
namespace
std;
const
double pi=acos(-1);
int n,m,n,ans[maxn+10];
char s[maxn+10];
struct cpx
inline cpx(double r,double i):r(r),i(i)
inline cpx operator+(const cpx &b)const
inline cpx operator-(const cpx &b)const
inline cpx operator*(const cpx &b)const
inline cpx &operator*=(const cpx &b)
inline cpx conj()const
}a[maxn+10],b[maxn+10],t[maxn+10];
void fft(cpx *a,int n,int f)
fft(c,n,-1);
// c refer t
//a[i]=(c[i]+c[k-i])/2
//b[i]=-i(c[i]-c[k-i])/2
//a[i]*b[i]=(c[i]*c[i]-c[k-i]*c[k-i])*((-i)/4)
}void read()
void print()
for(i=n-1;i;i--)
if(ans[i])
break;
for(;i>=0;i--)
printf("%d",ans[i]);
puts("");
}int main()
UOJ 34 多項式乘法(FFT)
description 給你兩個多項式,請輸出乘起來後的多項式 input 第一行兩個整數 n 和 m,分別表示兩個多項式的次數 第二行n 1 個整數,分別表示第乙個多項式的 0 到 n次項前的係數 第三行m 1 個整數,分別表示第乙個多項式的 0 到 m次項前的係數 output一行n m 1 個...
UOJ 34 多項式乘法
快速傅利葉變換 關於fft網上的教材不多,而且大多與演算法問題關係不大。強烈推薦乙個。這個講得真的很不錯 從多項式乘法到快速傅利葉變換 本弱數學知識不夠多,複數 單位根之類的知識都是下午臨時補的。從下午開始看fft,看到晚上,總算大概是把遞迴版fft的思路看懂了吧。迭代版的還沒看懂。有空慢慢鑽研 u...
UOJ 34 多項式乘法
統計這是一道模板題。給你兩個多項式,請輸出乘起來後的多項式。第一行兩個整數 n n 和 mm 分別表示兩個多項式的次數。第二行 n 1 n 1 個整數,分別表示第乙個多項式的 0 0 到 nn 次項前的係數。第三行 m 1 m 1 個整數,分別表示第乙個多項式的 0 0 到 mm 次項前的係數。一行...