Suffix array
Cold_Chair
我XXX就是饿死,死外边,从这里跳下去,也不会再做你九条可怜一个测试点
展开
-
SA(后缀数组)——倍增法模板
倍增法原理:一步一步把n个后缀按照它们的前 2 ^ k 的字符排序。原创 2017-03-17 21:50:34 · 1066 阅读 · 0 评论 -
platform(SA +线段树二分 or 后缀树+倍增)
Description:题解:有一个非常显然(并不)的结论。就是每一个后缀只有至多一个前缀满足条件。因为对于一个后缀的所有前缀来说来说,随着长度的增加,排名递减,但是val的和不递增,因此只有一个。很容易想到对于每一个后缀二分一下,现在问题在于如何求一个子串的rank?去重?这不是SAM干的事?可是直接用SAM复杂度就乘了n。SAM的fail链就形成原串的反串的...原创 2018-08-16 19:54:18 · 323 阅读 · 0 评论 -
【gdsoi2018 day3】水猴
题目大意:无。题解:tmd的看错题了,不然就切了。用个最大流跑跑不相交路径的条数。接着用SA的height去对猴子排序,再求出新的height,二分个答案,扫一遍就行了。Code:#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#define fo(i, x, y) for(int i = x; i <=原创 2018-05-08 12:21:42 · 423 阅读 · 0 评论 -
【CF319D】Have You Ever Heard About the Word?
【CF319D】Have You Ever Heard About the Word?:String专题又出现啦~(≧▽≦)/~ 这次的题很水的啦0.0 一个字符串的子串是该字符串的一段连续子序列,如bca是abcabc的子串,而cc不是。 一个重复块(repeating block)由一个字符串与自身连接而成,如abcabc是一个重复块,而abcabd, ababab不是。 你原创 2018-04-02 19:49:43 · 336 阅读 · 0 评论 -
口胡 2018.03.10【GDOI2018】模拟A组
那天我去了象征自由的组别,没有做这个组,但是这个组的题目还是很有意思的。看了之后有很大启发,所以写一下。T1【NOI2015模拟12.27】str:Description:第一问一看是个回文自动机的裸题。但是你发现第二问用回文自动机有点难搞。转换后相当于把一棵trie反过来求第k大。因为后缀自动机的fail边是原串反向前缀树。于是可得广义后缀自动机得fa...原创 2018-03-16 12:24:49 · 374 阅读 · 0 评论 -
【TJOI2013】单词
Description:小张最近在忙毕业设计,所以一直在读论文。一篇论文是由许多单词组成的。 但小张发现一个单词会在论文中出现很多次,他想知道每个单词分别在论文中出现了多少次。 单词数不超过200 单词总长度不超过1000000题解:这题我能想到的做法有三个。第一个是最朴素的AC自动机。我们需要清楚知道AC自动机的fail链的定义:走到x所代表的字符串有出现的最长的一个后缀。在原trie上往子原创 2018-01-19 21:09:18 · 463 阅读 · 0 评论 -
【WC2016模拟】String
Description:题解:一眼就是在后缀树上乱搞。仔细思考可以用dsu on tree+线段树来维护,常数巨小。nilil说用后缀数组+Cdq分治+线段树。大概是这样: 对于一个区间[x..y],设m=(x+y)/2那要求跨过m的两个点的答案。可以设l,r。l往左边扫过去,得到一个到终点的height的min值。同时r往右边调。使r到m的height的min值小于等于l的。反着做一遍。r往右边原创 2017-12-30 07:13:14 · 564 阅读 · 0 评论 -
【NOIP2017提高A组冲刺11.8】好文章 ——联赛字符串算法复习
题目大意:给出长度为n的串,问这个串长度为m的子串有多少个不同的。题解:这其实是一道SA的裸题,求出height以后,先把长度小于m的后缀删去,然后就这样取,如果一个后缀和前面最后的长度大于等于m的后缀之间的height的最小值小于m,则这个可取。 SA的板子背的还是不够熟啊,又去看了一波biao。然而这是一道联赛题。 所以hash就好了。 当然单hash被卡了,那就双hash,两个质数,两个原创 2017-11-08 20:18:00 · 451 阅读 · 0 评论 -
JZOJ 100037【NOIP2017提高A组模拟7.11】后缀数组
题目描述:给出S的SA,求S最少的不同字符的个数。 1<=n<=100000题解:SA的性质题,竟然不会。 有了SA,逆推可知rank。 如果rank[SA[i] + 1] >= rank[SA[i + 1] + 1] 则必有S[SA[i]] < S[SA[i + 1]] 于是我们扫一遍统计答案就好了。Code:#include<cstdio>#define fo(i, x, y) fo原创 2017-07-10 19:53:29 · 577 阅读 · 0 评论 -
【COCI2013】slasticar
SA,主席树原创 2017-03-18 07:56:32 · 449 阅读 · 0 评论 -
【NOI2019模拟2019.6.17】可爱
https://jzoj.net/senior/#contest/show/2775/1题目大意:给一个长度为n的字符串。对每一个长度为m的子串,求其它长度为m的子串有多少个和它最多有一位不同。1<=m<=n<=1000001<=m<=n<=1000001<=m<=n<=100000题解...原创 2019-06-17 21:32:16 · 383 阅读 · 0 评论