BZOJ 2194 快速傅利葉之二 FFT 卷積

2022-04-02 17:04:08 字數 1223 閱讀 1842

題目鏈結

\(descripiton\)

給定\(a[\ ],b[\ ]\),求

\[c[k]=\sum_^a[i]*b[i-k]\ (0\leq k

\(solution\)

(先令\(n=n-1\))

首先往卷積上想。。

\(i\)與\(i-k\)的差值是一定的,但是卷積的形式是

\[c[k]=\sum_^k a[i]*b[k-i]

\]即\(i\)與\(k-i\)的和是一定的。

於是考慮把乙個陣列反轉一下,這裡把\(b[\ ]\)反轉,那麼

\[c[k]=\sum_^n a[i]*b[n+k-i]

\]這樣\(i\)與\(n+k-i\)的和就是一定的了,為\(n+k\),於是令

\[d[n+k]=\sum_^n a[i]*b[n+k-i]

\]這樣就可以\(fft\)求\(d[\ ]\)了。

\[d[n+k]=\sum_^a[i]*b[n+k-i]

\]\(i=0\sim k-1\)和\(i=n+1\sim n+k\)時,要麼\(a[i]=0\)要麼\(b[i]=0\),沒有影響。

所以最後的\(c[k]=d[n+k]\)。

另外這個好像可以(以後)再看看。

//13148kb	1544ms

#include #include #include #include #define gc() getchar()

const int n=263000;//2^=262144 > 2*1e5

const double pi=acos(-1);

int n;

struct complex

complex(double x,double y):x(x),y(y) {}

complex operator + (const complex &a)const

complex operator - (const complex &a)const

complex operator * (const complex &a)const

}a[n],b[n],d[n];

inline int read()

void fft(complex *a,int lim,int opt)

for(int i=2; i<=lim; i<<=1) }

}int main()

bzoj 2194 快速傅利葉之二

time limit 10 sec memory limit 259 mb submit 1314 solved 772 submit status discuss 請計算c k sigma a i b i k 其中 k i n 並且有 n 10 5。a,b中的元素均為小於等於100的非負整數。第一...

BZOJ 2194 快速傅利葉之二

已知 a,b a,b 序列,計算 ck ai bi k ck ai bi k 觀察題目名稱,可以想到fft fft能解決的是形如下面的式子 hk fi gk i hk fi gk i 可以發現,f f 陣列的下標和 g role presentation style position relativ...

bzoj2194 快速傅利葉之二

題目鏈結 給出兩個長度為n的數列a,b。求乙個數列c滿足 c k sum limits na i b i k n le 10 5 長得和卷積很像,觀察一下卷積的形式 c k sum limits ia i b k i 所以先把b陣列翻轉過來。然後所求的式子就變成了 c k sum limits na...