洛谷4721 模板 分治 FFT

2022-05-14 13:54:08 字數 672 閱讀 8946

點此看題面

大致題意:給定\(g_\),求\(f_\),滿足\(f_0=1,f_i=\sum_^if_g_j(i>0)\)。

話說為什麼分治fft的板子要求寫的卻是分治ntt。

考慮\(cdq\)分治,每次先處理左區間,然後求出左區間對右區間的貢獻(做範圍為區間長度的卷積),接著再遞迴處理右區間。

方便起見可以把一開始給定的\(n\)變成\(2\)的冪。

其實也挺簡單的,主要是當個模板題來寫一寫。。。

#include#define tp template#define ts template#define reg register

#define ri reg int

#define con const

#define ci con int&

#define i inline

#define w while

#define n 100000

#define x 998244353

using namespace std;

int n,f[2*n+5],g[2*n+5];

i int qp(ri x,ri y)

namespace poly

}int main()

洛谷P4721 模板 分治 FFT

題目大意 給定長度為 n 1 的陣列 g 求 f 要求 f i sum if g j f 0 1 題解 直接求複雜度是 o n 2 明顯不可以通過此題 分治 fft 可以用 cdq 分治,先求出 f 可以發現這部分對區間的 f 的貢獻是 f g 卷出來加到對應位置就行了,複雜度 o n log 2 ...

洛谷 P4721 模板 分治 FFT 解題報告

也可用多項式求逆解決。給定長度為 n 1 的陣列 g 1 g 2 dots,g n 1 求 f 0 f 1 dots,f n 1 其中 f i sum if i j g j 邊界為 f 0 1 答案模 998244353 第一行乙個正整數 n 第二行共 n 1 個非負整數 g 1 g 2 dots,...

luoguP4721 模板 分治 FFT

luogu 給定長度為 n 1 的陣列 g 1 g 2 g n 1 求 f 0 f 1 f n 1 其中 f i sum if i j g j 邊界為 f 0 1 答案模 998244353 分治 ntt。跑900 ms 其實limit只要設到區間長度就可以了,其他的是用不到的。對前半部分也沒得影響...