BZOJ 1030 [JSOI2007]文本生成器(AC自动机)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1030
【题目大意】
求出包含任意一个给定串的串数量
【题解】
我们求出不包含任意一个给定串的数量,用全集去减即可,
对于给定串建立AC自动机,用1节点作为根,0节点向1连全字符集转移作为超级源,
那么0->match能匹配所有不包含给定串的串,
记dp[i][j]表示匹配了i长度,匹配到AC自动机j节点的串数量,
统计之后取补集即可。
【代码】
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=30010;
namespace AC_DFA{
const int Csize=26;
int tot,son[N][Csize],sum[N],fail[N],q[N],match[N];
void Initialize(){
memset(match,0,sizeof(int)*(tot+1));
memset(fail,0,sizeof(int)*(tot+1));
memset(sum,0,sizeof(int)*(tot+1));
for(int i=0;i<=tot;i++)for(int j=0;j<Csize;j++)son[i][j]=0;
tot=1;
}
inline int Tr(char ch){return ch-'A';}
int Insert(char *s){
int x=1;
for(int l=strlen(s),i=0,w;i<l;i++){
if(!son[x][w=Tr(s[i])]){
son[x][w]=++tot;
}x=son[x][w];
}sum[x]++;
return x;
}
void MakeFail(){
int h=1,t=0,i,j,x=1; q[++t]=1;
while(h<=t)for(x=q[h++],i=0;i<Csize;i++)
if(son[x][i]){
fail[son[x][i]]=son[fail[x]][i],q[++t]=son[x][i];
match[son[x][i]]=sum[son[x][i]]?son[x][i]:match[fail[son[x][i]]];
}else son[x][i]=son[fail[x]][i];
}
}
using namespace AC_DFA;
const int P=10007;
int dp[110][N];
char s[N];
void Dp(int x){
for(int i=1;i<=tot;i++){
if(match[i]||!dp[x-1][i])continue;
for(int j=0;j<Csize;j++){
int k=i;
while(!son[k][j])k=fail[k];
dp[x][son[k][j]]=(dp[x][son[k][j]]+dp[x-1][i])%P;
}
}
}
int n,m;
int main(){
scanf("%d%d",&n,&m);
Initialize();
for(int i=0;i<Csize;i++)son[0][i]=1;
for(int i=1;i<=n;i++){scanf("%s",s);Insert(s);}
MakeFail();
int ans1=0,ans2=1;
dp[0][1]=1;
for(int i=1;i<=m;i++)Dp(i);
for(int i=1;i<=m;i++)ans2=(ans2*26)%P;
for(int i=1;i<=tot;i++)if(!match[i])ans1=(ans1+dp[m][i])%P;
printf("%d\n",(ans2-ans1+P)%P);
return 0;
}
BZOJ 1030 [JSOI2007]文本生成器(AC自动机)的更多相关文章
- BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3953 Solved: 1614[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]文本生成器 ac自动机+dp
https://www.lydsy.com/JudgeOnline/problem.php?id=1030 求长度为m不包含n个子串的种数, 跑完ac自动机之后没办法跑矩阵快速幂,因为状态数比较大(6 ...
- BZOJ 1030 [JSOI2007]文本生成器
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2624 Solved: 1087[Submit][Stat ...
- 【BZOJ1030】[JSOI2007]文本生成器 AC自动机+动态规划
[BZOJ1030][JSOI2007]文本生成器 Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文 ...
- [JSOI2007]文本生成器 --- AC自动机 + DP
[JSOI2007]文本生成器 题目描述: JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版. 该软件可以随机 ...
- bzoj 1030 [JSOI2007]文本生成器(AC自动机+DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1030 [题意] 给n个小串,随机构造一个长为m的大串,一个串合法当且仅当包含一个或多个 ...
- [BZOJ1030] [JSOI2007] 文本生成器 (AC自动机 & dp)
Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...
- 【刷题】BZOJ 1030 [JSOI2007]文本生成器
Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生 ...
随机推荐
- lintcode 40. 用栈实现队列
使用两个栈来回倒腾可以实现队列. AC代码: import java.util.Stack; public class Queue { private Stack<Integer> sta ...
- 大聊Python----装饰器
什么是装饰器? 装饰器其实和函数没啥区别,都是用def去定义的,其本质就是函数,而功能就是装饰其他的函数,说白了就是为其他函数提供附加功能 装饰器有什么作用? 比如你是一个公司的员工,你所写的程序里有 ...
- (3)剑指Offer之数值的整数次方和调整数组元素顺序
一 数值的整数次方 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 问题解析: 这道题算是比较麻烦和难一点的一个了.我这里采 ...
- PHP提取url
<?php $str = parse_url('http://localhost/?id=2&cd=2', PHP_URL_QUERY); ECHO $str; parse_str($s ...
- javascript你不知道的This
<你不知道的javascript>这本书读了有好几遍了,似乎每一次读都有新发现,有些内容并不是一下子可以弄懂的,每次读似乎都能明白一些概念.再重读一下this关键字.这个概念非常灵活,也非 ...
- css绘制图标
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- 深度揭秘阿里移动端高性能动态化方案Weex
2016年Qcon大会首日,阿里巴巴资深总监.淘宝移动平台.阿里百川负责人庄卓然宣布移动端高性能动态化方案Weex即时内测,并将于6月开源.此消息一出,群情汹涌,在座的程序猿.攻城狮们纷纷拿起手机扫码 ...
- CVE-2010-3971 CSS内存破坏漏洞分析
看了仙果版主的议题演讲,其中提到cve-2010-3971是一个浏览器漏洞利用中的里程碑.于是找来POC,尝试分析一下. 1.漏洞重现 XP SP3+ie6.0环境 poc如下: poc.htm &l ...
- numpy基础代码操练
In [20]: b[0,:,1] Out[20]: array([1, 5, 9]) In [21]: b[0,:,1] Out[21]: array([1, 5, 9]) In [22]: b[0 ...
- IEEEXtreme 10.0 - Game of Stones
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Game of Stones 题目来源 第10届IEEE极限编程大赛 https://www.hackerr ...