bzoj2194 快速傅利葉之二

2022-02-01 18:28:12 字數 1308 閱讀 2664

請計算

\[c[k]=\sum_^ a[i]\times b[i-k]\;(k\leq i < n)

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

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

5

3 12 4

1 12 4

1 4

24

1210

61

\(n\leq 1e5,0 \leq a[i],b[i]\leq 100,a[i],b[i]\in \mathbb\)

乙個比較常見的套路:將某個陣列 \(reverse\) 一下,形成卷積的形式。

比如這個題,我們將 \(a\) 陣列 \(reverse\),原始變成了

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

\]很容易發現這是乙個卷積的形式

\[c[n-k]=\sum_ a[i]\times b[j]

\]最後用 \(fft\) 和 \(ntt\) 解決都可。

**

#include #include #include #include #include using namespace std;

const int maxn = 3e5 + 50, inf = 0x3f3f3f3f;

const double pi = acos (- 1.0);

inline int read ()

inline void write (register int x)

int n, bit, len = 1, rev[maxn];

struct complex

complex (register double a, register double b)

inline complex operator + (const complex &a) const

inline complex operator - (const complex &a) const

inline complex operator * (const complex &a) const

} a[maxn], b[maxn];

inline void fft (register int len, register complex *a, register int opt)

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