二次联通门 : luogu P3808 【模板】AC自动机(简单版)

/*luogu P3808 【模板】AC自动机(简单版)手速越来越快了10分钟一个AC自动机一遍过编译 + 一边AC感觉不错我也就做做板子题了。。*/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>#define Max 1000009void read (int &now)
{register char word = getchar ();for (now = 0; !isdigit (word); word = getchar ());for (; isdigit (word); now = now * 10 + word - '0', word = getchar ());
}struct Trie_Data
{Trie_Data *child[26];Trie_Data *Fail;int Count;Trie_Data (){for (int i = 0; i < 26; i ++)this->child[i] = NULL;Fail = NULL;Count = 0;}
};Trie_Data *Root;
std :: queue <Trie_Data *>Queue;class AC_Type
{public :void Insert (char *key){Trie_Data *now = Root;Trie_Data *pos;int Id;int Len = strlen (key);for (int i = 0; i < Len; i ++){Id = key[i] - 'a';if (now->child[Id] == NULL)now->child[Id] = new Trie_Data;                    now = now->child[Id];}now->Count ++;}void AC_Build (){Queue.push (Root); Trie_Data *now;Trie_Data *pos;while (!Queue.empty ()){pos = NULL;now = *&Queue.front ();Queue.pop ();for (int i = 0; i < 26; i ++){if (now->child[i] == NULL)continue;if (now == Root)now->child[i]->Fail = Root;else{pos = now->Fail;for (; pos; pos = pos->Fail)if (pos->child[i] != NULL){now->child[i]->Fail = pos->child[i];break;}if (pos == NULL)now->child[i]->Fail = Root;}Queue.push (now->child[i]); }  }}int Query (char *key){int Answer = 0;int Len = strlen (key);int Id;Trie_Data *now = Root;for (int i = 0; i < Len; i ++){Id = key[i] - 'a';while (now->child[Id] == NULL && now != Root)now = now->Fail;now = now->child[Id];if (now == NULL)now = Root;Trie_Data *pos = now;for (; pos != Root && pos->Count >= 0; pos = pos->Fail){Answer += pos->Count;pos->Count = -1;}}return Answer;}
};AC_Type Make;char line[Max];int main (int argc, char *argv[])
{int T, N;Root = new Trie_Data;for (read (N); N --; ){scanf ("%s", line);Make.Insert (line); }Make.AC_Build (); scanf ("%s", line);printf ("%d\n", Make.Query (line)); return 0;
} 

转载于:https://www.cnblogs.com/ZlycerQan/p/7341480.html

luogu P3808 【模板】AC自动机(简单版)相关推荐

  1. 【AC自动机】单词(luogu 3966/ybtoj AC自动机-2)

    正题 luogu 3966 ybtoj AC自动机-2 题目大意 给你n个单词,让你查询这写单词分别在这n个单词中出现过多少次 解题思路 先用AC自动机建好图,然后每个点的权值为1,然后向nx传递 代 ...

  2. P3808,P3796-[模板]AC自动机(简单版/加强版)

    简单版 题目链接: https://www.luogu.org/problem/P3808 题目大意 nnn个模式串,一个文本串,求有多少个模式串出现在文本串里. 解题思路 普通ACACAC自动机不解 ...

  3. 模板 - AC自动机

    ACM-ICPC模板 目录 求有多少个模式串在文本串里出现过 建fail树dfs求每个模式串在文本串中的出现次数 ac自动机fail树上dfs序建可持久化线段树 AC自动机是一种多模匹配算法 AC自动 ...

  4. POJ 1625 Censored!(AC自动机-指针版+DP+大数)题解

    题目:给你n个字母,p个模式串,要你写一个长度为m的串,要求这个串不能包含模式串,问你这样的串最多能写几个 思路:dp+AC自动机应该能看出来,万万没想到这题还要加大数...orz 状态转移方程dp[ ...

  5. HDU 2222 ACAM模板(AC自动机)

    这里找到了两篇很nice的Trie树(作者Hackbuteer1)以及AC自动机(作者niushuai666)入门详解.博主写的可以说是非常用心了,一看就懂. 题意:给出N(<=10000)个单 ...

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

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

  7. ac自动机 匹配最长前缀_AC自动机算法

    AC自动机简介: 首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一.一个常见的例子就是给出n个单词,再给出一段包 ...

  8. 提高篇 第二部分 字符串算法 第4章 AC自动机

    https://blog.csdn.net/wangyh1008/article/details/81428056 [模板]AC自动机(加强版) 洛谷3796 AC自动机_A_loud_name-CS ...

  9. [C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ

    前言 做过杭电.浙大或是北大等ACM题库的人一定对"刷题"不陌生,以杭电OJ为例:首先打开首页(http://acm.hdu.edu.cn/),然后登陆,接着找到"Onl ...

最新文章

  1. 【 MATLAB 】Fourier Transforms ( fft )
  2. 地球自转减速影响世界时 格林尼治时间或成历史
  3. WSUS注冊表導入,工作組用戶系統更新
  4. Numpy 中 mean() 和 average() 的区别?(average可计算加权平均)
  5. 【C++提高班】c++数组遍历比较相邻的数值
  6. 对《构建之法》的一点认识
  7. 【软件】我安装Tomcat5.5(Java Web开发服务器)的几点经验
  8. 会话跟踪技术之HttpSession
  9. centos下升级g++版本
  10. python与数据库完整项目_python入门:操作数据库项目实例分享
  11. AVL平衡树的插入例程
  12. 计算机科学已发展成为一门,计算机前沿技术论文
  13. 服务器重装系统网站打不开怎么办,网页打不开,小编教你网页打不开怎么办
  14. html =拼接dom,在js代码拼接dom对象到页面上去的模板总结(必看)
  15. 天翼校园客户端“中毒”,江苏、广东、湖南成重灾区
  16. http://www.codeproject.com/Articles/11596/XPTable-NET-ListView-meets-Java-s-JTable
  17. 增霸卡出现问题 保护解不开
  18. 数值计算与计算机应用实例,数值计算的若干应用实例求解4_8.doc
  19. 修改并完善框架协议、合同的类型、有效期及目标值等
  20. chrome浏览器上传文件延迟_谷歌Chrome上传文件未响应的解决办法

热门文章

  1. PHP与base64
  2. 《Pro Android Graphics》读书笔记之第二节
  3. 微信小程序开发(1)
  4. vimrc for windows
  5. Programming Pearls Essay 01
  6. 计算机网络技术与应用教程期末考试,2011大学计算机网络技术与应用教程客观题期末复习(含判断题,属于公共课程,使用)...
  7. 一句话说清楚NodeJS中module.exports和exports的区别
  8. ssh中linux 变颜色,linux – 如何通过SSH在Vim中启用颜色?
  9. mongodb消息服务器,win10 MongoDB 3.6 服务端配置
  10. java上课笔记大全_JAVA基础知识上课笔记