后缀数组找本质不同第k大子串:考虑属于每个后缀的自己的子串(这个子串的第一个出现位置) 后缀排序,每个后缀贡献的右端点是[height[i]+1, len[i]],而且后缀的顺序走下去,在走每个后缀的子串,恰好就是字典序的顺序 二分位置,找到长度,建反串,lcp找找即可。 ...
分类:
其他好文 时间:
2018-12-25 21:45:45
阅读次数:
119
前言 其实就是个后缀数组模板题 可还是有几个的地方不太明白 思路 先将子串复制一遍,组成长度为2 n的子串 给出的子串一定会在前n个后缀 而且后面的优先级不会影响前面的相对大小 然后求得sa输出就好 输出的时候把没有必要输出的忽略掉就好 代码 cpp include define FOR(i,a,b ...
分类:
Web程序 时间:
2018-12-18 20:30:23
阅读次数:
179
如果是要求左端点最大,直接求出SA,找前缀名次最小值就可以了。虽然现在要左端点最小,但我们已经知道了这个字典序最小的串是什么,找到名次数组上的合法区间求最小值即可。我也不知道为什么我会弃掉这个题,可能太久没写字符串了。 ...
分类:
编程语言 时间:
2018-12-17 02:09:47
阅读次数:
223
后缀数组模板: il void getsa(){ int m=128;//初始m等于字符种类数 for(int i=1;i<=n;i++)c[x[i]=s[i-1]]++; for(int i=2;i<=m;i++)c[i]+=c[i-1]; for(int i=n;i;i--)sa[c[x[i]] ...
分类:
编程语言 时间:
2018-12-16 23:20:24
阅读次数:
256
题外话: 网上的有些博客说的好含糊啊!死磕了一天,单调栈优化都没弄懂,所以我决定用易懂的语言来讲一下后缀数组。 后缀数组: 后缀数组是处理字符串问题的一把利器,它可以实现在线多模板匹配等问题,虽然代码较短,但是很难理解! 变量声明: $1、s[N]$:输入的字符串,下标从$1$开始 $2、sa[N] ...
分类:
编程语言 时间:
2018-12-15 13:34:24
阅读次数:
211
(一)字符串题目的特点 ①广泛性 字符串可以看作字符类型的数组,与数组的排序、查找、调整有关 很多其他类型的题可看作字符串类型的题 ②需要掌握的概念 回文 子串(连续) 子序列(不连续) 前缀树(Trie树) 后缀树和后缀数组 匹配 字典序 ③需要掌握的操作 与数组有关的操作:增删改查 字符的替换 ...
分类:
编程语言 时间:
2018-12-15 11:58:08
阅读次数:
165
rt 明明能哈希为什么要KMP/AC自动机/后缀数组/后缀自动机/后缀树呢??????? 【XSY2361】LCP 给定串 S,m 组询问 (X, Y, L, R): 求 S[X:Y] 与 S[L:R] 的最长公共前缀. 1 #include<algorithm> 2 #include<iostre ...
分类:
其他好文 时间:
2018-12-14 13:01:33
阅读次数:
172
又是一个学了n遍还没学会的算法…… 后缀数组是一种常用的处理字符串问题的数据结构,主要由$sa$和$rank$两个数组组成。以下给出一些定义: $str$表示处理的字符串,长度为$len$。(下标从$0$开始) $[i,j)$表示$str$从$i$到$j 1$的字串。 后缀$i$表示子串$[i,le ...
分类:
编程语言 时间:
2018-12-13 19:27:25
阅读次数:
196
Milk Patterns 产奶的模式 bzoj-1717 Usaco-2006 Dec 题目大意:给定一个字符串,求最长的至少出现了$k$次的子串长度。 注释:$1\le n\le 2\cdot 10^4$,$2\le k\le n$。 想法:不难想到二分答案,现在我们考虑如何验证。 这里就是后缀 ...
分类:
编程语言 时间:
2018-12-12 20:39:02
阅读次数:
221
公共串 bzoj-2946 Poi-2000 题目大意:给定$n$个字符串,求他们的最长公共子串。 注释:$1\le n\le 5$,$1\le minlen<maxlen\le 2000$。 想法: 常规套路。 我们把这$n$个串拼一起,中间加上$n-1$个不同的非字符集数组隔开。 紧接着我们二分 ...
分类:
编程语言 时间:
2018-12-12 20:32:20
阅读次数:
198