不包含任何模式串的字符串个数
题目描述
生成一个长度为 ,字符集为 的字符串 .
给定若干模式串 ,要求 中不能有任何一个子串为模式串 .
问字符串 的个数 .
答案对 取模, 不超过 .
数据范围:
- Task 1. ,,(JSOI2007 文本生成器) .
- Task 2. ,,(HNOI2008 GT考试 加强版) .
.
咋做
首先建出模式串的 AC 自动机(不妨记转移函数为 ) .
考虑 DP,令 表示串长为 ,在 AC 自动机上走到编号为 的节点的合法串个数 .
则在 AC 自动机上走一步即可完成转移:
暴力 DP,时间复杂度 .
大概这么写:
dp[0][0] = 1;
for (int i=0; i<n; i++)
for (int j=0; j<=cc; j++)
for (int k=0; k<Sig; k++)
if (!mark[tr[j][k]]) dp[i+1][tr[j][k]] = (dp[i+1][tr[j][k]] + dp[i][j]) % P;
Task 1 完美解决 .
然而我们发现 这个玩意和内层转移几乎没关系,只是为了保证转移顺序 .
也就是说这玩意相当于进行了 次内层转移, 一维枚举根本没用 .
所以我们构建出内层转移矩阵,然后快速幂即可 .
设 AC 自动机大小为 ,则 DP 部分时间复杂度为 .
Task 2 完美解决 .
以下是博客签名,正文无关
本文来自博客园,作者:yspm,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/16020972.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】