上一页 1 2 3 4 5 6 7 8 9 ··· 35 下一页
摘要: "传送门" 朴素的想法是直接用SAM模拟,但是这样的话每次归并排序会T掉…… 考虑到每次的影响,对于初始的SAM来说,我们每次新加入一个点,那么就会使这个点到$t_0$状态的路径上所有的点全部权值+1,于是我们需要维护路径,同时还需要支持动态插入,那就是LCT了。 于是乎我们需要用LCT来维护SAM 阅读全文
posted @ 2019-01-14 22:53 CaptainLi 阅读(116) 评论(0) 推荐(0) 编辑
摘要: "传送门" 首先很容易想到对于所有的模式串建出广义后缀自动机,之后对于我们每一个要检查的文本串,先在SAM上跑,计算出来每一个位置能匹配到的最远的位置是多少。(就是当前点减去匹配长度) 之后……考虑DP……一开始我的状态设错了,设成了当前位置的最大的L的值,这样我就不知道怎么转移了…… 于是换一个思 阅读全文
posted @ 2019-01-14 22:46 CaptainLi 阅读(180) 评论(0) 推荐(0) 编辑
摘要: "传送门" 这题的字符串匹配搬到了树上……?那不在一条链咋做啊……不会了,凉凉…… 然后丽洁姐姐给我们留了一条生路……就是保证了叶子节点的个数不超过20. 树上任意一条路径,我们总能找到一个叶子节点,使得以它为根的时候这条路径在一条链上。那我们可以把每个叶子节点作为根节点来建立广义后缀自动机,最后直 阅读全文
posted @ 2019-01-12 22:15 CaptainLi 阅读(105) 评论(0) 推荐(0) 编辑
摘要: "传送门" 两个串嘛……可以建广义后缀自动机。 我们每次要记录一下对于每个节点,其对应的在第一个串上的size和第二个串上的size,那么每个节点对于答案的贡献就是$size[0] size[1] (l[i] l[fa[i]])$ 解释一下,size其实表示的就是endpos集合之内的元素个数 ,也 阅读全文
posted @ 2019-01-12 22:06 CaptainLi 阅读(131) 评论(0) 推荐(0) 编辑
摘要: "传送门" 广义后缀自动机…… 其实也不是很难理解,就是每次SAM插入一个串之后,插入新的串的时候,要把last重新调到1的位置,共用一些节点。 这个题我们首先要预处理出来每个状态被多少个串共用。~~挺暴力的~~就是每次把节点染色,如果节点没被染色就给他染一下,然后记录当前节点又被共用了一次。 最后 阅读全文
posted @ 2019-01-12 22:00 CaptainLi 阅读(203) 评论(0) 推荐(0) 编辑
摘要: "传送门" 前一题的加强版……求10个串的最长公共子串的长度。 OI Wiki上的解法我没看懂…… 朴素的想法还是对第一个串建立SAM,之后把后面的串不断地在上面匹配,对于每一个状态记录匹配最小值,所有状态取最大值。不过这样是会WA的…… 为啥呢?因为我们是对于每个状态取最小,然后最后在算答案的时候 阅读全文
posted @ 2019-01-12 21:43 CaptainLi 阅读(217) 评论(0) 推荐(1) 编辑
摘要: "传送门" 求两个字符串最长公共子串的长度。 对于第一个串S,建立SAM,之后对于第二个串T,我们在上面和S进行匹配。首先从$t_0$开始,如果能成功匹配的话,那么我们让长度+1,同时更新答案。如果失配,那我们就跳parent树转移到其父节点的位置,并且把当前匹配长度变为其最长后缀长度即可。 最后统 阅读全文
posted @ 2019-01-12 21:27 CaptainLi 阅读(123) 评论(0) 推荐(0) 编辑
摘要: "传送门" 我一开始的想法是直接去求后面的$lcp(T_i,T_j)$,但是我不会…… 有一条性质:两个后缀的$lcp$就是他们在$parent$树上的$LCA$,而且出题人给这个式子其实是有目的的……我们把式子拆开,对于每一条边,我们赋一个权值为$l[i] l[fa[i]]$,这样的话我们只要求出 阅读全文
posted @ 2019-01-12 21:23 CaptainLi 阅读(142) 评论(0) 推荐(0) 编辑
摘要: "传送门" 对于SAM上的一个状态,我们可以求出这个状态对应着多少子串,这个很好做,我们只要每次统计一下他所有的转移把对应情况加上就好。 我们首先对SAM上的状态进行拓扑排序(虽然说是拓扑排序但是实际上可以用基数排序完成,以每个状态对应的最大后缀长度为关键字)。之后对于情况1,我们在跳parent树 阅读全文
posted @ 2019-01-12 21:18 CaptainLi 阅读(116) 评论(0) 推荐(0) 编辑
摘要: "传送门" 用SAM可以非常轻松的解决问题。 只要把原串向SAM中插入两次,之后直接从$t_0$状态开始每次贪心跑最小就可以了。 因为这个题要用map,所以之前取begin即可。 阅读全文
posted @ 2019-01-12 21:05 CaptainLi 阅读(287) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 35 下一页