第一次写这类题...懵

  直接计算答案不好计算,所以补集转化求不合法的方案。

  首先考虑朴素的DP,设$f(i, s)$表示前$i$个字符,字符串为$s$的方案数,且任意一个给定串都不存在$s$中。

  我们知道在一个字符串里找其他的字符串是AC自动机的强项,那么我们就可以考虑在AC自动机上跑DP,每次$+j$都在AC自动机上匹配,如果匹配到单词结尾的话就不能转移,否则就是可以转移的。

  所以设$f(i, j)$为前$i$个字符,当前匹配到AC自动机上第$j$个节点的方案数,如果沿着fail一直往上的所有节点都不是单词结尾就可以转移了。

  注意是大写字母T_T

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#define MOD(x) ((x)>=mod?(x)-mod:(x))
#define ll long long
using namespace std;
const int maxn=, maxm=, mod=;
struct poi{int nxt[], fail;}tree[maxn*maxm];
int n, m, ans, tott;
int f[maxm][maxn], h[maxn];
bool cnt[maxn];
char s[maxm];
inline void read(int &k)
{
int f=; k=; char c=getchar();
while(c<'' || c>'') c=='-'&&(f=-), c=getchar();
while(c<='' && c>='') k=k*+c-'', c=getchar();
k*=f;
}
inline void insert()
{
int len=strlen(s+), now=;
for(int i=, ch;i<=len;i++)
{
if(!tree[now].nxt[ch=s[i]-'A'])
tree[now].nxt[ch]=++tott;
now=tree[now].nxt[ch];
}
cnt[now]=;
}
inline void getfail()
{
int front=, rear=; tree[].fail=-;
for(int i=, too;i<;i++)
if((too=tree[].nxt[i])) h[++rear]=too;
while(front<=rear)
{
int now=h[front++];
for(int i=, too;i<;i++)
if((too=tree[now].nxt[i]))
tree[too].fail=tree[tree[now].fail].nxt[i], h[++rear]=too;
else tree[now].nxt[i]=tree[tree[now].fail].nxt[i];
cnt[now]|=cnt[tree[now].fail];
}
}
int main()
{
read(n); read(m);
for(int i=;i<=n;i++) scanf("%s", s+), insert();
getfail(); f[][]=;
for(int i=;i<=m;i++)
for(int j=;j<=tott;j++)
if(!cnt[j]) for(int k=;k<;k++)
f[i][tree[j].nxt[k]]=MOD(f[i][tree[j].nxt[k]]+f[i-][j]);
for(int i=;i<=tott;i++) if(!cnt[i]) ans=MOD(ans+f[m][i]);
int tot=; for(int i=;i<=m;i++) tot=1ll*tot*%mod;
printf("%d\n", MOD(tot-ans+mod));
}

bzoj1030: [JSOI2007]文本生成器(AC自动机+DP)的更多相关文章

  1. [BZOJ1030] [JSOI2007] 文本生成器 (AC自动机 & dp)

    Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...

  2. [BZOJ1030]:[JSOI2007]文本生成器(AC自动机+DP)

    题目传送门 题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...

  3. BZOJ1030[JSOI2007]文本生成器——AC自动机+DP

    题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是生成一篇长度固 ...

  4. [Bzoj1030][JSOI2007]文本生成器(AC自动机&dp)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1030 最最最常见的多串匹配问题!题目求至少包含一个子串的方案数,则可以转化成全部方案-不 ...

  5. 【bzoj1030】[JSOI2007]文本生成器 AC自动机+dp

    题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是生成一篇长度固 ...

  6. 【BZOJ-1030】文本生成器 AC自动机 + DP

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3253  Solved: 1330[Submit][Stat ...

  7. [JSOI2007]文本生成器 --- AC自动机 + DP

    [JSOI2007]文本生成器 题目描述: JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版. 该软件可以随机 ...

  8. BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3953  Solved: 1614[Submit][Stat ...

  9. 洛谷P4052 [JSOI2007]文本生成器 AC自动机+dp

    正解:AC自动机+dp 解题报告: 传送门! 感觉AC自动机套dp的题还挺套路的,,, 一般就先跑遍AC自动机,然后就用dp dp的状态一般都是f[i][j]:有i个字符,是ac自动机上的第j个节点, ...

  10. [bzoj1030][JSOI2007]文本生成器——AC自动机

    Brief Description 给定一些模式串,您需要求出满足以下要求的字符串的个数. 长度为m 包含任意一个模式串 Algorithm Design 以下内容来自神犇博客 首先运用补集转换,转而 ...

随机推荐

  1. Django Rest Framework源码剖析(七)-----分页

    一.简介 分页对于大多数网站来说是必不可少的,那你使用restful架构时候,你可以从后台获取数据,在前端利用利用框架或自定义分页,这是一种解决方案.当然django rest framework提供 ...

  2. cocos2d-x学习记录1——图片显示

    这篇算是cocos2d-x入门篇,显示一张图片即可. 观察工程中HelloWorld的结构,包含AppDelegate和HelloWorldScene两个类文件,AppDelegate中包含基本的处理 ...

  3. JS设置状态栏

    JS设置状态栏可通过window.status = str来设置,在后台可通过 ClientScript.RegisterStartupScript( this.GetType(), "12 ...

  4. springboot @PropertySource

    @ConfigurationProperties(prefix="person") 默认加载全局配置文件 application.properties或application.ym ...

  5. 程序员大佬推荐的java学习路线

    作为我的第一篇博客,我第一个想到的就是在校时就看到的这篇文章.并且在之后的时间里自己都反复观看过,有时候这不单单是一篇学习路线,也是审视自己技术能力的里程碑,和激励自己的鞭挞绳. 先来个书籍清单: & ...

  6. Docker部署Zookeeper容器

    获取zookeeper镜像 docker pull zookeeper 创建zookeeper容器 docker run --name="zookeeper" -p 2181:21 ...

  7. Pi Zero三代版本演化比较

    本文介绍Pi Zero的版本演进. 5美元的Pi Zero一上市即造成轰动! 2015年11月树莓派基金会发表了只有5美元的树莓派计算机:PiZero,且只要购买纸本的第40期MagPi杂志就可以附送 ...

  8. 更新k8s镜像版本的三种方式

    一.知识准备 更新镜像版本是在k8s日常使用中非常常见的一种操作,本文主要介绍更新介绍的三种方法 二.环境准备 组件 版本 OS Ubuntu 18.04.1 LTS docker 18.06.0-c ...

  9. ubuntu server安装OVS

    安装 Open vSwitch (Ubuntu Server 16.04)  1.查看主机系统内核版本:uname –a 2.上传openvswitch软件包,解压后执行安装: 更新下载源 $ sud ...

  10. 高可用Kubernetes集群-15. 部署Kubernetes集群统一日志管理

    参考文档: Github:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsear ...