1030: [JSOI2007]文本生成器 - BZOJ
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
在AC自动机上的dp
f[i,j,k]表示长度为i,在节点j,状态为k的方案数(k=0时为不匹配,k=1时为匹配)
const
maxn=;
maxm=;
h=;
type
node=record
fail:integer;
flag:boolean;
go:array['A'..'Z']of integer;
end;
var
tree:array[..maxn]of node;
f:array[..maxn,..maxn,..]of integer;
n,m,tot:longint;
s:string; procedure insert;
var
i,j:longint;
begin
readln(s);
j:=;
for i:= to length(s) do
begin
if tree[j].go[s[i]]= then
begin
inc(tot);
tree[j].go[s[i]]:=tot;
end;
j:=tree[j].go[s[i]];
end;
tree[j].flag:=true;
end; var
q:array[..maxn]of longint;
head,tail:longint; procedure build;
var
i:char;
k:longint;
begin
head:=;
tail:=;
q[]:=;
while head<=tail do
begin
for i:='A' to 'Z' do
if tree[q[head]].go[i]<> then
begin
inc(tail);
q[tail]:=tree[q[head]].go[i];
k:=tree[q[head]].fail;
if k<>q[head] then
begin
while (k<>) and (tree[k].go[i]=) do
k:=tree[k].fail;
tree[q[tail]].fail:=tree[k].go[i];
end;
end;
for i:='A' to 'Z' do
if tree[q[head]].go[i]= then tree[q[head]].go[i]:=tree[tree[q[head]].fail].go[i];
if tree[tree[q[head]].fail].flag then tree[q[head]].flag:=true;
inc(head);
end;
end; procedure init;
var
i:longint;
begin
readln(n,m);
for i:= to n do
insert;
build;
end; procedure work;
var
i,j,ans:longint;
s:char;
begin
for s:='A' to 'Z' do
if tree[tree[].go[s]].flag then inc(f[,tree[].go[s],])
else inc(f[,tree[].go[s],]);
for i:= to m- do
for j:= to tot do
for s:='A' to 'Z' do
if tree[tree[j].go[s]].flag then f[i+,tree[j].go[s],]:=(f[i+,tree[j].go[s],]+f[i,j,]+f[i,j,])mod h
else
begin
f[i+,tree[j].go[s],]:=(f[i+,tree[j].go[s],]+f[i,j,])mod h;
f[i+,tree[j].go[s],]:=(f[i+,tree[j].go[s],]+f[i,j,])mod h;
end;
ans:=;
for i:= to tot do
ans:=(ans+f[m,i,])mod h;
writeln(ans);
end; begin
init;
work;
end.
1030: [JSOI2007]文本生成器 - BZOJ的更多相关文章
- BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3953 Solved: 1614[Submit][Stat ...
- BZOJ 1030 [JSOI2007]文本生成器
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2624 Solved: 1087[Submit][Stat ...
- bzoj 1030: [JSOI2007]文本生成器 (ac自己主动机上的dp)
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2635 Solved: 1090 [id=1030&qu ...
- 1030: [JSOI2007]文本生成器
1030: [JSOI2007]文本生成器 https://www.lydsy.com/JudgeOnline/problem.php?id=1030 分析: AC自动机+dp. 正难则反,求满足的, ...
- 【BZOJ】1030: [JSOI2007]文本生成器(递推+ac自动机)
http://www.lydsy.com/JudgeOnline/problem.php?id=1030 其实做了1009也不会感到很难了,无非将kmp变成了ac自动机. 设f[i,j]表示前i个串当 ...
- 【刷题】BZOJ 1030 [JSOI2007]文本生成器
Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生 ...
- AC自动机1030 [JSOI2007]文本生成器
/*Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章――― ...
- bzoj 1030 [JSOI2007]文本生成器(AC自动机+DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1030 [题意] 给n个小串,随机构造一个长为m的大串,一个串合法当且仅当包含一个或多个 ...
- BZOJ 1030 [JSOI2007]文本生成器(AC自动机)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1030 [题目大意] 求出包含任意一个给定串的串数量 [题解] 我们求出不包含任意一个给 ...
随机推荐
- JavaScript基础笔记一
一.真假判断 真的:true.非零数字.非空字符串.非空对象 假的:false.数字零.空字符串.空对象.undefined 例: if(0){ alert(1) }else{ alert(2) } ...
- JS的第一节课
javascript中有两个非常重要的数据类型是对象和数组. e.g: var book={ topic:"javascript", fat:true };
- Jersey(1.19.1) - XML Support
As you probably already know, Jersey uses MessageBodyWriters and MessageBodyReaders to parse incomin ...
- HTTP - 持久连接
Web 客户端经常会打开到同一个站点的连接.比如,一个 Web 页面上的大部分内嵌图片通常都是来自同一个 Web 站点,而且相当一部分指向其他对象的超链接通常都指向同一个站点.因此,初始化了对某服务器 ...
- javaweb 乱码总结
可能的错误地方: 1.jsp页面编码 2.表单编码 3.servlet可接受编码 4.tomcat中server.xml文件中的指定编码 所有的编码要统一,一般使用“UTF-8”比较好 我最近一次出错 ...
- Today’s words
transcendental,transcendental capacity commission,the commission would keep venetian unimodel transi ...
- Normalize [ 浏览器渲染格式化 ]
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ /** * 1. Set default font family to san ...
- easyui知识累计.递增.
(001) 偶然发现 easyui 1.4.4 版本以下在使用easyloader时的一个bug(声明:只有在使用easyloader加载模块时有此问题) : (只测试过1.4.2, 1.4.3, 1 ...
- eclispe 出现超内纯错误
刚开始以为只要修改tomcat的最大最小内存就可以,结果还是报错,后来才懂需要在eclipse.ini文件中修改 -Xms256m-Xmx512m的值改大些,增加虚拟机运行的内存空间 刚开始最小值只有 ...
- Navicat for mysql linux 破解方法
安装方法 进入下载页面:http://www.navicat.com.cn/download/navicat-for-mysql ,选择Linux版本进行下载,下载后解压安装包,运行 start_ ...