• 题意
    问一个字符串中包含多少种模式串,该字符串的反向串包含也算。
  • 思路
    解析一下字符串,简单。
    建自动机的时候,通过fail指针建立trie图。这样跑图的时候不再跳fail指针,相当于就是放弃了fail指针。
    跑的时候,已经走过的模式串不能二次计数。
  • 代码
    附赠一大波样例
#include <iostream>
#include <stdio.h>
#include <queue>
#include <string.h>
using namespace std;const int maxn=5100010;
const int N=250010;
char cmp[maxn];
char dmp[maxn];struct Dfa {int trie[N][26],cnt;int e[N];int fail[N];char ch;void init(char c) {memset(trie,0,sizeof(trie));memset(e,0,sizeof(e));memset(fail,0,sizeof(fail));cnt=0;ch=c;}void insert(char * s) {int p=0;for (int i=0;s[i];i++) {int to=s[i]-ch;if (trie[p][to]==0) {trie[p][to]=++cnt;}p=trie[p][to];}e[p]++;}void build() {queue<int> q;for (int i=0;i<26;i++) {if (trie[0][i]) {q.push(trie[0][i]);}}while (!q.empty()) {int root=q.front();q.pop();for (int i=0;i<26;i++) {if (trie[root][i]) {fail[trie[root][i]]=trie[fail[root]][i];q.push(trie[root][i]);}else {trie[root][i]=trie[fail[root]][i];}}}}long long query(char * s) {long long ans=0;int p=0;for (int i=0;s[i];i++) {p=trie[p][s[i]-ch];//第一层的空节点k trie[0][k]=0 for (int j=p;j&&~e[j];j=fail[j]) {ans+=e[j];e[j]=-1;}}int len=strlen(s);p=0;for (int i=len-1;i>=0;i--) {p=trie[p][s[i]-ch];for (int j=p;j&&~e[j];j=fail[j]) {ans+=e[j];e[j]=-1;}}return ans;}
}dfa;void translate(char * c)
{int cnt=0,x=0;bool flag=false;for (int i=0;c[i];i++) {if (c[i]!='['&&c[i]!=']') {if (c[i]>='A'&&c[i]<='Z') {if (flag==false) {dmp[cnt++]=c[i];}else {while (x--) {dmp[cnt++]=c[i];}x=0;flag=false;}}else {flag=true;x=x*10+c[i]-'0';}}}dmp[cnt]='\0';//cout<<dmp<<endl;
}int main()
{   int T,n;char virus[1010];scanf("%d",&T);while (T--) {dfa.init('A');scanf("%d",&n);for (int i=0;i<n;i++) {scanf("%s",virus);dfa.insert(virus);}dfa.build();scanf("%s",cmp);translate(cmp);printf("%lld\n",dfa.query(dmp));}return 0;
}
/*
5
3
AB
BH
H
ABH
3
AB
AD
B
ABADB
3
IMQ
MQ
Q
QMI
2
ABB
BD
ABBD
5
ABB
BD
BB
DE
BDE
EDBBA
*/

POJ 3987 Computer Virus on Planet Pandora (AC自动机优化)相关推荐

  1. AC自动机 - 多模式串的匹配 --- HDU 3695 Computer Virus on Planet Pandora

    Problem's Link Mean: 有n个模式串和一篇文章,统计有多少模式串在文章中出现(正反统计两次). analyse: 好久没写AC自动机了,回顾一下AC自动机的知识. 本题在构造文章的时 ...

  2. HDU 3695 Computer Virus on Planet Pandora (AC自己主动机)

    题意:有n种病毒序列(字符串),一个模式串,问这个字符串包括几种病毒. 包括相反的病毒也算.字符串中[qx]表示有q个x字符.具体见案列. 0 < q <= 5,000,000尽然不会超, ...

  3. 【uva11019-Matrix Matcher】AC自动机+优化+记录

    http://acm.hust.edu.cn/vjudge/problem/33057 题意:在二维文本串T中查找一个二维模板串P出现了多少次. 题解: 拆分模板串P的每一行,建AC自动机. 拆分文本 ...

  4. 计算机病毒及其防治 Computer Virus Analysis and Antivirus

    Episode I 计算机病毒的历史 FUDAN UNIVERSITY 3 世界上第一台计算机诞生 • 1946年2月14日,宾夕法尼亚大学莫尔电气学院 (Moore School of Electr ...

  5. 武汉理工大学计算机专业英语,第56讲:Computer Virus

    引言 Part1 Computer Hardware Chapter1 Principles of Computer Organization 1.1 Computer Hardware 1.3 Wh ...

  6. POJ 3691 DNA repair AC自动机 + DP

    题意:给你只包含'A','G','T','C'四个字母的n个模板串和1个文本串,问你文本串改变多少个字符就可以使得文本串中没有一个模板串 解题思路: 我们可以知道  dp[i][j] 为文本串到 第i ...

  7. POJ 2778 DNA Sequence —— (AC自动机+矩阵快速幂)

    距离上次做AC自动机有很久了=.=,以前这题的思路死活看不懂,现在还是觉得很好理解的. 思路参见:http://blog.csdn.net/morgan_xww/article/details/783 ...

  8. POJ - 2778 DNA Sequence(AC自动机+矩阵快速幂)

    题目链接:点击查看 题目大意:给出 n 个长度不大于 10 的字符串表示病毒串,再给出一个长度 len ,问长度为 len 的字符串中,有多少个字符串不含有病毒串作为子串 题目分析:因为病毒串的长度和 ...

  9. Censored! POJ - 1625 AC自动机+大数DP

    题意: 给出一n种字符的字典,有p个禁用的单词, 问能组成多少个不同的长度为m的合法字符串.(m<=50) 题解: 是不是个我们之前做的题目非常非常像,题意都一样. 直接将上次写的AC自动机+矩 ...

  10. Censored! POJ - 1625(AC自动机 + dp +高精度模板)

    题目链接 题目大意:给你一个字母表,给定一些敏感字符串,问长度为m且不含任意敏感字符串的串有多少个.(字符全部来自字母表) 思路:首先第一个坑点是输入的字符是unsigned char,可能出现负的A ...

最新文章

  1. 2021年大数据Spark(二十一):Spark Core案例-SogouQ日志分析
  2. 2020-2021Android中高级面试题大全
  3. CPU步进号(版本号)
  4. python三维图形渲染-基于 pygtk + vtk 实现三维数据可视化(一)
  5. Linux(CentOs)下安装Phantomjs + Casperjs
  6. 瀑布模型 原型模型 增量模型 螺旋模型的优缺点
  7. java 类 request_java普通类得到request对象
  8. 怎么创建计算机快捷方式到桌面两种方法,使用脚本主机创建Windows快捷方式 - Windows Client | Microsoft Docs...
  9. html中超链接无效怎么办,超链接问题:“引用无效”怎么回事
  10. 关于sources.list和apt-get [转载]
  11. DE33 Relation Between Non-linear Systems and First-order ODEs
  12. matlab sbus,WIRIS Pro Sc科研级机载双摄热红外成像仪
  13. PowerMILL基础入门到模具编程工艺讲解视频教程
  14. 可以多项目协同的项目管理软件
  15. linux软件安装与卸载
  16. 【深度学习】目标检测综述
  17. java程序 联机方法_Java实现Tank大战联机版
  18. 如何在mac上输入无穷大infinity符号:∞
  19. ubuntu 移除PPA
  20. Commons-Collections6分析

热门文章

  1. Centos7虚拟机MySQ连接Hive
  2. 微型计算机必须具备的输入设备,一台微型计算机必须具备的输出设备是显示器。...
  3. 文档型数据库MongoDB使用教程
  4. 在VBA代码中引用Excel工作表中单元格区域的方式小结
  5. Wise Force Deleter强制删除工具
  6. 八爪鱼抓取html,网页图片采集和抓取方法详解 - 八爪鱼采集器
  7. 除了“造车再创业”,小米还能拼什么?
  8. 433m的模块含义及该如何适当的选择对应的无线模块
  9. HTTP常见状态码及常见错误
  10. PMP知识点(十一、干系人管理)