BZOJ 3160 萬徑人蹤滅 FFT 回文串

2022-04-30 02:30:11 字數 404 閱讀 7581

【題意】給定只含'a'和'b'字串s,求不全連續的回文子串行數。n<=10^5。

【演算法】fft+回文串

【題解】不全連續的回文子串行數=回文子串行總數-回文子串數。

回文子串數可以用回文串演算法(manacher,pam,二分+hash)輕鬆計算。

設f[i]表示以i為對稱中心的對稱字元對數,那麼 i 對答案的貢獻是$2^-1$,同時容易列出f[i]的計算公式:

$$f[i]=\sum_^[s_j=s_]$$

令a=0,b=1,那麼有:

$$f[i]=\sum_^s_j*s_$$

這是乙個卷積的形式,將上屆擴充套件到2*i就可以計算了,同理計算a=1,b=0。

同理計算以i和i+1中間為對稱中心的答案。

也可以用manacher那種方式處理字串。

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...