随笔分类 -  后缀数组

摘要:题目链接:http://poj.org/problem?id=2774 后缀数组真的太强大了,原本dp是O(nm)的复杂度,在这里只需要O(n+m)。 做法:将两个串中间夹一个未出现过的字符接起来,然后做一次后缀数组,得到的height相邻两个排名的后缀,在串中的位置如果满足在分界符左右两侧,就更新 阅读全文
posted @ 2017-08-10 10:54 ACMsong 阅读(753) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=3693 枚举长度L,看长度为L的子串最多能重复出现几次,首先,能出现1次是肯定的,然后看是否能出现两次及以上。由抽屉原理,这个子串出现次数>=2,那么必定会覆盖s[0],s[L],s[2L],...中相邻的两个,枚举是哪两个。对于覆盖了 阅读全文
posted @ 2017-08-07 23:44 ACMsong 阅读(1000) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/contest/70655#problem/C 后缀数组的又一神奇应用。不同子串的个数,实际上就是所有后缀的不同前缀的个数。 考虑所有的后缀按照rank排好了,我们现在已知height,也就是相邻的两个的最长公共前缀是多少。那么不同的子串个数怎么统计呢 阅读全文
posted @ 2017-07-23 00:10 ACMsong 阅读(989) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=3261 这个是可以交叉的重复串,所以用height就可以了,但是题目说让重复k次以上,也就是直接做一个k-1长度的滑窗最小值,从这些最小值里取最大即可。 这里其实为了节省空间可以先给数字离散化一下,这样就只有20000了,不过不离散化空 阅读全文
posted @ 2017-07-22 23:45 ACMsong 阅读(261) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=1743 首先,musical theme只与前后位置的增减关系有关,而与绝对的数值无关,因此想到做一次差分。 然后对于差分后的数组,找到最长的出现两次(或两次以上)的一个子串即可。这个如果说两个子串可以交叉的话就好做了,直接取heigh 阅读全文
posted @ 2017-07-22 21:31 ACMsong 阅读(238) 评论(0) 推荐(0)