2781: [JSOI2007]文本生成器

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 8  Solved: 4
[Submit][Status][Web Board]

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

 

Source

题解:

  第一眼,Ac自动机。然后。。。。。。就JJ了,不知道怎么写了(QAQ)

  然后YY了半天总算有点点想法:我们直接计算的话,还真心有点小困难,所以怎么写呢?(龙老师:这,乱搞出奇迹,电脑砸了就好了!!!)

  额。。。。。。

  好吧,我们就算一下不可读的串数,总串数减去它就可以了。。。。。(龙老师:写什么写,乱搞出奇迹,War3飞起!!!)

  不可读的串的数量就是在AC自动机上走M步而不经过结尾节点(包括结尾点和fail指向结尾点的节点)的路径条数。

  这个怎么求呢?

  设f[i][j]表示走i步,现在在j号节点的路径条数。

  那么f[i][j]可以转移f[i+1][son[j][k]]。

  就是i+1个字符为k的状态。

  最后把所有f[m][i]累和就是不可读的串。(龙老师:说了吧,乱搞就写出来啦,还是我最吊!!!!)

#include<cstdio>
#include<cstring>
#include<algorithm>
const int maxn=,maxm=,mod=;
using namespace std;
int n,m,f[maxm][maxn],ans1=,ans2; char s[maxn]; int tot,son[maxn][],fail[maxn],q[maxn],head,tail;bool dang[maxn];
void insert(){
int p=,len=strlen(s);
for (int i=;i<len;p=son[p][s[i]-'A'],i++) if (!son[p][s[i]-'A']) son[p][s[i]-'A']=++tot;
dang[p]=;
}
void getfail(){
head=,q[tail=]=,fail[]=-;
while (head!=tail){
int x=q[++head];
for (int i=;i<;i++)
if (son[x][i]) q[++tail]=son[x][i],fail[son[x][i]]=x==?:son[fail[x]][i];
else son[x][i]=x==?:son[fail[x]][i];
dang[x]|=dang[fail[x]];
}
}
void work(){
f[][]=;
for (int i=;i<=m;i++)
for (int j=;j<=tot;j++){
if (dang[j]) continue;
for (int k=;k<;k++)
f[i][son[j][k]]=(f[i][son[j][k]]+f[i-][j])%mod;
}
for (int i=;i<=tot;i++) if (!dang[i]) ans2+=f[m][i];
for (int i=;i<=m;i++) ans1=(ans1*)%mod;
printf("%d\n",((ans1-ans2)%mod+mod)%mod);
} int main(){
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) scanf("%s",s),insert();
getfail(),work();
return ;
}

2781: [JSOI2007]文本生成器的更多相关文章

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

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

  2. bzoj1030 [JSOI2007]文本生成器

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

  3. JSOI2007文本生成器

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1613  Solved: 656[Submit][Statu ...

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

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

  5. BZOJ_1030_[JSOI2007]文本生成器_AC自动机+DP

    BZOJ_1030_[JSOI2007]文本生成器_AC自动机+DP Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群, 他 ...

  6. P4052 [JSOI2007]文本生成器

    P4052 [JSOI2007]文本生成器 AC自动机+dp 优秀题解传送门 设f[ i ][ j ]表示串的长度为 i ,当前在 j 点时不可识别的串的方案数 最后用总方案数减去不可识别方案数就是答 ...

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

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

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

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

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

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

随机推荐

  1. ThinkPHP3.2.3版本框架could not find driver错误

    ThinkPHP3.2.3版本框架could not find driver错误 在更新ThinkPHP框架 3.2.3 时出现错误 解决方法如下: 修改php.ini文件 extension=php ...

  2. Hibernate中,将session绑定到线程时,在保存和查询数据的代码里,要正确的关闭session

    比如有个保存的方法 // 保存 public void save(){ Transaction t = XXX Session s = getSession.beginTransaction(); X ...

  3. Linux查看文件夹大小du

    du命令参数详解见: http://baike.baidu.com/view/43913.htm 下面我们只对其做简单介绍: 查看linux文件目录的大小和文件夹包含的文件数   统计总数大小   d ...

  4. QWidget QMainWindow QDialog 三个基类的区别

    Qt类是一个提供所需的像全局变量一样的大量不同的标识符的命名空间.通常情况下,你可以忽略这个类.QObject和一些其它类继承了它,所以在这个Qt命名空间中定义的所有标识符通常情况下都可以无限制的使用 ...

  5. hrbustoj 2033 A Funny Game(对称博弈)

    对称博弈,注释在代码里 #include<iostream> #include<cstdio> using namespace std; ///这个地方其实是博弈原理里面的对称 ...

  6. PAT (Advanced Level) 1053. Path of Equal Weight (30)

    简单DFS #include<cstdio> #include<cstring> #include<cmath> #include<vector> #i ...

  7. 随机获取部分List<Object>集合

    随机返回list对象 /** * 返回随机List * @param list 备选 * @param selected 备选数量 * @return */ public List getRandom ...

  8. chrome 开发人员工具

    JavaScript Beautifier JavaScript 文件在上线前一般都会压缩下,压缩的 JavaScript 几乎没有可读性,几乎无法设定断点.在 Scripts 面板下面有个 Pret ...

  9. AIM Tech Round 3 (Div. 2)D. Recover the String(贪心+字符串)

    D. Recover the String time limit per test 1 second memory limit per test 256 megabytes input standar ...

  10. Python 100例(下)

    如果你坚持到这了,哪就为自己鼓掌吧!坚持,你一定可以. 实例51: 题目:学习使用按位与&. #!/usr/bin/env  python# --*--coding:utf-8 --*--'' ...