2781: [JSOI2007]文本生成器
2781: [JSOI2007]文本生成器
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 8 Solved: 4
[Submit][Status][Web Board]
Description
Input
Output
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]文本生成器的更多相关文章
- BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3953 Solved: 1614[Submit][Stat ...
- bzoj1030 [JSOI2007]文本生成器
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2654 Solved: 1100[Submit][Stat ...
- JSOI2007文本生成器
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1613 Solved: 656[Submit][Statu ...
- BZOJ 1030 [JSOI2007]文本生成器
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2624 Solved: 1087[Submit][Stat ...
- BZOJ_1030_[JSOI2007]文本生成器_AC自动机+DP
BZOJ_1030_[JSOI2007]文本生成器_AC自动机+DP Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群, 他 ...
- P4052 [JSOI2007]文本生成器
P4052 [JSOI2007]文本生成器 AC自动机+dp 优秀题解传送门 设f[ i ][ j ]表示串的长度为 i ,当前在 j 点时不可识别的串的方案数 最后用总方案数减去不可识别方案数就是答 ...
- 【BZOJ1030】[JSOI2007]文本生成器 AC自动机+动态规划
[BZOJ1030][JSOI2007]文本生成器 Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文 ...
- [JSOI2007]文本生成器 --- AC自动机 + DP
[JSOI2007]文本生成器 题目描述: JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版. 该软件可以随机 ...
- BZOJ1030 JSOI2007 文本生成器 【AC自动机】【DP】*
BZOJ1030 JSOI2007 文本生成器 Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群,他们现 ...
随机推荐
- 彻底搞明白find命令的-mtime参数的含义【转载】
转自: 彻底搞明白find命令的-mtime参数的含义-goolen-ITPUB博客http://blog.itpub.net/23249684/viewspace-1156932/ 以前一直没有弄明 ...
- JSP直接调用一个action定向到页面
方法:写function <script type="text/javascript"> function mainPas(){ window.location.hre ...
- C# 经典入门15章 RichTextBox
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsEAAAIRCAIAAAAk7fcMAAAgAElEQVR4nOy9+SOU3/////pHuswYyz
- C#入门经典第九章定义类-1
1.C#中使用class关键字来定义类 class MyClass { //代码部分 } 定义了类之后,就可以在项目中能访问该定义的其他位置对该类进行实例化.默认情况下,类的声明是内部的,即只有当前项 ...
- CALayer & UIView 关系浅析
原文链接:http://www.jianshu.com/p/8e6a313c158e 一.CALayer和UIView的关系 UIView显示在屏幕上归功于CALayer 可以说:UIView依赖CA ...
- UML基础概念(转)
UML基础概念 UML概述 uml简介 uml(unified Modeling Language )为面向对象软件设计提供统一的.标准的.可视化的建模语言.适用于描述以用例为驱动,以体系结构为中心的 ...
- Python3基础 list(zip()) 将两个列表打包起来
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- flex4 list 自动适应高度
<s:List width="100%"> <s:layout> <s:VerticalLayout useVirtualLayout="f ...
- php 自动发送邮件的实现
原文: http://www.cnblogs.com/zichi/p/4058055.html http://www.jb51.net/article/32479.htm 效果: 访问: test.p ...
- 写自己的一个pdo数据库操作框架
http://stackoverflow.com/questions/20669850/pdo-database-abstraction-layer-with-multiple-queries-in- ...