bzoj 1030 [JSOI2007]文本生成器(AC自动机+DP)
【题目链接】
http://www.lydsy.com/JudgeOnline/problem.php?id=1030
【题意】
给n个小串,随机构造一个长为m的大串,一个串合法当且仅当包含一个或多个给定的小串,问合法串的数目。
【思路】
AC自动机+DP
首先将问题转化为求不合法的大串的数目。
将所有单词加入AC自动机,让f[i][j]表示长度为i的文章结尾为自动机中的j号节点的不经过单词节点的方案总数(呼~),就是在自动机上找一条不经过单词节点的路径,DP统计。然后用总方案数26^m减去sigma{f[m][i] , 0<=i<sz且val[i]==0}
注意如果后缀是一个单词节点则该节点也要标记为单词节点。
【代码】
#include<cstdio>
#include<queue>
#include<cstring>
#include<iostream>
using namespace std; const int N=+,L=+;
const int node = N*L,MOD=1e4+;
const int sigma = ; struct ACauto{
int ch[node][sigma],f[node],val[node],sz;
void clear() {
sz=; memset(ch[],,sizeof(ch[]));
}
void insert(char *s) {
int n=strlen(s),u=;
for(int i=;i<n;i++) {
int c=s[i]-'A';
if(!ch[u][c]) {
memset(ch[sz],,sizeof(ch[sz]));
val[sz]=; ch[u][c]=sz++;
}
u=ch[u][c];
}
val[u]=;
}
void get_Fail() {
queue<int> q;
f[]=;
for(int c=;c<sigma;c++)
if(ch[][c]) f[ch[][c]]=,q.push(ch[][c]);
while(!q.empty()) {
int r=q.front(); q.pop();
for(int c=;c<sigma;c++) {
int u=ch[r][c]; if(!u) continue;
q.push(u); int v=f[r];
while(v&&!ch[v][c]) v=f[v];
if(val[ch[v][c]]) val[u]=;
f[u]=ch[v][c];
}
}
}
}ac; char s[L]; int n,m; int d[L][node]; int main() {
scanf("%d%d",&n,&m);
ac.clear();
for(int i=;i<n;i++) {
scanf("%s",s); ac.insert(s);
}
ac.get_Fail();
d[][]=;
for(int i=;i<=m;i++)
for(int j=;j<ac.sz;j++) if(!ac.val[j]&&d[i-][j]) {
for(int c=;c<sigma;c++) {
int k=j; while(!ac.ch[k][c]&&k) k=ac.f[k];
d[i][ac.ch[k][c]]=(d[i-][j]+d[i][ac.ch[k][c]])%MOD;
}
}
int ans1=,ans2=;
for(int i=;i<=m;i++) ans2=(ans2*)%MOD;
for(int i=;i<ac.sz;i++)
if(!ac.val[i]) ans1=(ans1+d[m][i])%MOD;
printf("%d",(ans2-ans1+MOD)%MOD);
return ;
}
bzoj 1030 [JSOI2007]文本生成器(AC自动机+DP)的更多相关文章
- BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3953 Solved: 1614[Submit][Stat ...
- 1030: [JSOI2007]文本生成器 ac自动机+dp
https://www.lydsy.com/JudgeOnline/problem.php?id=1030 求长度为m不包含n个子串的种数, 跑完ac自动机之后没办法跑矩阵快速幂,因为状态数比较大(6 ...
- bzoj 1030: [JSOI2007]文本生成器 (ac自己主动机上的dp)
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2635 Solved: 1090 [id=1030&qu ...
- [JSOI2007]文本生成器 --- AC自动机 + DP
[JSOI2007]文本生成器 题目描述: JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版. 该软件可以随机 ...
- 【bzoj1030】[JSOI2007]文本生成器 AC自动机+dp
题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是生成一篇长度固 ...
- 洛谷P4052 [JSOI2007]文本生成器 AC自动机+dp
正解:AC自动机+dp 解题报告: 传送门! 感觉AC自动机套dp的题还挺套路的,,, 一般就先跑遍AC自动机,然后就用dp dp的状态一般都是f[i][j]:有i个字符,是ac自动机上的第j个节点, ...
- [BZOJ1030] [JSOI2007] 文本生成器 (AC自动机 & dp)
Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...
- [BZOJ1030]:[JSOI2007]文本生成器(AC自动机+DP)
题目传送门 题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...
- BZOJ1030[JSOI2007]文本生成器——AC自动机+DP
题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是生成一篇长度固 ...
- [Bzoj1030][JSOI2007]文本生成器(AC自动机&dp)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1030 最最最常见的多串匹配问题!题目求至少包含一个子串的方案数,则可以转化成全部方案-不 ...
随机推荐
- Python学习_Python 3.X版本导入httplib模块报ImportError解决方案
之前用Python 2.7版本的httplib做接口测试时,运行代码都是正常的, 最近开始用Python 3.3之后,再去看以前的代码,发现import httplib出现错误:Unresolved ...
- Django视图函数
一.视图函数 1. 视图函数的第一个参数一定是一个HTTPRequest类型的对象,这个对象是Django自动创建的,具体形参名通常用request.通过这个对象,可以调用请求的一些参数,比如requ ...
- check whether the crystal report runtime is exists 检查crystalreport运行时是否存在
1. Try Dim rptDoc As New CrystalDecisions.CrystalReports.Engine.ReportClass() Dim rptView As New Cry ...
- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:谢勤政-11061197,吴润凡-11061185
一,关于结对编程 结对编程的优点: 1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力. 2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高 ...
- 标准初始化css样式表
body { font-size:12px; line-height:1.3; font-family:'微软雅黑', Tahoma,Helvetica,Arial,'宋体', sans-serif; ...
- Python中zip()函数用法
定义:zip([iterable, …])zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的l ...
- Yours 的博客开张啦!
虽然申请博客已经1个月了,但是一直没有来写,没办法,题都刷不完,哪有心思写啊``` 现在集训终于完了,有了属于自己的时间了.所以该把以前做的题,学的算法好好的整理整理了.一来顺顺思路,二来也可以给后来 ...
- Fiddler对安卓应用手机抓包图文教程
http://www.cr173.com/html/37625_1.html 做开发需要抓取手机app的http/https的数据包,想看APP发出的http请求和响应是什么,这就需要抓包了,这可以得 ...
- lr11 BUG?Failed to send data by channels - post message failed.
问题描述 : http协议,场景运行一会之后,报错! erro信息: Failed to send data by channels - post message failed. 解决方法 :ht ...
- easyui源码翻译1.32--Layout(布局)
前言 使用$.fn.layout.defaults重写默认值对象.下载该插件翻译源码 布局容器有5个区域:北.南.东.西和中间.中间区域面板是必须的,边缘的面板都是可选的.每个边缘区域面板都可以通过拖 ...