luoguP4721 模板 分治 FFT

2022-02-28 16:50:34 字數 563 閱讀 5614

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只要設到區間長度就可以了,其他的是用不到的。對前半部分也沒得影響。

#include using namespace std;

const int n=4e5+7,mod=998244353;

int read()

int n,len_a,len_b,p,limit;

int f[n],g[n],a[n],b[n],r[n];

int q_pow(int a,int b)

return ans;

}void ntt(int *a,int type)

void solve(int l,int r)

int main()

luogu P4721 模板 分治 FFT

題面傳送門 為什麼寫的是分治ntt啊,有哪位大佬會實數取模的fft教我一下。首先觀察這個東西不是很好搞。因為後面要基於前面的轉移。但是我們發現如果用分治就可以無視這個限制。所以用cdq分治,轉移區間為 l,r 中點 mid 就先把 f 的 l,mid 和 g 的 0,r l 卷起來,然後轉移到後面即...

P4721 模板 分治 FFT

雖然說是fft但是還是寫了一發ntt 笑 然後忘了idft之後要除個n懵逼了好久 以及遞迴的時候忘了邊界無限re 樸素演算法 分治fft 考慮到題目要求求這樣的乙個式子 f x sigma f g 我們可以按定義暴力,然後再鬆式卡常 不是 我們可以發現它長得像乙個卷積一樣,但是因為後面的f值會依賴與...

洛谷4721 模板 分治 FFT

點此看題面 大致題意 給定 g 求 f 滿足 f 0 1,f i sum if g j i 0 話說為什麼分治fft的板子要求寫的卻是分治ntt。考慮 cdq 分治,每次先處理左區間,然後求出左區間對右區間的貢獻 做範圍為區間長度的卷積 接著再遞迴處理右區間。方便起見可以把一開始給定的 n 變成 2...