設a[i]=bool(s[i]=='a'),b[i]=bool(s[i]=='b'),考慮a和a、b和b的卷積,由於卷積是對稱的,就可以統計出不連續回文子串個數了。可能說得比較簡略。再用manacher算出連續回文子串個數並減去。
#includeusing namespace std;const int p=1e9+7;
const int n=1<<18;
typedef double flo;
const flo pi=acos((flo)-1);
struct vec;
vec operator+(vec a,vec b);}
vec operator-(vec a,vec b);}
vec operator*(vec a,vec b);}
void fft(vec*c,int n,int d)
for(int i=1;i=k)
(s+=p-f[i]/2)%=p;
} printf("%d\n",s);
}
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的時候做...
bzoj3160 萬徑人蹤滅
題目在上方鏈結 description input output sample input sample output hint source 2013湖北互測week1 首先將字串中間插入 把他們分隔開 題目要求求不連續的回文串的個數 那麼就用總數減去連續的即可 考慮連續的部分 直接用manach...