摘要: 不是很神的一道题,一般。 先差分,最后答案需要+1。 一个right集的len即为该right集的最长相同后缀,考虑到不能重复,所以处理一下该right集的最大与最小的ri,最后答案ans=max(ans,min(r[i]-l[i],len[i])) poj的g++比较恶心,卡空间,卡时间。 用c+ 阅读全文
posted @ 2017-02-20 21:48 CHADLZX 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 传送门 这题可以参考平衡树求第k大的过程,需要预处理一下从当前节点往下走能走出多少个子串。 原本准备存个图用反向的topsort,发现极为麻烦,看了别人的代码后发现,他们按step大小用了基排,省了很多麻烦。 仔细看了一下构造过程,貌似确实有这样的性质,后创建且step大的节点在fail树上处于儿子 阅读全文
posted @ 2017-02-20 19:40 CHADLZX 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 传送门 输入一个字符串,要求输出长度为x的子串在字符串中的最多的出现位置。 后缀自动机,由于后缀自动机的每一个节点s的right集大小都表示子串最长为step s的数量, (而且长度在min(s)到max(s)之间的字符串出现次数必定相同,所以每次只需要更新step s,最后从大到小顺次cmax即可 阅读全文
posted @ 2017-02-20 18:35 CHADLZX 阅读(227) 评论(0) 推荐(0) 编辑
摘要: SAM模板题。 主要思路是,先对一个串建SAM,然后拿其他串在上面匹配,对单个串每个状态取最大的步数,对所有的串每个状态取最小步数。 循环的同时需要对fail树按topsort序更新最大值。 为什么要从fail树更新最大值?我的理解是,单个节点上记录的Max,Min等是结束位置属于此节点right集 阅读全文
posted @ 2017-02-20 15:56 CHADLZX 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 后缀自动机简单题。 其主要思路是,先对第一个字符串建立后缀自动机,把第二个串放在上面匹配, 若当前状态s有字符x的转移,直接转移len=step+1。 若当前状态s没有向字符x的转移,退回pres检查是否有转移, 若没有,则继续退回,否则转移到节点y,len=stepy+1。 以上思路主要利用的是关 阅读全文
posted @ 2017-02-20 13:49 CHADLZX 阅读(249) 评论(0) 推荐(0) 编辑
摘要: SAM(Suffix Automaton),后缀自动机。 SAM是种十分神奇的数据结构,我认为他的主要神奇之处,在于最大限度的利用了分类思想。 SAM上有两种边,代表两种转移方式。 一种是树边,一种是转移边,树边代表对SAM对子串出现位置的分类,转移边代表当前节点代表的子串加入字符后的节点的分类。 阅读全文
posted @ 2017-02-20 11:00 CHADLZX 阅读(178) 评论(0) 推荐(0) 编辑