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

题意

  给出$n$个单词,问有多少个长度为$m$的文本中至少包含一个单词。

Solution

  构造好AC自动机以后在上面dp,$f[i][j]$表示长度为$i$匹配到自动机上节点$j$时的没有被任意单词匹配的文本个数。转移枚举接在第$j+1$个位置的字符是哪一个,并且保证走过的节点没有一个是结束节点就可以了。

细节

  0号节点为root。

代码

// bzoj1030
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define inf (1ll<<30)
#define MOD 10007
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout)
using namespace std; const int maxl=200,maxn=60;
int n,m,sz=1,f[maxl][maxn*maxl];
char s[maxl];
struct node {
int son[26],next,end;
int& operator [] (int x) {return son[x];}
}tr[maxn*maxl]; namespace ACM {
void insert(char *r) {
int len=strlen(r+1),p=1;
for (int i=1;i<=len;i++) {
if (!tr[p][r[i]-'A']) tr[p][r[i]-'A']=++sz;
p=tr[p][r[i]-'A'];
}
tr[p].end=1;
}
void buildfail() {
queue<int> q;q.push(1);
tr[1].next=0;
while (!q.empty()) {
int x=q.front();q.pop();
for (int i=0;i<26;i++) if (tr[x][i]) {
int k=tr[x].next;
while (!tr[k][i]) k=tr[k].next;
tr[tr[x][i]].next=tr[k][i];
tr[tr[x][i]].end|=tr[tr[k][i]].end;
q.push(tr[x][i]);
}
}
}
}
using namespace ACM; int main() {
scanf("%d%d",&n,&m);
for (int i=0;i<26;i++) tr[0][i]=1;
for (int i=1;i<=n;i++) {
scanf("%s",s+1);
insert(s);
}
buildfail();
f[0][1]=1;
for (int i=0;i<m;i++)
for (int j=1;j<=sz;j++) if (f[i][j]) {
for (int k=0;k<26;k++) {
int p=j;
while (!tr[p][k]) p=tr[p].next;
p=tr[p][k];
if (!tr[p].end) (f[i+1][p]+=f[i][j])%=MOD;
}
}
int sum=1,ans=0;
for (int i=1;i<=m;i++) (sum*=26)%=MOD;
for (int i=1;i<=sz;i++) (ans+=f[m][i])%=MOD;
printf("%d\n",(sum-ans+MOD)%MOD);
return 0;
}

【bzoj1030】 JSOI2007—文本生成器的更多相关文章

  1. BZOJ1030 JSOI2007 文本生成器 【AC自动机】【DP】*

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

  2. bzoj1030 [JSOI2007]文本生成器

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

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

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

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

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

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

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

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

    Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5984  Solved: 2523[Submit][Status][Discuss] Descripti ...

  7. BZOJ1030: [JSOI2007]文本生成器(Trie图+dp)

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

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

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

  9. BZOJ1030 [JSOI2007]文本生成器 AC自动机 动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1030 题意概括 给出n个模式串,问长度为m的串中有多少个至少含有这n个模式串中的任意一个. 注意, ...

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

    我学到现在才是初三学弟的水平..哭 这里相当于求长度为$m$的,字符集$\{A...Z\}$的且不包含任一模式串的文本串个数.这是一个典型的AC自动机匹配计数问题. 设$f_{i,j}$表示在AC自动 ...

随机推荐

  1. WPF控件加阴影模糊问题

    原文:WPF控件加阴影模糊问题 不能直接把阴影加在控件上 应该加在控件的同级兄弟节点上,覆盖在底下就不会模糊了

  2. 利用Kinect实现用指尖隔空控制鼠标(源码放出)

    简介 此程序为利用Kinect实现用手指隔空控制鼠标,是我另一个项目的一部分,因为在另外那个项目中鼠标的click是通过一种特殊的方式实现的,因此这个程序只实现了用手控制鼠标的移动,并没有点击的功能. ...

  3. HTML5 标签实例

    html 5 学习1.<p></p> #段落元素定义2.<h1></h1> #标题 h1代表大号的字体.依此变小3.<br /> #实例 代 ...

  4. 无前趋的顶点优先的拓扑排序方法(JAVA)(转载http://128kj.iteye.com/blog/1706968)

    无前趋的顶点优先的拓扑排序方法 该方法的每一步总是输出当前无前趋(即人度为零)的顶点,其抽象算法可描述为:     NonPreFirstTopSort(G){//优先输出无前趋的顶点       w ...

  5. 使用tomcat,不能连接localhost/8080的解决办法

    首先,java的一些环境变量要解决. 其次,tomcat也应该各种环境变量设置好. 最后,把下图的那个地址重新选择一遍. 记住以上每一步弄好了之后都重启一下机器. 我也不知道为什么,但是有些就是从起之 ...

  6. Intellij Idea 创建JavaWeb项目入门(一)

    Idea创建JavaWeb项目步骤:1.打开Intellij Idea IDE,然后点击Create New Project 2.左侧选择Java Enterprise,右侧选择Web Applica ...

  7. 团队博客 Week14

    0. 在吹牛之前,先回答这个问题: 如果你的团队来了一个新队员,有一台全新的机器, 你们是否有一个文档,只要设置了相应的权限,她就可以根据文档,从头开始搭建环境,并成功地把最新.最稳定版本的软件编译出 ...

  8. OpenState安装及 Port Knocking 实验

    OpenState安装及 Port Knocking 实验 目录 OpenState安装 Port Knocking 实验 OpenState安装及 Port Knocking 实验 OpenStat ...

  9. Leetcode题库——38.报数

    @author: ZZQ @software: PyCharm @file: countAndSay.py @time: 2018/11/9 14:07 说明:报数序列是一个整数序列,按照其中的整数的 ...

  10. 团队冲刺随笔合集—Beta阶段

    第一篇:http://www.cnblogs.com/Team-Blog/p/9049271.html 第二篇:https://www.cnblogs.com/Team-Blog/p/9064478. ...