随笔分类 -  后缀自动机

HDU 5442 后缀自动机+kmp
摘要:题目大意:给定一个字符串,可理解成环,然后选定一位置,逆时针或顺时针走一遍,希望得到字典序最大,如果同样大,希望找到起始位置最小的,如果还相同,就默认顺时针比赛一直因为处理最小位置出错,一结束就想明白了。。。真是作孽这里正向后缀自动机跑一遍最大的,这样得到的位置肯定是最小的而逆时针最大就反向重建后缀... 阅读全文
posted @ 2015-09-13 16:33 Love风吟 阅读(351) 评论(0) 推荐(0)
COJ 1287 求匹配串在模式串中出现的次数
摘要:这里要在后缀自动机的节点中维护一个从到达当前位置出现的字符串总个数这里新添加进来的节点的状态出现的次数必然为1另外包含所能达到这个节点所能到达的状态一定是将它作为父亲的点那么说明将它作为父亲的点添加进来一定会使它的所有父亲状态数都+1所以直接在添加节点结束后不断向上更新 1 #include 2 ... 阅读全文
posted @ 2015-08-16 16:23 Love风吟 阅读(264) 评论(0) 推荐(0)
SPOJ SUBLEX 求第k小子串
摘要:题目大意:对于一个给定字符串,找到其所有不同的子串中排第k小的子串先构建后缀自动机,然后我们可以将整个后缀自动机看做是一个DAG图,那么我们先进行拓扑排序得到 *b[N]对于每个节点记录一个sc值,表示当前节点往下走可以得到不同的字符串的个数然后从后往前,每次到达一个节点,当前节点sc赋1,然后每个... 阅读全文
posted @ 2015-06-24 19:59 Love风吟 阅读(1146) 评论(0) 推荐(0)
Codeforces 235C
摘要:题目大意:给定一个字符串,接下来再给n个字符串,求原字符串中含有多少个当前给定字符串的循环同构体的字符串的个数以初始字符串构建后缀自动机,在自动机上前进的时候,比如当前需要匹配的字符串为aba,到达某个状态点S我们所希望知道的所有aba出现的次数,因为aba最终到达的是点S,其实可以理解为整个后缀自... 阅读全文
posted @ 2015-06-24 19:10 Love风吟 阅读(555) 评论(0) 推荐(0)
HDU 4622 Reincarnation
摘要:题目大意:给定一个基础字符串,再给多个字符串,求出基础字符串中能得到的不一样的子串的个数未出现在后面多个字符串当中这里以基础子串构建后缀自动机是没问题的后面的多个子串不断在后缀自动机上进行匹配,每次到达一个状态点,就要更新当前点所能达到的其他字符串抵达最大长度mx,那么未能匹配的长度就是cur->l... 阅读全文
posted @ 2015-06-24 02:55 Love风吟 阅读(207) 评论(0) 推荐(0)
HDU 4622 求解区间字符串中的不同子串的个数
摘要:题目大意:给定一个长度l - p->f->l ),也就是以当前点为最后节点所能得到的与之前不重复的子串的个数那么这个问题就很好解决了,共2000个位置,以每一个位置为起点构建一次后缀自动机,一直构建到最后一个字符,过程中不断记录所能得到的子串个数把这个个数动态保存到f[][]数组中那么打好了表,最后... 阅读全文
posted @ 2015-06-24 01:40 Love风吟 阅读(981) 评论(0) 推荐(0)
HDU 4641
摘要:动态更新后缀自动机,每次不断依据当前添加的节点不断往前寻找父节点上字符串最多可出现的次数这里为了减少运算,当父节点已经达到k次就不在往前寻找,因为之前的必然达到k次,也已经统计在内 1 #include 2 #include 3 #include 4 5 using namespace st... 阅读全文
posted @ 2015-06-20 18:15 Love风吟 阅读(281) 评论(0) 推荐(0)
SPOJ NSUBSTR
摘要:题目大意:给定一个字符串,求每个对应的长度能产生的相同子串的最大个数这里构建好后缀自动机之后,再将整个字符串从头到尾扫一遍,然后将每个对应的点上的sc值+1表示从头走到尾的前提下,所能产生的子串能够得到的最大数量为1然后再去考虑其他子串每个后缀自动机上的节点上的长度表示的是当前点所能接收的最大长度的... 阅读全文
posted @ 2015-06-20 16:44 Love风吟 阅读(812) 评论(0) 推荐(0)
SPOJ LCS2 多个串的最长公共子串
摘要:这里串最多有10个,找所有串的最长公共子串这里后缀自动机做,以第一个串建立后缀自动机,后面的串一个个去匹配,每次得到当前串在可到达状态上所能得到的最长后缀长度拿所有串匹配后得到的结果进行计算 1 #include 2 #include 3 #include 4 using namespace ... 阅读全文
posted @ 2015-06-19 02:01 Love风吟 阅读(240) 评论(0) 推荐(0)
SPOJ LCS 后缀自动机找最大公共子串
摘要:这里用第一个字符串构建完成后缀自动机以后不断用第二个字符串从左往右沿着后缀自动机往前走,如能找到,那么当前匹配配数加1如果找不到,那么就不断沿着后缀树不断往前找到所能匹配到当前字符的最大长度,然后将cur节点转移到当前节点即可,再把答案加1记住不断更新所能得到的最大值 1 #include 2 #... 阅读全文
posted @ 2015-06-19 00:57 Love风吟 阅读(324) 评论(0) 推荐(0)
POJ 1509 循环同构的最小表示法
摘要:题目大意:给定一个字符串,可以把一段尾部接到头部,这样找到一个最小的字符串方案一:利用循环同构中找最小表示的方法来解决论文参考http://wenku.baidu.com/view/438cad13a2161479171128b6.html 1 #include 2 #include 3 #in... 阅读全文
posted @ 2015-06-11 12:42 Love风吟 阅读(454) 评论(0) 推荐(0)