UOJ 34 多項式乘法

2022-05-05 20:36:08 字數 1835 閱讀 6646

快速傅利葉變換模板題

演算法理解請看《演算法導論》第30章《多項式與快速傅利葉變換》,至於證明插值唯一性什麼的看不懂也沒關係啦~只要明白這個過程是怎麼算的就ok。

遞迴版:(4252ms  23468kb)

1

//uoj 34 遞迴版

2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10

#define rep(i,n) for(int i=0;i11

#define f(i,j,n) for(int i=j;i<=n;++i)

12#define d(i,j,n) for(int i=j;i>=n;--i)

13using

namespace

std;

14const

int n=256256;15

void read(int &v)

18while(ch>='

0'&&ch<='9')

19 v*=sign;20}

21/*

***************tamplate**********************

*/22

const

double pi=acos(-1

);23 typedef complexcomp;

24comp a[n],b[n],c[n];

25void fft(comp a,int n,int

type)

36int

main()

view code

迭代版:(1228ms 48088kb)(空間浪費了,其實用不了這麼大)

1

//uoj 34 迭代版

2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10

#define rep(i,n) for(int i=0;i11

#define f(i,j,n) for(int i=j;i<=n;++i)

12#define d(i,j,n) for(int i=j;i>=n;--i)

13using

namespace

std;

14const

int n=1000086;15

void read(int &v)

18while(ch>='

0'&&ch<='9')

19 v*=sign;20}

21/*

***************tamplate**********************

*/22

const

double pi=acos(-1

);23 typedef complexcomp;

24comp a[n],b[n],c[n];

25int

n,m;

26void fft(comp *a,int n,int

type)

32for(int m=1;m1)40

}41}42

if (type==-1) rep(i,n) a[i].real()/=n;43}

4445

intmain()

view code

位逆序置換:(orz trz爺)(27~30行)

trz:比如我們要把乙個二進位制數加一,不是從最低位開始找到乙個0,把它變成1,它之後的都變0嘛?那麼現在我們有了i的位逆序表示,要求i+1的,不就是從最高位找0嘛,那個迴圈就是幹這個事的。

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

UOJ 34 多項式乘法

fft模板 迭代的還沒會 先寫了個遞迴的 define的pi 我也是神了!少上一位就會wa 模板看的hzwer的 因為 pi較短 所以遞迴的跑的和迭代的一樣快 23333333 還差的幾點 1.acos要用 2.complex要自己寫 yts1999大爺說會被卡 3.要改成迭代的 1 include...