Frist AC zi dong ji(Aho-Corasick Automation) of life

#include <bits/stdc++.h>
using namespace std;const int N=5e5+10;    //10000个串,长度为50 struct Trie{int num;Trie *next[27],*fail;
};
Trie q[N],*root;
int tol;Trie* Creat()
{Trie *p;p=&q[tol++];p->fail=NULL;p->num=0;for(int i=0;i<26;i++)p->next[i]=NULL;return p;
}void Insert(char *str)
{Trie *p=root;int index,len=strlen(str);for(int i=0;i<len;i++){index=str[i]-'a';if(p->next[index]==NULL)p->next[index]=Creat();p=p->next[index];}p->num++;
}void Build_Ac()
{queue<Trie*>que;que.push(root);while(!que.empty()){Trie *p=que.front();que.pop();for(int i=0;i<26;i++){if(p->next[i]!=NULL){if(p==root)p->next[i]->fail=root;else{Trie *temp;temp=p->fail;while(temp!=NULL){if(temp->next[i]!=NULL){p->next[i]->fail=temp->next[i];break;}temp=temp->fail;}if(temp==NULL)p->next[i]->fail=root;}que.push(p->next[i]);}}}
}char word[1000010];
int Query()
{int ans,index,len;Trie *p=root;ans=0;len=strlen(word);for(int i=0;i<len;i++){index=word[i]-'a';while(p->next[index]==NULL && p!=root)//失配跳转到失败指针 p=p->fail;p=p->next[index];if(p==NULL)    //还是失配 p=root;Trie *temp=p;    //p不动,temp计算后缀串 while(temp!=root && temp->num!=-1){ans+=temp->num;temp->num=-1;temp=temp->fail;}}return ans;
}int main()
{char s[51];int T;scanf("%d",&T);while(T--){int n;tol=0;root=Creat();scanf("%d",&n);while(n--){scanf("%s",s);Insert(s);    }Build_Ac();scanf("%s",word);printf("%d\n",Query());}return 0;
}

转载于:https://www.cnblogs.com/keyboarder-zsq/p/6777435.html

HDU2222【AC自动机(基础·模板)】相关推荐

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

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

  2. ac自动机(模板+一点点小优化)

    题意:给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. 题解:ac自动机+加一点点优化,否则过不了,具体见代码,就一行代码. 传送门 #include<iostream> # ...

  3. [AC自动机 模板]

    洛谷的两道模板题目 简单版 #include<bits/stdc++.h> #define N 500010 using namespace std; queue<int>q; ...

  4. HDU2222 Keywords Search(AC自动机模板)

    AC自动机是一种多模式匹配的算法.大概过程如下: 首先所有模式串构造一棵Trie树,Trie树上的每个非根结点都代表一个从根出发到该点路径的字符串. 然后每个结点都计算出其fail指针的值,这个fai ...

  5. AC自动机 从入门到模板

    前言 作为一名菜鸡选手,我的目的仅仅是初步了解ac自动机的原理和各种性质... 正篇 1.AC自动机的基本性质 AC自动机的前置技能点 KMP,字典树 ac自动机的原理解释可以参考 hihocode ...

  6. AC自动机模板(【CJOJ1435】)

    题面 Description 对,这就是裸的AC自动机. 要求:在规定时间内统计出模版字符串在文本中出现的次数. Input 第一行:模版字符串的个数N. 第2->N+1行:N个字符串.(每个模 ...

  7. 字符串-AC自动机(详细图解)

    文章目录 AC自动机 原理 模板 例题 HDU-2222Keywords Search HDU-2896病毒侵袭 HDU-3065病毒侵袭持续中 POJ-2778DNA Sequence HDU-22 ...

  8. HDU - 2222 Keywords Search(AC自动机)

    题目链接:点击查看 题目大意:给出n个长度不超过50的模式串,再给出一个长度不超过1e6的主串,问模式串在主串中出现过多少次 题目分析:一开始我以为是求n次KMP,后来才知道这样做的时间复杂度是O(L ...

  9. AC自动机-HDU2222-模板题

    http://acm.hdu.edu.cn/showproblem.php?pid=2222 一个AC自动机的模板题.用的kuangbin的模板,静态建Trie树.可能遇到MLE的情况要转动态建树. ...

  10. HUD2222 Keywords Serch AC自动机

    传送门 显然这是一道AC自动机的模板题 但是还有一些地方需要注意: 1.多组数据要每次清空数组 2.关键字重复要累加,但是文本重复不能累加,可以打标记解决 #include<cstdio> ...

最新文章

  1. python中print语句
  2. 认识 UML 类关系——依赖、关联、聚合、组合、泛化
  3. 剩余大学时光里要做的事
  4. 关于sql备份到其他服务器的问题
  5. mysql数据库 主主的搭建
  6. 安装VCSA6.7(vCenter Server Appliance 6.7) 2019.7.9
  7. Java中JDK安装以及环境变量设置
  8. android style theme
  9. sql盲注特点_sql盲注
  10. 蓝桥杯试题 算法提高 学霸的迷宫
  11. Scratch打气球游戏 电子学会图形化编程scratch等级考试三级真题答案2019-9
  12. 苏州大学计算机学院导师洪宇介绍,苏州大学计算机科学与技术学院硕导介绍:马小虎...
  13. Visual Studio 2008 官方破解版 正版cd key
  14. 极验第四代滑块验证码破解(三):滑块轨迹构造
  15. android最新源码(4.4.2_r1版本以上)下载
  16. 2023第三方应用苹果电脑磁盘读写工具Tuxera NTFS
  17. SparkSubmit提交任务到yarn及报错解决方案
  18. 计算机右键属性 资源管理器崩溃,Win7资源管理器崩溃,真凶竟是右键菜单
  19. markdown for 蝉知 2.1.1,简单修复移动端展示
  20. 八大排序(一):四种简单的排序(直接插入排序、希尔排序、冒泡排序、选择排序)

热门文章

  1. js数组常用方法总结(包括ES6)
  2. Vue第三天 v-model与Vue组件化
  3. Mysql自增id用完怎么办?
  4. Windows核心编程笔记
  5. 深度学习中拟合是什么意思?
  6. kettle使用文件导入到Postgresql出现如下几种问题的总结
  7. 三大技术要素为互联网金融2.0保驾护航
  8. 拷贝构造函数——防篡改
  9. 重学概率论的一点点理解(持续更新)
  10. UNIX高手的10个习惯之一