20178 27 萬徑人蹤滅 思考記錄

2021-08-07 11:08:41 字數 618 閱讀 1971

字串的題也可以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的時候做...