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

2 2
A
B

Sample Output

100

题意:求长度为m且含有至少一个模板串的字符串个数

好神啊
含有至少一个不好求,那就求不含模板串的然后总数减
计数问题组合数学做不了就考虑DP
f[i][j]表示长度为i匹配到自动机上节点j的不含模板串的方案数
转移 f[i][j]-->f[i+1][t[j].ch[k]]
如何判断一个串不含模板串?首先f[i][j]已经保证1..i-1是不含模板串的啦,只要保证第i个字符加入后也不含就行了
ins时模板串终点打标记,本身且Fail祖先没有标记就说明AC自动机上j结尾的没有模板串
但是有的字符模板串里没有啊?给root把孩子补全就行了【实际上不补全也是可以的,反正默认走到了根,最后f[m][根]也统计】
思路和KMP一样,都是一边生成字符串一边在KMP/AC自动机上匹配,
#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]相关推荐

  1. 1030: [JSOI2007]文本生成器 ac自动机+dp

    https://www.lydsy.com/JudgeOnline/problem.php?id=1030 求长度为m不包含n个子串的种数, 跑完ac自动机之后没办法跑矩阵快速幂,因为状态数比较大(6 ...

  2. [BZOJ1030]:[JSOI2007]文本生成器(AC自动机+DP)

    题目传送门 题目描述: JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机 ...

  3. [BZOJ1030] [JSOI2007] 文本生成器 (AC自动机 dp)

    Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机 ...

  4. bzoj 1030: [JSOI2007]文本生成器(AC自动机+DP)

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 5187  Solved: 2136 [Submit][St ...

  5. 【BZOJ】4861: [Beijing2017]魔法咒语 AC自动机+DP+矩阵快速幂

    [题意]给定n个原串和m个禁忌串,要求用原串集合能拼出的不含禁忌串且长度为L的串的数量.(60%)n,m<=50,L<=100.(40%)原串长度为1或2,L<=10^18. [算法 ...

  6. bzoj1030 [JSOI2007] 文本生成器(ACAM+dp)

    求长度为m的,至少包含一个模式串的文本串个数. 我们考虑用所有的个数26m26^m减去一个模式串也不包含的个数. 后者我们可以建出ACAM,然后在ACAM上跑dp即可. #include <cs ...

  7. [BZOJ1030] [JSOI2007]文本生成器

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Description JSOI交给队员ZYX一个任务,编制一个称之为&qu ...

  8. [BZOJ1030][JSOI2007]文本生成器

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 5025  Solved: 2080 [Submit][St ...

  9. HDU 2296 Ring AC自动机 + DP

    题意:给你n个模式串,每个模式串有一个得分,让你构造出一个长度为N之内且分数最高的文本串;输出字典序列最小的. 解题思路:  AC自动机 + DP , 不过要输出字典序列最小,多开一个 一个三维字符串 ...

最新文章

  1. 百度第七期智能对话训练营来了!
  2. Java-string字符串
  3. cas单点登陆。就这一篇就够了!!!!!
  4. mysql my.cnf参数配置_MySQLmy.cnf参数配置优化详解
  5. 力扣刷题心得(设计类题目)
  6. 小程序 上拉刷新 下拉加载 代码备忘
  7. SAP License:在产品结算参数设置
  8. 整理一下var和函数function的一些小知识点
  9. linux过滤端口抓包_TCP 协议三次握手抓包分析amp;查看状态
  10. FISCO BCOS源码(5)基本概念
  11. 浅谈5000万:外挂,代理与卡盟的故事。
  12. html电子名片,HTML5 精美的双面电子名片
  13. 海思Hi3521/Hi3520A/Hi3520D/Hi3515A/Hi3515C U-boot 移植应用 开发指南
  14. js 利用window.getSelection() 实现简单的文字标注(鼠标选中文本,给其加下滑线、背景色)
  15. 【最新】半小时教你制作出属于自己的QQ机器人【保姆级】
  16. oracle创建用户密码和权限--ORA-65096 invalid common user or role name
  17. 6. Manage the driver for browser and the script for Hub
  18. cp 出现 omitting directory
  19. 打怪小游戏 勇者打恶龙1.1
  20. mysql查询:分组查询

热门文章

  1. 聚焦国际农民丰收节贸易会-张桃林:农业谋定开放新格局
  2. 软件设计师笔记---流水线
  3. 洛谷 P1004 方格取数 【多线程DP/四维DP/】
  4. 第二百六十一、二天 how can I坚持
  5. MSSQL - 通用存储过程
  6. Selenium2(WebDriver)开发环境搭建(java版)
  7. 早该改了,只是我们太穷了
  8. 我是如何进入全球顶级AI实验室的 (1)
  9. String是值传递还是引用传递
  10. PM2 node进程管理工具 自动部署小结