![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
回文树
nbl97
这个作者很懒,什么都没留下…
展开
-
bzoj3676 [Apio2014]回文串 (回文树)
题目: 考虑一个只包含小写拉丁字母的字符串s。我们定义s的一个子串t的“出现值”为t在s中的出现次数乘以t的长度。请你求出s的所有回文子串中的最大出现值。 分析: 回文树裸体。借此学习回文树,记录模板。 两个基本原理 对于任何一个串S,它的本质不同的回文串的个数不会超过|S|个 如果在串S后面加入一个字符,新增的本质不同的回文串的个数不会超过1个。 证明 利用数学归纳法来证明 ...原创 2018-09-06 17:37:36 · 182 阅读 · 0 评论 -
bzoj2565 最长双回文串(回文树)
题目: 顺序和逆序读起来完全一样的串叫做回文串。比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同)。 输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串。 分析: 正反建立两棵回文树分别求前缀和后缀即可。 代码: #include <bits/stdc++.h> usin...原创 2018-09-06 20:06:45 · 186 阅读 · 0 评论 -
bzoj2342 [Shoi2011]双倍回文 (回文树)
题意: 在字符串s中寻找一个最长字串,这个子串必须是回文串并且这个字串的前半部分也是回文串。这个最长字串长度是4的倍数。 分析: 对于结点u,它的fail结点就是一个最长回文后缀,再fail一下,就又是一个短了一些的回文后缀,以此类推。对于u,我们只需要一直往上fail,看有没有一个fail结点长度是u的一半,有的话就找到了一个。 将这个过程反向过来,建立一个fail的树,从根节点dfs一...原创 2018-09-10 17:07:17 · 179 阅读 · 0 评论 -
hdu5785 Interesting (回文树)
题意: 找出字符串中所有三元组(i,j,k)使得s[i,j]和s[j+1,k]均为回文串。问所有三元组的i*k的和是多少。 分析: 令中间的j固定,然后计算两边所有的i和k。可以计算出∑i∑i\sum i,∑k∑k\sum k,然后这两个和相乘,就是j固定时所有的i*k的和。 对于第j个字符,可以在回文树上计算出,所有以字符j结尾的回文串个数num[j]和这些回文串的长度总和sum[j],...原创 2018-09-07 16:05:22 · 210 阅读 · 0 评论