BZOJ3160 萬徑人蹤滅

2022-05-03 15:48:27 字數 970 閱讀 7222

由於正向求是否有斷開的不好求左右匹配數,那麼我們換乙個角度:回文串總數-連續情況

顯然,連續情況manacher一下就是\(\sum_^ p_i\),其中\(2n\)是因為還有偶長度的回文串,需要新增特殊字元。

然後求總數就是\(\sum(2^-1)\)。

其中\(f_i\)為以i位置為對稱軸匹配字元的個數。-1是空集情況。

這個可以直接fft求,a,b分開計算,計算a的時候將ch[i]==a的位置賦為1,然後fft就可以得出f。

#include#include#include#include#include#includeusing namespace std;

#define ll long long

#define pi 3.1415926535

const ll mod = 1e9+7;

inline ll read()

const ll maxn = 4e5+5;

const ll inf = 2147483600;

char str2[maxn+1],str[maxn+1]; ll n;

ll len[maxn+1],f[maxn+1];

ll lim=1,l,r[maxn+1];

struct cpx

}a[maxn+1],b[maxn+1];

cpx operator + (cpx a,cpx b)

cpx operator - (cpx a,cpx b)

cpx operator * (cpx a,cpx b)

ll m; ll rev[maxn+1];

inline void fft(cpx *a,ll type)

for(ll i=1;i<=2*n;i++) ans=(ans-len[i]/2+mod)%mod;

printf("%lld\n",ans);

return 0;

}

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