字符串
文章平均质量分 76
dyx心心
这个作者很懒,什么都没留下…
展开
-
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 · 6912 阅读 · 0 评论 -
拓展kmp算法总结
算法总结第二弹,上次总结了下kmp,这次就来拓展kmp吧。拓展kmp算法是对KMP算法的扩展,它解决如下问题:定义母串S,和字串T,设S的长度为n,T的长度为m,求T与S的每一个后缀的最长公共前缀,也就是说,设extend数组,extend[i]表示T与S[i,n-1]的最长公共前缀,要求出所有extend[i](0注意到,如果有一个位置extend[i]=m,则表示T在S中出现,而且是在原创 2014-12-09 22:02:46 · 25296 阅读 · 15 评论 -
Manacher算法总结
Manacher算法算法总结第三弹 manacher算法,前面讲了两个字符串相算法——kmp和拓展kmp,这次来还是来总结一个字符串算法,manacher算法,我习惯叫他 “马拉车”算法。相对于前面介绍的两个算法,Manacher算法的应用范围要狭窄得多,但是它的思想和Z算法有很多共通支出,所以在这里介绍一下。Manacher算法是查找一个字符串的最长回文子串的线性算法。在介绍算法原创 2014-12-21 16:10:27 · 43921 阅读 · 39 评论 -
kmp算法总结
搞ACM也有三年了,期间学习了不少算法,到12月把上海站打完也要成退役狗了。最近突然想把学过的一些算法回过头来好好总结一下,于是就有了我的算法总结系列。这是这个系列的开端,所以先写一个简单点的算法,以后会慢慢复习一些复杂的算法,最后还是希望自己能够坚持下去吧。KMP算法KMP算法是一种线性时间复杂度的字符串匹配算法,它是对BF(Brute-Force,最基本的字符串匹配算法)的改进。对原创 2014-11-20 16:00:16 · 10034 阅读 · 5 评论 -
AC自动机+DP小结 (一)
好久没有更新博客了,最近真是懒到家了,南京赛前重点复习了下AC自动机+DP方面的题,写下来总结一下。HDU 2457 DNA repairhttp://acm.hdu.edu.cn/showproblem.php?pid=2457题意:原创 2013-11-13 11:12:37 · 5551 阅读 · 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 · 6767 阅读 · 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 · 7385 阅读 · 5 评论 -
hdu 2896 病毒侵袭 (AC自动机)
题目大意:给你一堆病毒串,再给你一些网站,问每个网站是否包含病毒串,若包括,包括哪几个病毒串,还有一共有几个网站包含病毒串。啊啊,自己第一道AC自动机的题,还是比较简单的模板题吧,过几天要总结一下AC自动机呀。思路很简单了,将所有病毒串构成trie树,然后求AC自动机,再用每个网站在AC自动机上跑就行了。跑的时候开一个数组记录每个网站包含的病毒串。每经过一个节点由失败指针向上移,看原创 2013-05-16 22:01:34 · 978 阅读 · 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 · 8242 阅读 · 0 评论 -
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 · 7565 阅读 · 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 · 7816 阅读 · 0 评论 -
poj 1509 字符串的最小表示法 (SAM 后缀自动机)
http://poj.org/problem?id=1509题意:就是求一个字符串的最小表示法开头字符的位置,如果有多个,求最小的位置。 思路:这道题用后缀自动机来做本身就是闲着,有点大材小用的感觉,这道题有别的更加精简的算法的,时间复杂度也为O(n),但是这里用SAM做能对SAM有更加清晰的认识,纯粹是为了练习SAM吧。将原字符S串复制一下加到原字符串之后变成SS,则我们便是要求原创 2013-03-24 20:46:00 · 6682 阅读 · 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 · 6537 阅读 · 3 评论 -
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 · 6439 阅读 · 0 评论 -
HDU 3518 Boring counting(后缀自动机 SAM)
题意:求一个字符串中重复出现两次以上且不重叠的不同字串的个数。比如aaaa中 a和aa符合要求,而aaa和aaaa不符合要求。思路:好像标程给的是后缀数组,但我是后缀自动机过的,我们只要在后缀自动机中的每一个状态里,设l,r分别表示在这个状态中的子串集合的最左与最右位置,num表示这个状态中的子串一共出现了多少次。因为在后缀自动机中,每一个状态代表了一类子串,(设一个状态为p)它们的长度范原创 2013-03-24 19:09:11 · 1696 阅读 · 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 · 6591 阅读 · 0 评论 -
trie树总结
Trie树Trie树,又称字典树,是字典的一种存储方式,字典中的每一个单词在Trie树种体现为从根节点出发的路径,路径中每条边代表一个字母,将边连接起来便形成了对应的单词,如图,就是一颗Trie树,其中存储了ab,ac,bc,c,cd五个单词(其中加粗节点表示单词结尾节点)。一:Trie树的基本概念Trie树是由链接的节点所组成的数据原创 2014-12-27 19:49:21 · 1720 阅读 · 0 评论