题目

传送门:QWQ

传送到洛谷QWQ


分析

我一开始也不会做这题的,后来看了很多网上的题解,终于AC了。(我好菜啊)

主要参考:传送门QWQ


直接搞非常麻烦,反正我是不会做。于是考虑求反,即求有多少不包含任何单词的数量。最后再用$ {26}^m $减去就ok了。

于是在$ AC $自动机上搞$ dp $。

用 $ dp[i][j] $表示前$ i $个字符在$ AC $自动机上位置为$ j $的方案数。

那么可以得出$ dp[i+1][k]=dp[i+1][k]+dp[i][j] $如果k是合法的儿子。

所以还要判断一下合法性(合法性 即:不是任何一个单词的end)


代码

 #include <bits/stdc++.h>
using namespace std;
const int N=, MOD=; int son[N][], fail[N], end[N], newp, rt, q[N];
int dp[][], n, m;
char s[N]; int find(int cur,int i)
{
if(!cur) return rt;
if(son[cur][i]) return son[cur][i];
return fail[son[cur][i]]=find(fail[cur],i);
} int main()
{
for (int i=;i<;i++) son[][i]=;
newp=rt=;
scanf("%d%d",&n,&m); //Trie
for(int i=;i<=n;i++)
{
scanf("%s",s+);
int cur=rt, l=strlen(s+);
for(int j=;j<=l;j++)
{
if(!son[cur][s[j]-'A']) son[cur][s[j]-'A']=++newp;
cur=son[cur][s[j]-'A'];
}
end[cur]=;
} //fail
int l=,r=;q[]=;
for(;l<=r;l++)
{
for(int i=;i<;i++)
if(son[q[l]][i])
{
fail[son[q[l]][i]]=find(fail[q[l]],i);
q[++r]=son[q[l]][i];
}
} //dp
dp[][]=;
for(int i=;i<=m;i++)
for(int j=;j<=newp;j++)
{
for(int k=;k<;k++)
{
int cur=j, f=;
while(cur)
{
if(end[son[cur][k]]) { f=; break; }
cur=fail[cur];
}
if(f) continue; //不能放
cur=j;
while(!son[cur][k])
{
cur=fail[cur]; //从j向fail[j]跳直到有k儿子
}
cur=son[cur][k];
dp[i+][cur]=(dp[i+][cur]+dp[i][j])%MOD;
}
} int anss=, ans=;
for (int i=;i<=m;i++) anss=(anss*)%MOD; //转换
for (int i=;i<=newp;i++)
{
ans=(ans+dp[m+][i])%MOD; //最终答案是所有dp[m+1][x]的和
} printf("%d\n",(anss-ans+MOD)%MOD);
return ;
}

【BZOJ】1030: [JSOI2007]文本生成器(AC自动机+dp)的更多相关文章

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

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

  2. 1030: [JSOI2007]文本生成器 ac自动机+dp

    https://www.lydsy.com/JudgeOnline/problem.php?id=1030 求长度为m不包含n个子串的种数, 跑完ac自动机之后没办法跑矩阵快速幂,因为状态数比较大(6 ...

  3. bzoj 1030: [JSOI2007]文本生成器 (ac自己主动机上的dp)

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 2635  Solved: 1090 [id=1030&qu ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. New Concept English there (9)

    31 65% Cats never fail to fascinate human beings. They can be friendly and affectionate towards huma ...

  2. PHP sessions that have already been started

    In my PHP code, if a session has already started, and I try to start a new one, I get the following ...

  3. CMD命令提示符下选中文字即可以复制和SecureCRT一样

    用过 SecureCRT 的都会觉得复制粘贴很方便.只要选中相应文字,会自动复制.然后点鼠标右键就可以粘贴,非常方便. 但是在windows系统下的CMD里面,每次都要点鼠标右键→标记,再选中相应文字 ...

  4. linux给一个文件夹开启权限

    假如要给一个叫做xiaobang的文件夹权限,CD到这一级目录 chmod -R 777 xiaobang

  5. Mac安装三方软件

    安装提示“xxx软件已损坏,打不开,您应该将它移到废纸篓”的提示,其实并不是软件本身有问题,而是Mac系统的一个安全机制问题步骤1:Spotlight搜索(快捷键:command+空格或右上角搜索的符 ...

  6. 我为什么想并且要学习Scala

    为什么学习函数式编程 在阅读DDD巨著<Patterns, Principles, and Practices of Domain-Driven Design>的过程中,Scott在第5章 ...

  7. boost split字符串

    boost split string , which is very convenience #include <string> #include <iostream> #in ...

  8. 汇编语言---键盘KeyCode值列表

    键盘KeyCode值列表 收藏 keycode   0 =keycode   1 =keycode   2 =keycode   3 =keycode   4 =keycode   5 =keycod ...

  9. 安装redis-3.2.10单节点

    前段时间安装好的redis,今天用脚本安装的时候突然出现版本异常的问题,所以更新一篇为大家提供参考 本次安装在CentOS6.5,采用的redis-3.2.10,最新的redis-4.0.1安装同样适 ...

  10. HihoCoder 1075 开锁魔法III(概率DP+组合)

    描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它.初始时,崔克茜将会随机地选择 k 个盒子用魔法将它 ...