这道题是妥妥的后缀自动机裸题学了后缀自动机后,我居然感觉这尼玛果然还是后缀数组最难了有木有!后缀自动机我的理解就是一个动态的存后缀的 AC 自动机以为后缀的特殊性,我们可以在上一次插入的节点后直接插入新的节点,然后沿着 fail(pre) 指针把一些该更新的更新掉即可果然是好写好用喵~如何统计 [i...
分类:
其他好文 时间:
2014-08-14 20:03:59
阅读次数:
221
我看后缀数组,思想很容易懂,但是基数排序那边我确实理解了很久才理解,现在我写一份自己可以看懂的具体分析。第一步,首先将所有的位置上的值装入数组中,并记录排名为i的数为sa[i],第i个数的排名为rank[i].下面就要进行logn次的倍增操作,我们定义k为当前倍增长度基数排序,痛苦ing首先将每一对...
分类:
其他好文 时间:
2014-08-14 10:39:18
阅读次数:
243
思路:这题下午搞了然后一直WA,后面就看了Discuss,里面有个数组:ABCDEFDCBA,这个我输出ABCD,所以错了。
然后才知道自己写的后缀数组对这个回文子串有bug,然后就不知道怎么改了。
然后看题解,里面都是用RMQ先预处理任意两个后缀的最长公共前缀,因为不太知道这个,所以又看了一下午,嘛嘛……
然后理解RMQ和后缀一起用的时候才发现其实这里不用RMQ也可以,只要特殊处理一下上面...
分类:
其他好文 时间:
2014-08-13 22:23:47
阅读次数:
261
一道字符串的题。求两个字符串的长度大于K的子串中,相同的有多少对。知道了要用到后缀数组,可是想了好久也没想好怎么使用。最后看了一下论文,提到了两个字符串可以合并,中间加上一个特殊字符就可以了。|虽然这样还是写了好长时间啊。。。首先是合并,然后建立后缀数组,求出sa[],height[],然后在进行加...
分类:
其他好文 时间:
2014-08-13 21:52:57
阅读次数:
267
思路:这题和wikioi 1306一样,也都是求的不同子串的个数,但是wikioi 时间比较长,然后用Trie树就过了。但是我用那个代码提交这题的时候就WA了,比较晕……因为这题有多组样例,所以超了点时间。
所以这题当然就是用后缀数组做的啦!
算法分析:
每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同的前缀的个数。如果所有的后缀按照suffix(sa[1]),suffi...
分类:
其他好文 时间:
2014-08-13 19:09:17
阅读次数:
221
题目大意:
介绍了一种压缩文本的方式,问压缩前后的文本长度。
思路分析:
后缀数组跑模板然后考虑两次l r之间的lcp。
然后减掉重复的长度。
注意ans2的累加。
#include
#include
#include
#include
#include
#define maxn 200005
using namespace std;
typedef lon...
分类:
其他好文 时间:
2014-08-13 19:03:07
阅读次数:
178
这题弄了好久,WA了数十发,现在还有个例子没过,可却A了,POJ 的数组也太弱了。
10
1 1 1 1 1 1 1 1 1 1
这组数据如果没有那个n-1
刚开始没明白为什么要判断当前的sa[i]-之前的sa[j]的绝对值>=mid就行,height[i]是rank[sa[i-1])和rank[sa[i])的最长公共前缀呀,为什么和之前的比较呢?
先做后缀数组的其他题,等熟练运用后...
分类:
其他好文 时间:
2014-08-13 13:12:46
阅读次数:
228
http://poj.org/problem?id=2299
最初做离散化的时候没太确定但是写完发现对的---因为后缀数组学的时候,,这种思维习惯了吧
1、初始化as[i]=i;对as数组按照num[]的大小间接排序
2、bs[as[i]]=i;现在bs数组就是num[]数组的离散化后的结果
3、注意,树状数组中lowbit(i) i是不可以为0的,0&(-0)=0,死循环...
...
分类:
其他好文 时间:
2014-08-13 03:36:15
阅读次数:
234
poj3294:http://poj.org/problem?id=3294题意:就是求n个串的中一个最大的子串,这个子串在超过n/2的串中出现。题解:这是一道好题。首先一种解法就是用后缀数组来搞,首先把n个串拼接起来,然后,每个串后面加上一个特殊的额字符,然后求后缀数组以及h数组,然后一个很经典的...
分类:
其他好文 时间:
2014-08-12 18:40:44
阅读次数:
206
个人第一道后缀数组题目。对于每一个后缀suffix(i),都有len-sa[i]个前缀(也即有len-sa[i]个不同的字符串),其中与排名前一位的后缀有height[i]个共同的前缀,最后所得到的新的字符串个数为len-sa[i]-height[i].因此这题只要求出sa以及height即可求得答...
分类:
其他好文 时间:
2014-08-12 18:14:44
阅读次数:
231