随笔分类 -  字符串/数据结构-后缀数组

摘要:应该算是远古时期的一道题了吧,不过感觉挺经典的。 题意是给出三一个字符串s,a,b,求以a开头b结尾的本质不同的字符串数。 由于n不算大,用hash就可以搞,不过这道题是存在复杂度$O(nlogn)$的做法的。 由于要求本质不同,所以可以考虑使用后缀数组来不重复地枚举字符串。 首先用两个不同的其他字 阅读全文
posted @ 2019-10-17 20:08 jrltx 阅读(280) 评论(0) 推荐(0)
摘要:题意:求一个序列中本质不同的连续子序列的最大值之和。 由于要求“本质不同”,所以后缀数组就派上用场了,可以从小到大枚举每个后缀,对于每个sa[i],从sa[i]+ht[i]开始枚举(ht[0]=0),这样就能不重复不遗漏地枚举出每一个子串。 但是这样做,最坏情况仍旧是$O(n^2)$的,可能会被卡掉 阅读全文
posted @ 2019-10-15 21:22 jrltx 阅读(422) 评论(0) 推荐(0)
摘要:题意:给定一个长度为n(n<=150000)的字符串,每个下标i与(i*i+1)%n连边,求从任意下标出发走n步能走出的字典序最大的字符串。 把下标看成结点,由于每个结点有唯一的后继,因此形成的是内向基环树森林,相当于求基环树上字典序最大的路径。 实际上基环树和树一样是可以通过倍增得到走2^k步能走 阅读全文
posted @ 2019-10-09 21:40 jrltx 阅读(305) 评论(0) 推荐(0)
摘要:题意:给你一个长度为n的字符串和m组询问,每组询问给出l,r,k,求s[l,r]的第k次出现的左端点。 解法一: 求出后缀数组,按照排名建主席树,对于每组询问二分或倍增找出主席树上所对应的的左右端点,求第k大的下标即可。 解法二: 建立后缀自动机,对后缀树(fail树)作线段树合并可得到每个结点包含 阅读全文
posted @ 2019-09-12 22:28 jrltx 阅读(390) 评论(0) 推荐(0)
摘要:题意:给你n个字符串,求出在超过一半的字符串中出现的所有子串中最长的子串,按字典序输出。 这道题算是我的一个黑历史了吧,以前我的做法是对这n个字符串建广义后缀自动机,然后在自动机上dfs,交上去AC了,然而事后发现算法假了,出了个数据把自己给hack了... 之前写的太烂了,决定重写一遍。 正确的操 阅读全文
posted @ 2019-09-12 21:16 jrltx 阅读(295) 评论(0) 推荐(0)
摘要:后缀数组: 后缀自动机: 阅读全文
posted @ 2019-07-22 17:13 jrltx 阅读(168) 评论(0) 推荐(0)