看到∑len≤100000∑len≤100000,考虑根号暴力
考虑所有的匹配串,分成长度大于n−−√n和小于n−−√n的两类
对于第一类,他的较好的性质是串的个数小于n−−√n,我们考虑对这些串建立AC自动机,然后在用母串跑匹配的时候,我们不沿着fail边向上更新标记(因为深度可能很大会超时)我们只在母串真正经过的地方打上他当前长度的标记
然后我们考虑AC自动机的fail树,我们发现对于某个节点,他被打上的标记事实上是以他为根的子树的所有标记,考虑到fail树上的结束节点个数小于
通过分析题目中字符串长度限制(∑len≤100000),采用根号暴力策略进行求解。将字符串分为两类:长度大于n的平方根和小于n的平方根。对于前者,利用AC自动机构建,避免沿fail边更新,只在实际匹配位置打标记,并通过fail树深搜获取位置。为了避免复杂度过高,采用归并排序优化。对于后者,依然建立AC自动机,但标记过程中将标记传递到所有祖先节点,总时间复杂度仍为O(nn的平方根)。
看到∑len≤100000∑len≤100000,考虑根号暴力
考虑所有的匹配串,分成长度大于n−−√n和小于n−−√n的两类
对于第一类,他的较好的性质是串的个数小于n−−√n,我们考虑对这些串建立AC自动机,然后在用母串跑匹配的时候,我们不沿着fail边向上更新标记(因为深度可能很大会超时)我们只在母串真正经过的地方打上他当前长度的标记
然后我们考虑AC自动机的fail树,我们发现对于某个节点,他被打上的标记事实上是以他为根的子树的所有标记,考虑到fail树上的结束节点个数小于

被折叠的 条评论
为什么被折叠?