Codeforces #963D: Frequency and String 题解

通过分析题目中字符串长度限制(∑len≤100000),采用根号暴力策略进行求解。将字符串分为两类:长度大于n的平方根和小于n的平方根。对于前者,利用AC自动机构建,避免沿fail边更新,只在实际匹配位置打标记,并通过fail树深搜获取位置。为了避免复杂度过高,采用归并排序优化。对于后者,依然建立AC自动机,但标记过程中将标记传递到所有祖先节点,总时间复杂度仍为O(nn的平方根)。
摘要由CSDN通过智能技术生成

看到 len100000 ∑ l e n ≤ 100000 ,考虑根号暴力
考虑所有的匹配串,分成长度大于 n n 和小于 n n 的两类


对于第一类,他的较好的性质是串的个数小于 n n ,我们考虑对这些串建立AC自动机,然后在用母串跑匹配的时候,我们不沿着fail边向上更新标记(因为深度可能很大会超时)我们只在母串真正经过的地方打上他当前长度的标记
然后我们考虑AC自动机的fail树,我们发现对于某个节点,他被打上的标记事实上是以他为根的子树的所有标记,考虑到fail树上的结束节点个数小于

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值