后缀数组
KetchupZ
退役acmer一名,CCPC银+ICPC铜(欢迎大家访问我的Github地址:https://github.com/LieLieLiekey)
展开
-
Comet OJ - 2019国庆欢乐赛(赛后整理)
Comet OJ - 2019国庆欢乐赛(赛后整理) 比赛链接:传送门 PS: 做题失误: A题wa了好久不知道为什么,后来才知道乘法爆long long了 B题思路错了,应该在想清楚些。 比赛过程中就A了 4道题A,B,C,E,赛后补题两道D1,H。至于G题后缀数组,如果今天学会了就补上。 G题后缀数组,但是因为把长度int定义为char,导致wa,debug的很长时间。希望以后不要犯 时间:...原创 2019-10-04 20:14:16 · 269 阅读 · 0 评论 -
# P4248 [AHOI2013]差异 (后缀数组+单调栈)
P4248 [AHOI2013]差异 (后缀数组+单调栈) 题目链接:传送门 正文: 首先对于这个公式的前两项我们可以快速求出,为(1+n)∗n∗(n−1)/2(1+n)*n*(n-1)/2(1+n)∗n∗(n−1)/2。所以我们只需考虑最后一项的和,又因为每个TiT_iTi对应排序后的后缀的rank[i]rank[i]rank[i]位置,所以这步可以转化为在排序后的后缀数组上统计答案。 首先最...原创 2019-10-05 11:02:46 · 138 阅读 · 0 评论 -
后缀数组小结
后缀数组 后缀排序后的序列(信息:sa[],height[],rank[])有诸多性质,要灵活应用,并且一定要记得,一个字符串的子串就是某个后缀的前缀,那么子串之间的关系在后缀数组上非常明显! 后缀数组经典问题 1.求两后缀的最长公共前缀——LCP(a,b)。 LCP(a,b)定义为后缀a与后缀b的最长相同前缀的长度,设x=rank[a],y=rank[b]x = rank\left\lbrack...原创 2019-10-05 19:26:29 · 249 阅读 · 0 评论 -
POJ 2774求两字符串的最长公共子串(后缀数组)
POJ 2774求两字符串的最长公共子串(后缀数组) 题目链接:传送门 思路: 大概就是枚举s2(s1)的每个后缀,查看对应的s1(s2)的后缀与自己的最长前缀长度是多少。 我们可以把字符串s1和s2拼接到一起,中间用’#‘连接(’#'只是代表比字符集任意一个字符小的字符),然后求出拼接后字符串的后缀数组,在排序后的后缀数组上排名从小到大遍历,并同时记下左边最近的s1(s2)的后缀的位置p1(p2...原创 2019-10-05 20:33:32 · 225 阅读 · 0 评论 -
POJ1743 Musical Theme (后缀数组,不可重叠最长重复子串)
POJ1743 Musical Theme (后缀数组,不可重叠最长重复子串) 题目链接:传送门 思路: 首先可以知道对于两个相同旋律的拍子(即两个拍子全部增加某个值后会相同),假设长度为k,那么拍子的后k-1个数与他们的前一个数的差都是相同的。 所以我们可以将数组转化为差数组,d[1]=d[1]=d[1]=无效值,然后要求从差数组中找到长度最长的两个子序列满足,子序列不重叠且间隔为至少...原创 2019-10-06 13:50:08 · 188 阅读 · 0 评论 -
POJ - 3294 - Life Forms(后缀数组,二分+分组技巧)
POJ - 3294 - Life Forms(后缀数组,二分+分组技巧) 题目链接:传送门 思路: part1 对于n个字符串,我们只需要找至少在n/2+1个字符串出现过的最长子串即可。 part2 如果k=1,我们只需输出最长的字符串即可(这里n肯定等于1,即本身) 否则我们首先将这n个字符串用不相同的特殊字符连接成一个字符串S,并记录每个下标位置属于哪个字符串。 二分...原创 2019-10-07 16:03:15 · 227 阅读 · 0 评论