一.字符串公共子串 1.poj2774Long Long Message 要求尽量相同,那么将各个子串连在一起用‘#’连接,查最长height,判一下sa位置就好了 代码: 2.可重复可不对齐公共子串个数。 同理,在两个字符串中间加一个‘#’连在一起。 查询hgt,显然,小于hgt的值都能取到,那么 ...
分类:
编程语言 时间:
2018-10-01 01:04:36
阅读次数:
159
后缀数组理解起来挺难的...... 首先得学一下基数排序。 比如说下面这组数据:11,12,23,15,34,24 基数排序的第一关键字:十位数,第二关键字:个位数。 我们先对第一关键字也就是十位数开个桶hs[]计数: 记完之后应该是这个样子:hs[1]=3,hs[2]=2,hs[3]=1 这些数代 ...
分类:
编程语言 时间:
2018-09-25 20:39:51
阅读次数:
195
题目大意:给出n个数的序列和m,求数列中出现至少m次的最大长度。 本来可以用trie树和ac自动机/trie图搞一搞,但是数据范围太大。 后缀数组+RMQ: ...
分类:
其他好文 时间:
2018-09-25 16:35:17
阅读次数:
140
题目大意:维护一个字符串,支持插入字符和替换字符的操作,以及查询该字符串两个后缀的最长公共前缀长度 乍一看以为是后缀数组,然而并没有可持久化后缀数组(雾) 看题解才知道这是一道splay题,首先要对splay维护区间信息有一定了解 splay维护,插入字符,替换字符 而它的字树内所有儿子的中序遍历的 ...
分类:
Web程序 时间:
2018-09-24 23:18:06
阅读次数:
244
最近学习了一下后缀数组,模板原理以后再看,先记一下一些数组的含义。用以下这张图做例子: rank(i)代表第i个后缀的字典序排名 sa(i)代表排名为i的字典序对应的位置 lcp(i, j)表示suffix(i)和suffix(j)的公共最长前缀 height(i) = lcp(sa(i-1), s ...
分类:
编程语言 时间:
2018-09-20 01:03:12
阅读次数:
174
题意: 给n个字符串,求出最长的子串。使得子串在每个字符串中不重叠地至少出现2次。输出子串长度。 题解: 用后缀数组求出height数组,之后二分答案。check时对height数组进行分组,并维护每个字符串的最前和最后位置。 #include <bits/stdc++.h> using names ...
分类:
其他好文 时间:
2018-09-18 23:55:54
阅读次数:
374
后缀数组板子,给出一个字符串,要求输出sa数组。 首先声明一下各数组的作用。 rank:序列上的点->点权; sa:排名->位置; tmp:辅助数组; ...
分类:
编程语言 时间:
2018-09-18 20:50:49
阅读次数:
198
求一个串中出现次数在[L,R]区间里的子串一共有多少个,后缀数组用出现次数>=L的个数减去出现次数>R的个数就是答案。 //#define test #include<bits/stdc++.h> using namespace std; const int Nmax=250007; const i ...
分类:
其他好文 时间:
2018-09-16 15:22:46
阅读次数:
176
题意: n<=10,len<=1e4 思路: ...
分类:
编程语言 时间:
2018-09-14 21:37:21
阅读次数:
240