SCU - 4507

求给定长度的文本串,使得每个模式串至少出现过一次
求这样的模式串的个数


AC自动机禁止模式串的裸题
这题求的是一个串至少出现过一次
只要求一次都没出现过的方案总数
再拿所有方案总数相减即可得到答案

然后就拿所有模式串构造 Trie树,然后在上面跑 AC自动机
跑到单词结尾的时候不转移,这样就能求出答案

#pragma comment(linker, "/STACK:102400000,102400000")
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <queue>
using namespace std;
typedef pair<int,int> Pii;
typedef long long LL;
typedef unsigned long long ULL;
typedef double DBL;
typedef long double LDBL;
#define MST(a,b) memset(a,b,sizeof(a))
#define CLR(a) MST(a,0)
#define Sqr(a) (a*a)const int MOD=10007,nxt_siz=26,noden=60*100+10;
struct AC_Auto
{struct node{char chr;int val,fail,nxt[nxt_siz];} *trie;int siz;AC_Auto(int size){siz=0;trie=new node[size];memset(trie,0,sizeof(node)*size);}~AC_Auto(){delete []trie;}int chnum(char x){return x-'A';}void addstr(char*);void init();int solve();
};
int N,M;
int dp[110][noden];int main()
{int T;scanf("%d", &T);for(int ck=1; ck<=T; ck++){AC_Auto ac(noden);scanf("%d%d", &N, &M);for(int i=0; i<N; i++){char patn[110];scanf(" %s", patn);ac.addstr(patn);}ac.init();printf("%d\n", ac.solve());}return 0;
}void AC_Auto::addstr(char *str)
{int len=strlen(str),np=0;for(int i=0; i<len; i++){int ch=chnum(str[i]);if(trie[np].nxt[ch]) np=trie[np].nxt[ch];else{trie[np].nxt[ch]=++siz;np=siz;trie[np].chr=str[i];}if(i==len-1) trie[np].val=1;}
}void AC_Auto::init()
{trie[0].fail = 0;queue<int> que;for(int i=0; i<nxt_siz; i++){int np = trie[0].nxt[i];if(np){que.push(np);trie[np].fail = 0;}}while(!que.empty()){int np = que.front();for(int i=0; i<nxt_siz; i++){int nxp = trie[np].nxt[i];int fap = trie[np].fail;if(!nxp){trie[np].nxt[i] = trie[fap].nxt[i];continue;}que.push(nxp);trie[nxp].fail = trie[fap].nxt[i];fap = trie[nxp].fail;if(trie[fap].val) trie[nxp].val = 1;}que.pop();}
}int AC_Auto::solve()
{CLR(dp);dp[0][0]=1;int res=0,tot=1;for(int i=0; i<M; i++){tot=tot*26%MOD;for(int j=0; j<=siz; j++){if(!dp[i][j]) continue;for(int k=0; k<26; k++){int nxp=trie[j].nxt[k];if(trie[nxp].val) continue;dp[i+1][nxp]=(dp[i+1][nxp]+dp[i][j])%MOD;}}}for(int i=0; i<=siz; i++) res=(res+dp[M][i])%MOD;return ((tot-res)%MOD+MOD)%MOD;
}

