【BZOJ1030】【JSOI2007】文本生成器
我现在连AC自动姬都不会,怎么办嘛QAQ
原题:
JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,
他们现在使用的是GW文本生成器v6版。该软件可以随机生成一些文章―――总是生成一篇长度固定且完全随机的文
章—— 也就是说,生成的文章中每个字节都是完全随机的。如果一篇文章中至少包含使用者们了解的一个单词,
那么我们说这篇文章是可读的(我们称文章a包含单词b,当且仅当单词b是文章a的子串)。但是,即使按照这样的
标准,使用者现在使用的GW文本生成器v6版所生成的文章也是几乎完全不可读的?。ZYX需要指出GW文本生成器 v6
生成的所有文本中可读文本的数量,以便能够成功获得v7更新版。你能帮助他吗?
N <= 60,所有单词及文本的长度不会超过100
如果一个串的后缀不能选,这个串当然也不能选
延伸到AC自动姬上就是如果一个串fail指向的节点不能选,这个节点就不能选
然后就可以预处理出那些节点不能选
然后用f[i][j]表示在文本串走到i时AC自动姬上走到j节点的方案数
首先外层枚举i,再枚举j,如果j可选,就枚举26个字符k,f[i][j]就给j沿着k往下能走到的状态(包括走fail)v贡献
能理解这道题怎么写,但是似乎不能往更广泛的地方延伸,想不动东西……感觉状态不是很好啊QAQ
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int dalao=;
int rd(){int z=,mk=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mk;
}
int n,m;
char s[]; int ls;
int nxt[][],fl[],tt=;
int q[],hd=;
bool mk[];
int f[][];
void ist(){
int tmp=;
for(int i=;i<=ls;++i){
if(!nxt[tmp][s[i]-'A']) nxt[tmp][s[i]-'A']=++tt;
tmp=nxt[tmp][s[i]-'A'];
}
mk[tmp]=true;
}
void gtac(){
for(int i=;i<;++i)if(nxt[][i]) q[++hd]=nxt[][i];
for(int k=;k<=hd;++k)for(int i=;i<;++i){
if(!nxt[q[k]][i]) nxt[q[k]][i]=nxt[fl[q[k]]][i];
else{
fl[nxt[q[k]][i]]=nxt[fl[q[k]]][i],q[++hd]=nxt[q[k]][i];
mk[nxt[q[k]][i]]|=mk[nxt[fl[q[k]]][i]];
}
}
}
int main(){//freopen("ddd.in","r",stdin);
cin>>n>>m;
for(int i=;i<=n;++i) scanf("%s",s+),ls=strlen(s+),ist();
gtac();
f[][]=;
for(int i=;i<=m;++i)for(int j=;j<=tt;++j)if(!mk[j] && f[i-][j])
for(int k=;k<;++k)
f[i][nxt[j][k]]=(f[i][nxt[j][k]]+f[i-][j])%dalao;
int bwl=,ans=;
for(int i=;i<=m;++i) ans=(ans*)%dalao;
for(int i=;i<=tt;++i)if(!mk[i]) bwl=(bwl+f[m][i])%dalao;
cout<<(ans-bwl+dalao)%dalao<<endl;
return ;
}
【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自动 ...
随机推荐
- python常见面试题(mark)
1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in file 2.迭代器和生成器的区别 1)迭代器是一个更抽象的概念,任何对象,如果它的类有next方 ...
- Calendar获取当前年份、月份、日期
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Te ...
- bootstrap table 列求和
<div class="modal fade in" id="_modalDialog" tabindex="1" role=&quo ...
- BeanUtils出现Java.lang.NoClassDefFoundError解决
问题描述: javaWeb项目中导入了BeanUtils的两个包,但是还是出现Java.lang.NoClassDefFoundError: org/apache/commons/beanutils/ ...
- jvm的基本结构以及各部分详解(转)
原文链接:https://www.cnblogs.com/zwbg/p/6194470.html 1.java虚拟机的基本结构 图: 1.类加载器子系统从文件系统或者网络中加载Class信息,类信息( ...
- web项目与jsp有关的三个jar的依赖
<!-- jsp --> <dependency> <groupId>javax.servlet</groupId> <artifactId> ...
- mysql 数据库关于my.int 的相关问题
最好在建库的时候直接建好 create database db1 charset utf8; my.int 在mysql的目录里 名曰配置文件 里面主要是内容就是 1 一般用到的就是编码不统一 ...
- bootstrap --- 在 modal中的 datetimepicker 关闭 ,会造成 modal也会被关闭.
这个大概是事件冒泡造成的. 解决办法: <form id="userForm" class="form-horizontal"> <input ...
- vue 手写组件 集合
Num.1 : 链接 向右滑动, 显示删除按钮, 根据touchStart touchEnd 的 clientX 差距 > 30; 说明是向左滑动, 显示; 改变 e.currentTarg ...
- js-null 、undefined
注意:null 转为数值时为0,而 undefined 转为数值时为 NaN. Number(undefined) // NaN Number(null) // 0 null 表示"没有对象 ...