1030: [JSOI2007]文本生成器

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit:
1613  Solved: 656
[Submit][Status]

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

代码:

 const p=;
var a:array[..,..] of longint;
fail,q:array[..] of longint;
f:array[..,..] of longint;
s:string;
flag:array[..] of boolean;
i,j,n,m,ans1,ans2,tot,h,t:longint;
procedure insert;
var i,j,now:longint;
begin
readln(s);now:=;
for i:= to length(s) do
begin
j:=ord(s[i])-ord('A')+;
if a[now,j]= then begin inc(tot);a[now,j]:=tot;end;
now:=a[now,j];
end;
flag[now]:=true;
end;
procedure acmatch;
var i,now,k:longint;
begin
h:=;t:=;q[]:=;fail[]:=;
while h<t do
begin
inc(h);now:=q[h];
for i:= to do
begin
if a[now,i]= then continue;
k:=fail[now];
while a[k,i]= do k:=fail[k];
fail[a[now,i]]:=a[k,i];
if flag[a[k,i]] then flag[a[now,i]]:=true;
inc(t);q[t]:=a[now,i];
end;
end;
end;
procedure init;
begin
tot:=;
readln(n,m);
for i:= to do a[,i]:=;
for i:= to n do insert;
acmatch;
end;
procedure dp(x:longint);
var i,j,k:longint;
begin
for i:= to tot do
begin
if (flag[i]) or (f[x-,i]=) then continue;
for j:= to do
begin
k:=i;
while a[k,j]= do k:=fail[k];
f[x,a[k,j]]:=(f[x,a[k,j]]+f[x-,i]) mod p;
end;
end;
end;
procedure main;
begin
f[,]:=;
for i:= to m do dp(i);
ans2:=;ans1:=;
for i:= to m do ans2:=(ans2*) mod p;
for i:= to tot do writeln(f[m,i]);
for i:= to tot do
if not(flag[i]) then ans1:=(ans1+f[m,i]) mod p;
writeln((ans2-ans1+p) mod p);
end;
begin
assign(input,'input.txt');assign(output,'output.txt');
reset(input);rewrite(output);
init;
main;
close(input);close(output);
end.

AC自动机模版!

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. BZOJ 1030 [JSOI2007]文本生成器

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

  4. 2781: [JSOI2007]文本生成器

    2781: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 8  Solved: 4[Submit][Status][We ...

  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. 《C和指针》 读书笔记 -- 第14章 预处理器

    1.相邻字符串常量被自动链接为一个字符串:"my""name"="myname" 2.##把位于两边的符号连接成一个符号: #define ...

  2. HDU 4548 美素数

    Description 小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识.  问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“ ...

  3. N皇后摆放问题

    Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.  你的任务是,对于给定的N,求出有多少种 ...

  4. dive into python 读笔(3)

    chapter 6 异常和文件处理: # 使用 try...except 来捕捉异常 # 使用 try...finally 来保护额外的资源 # 读取文件 # 在一个 for循环中一次赋多个值 # 使 ...

  5. Code for the Homework2 改进

    1. 实现了到指定点各个关节的转角计算(多解性),并且所求解满足各个关节的最大角和最小角的限制条件. 2. 对方向向量进行了单位化,保证任意大小的向量都行 #include<iostream&g ...

  6. c++ 容器类

    #include <iostream> #include <vector> #include <list> #include <map> using n ...

  7. linux命令useradd添加用户详解

    1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户. 2.格式 useradd [-d home] [-s shell] [-c comment] [ ...

  8. 用IDEA调试Play工程

    IDEA的版本是14.0.1,运行在MAC OS X Yosemite上. IDEA已经装了Scala插件,但是在新建工程中,Scala的选项中并没有Play框架,不知道什么原因. 导入Play工程 ...

  9. python参考手册--第2章词汇和语法约定

    1.续行符\ 三引号.().{}.[]中的内容不需要续行符 2.空格缩进 优选空格作为缩进,不要用tab,这是因为不同操作系统下tab对应的空格不一样,而python是通过严格的空格来控制语句块的. ...

  10. 【形式化方法:VDM++系列】3.基于VDM++的图书管理系统需求定义

    接前文:http://www.cnblogs.com/Kassadin/p/4091040.html 1.Before We Start: 在开始图书管理系统需求定义之前,需要先进行一些说明. 1.1 ...