字串的題也可以fft、
只要能化成卷積的形式就都可以fft
比如這裡的回文: 對乙個位置:+1 -1 +2 -2 他們和相等,所以對a跑一邊,對b跑一遍,就相當於建出n次多項式然後求係數
注意manacher不要寫錯,漏寫最後一句
注意fft最後一句要寫在外面
碼:#include#include#include#include#include#includeusing namespace std;
#define n 270005
#define p 1000000007
#define pi acos(-1)
typedef complexe;
e a[n],b[n];
int er[n],l=0,cnt,n,i,j,k,p[n],m,r[n];
long long ans;
char ch[n],s[n];
void fft(e *a,int f)
{int i,j,k;
for(i=1;ir[i])swap(a[i],a[r[i]]);
for(i=1;i>1]>>1)|((1&i)<<(l-1));
fft(a,1);for(i=0;i
萬徑人蹤滅(FFT manacher)
傳送門 這題 我覺得像我這樣的菜雞選手難以想出來 題目要求求出一些子串行,使得其關於某個位置是對稱的,而且不能是連續一段,求這樣的子串行的個數。這個直接求很困難,但是我們可以先求出所有關於某個位置對稱的子串行,最後減去子串的個數。子串個數可以用 manacher 求,至於子串行的話,我們假設以第 i...
BZOJ3160 萬徑人蹤滅
對於每個可以作為對稱軸的位置,我們算出以其為對稱軸有多少對位置和字元是對稱的,設為t i 若不考慮不能連續,則我們可以從這t i 對里任選出來任意對,都是可行的答案,且不重不漏,所以不考慮不能連續的情況的答案為sigma 2 t i 1,考慮不能是連續子串,再減去回文子串的數量即可 回文子串數量ma...
BZOJ 3160 萬徑人蹤滅
給定乙個由 a 和 b 構成的字串,求不連續回文子串行的個數。正難則反我們考慮容斥。對於連續的回文字串顯然是一次馬拉車就可以很好的求出來的,那我們設f i 表示以i為中心的對稱字元對數量,顯然答案就是 2 n 1 12f i 1 那麼我們的問題就轉變成了怎麼求出f i 我們考慮當這個字元為a的時候做...