快速傅利葉變換模板題
演算法理解請看《演算法導論》第30章《多項式與快速傅利葉變換》,至於證明插值唯一性什麼的看不懂也沒關係啦~只要明白這個過程是怎麼算的就ok。
遞迴版:(4252ms 23468kb)
1view code//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()
迭代版:(1228ms 48088kb)(空間浪費了,其實用不了這麼大)
1view code//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()
位逆序置換:(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...