后缀自动机
文章平均质量分 81
dyx心心
这个作者很懒,什么都没留下…
展开
-
HDU 3518 Boring counting(后缀自动机 SAM)
题意:求一个字符串中重复出现两次以上且不重叠的不同字串的个数。比如aaaa中 a和aa符合要求,而aaa和aaaa不符合要求。思路:好像标程给的是后缀数组,但我是后缀自动机过的,我们只要在后缀自动机中的每一个状态里,设l,r分别表示在这个状态中的子串集合的最左与最右位置,num表示这个状态中的子串一共出现了多少次。因为在后缀自动机中,每一个状态代表了一类子串,(设一个状态为p)它们的长度范原创 2013-03-24 19:09:11 · 1694 阅读 · 0 评论 -
2013多校联合4 1010 K-string (hdu 4641)
http://acm.hdu.edu.cn/showproblem.php?pid=4641K-stringTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 102400/131072 K (Java/Others)Total Submission(s): 24 Accepted Submission(原创 2013-08-01 20:04:58 · 7685 阅读 · 0 评论 -
2013多校联合 3 B Reincarnation (hdu 4622)
http://acm.hdu.edu.cn/showproblem.php?pid=4622ReincarnationTime Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 92 Accepted Submi原创 2013-07-30 19:39:35 · 7371 阅读 · 5 评论 -
hdu 4416 Good Article Good sentence (后缀自动机 SAM)
2012杭州网络赛的一道题,后缀数组后缀自动机都行吧。题目大意:给一个字符串S和一系列字符串T1~Tn,问在S中有多少个不同子串满足它不是T1~Tn中任意一个字符串的子串。 思路:我们先构造S的后缀自动机,然后将每一个Ti在S的SAM上做匹配,类似于LCS,在S中的每一个状态记录一个变量deep,表示T1~Tn,在该状态能匹配的最大长度是多少,将每一个Ti匹配完之后,我们将S的SAM做原创 2013-04-16 10:36:18 · 7551 阅读 · 0 评论 -
codeforces 235 C Cyclical Quest (后缀自动机 SAM)
http://codeforces.com/problemset/problem/235/C陈立杰出的后缀自动机,过的人挺少,不过还算是一道中规中矩的后缀自动机吧。题目大意:给一个字符串S,再给一个字符串T,设T的长度为len,问T的循环串在S中出现的次数,这里循环串的定义是:对于一个长度为len的字符串,我们把它首尾相接,然后从任意位置开始走len步所得到的串我们叫做T的循环串。如aba原创 2013-04-16 10:13:21 · 8229 阅读 · 0 评论 -
codeforces 127D Password (后缀自动机 SAM)
http://codeforces.com/problemset/problem/127/D题意:求一个字符串S的最长子串,使得它同时是S的前缀,后缀和中缀。思路:这道题有多种方法,这里介绍SAM的方法,我们先构造S的SAM,对于SAM的每一个状态,设num为其所代表字串在S中出现的个数,r为其代表子串在S中出现的最右位置(这两个量由SAM的性质可以拓扑排序后自底向上求出)。然后用原创 2013-03-26 20:37:33 · 6436 阅读 · 0 评论 -
spoj 1811 LCS (后缀自动机 SAM)
http://www.spoj.com/problems/LCS/题意:求两个字符串A,B的最长公共子串。字符串长度不超过250000。 思路:这应该算是后缀自动机的经典应用了吧,我们先构造A的SAM,然后用A的SAM一次读入B的每一个字符,初始时状态在root处,此时最大匹配数为tmp=0,(这里的最大匹配数是指以当前读入的字符结尾,往前能匹配的最大长度),设当前到达的状态为p,最大原创 2013-03-25 21:20:31 · 7802 阅读 · 0 评论 -
poj 1509 字符串的最小表示法 (SAM 后缀自动机)
http://poj.org/problem?id=1509题意:就是求一个字符串的最小表示法开头字符的位置,如果有多个,求最小的位置。 思路:这道题用后缀自动机来做本身就是闲着,有点大材小用的感觉,这道题有别的更加精简的算法的,时间复杂度也为O(n),但是这里用SAM做能对SAM有更加清晰的认识,纯粹是为了练习SAM吧。将原字符S串复制一下加到原字符串之后变成SS,则我们便是要求原创 2013-03-24 20:46:00 · 6680 阅读 · 0 评论 -
codeforces 123 D String(后缀自动机 SAM)
http://codeforces.com/problemset/problem/123/D题意:给你一个字符串S,定义一个函数F(S,x),其中x为S中的字串,F(S,x)的定义太麻烦啦,其实就是设x在S中出现了n次,则F(S,x)=n*(n+1)/2。要你求对于所有的x,F(S,x)的和。 思路:裸的后缀自动机吧,首先设num为SAM中一个状态所表示的子串的出现次数,这个由拓扑排序原创 2013-03-24 19:32:25 · 6585 阅读 · 0 评论 -
codeoforces 271 D (后缀自动机 SAM)
http://codeforces.com/problemset/problem/271/D题意:给你一个字符串S,然后定义每一个字符是”好的‘或是”坏的“,求S中包含不超过k个坏字符的不同字串的个数。 思路:这道题可以用哈希和SET过的,但是太慢啦,我觉得正解应该是SA或者SAM,下面介绍SAM的做法。我们构造S的SAM,然后在SAM的每一个状态维护sum,表示该状态 下的子串包原创 2013-03-27 10:32:44 · 6535 阅读 · 3 评论 -
spoj 1812 LCS2 (后缀自动机)
http://www.spoj.com/problems/LCS2/题意:求多个串的最长公共子串。每个字符串不超过100000 思路:也是SAM的经典应用了,基本思路和LCS一样(如果不太清楚的可以先看看这里http://blog.csdn.net/dyx404514/article/details/8718963)首先还是构造第一个字符串的SAM,我们在SAM的每个状态里多维护几原创 2013-03-25 21:45:56 · 6911 阅读 · 0 评论 -
HDU 4691 Front compression (2013 多校联合9 1006)
http://acm.hdu.edu.cn/showproblem.php?pid=4691Front compressionTime Limit: 5000/5000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)Total Submission(s): 231 Accepted S原创 2013-08-20 20:45:41 · 6763 阅读 · 0 评论