CRT 竟然只要求模数互质,赛时受 exLucas 影响以为 CRT 要求模数都是质数(
痛失 AK,这下致敬 K8 了
A
懒得喷
B
扫描字符串,维护 表示到当前扫到的位置为止,有多少种字符串的最后一次出现左端点在 ,
则询问 的答案即为扫到 时 的区间和。复杂度 。
C
对于能拼出的串 ,考虑在其最长的,是给出的串的前缀的,前缀,处统计贡献,这样每种串只被统计一次,
建出前缀 Trie,对于每个节点 ,若 没有 孩子,则 拼上任何一个以 开头的后缀形成的串都应该在 处统计贡献,
再建个反串前缀 Trie 对每个 统计出以 开头的后缀种类数,用上面的方法统计贡献即可。
注意 corner case。
D
模数小的话,只需要在线段树的每个节点上维护 表示 通过这个节点后会变成什么。
这题给的模数分解成 之后 都很小,所以以每个 为模数求出答案后再 CRT 合并即可。
Bonus:B 题 (我知道没人问我):
考虑建出 SAM,则第 个 endpos 内的点最后一次出现位置肯定相同,假设它是 。
仍然维护上述的 ,考虑往后扫一个字符之后哪些点的 会发生变化,
发现扫到 时 SAM 上长度为 的前缀对应的节点根链上的点的 会变为 ,
考虑每个点对 的贡献,发现 点对 的贡献为使 区间加一,
( 是 内最长串的长度, 是 的 fail 指针)
可以发现,对于树链上 相同的一段(一个 颜色段),它们对 的贡献区间是连续的一段,
所以加入一个颜色段时,只需要对其上每个点的贡献区间连成的这一段区间加一,删除一个颜色段时只需要区间减一。
所以树剖套 ODT 维护 颜色段,每次覆盖某根链上 时,
删去这条链上原本的所有颜色段,再加入整条根链形成的 颜色段即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具