[SCU 4507] 奶牛情书 (AC自动机)相关推荐

  1. Aho-Corasick 多模式匹配算法(AC自动机) 的算法详解及具体实现

    多模式匹配 多模式匹配就是有多个模式串P1,P2,P3-,Pm,求出所有这些模式串在连续文本T1-.n中的所有可能出现的位置. 例如:求出模式集合{"nihao","ha ...

  2. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  3. AC自动机算法及模板

    AC自动机算法及模板 2016-05-08 18:58 226人阅读 评论(0) 收藏 举报  分类: AC自动机(1)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 关于 ...

  4. Keywords Search AC自动机QAQ

    AC自动机,一直以来都以为是一个非常高大上的算法,其实它还真的挺高大上的. 首先来说,ac自动机的思想与kmp类似,需要自己模拟来理解. 给两个博客: http://www.cppblog.com/m ...

  5. 字符串匹配算法 -- AC自动机 基于Trie树的高效的敏感词过滤算法

    文章目录 1. 算法背景 2. AC自动机实现原理 2.1 构建失败指针 2.2 依赖失败指针过滤敏感词 3. 复杂度及完整代码 1. 算法背景 之前介绍过单模式串匹配的高效算法:BM和KMP 以及 ...

  6. 【Luogu3041】视频游戏的连击(AC自动机,动态规划)

    题面链接 题解 首先构建出AC自动机 然后在AC自动机上面跑DP 转移很显然从Trie树的节点跳到他的儿子节点 但是要注意一个问题, 在计算的时候,每一个节点加入后能够 造成的贡献 要加上他的子串的贡 ...

  7. HDU2896(AC自动机模版题)

    AC自动机模版题: 方法一:超时 #include<iostream> #include<algorithm> #include<cstring> #include ...

  8. HDU2222(AC自动机模版题)

    AC自动机是Trie树和KMP的结合物,但是其实KMP在这里体现了思想,而Trie树才是最重要的,要想学懂AC自动机,学习Trie树是必须的,这些是自己在学习AC自动机的个人看法,我也是在网上学习了大 ...

  9. AC自动机 + 概率dp + 高斯消元 --- HDU 5955 or 2016年沈阳icpc H [AC自动机 + 概率dp + 高斯消元]详解

    题目链接 题目大意: 就是有NNN个人,每个人都会猜一个长度为LLL的只包含{1,2,3,4,5,6}\{1,2,3,4,5,6\}{1,2,3,4,5,6}的序列,现在裁判开始投掷骰子,并且把每次的 ...

  10. P5357 【模板】AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数)

    P5357 [模板]AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数) 传送门 形式上,AC 自动机基于由若干模式串构成的 Trie 树,并在此之上增加了一些 fail 边:本质 ...

最新文章

  1. Python_基础_6
  2. “用于无监督图像生成解耦的正交雅可比正则化”论文解读
  3. Greenplum 类型一致性使用规范 - 索引条件、JOIN的类型一致性限制
  4. Python获取本机所有网卡的MAC地址
  5. NSArray 数组
  6. 无损1080i到1080p是如何制作的
  7. 最新获取展示B站UP主实时信息PHP源码分享
  8. 水经注全国离线地图都有哪些地图数据?
  9. 如何下载石家庄市卫星地图高清版大图
  10. 生物学和计算机学哪个好,生物学和计算机
  11. base_url 是什么
  12. c语言hook函数,另类iOS上的C函数hook
  13. linux查看raw格式磁盘,KVM之raw和qcow2格式虚拟磁盘创建
  14. Java设计模式之《装饰器模式》及应用场景
  15. 护眼色的RGB值 和 颜色代码
  16. Android实现三角形气泡效果方式汇总,高级安卓面试题及答案2019
  17. 复工“神器”华为云WeLink是怎样炼成的?
  18. 微信小程序云开发沉浸式(透明)状态栏的实现(怎么写)
  19. dedecms列表页图片加ALT描述的完美方式
  20. JavaScript:飘雪效果

热门文章

  1. 云和恩墨大讲堂 - Oracle RAC系列课程强势来袭
  2. WCF入门示例一:承载于托管代码中的WCF示例程序
  3. 推荐一个好用的IDEA插件---Translation—中英互译
  4. c语言求余运算作用,C语言中的整数除法和求余运算
  5. 恢复AndroidStudio中误删除的文件
  6. android webview 下载事件,Android使用WebView实现文件下载功能
  7. WebView 监听 H5 下载
  8. Android编程怎么打开,安卓手机如何开启开发者模式?简单三步骤教你解决!
  9. 数字图像处理课程作业1-大米检测
  10. 自动刷新网页代码(可多个网页)