1030: [JSOI2007]文本生成器

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 4777  Solved: 1986
[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

HINT

/*
AC自动机+dp 补集转化
f[i][j]表示第i个位置匹配到自动加上第j个节点方案数
转移时f[i][FAIL]+=f[i-1][j];
利用快速幂计算一下总方案数,枚举一下∑f[m][i]∑f[m][i],做差及为答案
值得注意的地方:对于Fail指针指向的点,如果是end,那么当前点同样为end
*/ #include<iostream>
#include<cstdio>
#include<cstring> #define N 10010
#define p 10007 using namespace std;
int n,m,ans,sz;bool end[N]; char s[N];
int son[N][],fail[N],f[][N],q[N]; inline void clear()
{
sz=;
for(int i=;i<=;i++) son[][i]=;
} void insert(char *s)
{
int x=;
for(int i=;i<strlen(s);i++)
{
if(!son[x][s[i]-'A'+]) son[x][s[i]-'A'+]=++sz,x=sz;
else x=son[x][s[i]-'A'+];
}end[x]=;
} void buildfail()
{
int x=,head=,tail=;q[]=;fail[]=;
while(head<tail)
{
int now=q[head++];
for(int i=;i<=;i++)
{
if(!son[now][i])continue;
int ff=fail[now];
while(!son[ff][i]) ff=fail[ff];
fail[son[now][i]]=son[ff][i];
if(end[son[ff][i]]) end[son[now][i]]=;
q[tail++]=son[now][i];
}
}
} int fast_pow(int x,int y)
{
long long re=;
for(long long i=y;i;i>>=,x=x*x%p)
{
if(i&) re=re*x%p;
}return (int)re;
} int main()
{
clear();
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%s",s),insert(s);
buildfail();f[][]=;
for(int i=;i<=m;i++)
for(int j=;j<=sz;j++)
if(!end[j]&&f[i-][j])
{
for(int k=;k<=;k++)
{
int tmp=j;
while(!son[tmp][k]) tmp=fail[tmp];
f[i][son[tmp][k]]+=f[i-][j];//fail指针指向的方案数要加上当前方案数
f[i][son[tmp][k]]%=p;
}
}
for(int i=;i<=sz;i++)
if(!end[i]) ans+=f[m][i],ans%=p;
int tot=fast_pow(,m);
printf("%d\n",(tot-ans+p)%p);
return ;
}

bzoj1030 文本生成器(AC自动机+dp)的更多相关文章

  1. 【bzoj1030】[JSOI2007]文本生成器 AC自动机+dp

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

  2. [JSOI2007]文本生成器 --- AC自动机 + DP

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

  3. 洛谷P4052 [JSOI2007]文本生成器 AC自动机+dp

    正解:AC自动机+dp 解题报告: 传送门! 感觉AC自动机套dp的题还挺套路的,,, 一般就先跑遍AC自动机,然后就用dp dp的状态一般都是f[i][j]:有i个字符,是ac自动机上的第j个节点, ...

  4. 【BZOJ-1030】文本生成器 AC自动机 + DP

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3253  Solved: 1330[Submit][Stat ...

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

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

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

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

  7. BZOJ1030[JSOI2007]文本生成器——AC自动机+DP

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

  8. [Bzoj1030][JSOI2007]文本生成器(AC自动机&dp)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1030 最最最常见的多串匹配问题!题目求至少包含一个子串的方案数,则可以转化成全部方案-不 ...

  9. BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3953  Solved: 1614[Submit][Stat ...

随机推荐

  1. Slides使用

    1.引入 import { ViewChild } from '@angular/core'; import { Slides } from 'ionic-angular'; export class ...

  2. python socket 接口

    一.简介 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求.socket起 ...

  3. JpGraph 画图

    1:借鉴地址 PHP jpgraph安装及基本用法 http://www.php.cn/php-weizijiaocheng-400977.html JpGraph使用详解之中文乱码解决方法 http ...

  4. 国密SSL证书免费试用申请指南

    沃通提供国密SSL证书免费申请试用服务,一次申请可同时签发SM2/RSA双算法证书,试用周期1个月,用于测试国密SM2 SSL证书的运行效果和SM2/RSA双证书部署效果. 试用产品:SM2/RSA双 ...

  5. css3部分注意事项

    CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3新增伪类有那些? 1.选择器 id选择器( # myid) 类选择器(.myclassname) 标签选择器(div, h1, p ...

  6. MongoDB - 认识MongoDB及数据类型

    目录 MongoDB - 认识MongoDB及数据类型 启动 MogoDB的数据 MogoDB的数据类型 1.Object ID : Documents自生成的_id 2.string : 字符串,必 ...

  7. hdu 3500 DFS(限定)

    Fling Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submi ...

  8. PAT 1093. Count PAT's

    The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and ...

  9. 使用Autofac 依赖注入及 swagger 之startup配置

    言语有限,代码如下: public IServiceProvider ConfigureServices(IServiceCollection services) { services .AddCor ...

  10. SSM框架下实现导出功能

    导出:将当前页面表格里值传到excel表格中. 一.页面js //下载excel $("#download").click( function() { var param = $( ...