bzoj 2194 快速傅利葉變換

2021-07-28 02:57:55 字數 1145 閱讀 7200

請計算c[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,並且有 n < = 10 ^ 5。 a,b中的元素均為小於等於100的非負整數。

第一行乙個整數n,接下來n行,第i+2..i+n-1行,每行兩個數,依次表示a[i],b[i] (0 < = i < n)。

輸出n行,每行乙個整數,第i行輸出c[i-1]。

5 3 1

2 4

1 1

2 4

1 424

12 10 6 1

分析題目,將題中給出的式子簡單變換,將b陣列反** ck

=∑i=

kn(a

i⋅bi

−k)→

ck=∑

i=kn

(ai⋅

bn−i

−k)

將c陣列反** cn

−k=∑

i=kn

(ai⋅

bk−i

) 即轉化成了卷積的形式,直接fft求解即可

#include

#define pi acos(-1.0)

#define maxn 300010

//#define debug

using

namespace

std;

int n;

complex

a[maxn], b[maxn];

inline

int read()

return read*sign;

}inline

int power2(int x)

inline

int lg(int n)

inline

int rev(int x, int n)

void fft(complex

a,int n, int flag)

} if (flag == -1)

for (int i = 0; i < n; i++) a[i].real() = int(a[i].real() / n + 0.5);

else

for (int i = 0; i < n; i++) a[i] = a[i];

}}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...