給定乙個長度為n的小寫字母串。問你有多少對相交的回文子 串(包含也算相交) 。 輸入格式
第一行是字串長度n(1<=n<=2*10^6),第二行字串 輸出格式
相交的回文子串個數%51123987
題解
直接判斷相交的回文串很難
那我們考慮找出所有不相交的回文串
數量就是所有以$i$結尾的回文串數乘以$i$後面的回文串數
以$i$結尾的回文串數就是在fail樹里$i$的深度
然後$i$後面的回文串數只要倒著做一遍再記錄乙個字尾和就好了
然後記$sum$為總共的回文串數,回文串對數就是$sum*(sum-1)/2$
然後減一減就好了
1//minamoto
2 #include3 #include4
const
int n=2e6+5,p=51123987;5
inthead[n],next[n],ver[n],edge[n],e;
6int
len[n],fail[n],cnt[n],dep[n],suf[n],p,q,tot,last;
7char
s[n],ss[n];
8int
n,m,sum,ans;
9 inline int pls(int x,int y)
10 inline int sub(int x,int y)
11 inline int newnode(int
x)14 inline int getfail(int x,int
n)17 inline void
init()
22 inline void add(int u,int v,int
e)25 inline int
get(int u,int
e)29
int ins(int
c)36 ++cnt[last=get(p,c)];return
dep[last];37}
38 inline int
calc()
44int
main()
CF 7D 字串雜湊 回文
定義k 回文串如下 1 任何串 包括空串 都是0 回文 2 乙個長度為n的回文串,若它的前n 2個字元和後n 2個字元都是 k 1 回文,則它是k 回文。現給定乙個串 長度不超過5,000,000 設它的每個字首分別是x 回文,求所有這些x值的和。比如abacaba,a 是1 回文,aba 是2 回...
LeetCode Task17 最長回文子串
5.最長回文子串 記錄奇數回文子串 rb s 0 記錄偶數回文子串 for i in range 1 len s 1 ep 1 擴充套件範圍expand while i ep 0and i ep len s and s i ep s i ep if 2 ep 1 len ra ra s i ep i...
Leetcode talk17最長回文子串
給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 思路 三種思路 思路 1 把每個字母當成回文串的中心 這裡要考慮兩種情況,回文串的長度為奇數或者偶數情...