description
給你兩個多項式,請輸出乘起來後的多項式
input
第一行兩個整數
n 和
m,分別表示兩個多項式的次數
第二行n+1
個整數,分別表示第乙個多項式的
0 到
n次項前的係數
第三行m+1
個整數,分別表示第乙個多項式的
0 到
m次項前的係數
output一行n
+m+1
個整數,分別表示乘起來後的多項式的
0 到n+
m次項前的係數
sample input
1 2
1 2
1 2 1
sample output
1 4 5 2
solutionf
ft模版題
code
#include
#include
#include
using
namespace
std;
namespace fastio
}return *p1++;
}inline
bool blank(char ch)
inline
void read(int &x)
inline
void readc(char &x)
#undef buf_size
};using
namespace fastio;
#define maxn 131072+5
const
double pi=acos(-1.0);
struct cp
;} cp operator -(const cp &o)const ;}
cp operator *(const cp &o)const ;}
cp operator *(const
double &o)const ;}
cp operator !() const;}
}w[maxn];
int pos[maxn];
void fft_init(int len)
; for(unsigned i=2;i<=len;i<<=1)
;for(int j=i>>1;j>=0;j-=2)w[j]=w[j>>1];
for(int j=1;j>1;j+=2)w[j]=w[j-1]*g;
for(int j=0;j>1);
for(int l=0;l>1;l++)}}
if(sta==-1)for(int i=0;ivoid fft(int *a,int *b,int n,int m,int *c)
for(int i=0;i1?x[i>>1].b:x[i>>1].a)=a[i];
for(int i=0;i1?y[i>>1].b:y[i>>1].a)=b[i];
int len=1;
while(len<(n+m)>>1)len<<=1;
fft_init(len);
fft(x,len,1),fft(y,len,1);
for(int i=0;i2;i++)
)*0.25;
}for(int i=len/2;iint j=len-1&len-i;
z[i]=x[i]*y[i]-(x[i]-!x[j])*(y[i]-!y[j])*((cp)-w[i^len>>1])*0.25;
}fft(z,len,-1);
for(int i=0;iif(i&1)c[i]=(int)(z[i>>1].b+0.5);
else c[i]=(int)(z[i>>1].a+0.5);
}int n,m,a[maxn],b[maxn],c[maxn<<1];
int main()
FFT優化 UOJ 34 多項式乘法
這是一道模板題。給你兩個多項式,請輸出乘起來後的多項式。第一行兩個整數 n 和 m,分別表示兩個多項式的次數。第二行 n 1 個整數,分別表示第乙個多項式的 0 到 n 次項前的係數。第三行 m 1 個整數,分別表示第乙個多項式的 0 到 m 次項前的係數。一行 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 次項前的係數。一行...