文本生成器[JSOI2007]
2021-03-12 16:27
标签:输入格式 ace 通过 queue fail 描述 while tomato can 【题目描述】 JSOI 交给队员 ZYX 一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是 GW 文本生成器 v6 版。 该软件可以随机生成一些文章——总是生成一篇长度固定且完全随机的文章。 也就是说,生成的文章中每个字符都是完全随机的。如果一篇文章中至少包含使用者们了解的一个单词,那么我们说这篇文章是可读的(我们称文章 \(t\) 包含单词 \(t\),当且仅当单词 \(t\) 是文章 \(s\) 的子串)。但是,即使按照这样的标准,使用者现在使用的 GW 文本生成器 v6 版所生成的文章也是几乎完全不可读的。ZYX 需要指出 GW 文本生成器 v6 生成的所有文本中,可读文本的数量,以便能够成功获得 v7 更新版。你能帮助他吗? 答案对 \(10^4 + 7\) 取模。 【输入格式】 第一行有两个整数,分别表示使用者了解的单词总数 \(n\) 和生成的文章长度 \(m\)。 接下来 \(n\) 行,每行一个字符串 \(s_i\),表示一个使用者了解的单词。 【输出格式】 输出一行一个整数表示答案对 \(10^4 + 7\) 取模的结果。 首先 很容易想到 答案就是总的方案数,也就是\(26^m\)减去不合法的方案数 不合法的方案数我们可以通过在AC自动机上面DP来求得 先对于那\(n\)个串建好AC自动机 显然,一个不合法的串在AC自动机上匹配时一定不会经过任何结束节点或者fail链上有结束节点的点 所以我们先预处理哪些是这样的节点 这个是可以在求fail的时候顺便处理的 然后设\(dp[x][j]\)表示现在在AC自动机上节点\(x\)处,串长度为\(j\)的方案数 转移方程:\(dp[ch[x][c]][j+1]~ +\!\!= ~dp[x][j]\) (\(ch[x][c]\)不为结束节点),初始状态\(dp[0][0]=1\) 文本生成器[JSOI2007] 标签:输入格式 ace 通过 queue fail 描述 while tomato can 原文地址:https://www.cnblogs.com/ak-dream/p/AK_DREAM75.html题解
#include