BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]
1030: [JSOI2007]文本生成器
Time Limit: 1 Sec Memory Limit: 162 MB
Submit: 3953 Solved: 1614
[Submit][Status][Discuss]
Description
JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,
他们现在使用的是GW文本生成器v6版。该软件可以随机生成一些文章―――总是生成一篇长度固定且完全随机的文
章—— 也就是说,生成的文章中每个字节都是完全随机的。如果一篇文章中至少包含使用者们了解的一个单词,
那么我们说这篇文章是可读的(我们称文章a包含单词b,当且仅当单词b是文章a的子串)。但是,即使按照这样的
标准,使用者现在使用的GW文本生成器v6版所生成的文章也是几乎完全不可读的?。ZYX需要指出GW文本生成器 v6
生成的所有文本中可读文本的数量,以便能够成功获得v7更新版。你能帮助他吗?
Input
输入文件的第一行包含两个正整数,分别是使用者了解的单词总数N (<= 60),GW文本生成器 v6生成的文本固
定长度M;以下N行,每一行包含一个使用者了解的单词。这里所有单词及文本的长度不会超过100,并且只可能包
含英文大写字母A..Z
Output
一个整数,表示可能的文章总数。只需要知道结果模10007的值。
Sample Input
A
B
Sample Output
题意:求长度为m且含有至少一个模板串的字符串个数
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N=105,M=6005,MOD=10007; int n,m; char s[N]; struct node{int ch[26],fail,val; }t[M]; int sz; void ins(char s[]){int u=0,n=strlen(s+1);for(int i=1;i<=n;i++){int c=s[i]-'A';if(!t[u].ch[c]) t[u].ch[c]=++sz;u=t[u].ch[c];}t[u].val=1; } int q[M],head,tail; void getAC(){head=tail=1;for(int i=0;i<26;i++){if(!t[0].ch[i]) t[0].ch[i]=++sz;q[tail++]=t[0].ch[i];}while(head!=tail){int u=q[head++];t[u].val|=t[t[u].fail].val;for(int i=0;i<26;i++){int &v=t[u].ch[i];if(!v) {v=t[t[u].fail].ch[i];continue;}t[v].fail=t[t[u].fail].ch[i];q[tail++]=v;}} } int f[N][M],ans; void dp(){f[0][0]=1;for(int i=1;i<=m;i++){for(int j=0;j<=sz;j++) if(!t[j].val&&f[i-1][j]!=0)for(int k=0;k<26;k++) if(!t[t[j].ch[k]].val)f[i][t[j].ch[k]]=(f[i][t[j].ch[k]]+f[i-1][j])%MOD;}for(int j=0;j<=sz;j++) ans=(ans+f[m][j])%MOD; } int main(){//freopen("in.txt","r",stdin);scanf("%d%d",&n,&m);//printf("hi %d %d nm\n",n,m);for(int i=1;i<=n;i++) scanf("%s",s+1),ins(s);getAC();dp();int tmp=1;for(int i=1;i<=m;i++) tmp=(tmp*26)%MOD;printf("%d",(tmp-ans+MOD)%MOD); }
BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]相关推荐
- 1030: [JSOI2007]文本生成器 ac自动机+dp
https://www.lydsy.com/JudgeOnline/problem.php?id=1030 求长度为m不包含n个子串的种数, 跑完ac自动机之后没办法跑矩阵快速幂,因为状态数比较大(6 ...
- [BZOJ1030]:[JSOI2007]文本生成器(AC自动机+DP)
题目传送门 题目描述: JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机 ...
- [BZOJ1030] [JSOI2007] 文本生成器 (AC自动机 dp)
Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机 ...
- bzoj 1030: [JSOI2007]文本生成器(AC自动机+DP)
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 5187 Solved: 2136 [Submit][St ...
- 【BZOJ】4861: [Beijing2017]魔法咒语 AC自动机+DP+矩阵快速幂
[题意]给定n个原串和m个禁忌串,要求用原串集合能拼出的不含禁忌串且长度为L的串的数量.(60%)n,m<=50,L<=100.(40%)原串长度为1或2,L<=10^18. [算法 ...
- bzoj1030 [JSOI2007] 文本生成器(ACAM+dp)
求长度为m的,至少包含一个模式串的文本串个数. 我们考虑用所有的个数26m26^m减去一个模式串也不包含的个数. 后者我们可以建出ACAM,然后在ACAM上跑dp即可. #include <cs ...
- [BZOJ1030] [JSOI2007]文本生成器
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MB Description JSOI交给队员ZYX一个任务,编制一个称之为&qu ...
- [BZOJ1030][JSOI2007]文本生成器
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 5025 Solved: 2080 [Submit][St ...
- HDU 2296 Ring AC自动机 + DP
题意:给你n个模式串,每个模式串有一个得分,让你构造出一个长度为N之内且分数最高的文本串;输出字典序列最小的. 解题思路: AC自动机 + DP , 不过要输出字典序列最小,多开一个 一个三维字符串 ...
最新文章
- 百度第七期智能对话训练营来了!
- Java-string字符串
- cas单点登陆。就这一篇就够了!!!!!
- mysql my.cnf参数配置_MySQLmy.cnf参数配置优化详解
- 力扣刷题心得(设计类题目)
- 小程序 上拉刷新 下拉加载 代码备忘
- SAP License:在产品结算参数设置
- 整理一下var和函数function的一些小知识点
- linux过滤端口抓包_TCP 协议三次握手抓包分析amp;查看状态
- FISCO BCOS源码(5)基本概念
- 浅谈5000万:外挂,代理与卡盟的故事。
- html电子名片,HTML5 精美的双面电子名片
- 海思Hi3521/Hi3520A/Hi3520D/Hi3515A/Hi3515C U-boot 移植应用 开发指南
- js 利用window.getSelection() 实现简单的文字标注(鼠标选中文本,给其加下滑线、背景色)
- 【最新】半小时教你制作出属于自己的QQ机器人【保姆级】
- oracle创建用户密码和权限--ORA-65096 invalid common user or role name
- 6. Manage the driver for browser and the script for Hub
- cp 出现 omitting directory
- 打怪小游戏 勇者打恶龙1.1
- mysql查询:分组查询