CF666E solution

对所有的模板串建一个广义 \(\tt{SAM}\),在每个点上开个主席树,下标为是第几个串,权值为 endpos 的数量。

然后线段树合并。

预处理每个文本串前缀 \(r\)\(\tt{SAM}\) 的最长匹配后缀长度与对应的点。

查询的时候从 \(r\) 的这个后缀在 \(\tt{SAM}\) 上的点向上跳跳跳(为了保证复杂度使用倍增),目的是让匹配到整个子串,也就是说最长匹配后缀的长度大于等于子串的长度。

找到这个点后直接来一波线段树上查询就做完了。

难度主要在代码难度但我没写出来,好耶!

posted @ 2025-03-15 19:58  LightningCreeper  阅读(18)  评论(0)    收藏  举报