【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1030

【题目大意】

  求出包含任意一个给定串的串数量

【题解】

  我们求出不包含任意一个给定串的数量,用全集去减即可,
  对于给定串建立AC自动机,用1节点作为根,0节点向1连全字符集转移作为超级源,
  那么0->match能匹配所有不包含给定串的串,
  记dp[i][j]表示匹配了i长度,匹配到AC自动机j节点的串数量,
  统计之后取补集即可。

【代码】

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=30010;
namespace AC_DFA{
const int Csize=26;
int tot,son[N][Csize],sum[N],fail[N],q[N],match[N];
void Initialize(){
memset(match,0,sizeof(int)*(tot+1));
memset(fail,0,sizeof(int)*(tot+1));
memset(sum,0,sizeof(int)*(tot+1));
for(int i=0;i<=tot;i++)for(int j=0;j<Csize;j++)son[i][j]=0;
tot=1;
}
inline int Tr(char ch){return ch-'A';}
int Insert(char *s){
int x=1;
for(int l=strlen(s),i=0,w;i<l;i++){
if(!son[x][w=Tr(s[i])]){
son[x][w]=++tot;
}x=son[x][w];
}sum[x]++;
return x;
}
void MakeFail(){
int h=1,t=0,i,j,x=1; q[++t]=1;
while(h<=t)for(x=q[h++],i=0;i<Csize;i++)
if(son[x][i]){
fail[son[x][i]]=son[fail[x]][i],q[++t]=son[x][i];
match[son[x][i]]=sum[son[x][i]]?son[x][i]:match[fail[son[x][i]]];
}else son[x][i]=son[fail[x]][i];
}
}
using namespace AC_DFA;
const int P=10007;
int dp[110][N];
char s[N];
void Dp(int x){
for(int i=1;i<=tot;i++){
if(match[i]||!dp[x-1][i])continue;
for(int j=0;j<Csize;j++){
int k=i;
while(!son[k][j])k=fail[k];
dp[x][son[k][j]]=(dp[x][son[k][j]]+dp[x-1][i])%P;
}
}
}
int n,m;
int main(){
scanf("%d%d",&n,&m);
Initialize();
for(int i=0;i<Csize;i++)son[0][i]=1;
for(int i=1;i<=n;i++){scanf("%s",s);Insert(s);}
MakeFail();
int ans1=0,ans2=1;
dp[0][1]=1;
for(int i=1;i<=m;i++)Dp(i);
for(int i=1;i<=m;i++)ans2=(ans2*26)%P;
for(int i=1;i<=tot;i++)if(!match[i])ans1=(ans1+dp[m][i])%P;
printf("%d\n",(ans2-ans1+P)%P);
return 0;
}

BZOJ 1030 [JSOI2007]文本生成器(AC自动机)的更多相关文章

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

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

  2. bzoj 1030: [JSOI2007]文本生成器 (ac自己主动机上的dp)

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 2635  Solved: 1090 [id=1030&qu ...

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

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

  4. BZOJ 1030 [JSOI2007]文本生成器

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

  5. 【BZOJ1030】[JSOI2007]文本生成器 AC自动机+动态规划

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

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

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

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

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1030 [题意] 给n个小串,随机构造一个长为m的大串,一个串合法当且仅当包含一个或多个 ...

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

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

  9. 【刷题】BZOJ 1030 [JSOI2007]文本生成器

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

随机推荐

  1. c语言学习笔记.条件编译.#if,#ifdef,if的区别

    最近遇到了,以此做个记录. 条件编译 是C预处理部分的内容. 其判断语句包括 #if  #else if  #else 以及 #ifdef 和 #endif. 使用 #if (表达式) codes1. ...

  2. 基于bootstrap物资管理系统后台模板——后台

    链接:http://pan.baidu.com/s/1geKwVMN 密码:0utl

  3. (转)什么是CDC类(Communication Device Class)

    全文地址:http://justmei.blog.163.com/blog/static/1160998532010321112522467/ 什么是CDC类 (Communication Devic ...

  4. 前端内容转译html

    其他地方采集过来的可以转译下,试试这个:var returnReg = /\n/g; detail = detail.replace(returnReg,""); var reg  ...

  5. loadrunner 测试问题汇总

    1.关于Error -27791: Error -27790:Error -27740:        错误如下:        Action.c(198): Error -27791: Server ...

  6. linux 实现自动创建ftp用户并创建文件夹

    创建一个 createuser.sh的脚本文件 #!/bin/sh #传入的文件名 name=$1 #创建该用户所对应的ftp文件夹   /srv/ftp是我的ftp服务器的根目录 mkdir /sr ...

  7. Prime

    #include<iostream>#include<cstdio>#include<cstring>using namespace std; const int ...

  8. 20165301 2017-2018-2 《Java程序设计》第二周学习总结

    20165301 2017-2018-2 <Java程序设计>第二周学习总结 教材学习内容总结 第二章:基本数据类型与数组 标识符 第一个字符不能是数字 不能是关键字 不能是true.fa ...

  9. 20165301 预备作业二:学习基础和C语言基础调查

    <做中学>读后感及C语言学习调查 读<做中学>有感 娄老师在文章中多次提到「做中学(Learning By Doing)」的概念,并通过娄老师自己的减肥经历.五笔练习经历.乒乓 ...

  10. ***关于WP的邮件无法发送问题的总结(原创)

    1.用FTP打开 /wp-include/class-smtp.php ,最好是下载下来,搜索一下,查找到如下的代码: $this->smtp_conn = @stream_socket_cli ...