【BZOJ1030】[JSOI2007]文本生成器
【题意】
给定一些单词,我们定义一篇可读文章至少包含一个这样的单词,求长度为M的可读文章总数。
【分析】
用前几题的方法可以求长度为M的不可读的文章总数Sum,所以我们可以用26^M-Sum来求出可读文章的总数。不过这题的N*Len太大,也就是AC自动机的节点太多,如果用矩阵乘法求解用爆空间,所以我直接DP了。
代码如下:
#include<cstdio>
#include<cstdlib>
#include<cstring> const int Maxn=;
const int Maxl=;
const int Mod=; int n,m,tot,len,total;
int q[Maxl*Maxn],f[Maxl][Maxl*Maxn];
char s[Maxl]; struct node
{
int son[],fail;
bool mark;
}t[Maxn*Maxl]; void floy()
{
tot=,total=;
memset(f,,sizeof(f));
memset(q,,sizeof(q));
for(int i=;i<=Maxl*Maxn;i++)
{
t[i].mark=;
for(int j=;j<=;j++) t[i].son[j]=;
}
} void read_trie()
{
tot=;
int i,j;
scanf("%d%d",&n,&m);
for(i=;i<=n;i++)
{
int x,ind;
scanf("%s",s+);
len=strlen(s+);
x=;
for(j=;j<=len;j++)
{
ind=s[j]-'A'+;
if(!t[x].son[ind]) t[x].son[ind]=++tot;
x=t[x].son[ind];
if(j==len) t[x].mark=;
}
}
} void build_AC()
{
int i,j,x,y;
q[++q[]]=;
for(i=;i<=q[];i++)
{
x=q[i];y=t[x].fail;
for(j=;j<=;j++)
{
if(t[x].son[j])
{
t[t[x].son[j]].fail=x?t[y].son[j]:;
if(t[t[t[x].son[j]].fail].mark) t[t[x].son[j]].mark=;
q[++q[]]=t[x].son[j];
}
else t[x].son[j]=t[y].son[j];
}
}
} void dp()
{
int i,j,k,v;
f[][]=;
for(i=;i<=m;i++)
for(j=;j<=tot;j++) if(f[i-][j])
for(k=;k<=;k++)
{
v=t[j].son[k];
if(!t[v].mark) f[i][v]=(f[i][v]+f[i-][j])%Mod;
}
for(i=;i<=tot;i++)
total=(total+f[m][i])%Mod;
} int pow(int x)
{
int ans=,sum=;
while(x)
{
if(x&) sum=(sum*ans)%Mod;
ans=(ans*ans)%Mod;
x=x>>;
}
return sum;
} int main()
{
read_trie();
build_AC();
dp();
printf("%d\n",(pow(m)-total+Mod)%Mod);
}
[BZOJ1030]
2016-07-12 10:10:32
【BZOJ1030】[JSOI2007]文本生成器的更多相关文章
- BZOJ1030 JSOI2007 文本生成器 【AC自动机】【DP】*
BZOJ1030 JSOI2007 文本生成器 Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群,他们现 ...
- bzoj1030 [JSOI2007]文本生成器
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2654 Solved: 1100[Submit][Stat ...
- [Bzoj1030][JSOI2007]文本生成器(AC自动机)(dp)
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5254 Solved: 2172[Submit][Stat ...
- [BZOJ1030] [JSOI2007] 文本生成器 (AC自动机 & dp)
Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...
- BZOJ1030[JSOI2007]文本生成器——AC自动机+DP
题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是生成一篇长度固 ...
- BZOJ1030: [JSOI2007]文本生成器(AC自动机)
Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5984 Solved: 2523[Submit][Status][Discuss] Descripti ...
- BZOJ1030: [JSOI2007]文本生成器(Trie图+dp)
Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...
- [BZOJ1030]:[JSOI2007]文本生成器(AC自动机+DP)
题目传送门 题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...
- BZOJ1030 [JSOI2007]文本生成器 AC自动机 动态规划
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1030 题意概括 给出n个模式串,问长度为m的串中有多少个至少含有这n个模式串中的任意一个. 注意, ...
- BZOJ1030 [JSOI2007]文本生成器[DP+AC自动机]
我学到现在才是初三学弟的水平..哭 这里相当于求长度为$m$的,字符集$\{A...Z\}$的且不包含任一模式串的文本串个数.这是一个典型的AC自动机匹配计数问题. 设$f_{i,j}$表示在AC自动 ...
随机推荐
- C++数据结构和算法每天一练(线性表)
#include <iostream> using namespace std; class ArrayLinerTable { public: void InitLine ...
- centos emacs安装
wget http://mirrors.ustc.edu.cn/gnu/emacs/emacs-24.5.tar.gz tar zxvf emacs-24.5.tar.gz cd emacs-24.5 ...
- awk用法举例
awk文本分割输出工具(按列输出工具) awk [options] ' PATTERN { action } ' file1, file2, ... 内置变量: FS:field separator, ...
- phpcms 换域名
修改/caches/configs/system.php里面所有和域名有关的,把以前的老域名修改为新域名就可以了. 进行后台设置->站点管理 对相应的站点的域名进行修改. 更新系统缓存.点击 ...
- 为什么每个请求都要有用户名密码呢,那不是每次都要查询一下了,token,表示这个用户已经验证通过了,在token有效期内,只需要判断token是否有效就可以了
为什么每个请求都要有用户名密码呢,那不是每次都要查询一下了,token,表示这个用户已经验证通过了,在token有效期内,只需要判断token是否有效就可以了
- Video事件、方法-- DOM
<video> 元素同样拥有方法.属性和事件.其中的方法用于播放.暂停以及加载等.其中的属性(比如时长.音量等)可以被读取或设置.其中的 DOM 事件能够通知您,比方说,<video ...
- Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合
项目环境背景: 操作系统:win7 JDK:1.7 相关依赖包,截图如下:
- jvm - 内存结构以其解析
可以将jvm粗略分为以下部分: Heap Memory:存储java对象. Non-Heap Memory:存储加载的class文件,以及其他meta-data信息. Other:存储java代码,j ...
- 关于HMTL -[HTML5]
前言: 为什么学习它?(HTML5) 会不会HTML5,其实并不会影响我的开发效率,我觉得终究还是跟个人性格有关,我喜欢前沿的东西.这就好比我大学里学的计算机,但我仍然会去看一些跟专业不相关的书籍一样 ...
- spring boot 中文文档翻译地址
https://github.com/qibaoguang/Spring-Boot-Reference-Guide/blob/master/SUMMARY.md