回文树
文章平均质量分 54
_beginend
这个作者很懒,什么都没留下…
展开
-
bzoj 3676: [Apio2014]回文串 manachar+后缀自动机+倍增(回文树)
题意考虑一个只包含小写字母的字符串s。我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度。请你求出s的所有回文子串中的最大出现值。 n<=300000分析因为自己对马拉车的性质不太熟悉,所以一开始没做出来。 考虑在跑马拉车算法的时候,所有本质不同的回文串必然包含在所有能使mx增加的回文串内,也就是最多只有O(n)个。那么我们只要求出后缀自动机,然后每找到一个回文串就扔进后缀自原创 2017-04-09 20:47:28 · 457 阅读 · 0 评论 -
Alphadog 回文树+lct
题意 sig=1表示强制在线。分析真是一道神题。 首先可以对该字符串建立回文树,那么两个前缀的lcp就是其分别对应回文树上的节点的lca。那么问题就变成了动态维护每个前缀在回文树上对应的点两两之间lca的长度和。 设len[i]表示回文树第i个节点对应回文串的长度,size[i]表示有多少个前缀对应这个节点。那么答案就是∑szi=1∑szj=isize[i]∗size[j]∗len[lca(原创 2017-07-13 21:11:51 · 452 阅读 · 0 评论 -
bzoj 4044: [Cerc2014] Virus synthesis 回文树
题意你要用ATGC四个字母用两种操作拼出给定的串: 1.将其中一个字符放在已有串开头或者结尾 2.将已有串复制,然后reverse,再接在已有串的头部或者尾部 一开始已有串为空。求最少操作次数。 len分析首先有一个结论,就是组成一个偶回文串的最后一步一定是操作二。 这样的话我们可以把回文树搞出来然后dp。 设f[i]表示建出回文串i的最少步数。 f[长度为0的偶原创 2018-01-18 21:39:57 · 322 阅读 · 0 评论 -
Codeforces 932G Palindrome Partition dp+回文树
题意给出一个长度为偶数的字符串S,要求把S分成k部分,其中k为任意偶数,设为a[1..k],且满足对于任意的i,有a[i]=a[k-i+1]。问划分的方案数。 n<=1000000分析刚了一个下午的题,感觉学到了很多新东西。 首先直接做显然不可做,考虑把S变成S[1]S[n]S[2]S[n-1]…S[n/2]S[n/2+1]的形式,不难发现对于原来划分方案中的a[i]和a...原创 2018-02-27 19:56:32 · 812 阅读 · 1 评论 -
Codeforces 17E Palisection 回文树
题意给出一个长度为n的字符串S,问S有多少个回文子串存在相交关系。 n<=2000000分析正难则反,考虑如何求不相交的回文子串数量。 通过回文树求出f[i]表示以i为结尾的回文子串数量,g[i]表示以i为开头的回文子串数量。 然后答案就是∑ni=1f[i]∗∑nj=i+1g[j]∑i=1nf[i]∗∑j=i+1ng[j]\sum_{i=1}^nf[i]*\sum_{j...原创 2018-03-10 16:24:12 · 280 阅读 · 0 评论 -
bzoj 2342: [Shoi2011]双倍回文 回文树
题意给一个字符串S,求S一个最长的子串T满足T的长度是4的倍数,T是回文串且T的前半部分也是回文串。 |S|<=500000分析先建出回文树,注意到T必然是回文树上的一个节点,且T的后半部分必然是该节点fauk树上的祖先。 那么我们就在fail树上遍历,同时记录搜索栈中每种长度的出现次数即可。代码#include<iostream>#incl...原创 2018-03-10 16:53:48 · 201 阅读 · 0 评论 -
Codeforces 961F k-substrings 回文树+并查集
题意给出一个字符串S,对于所有的i≤⌈n2⌉i≤⌈n2⌉i\le\lceil\frac{n}{2}\rceil,求最长的奇数kkk使得 k≤n−i∗2+2k≤n−i∗2+2k\le n-i*2+2 S[i,i+k−1]=S[n−i−k+2,n−i+1]S[i,i+k−1]=S[n−i−k+2,n−i+1]S[i,i+k-1]=S[n-i-k+2,n-i+1]。 n≤106n≤106n\l...原创 2018-04-06 14:59:37 · 567 阅读 · 0 评论