随笔分类 - 后缀数组
摘要:题目链接:http://uoj.ac/problem/131 题意:给出一个字符串,第i个字符对应的值为a[i], 对于i∈[0,n),求最长公共前缀大于等于i的字串对个数,并求这些字符串对开头对应值相乘最大值。n=3*10^5 题解: 学了个厉害的东西啊。。。 正解好像是sa+并查集(合并heig
阅读全文
摘要:题意:UVU形式的串的个数,V的长度规定,U要一样,位置不同即为不同字串 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=&problem=1770 题解
阅读全文
摘要:这题曾经用sam打过,现在学sa再来做一遍。 基本思路:计算A所有的后缀和B所有后缀之间的最长公共前缀。 分组之后,假设现在是做B的后缀。前面的串能和当前的B后缀产生的公共前缀必定是从前往后单调递增的,每次与h[i]取min时必定将栈尾一些长的全部取出来,搞成一个短的。 所以就开一个栈,栈里存的是长
阅读全文
摘要:题意:求不同回文串的个数 n<=10^5 题解: 先按照manacher的构造方法改造一遍串,然后跑一遍manacher。 如ababa--> $#a#b#a#b#a#@ 然后跑一遍后缀数组。 对于一个后缀sa[i]~cl(cl为字符串的总长),我们本来是要加上以sa[i]为中心的回文串的个数p[s
阅读全文
摘要:题意:求n个串的最长公共子串,子串出现在一个串中可以是它的反转串出现。总长<=10^4. 题解: 对于每个串,把反转串也连进去。二分长度,分组,判断每个组。 这一题我曾经用kmp暴力水过。。贴一下代码
阅读全文
摘要:1.注意每两个串之间的连接符要不一样。 2.分组的时候要注意最后一组啊!又漏了! 3.开数组要考虑连接符的数量。100010是不够的至少要101000。
阅读全文
摘要:题意:给定一个串,长度<=10^5,求它重复次数最多的连续重复子串(输出字典序最小的那个)。 例如ccabcabc,答案就是abcabc 一开始没想清楚,结果调了好久。 原理: 按照L划分,因为相邻两个i之间隔着一个L,s[i*L]和s[(i+1)*L]必定是真正循环节的同一个位置。 对于当前的L,
阅读全文
摘要:我真的是。。调了一百年。。 傻逼的人生。。 而且这题好像可以用sam做哎!我Y出了一个奇怪的办法。。 好吧sam是不能做这题的。搞错了。 说说后缀数组好了。。 搞后缀数组 然后我们要二分一个子串,判断是否有一种划分方法,满足划分出来的所有串的最大子串不超过这个串。 二分是第now个后缀 二分第now
阅读全文
摘要:http://poj.org/problem?id=1743 这题是一道后缀数组的经典例题:求不可重叠最长重复子串。 题意: 有N(1 <= N <=20000)个音符的序列来表示一首乐曲,每个音符都是1..88范围内的整数,现在要找一个重复的主题。“主题”是整个音符序列的一个子串,它需要满足如下条
阅读全文

浙公网安备 33010602011771号