Description对于一个给定长度为N的字符串,求它的第K小子串是什么。Input第一行是一个仅由小写英文字母构成的字符串S第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个。T=1则表示不同位置的相同子串算作多个。K的意义如题所述。
Output输出仅一行,为一个数字串,为第K小的子串。如果子串数目不足K个,则输出-1Sample Inputaabc0 3
Sample Out...
分类:
其他好文 时间:
2015-08-30 17:34:40
阅读次数:
134
对第二个串建SAM求出第二个串的以每个字符开头的不同子串的数目..
再对第一个串建SAM,遍历自动机如果某个节点后面没有某个字符则答案加上这个节点的出现次数乘上以这个字符为开头的在第二个串中的不同子串的数目..
MZL's Circle Zhou
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072...
分类:
其他好文 时间:
2015-08-26 22:21:29
阅读次数:
217
DescriptionInputOutputSample InputSample OutputHINTSource
BZOJ无题面233
反正网上一堆自己下载叭>_<
对反串建SAM然后DP
第一问和AHOI2013差异完全一样
具体解法:
设Ans1[i]为lcp恰为i的后缀对数,Ans2[i]为lcp恰为i的后缀的价值乘积的最大值
建出SAM后,记录子树中后缀个数、价值的最大值、价...
分类:
其他好文 时间:
2015-08-26 12:13:16
阅读次数:
199
后缀自动机求不同的串,然后DP.....
K-hash
Time Limit: 2 Seconds Memory Limit: 131072 KB
K-hash is a simple string hash function. It encodes a string Sconsist of digit characters into a K-dimension...
分类:
其他好文 时间:
2015-08-26 12:06:33
阅读次数:
204
// 本文部分内容参照刘汝佳《算法竞赛入门经典训练指南》,特此说明。1、前言 趁着这几天上午,把后缀数组大致看完了。这个东西本身的概念可能没太大理解问题,但是它所延伸出来的知识很复杂,很多,还有它的两个兄弟——后缀树,后缀自动机,编起来都不是盖的。2、概念 前面曾经提到过Aho-Corasick.....
分类:
编程语言 时间:
2015-08-20 01:11:26
阅读次数:
176
这里要在后缀自动机的节点中维护一个从到达当前位置出现的字符串总个数 1 #include 2 #include 3 #include 4 5 using namespace std; 6 #define N 200010 7 #define M 26 8 9 struct SamNode{...
分类:
其他好文 时间:
2015-08-16 17:58:37
阅读次数:
135
spoj 1811 LCS - Longest Common Substring
题意:
给出两个串S, T, 求最长公共子串。
限制:
|S|, |T|
思路:
dp O(n^2) 铁定超时
后缀数组 O(nlog(n)) 在spoj上没试过,感觉也会被卡掉
后缀自动机 O(n)
我们考虑用SAM读入字符串B;
令当前状态为s,同时最大匹配长度为len;...
分类:
其他好文 时间:
2015-08-14 21:29:35
阅读次数:
121
spoj 1812 LCS2 - Longest Common Substring II
题意:
给出最多n个字符串A[1], ..., A[n], 求这n个字符串的最长公共子串。
限制:
1
|A[i]|
思路:
和spoj 1811 LCS差不多的做法
把其中一个A建后缀自动机
考虑一个状态s, 如果A之外的其他串对它的匹配长度分别是a[1], a[2],...
分类:
其他好文 时间:
2015-08-14 21:28:39
阅读次数:
233
后缀自动机理解关键点:
1. 根到任意一个结点都可以形成S的一个子串,并且S的所有子串都可以通过这种方式形成;
2. 到达该节点是所有路径就是一个right集合,一个拥有相同后缀的right集合;
3. 设某子串为str,这后缀自动机读入str后能到达的状态为right(str),即str在S中出现的位置的集合;
4. 假设node[b].fa = a,则状态a可以代替状态b进行识别。
...
分类:
其他好文 时间:
2015-08-12 16:58:23
阅读次数:
122
通道题意:从A,B分别取出子串X,Y,求多少种不同的X+Y思路:代码:#include #include #include using namespace std;const int MAX_N = 200007;typedef unsigned long long ll;struct SAM { ...
分类:
其他好文 时间:
2015-08-05 00:34:36
阅读次数:
266