CF587F Duff is Mad
- 给定 个字符串 。
- 次询问 在 中出现了多少次。
- 。
字符串
根号分治
首先,建立 AC 自动机。
考虑暴力,就是将 的在 AC 自动机的终止节点的子树权值 +1,然后答案就是 在 AC 自动机上面对应路径的权值之和。
考虑差分之后扫描线,我们只要支持求将 的终止节点子树权值 后, 在 AC 自动机上面对应路径的权值之和了。
然后复杂度是 的,其中 。
本来想使用树链剖分进行进一步优化的,但是因为 AC 自动机的路径在 Fail 树上不连续,因此我们只能暴跳然后求和。
但是我们可以根据字符串长度考虑根号分治。
具体地,对于 ,我们可以将这些串对应的询问单独拿出来,然后将 在 AC 自动机上面对应的路径权值 +1,然后在对于每个 ,求出如果 , 对于 的答案的贡献,这个只要在树上面 DFS 然后前缀和即可求解,总复杂度 。
对于 ,直接使用暴力,总复杂度就是 。
根据均值不等式,当 的时候复杂度最优,为 。
当然,如果第一部分写丑了直接树状数组多了个 ,那么也是可以调整块长然后通过的:代码。
本博客作者:Werner_Yin(https://www.cnblogs.com/werner-yin/) ,转载时请注明出处,谢谢支持!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类