快速傅利葉變換 UOJ 34 多項式乘法

2022-05-20 08:02:43 字數 2819 閱讀 5000

這是一道模板題。

給你兩個多項式,請輸出乘起來後的多項式。

輸入格式

第一行兩個整數 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+x

2)=1

+4x+

5x2+

2x3。

限制與約定 0≤

n,m≤

1050≤n

,m≤105

,保證輸入中的係數大於等於 00 且小於等於 99。

時間限制:1s1s

空間限制:256mb

如題目,這道題就是快速傅利葉變換的模板題,我在此粘模板,感謝quack_quack

大神的講解。

#include

#include

#include

#include

#define maxn 300000

using

namespace

std;

int n,m,n;

struct cpx

cpx(double rr,double ii)

inline cpx operator+(const cpx &x)

inline cpx operator-(const cpx&x)

inline cpx operator*(const cpx&x)

inline

void

operator*=(const cpx&x)

}a[maxn+10],b[maxn+10],c[maxn+10],d[maxn+10];

template

void read(t &x)

}void read()

inline cpx cpx_pow(double n)

void fft(cpx *in,cpx *out,int step,int size,int dir)

fft(in,out,(step<<1),(size>>1),dir);

fft(in+step,out+(size>>1),(step<<1),(size>>1),dir);

int t=size>>1;

cpx w(1,0),w1(cos(dir*2*m_pi/size),sin(dir*2*m_pi/size)),tt;

for(int i=0;i>1)];

tt=w*odd;

out[i]=even+tt;

out[i+t]=even-tt;

}}void solve()

void print()

int main()

#include

#include

#include

#include

#define maxn 300000

using

namespace

std;

template

void read(t &x)

}struct cpx

cpx(double rr,double ii)

inline cpx operator+(const cpx &x)const

inline cpx operator-(const cpx &x)const

inline cpx operator*(const cpx &x)const

inline

void

operator*=(const cpx &x)

}a[maxn+10],b[maxn+10];

int n,m,r[maxn+10],log,len,n;

void read()

void fft(cpx *a,int f)

void print()

int main()

#include

#include

#include

#include

#define maxn 300000

using

namespace

std;

template

void read(t &x)

}struct cpx

cpx(double rr,double ii)

inline cpx operator+(const cpx &x)const

inline cpx operator-(const cpx &x)const

inline cpx operator*(const cpx &x)const

inline

void

operator*=(const cpx &x)

}a[maxn+10],b[maxn+10];

int n,m,len,n;

void read()

void fft(cpx *a,int f)

void print()

int main()

快速傅利葉變換 UOJ 34 多項式乘法

這是一道模板題。給你兩個多項式,請輸出乘起來後的多項式。輸入格式 第一行兩個整數 nn 和 mm,分別表示兩個多項式的次數。第二行 n 1n 1 個整數,分別表示第乙個多項式的 00 到 nn 次項前的係數。第三行 m 1m 1 個整數,分別表示第乙個多項式的 00 到 mm 次項前的係數。輸出格式...

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 次項前的係數。一行...