简单复习一下字符串,顺便存个板子。

// Problem: P3808 【模板】AC自动机(简单版)
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3808
// Memory Limit: 512 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<random>
#include<cassert>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].l+tr[u].r)>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=5000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
int tr[N][26],idx,cnt[N];
int fail[N];
char s[N];int newnode() {int u=++idx; cnt[u]=0;for(int i=0;i<26;i++) tr[u][i]=0;return u;
}void insert() {int n=strlen(s+1);int p=0;for(int i=1;i<=n;i++) {int u=s[i]-'a';if(!tr[p][u]) tr[p][u]=newnode();p=tr[p][u];}cnt[p]++;
}void getfail() {queue<int>q;for(int i=0;i<26;i++) if(tr[0][i]) {fail[tr[0][i]]=0;q.push(tr[0][i]);}while(q.size()) {int u=q.front(); q.pop();for(int i=0;i<26;i++) {int p=tr[u][i];if(p) fail[p]=tr[fail[u]][i],q.push(p);else tr[u][i]=tr[fail[u]][i];}}
}int query() {int ans=0;int n=strlen(s+1);int p=0;for(int i=1;i<=n;i++) {int u=tr[p][s[i]-'a'];while(u&&cnt[u]!=-1) {ans+=cnt[u]; cnt[u]=-1;u=fail[u];}p=tr[p][s[i]-'a'];}return ans;
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);idx=0; for(int i=0;i<26;i++) tr[0][i]=0;scanf("%d",&n);for(int i=1;i<=n;i++) {scanf("%s",s+1);insert();}getfail();scanf("%s",s+1);printf("%d\n",query());return 0;
}
/**/

AC Automaton相关推荐

  1. ac automaton 专题

    hdu2222 模板题 hdu2825 在ac自动机上的状压dp hdu3247 在ac自动机上bfs poj2778 求长度为n,不包含给定的m个字符串的任何一个的字符串的个数 其实就是求长度为n的 ...

  2. CDOJ1633 Video Game Combos [AC自动机+dp]

    题目地址:http://acm.uestc.edu.cn/problem.php?pid=1633 AC自动机+BFS AC自动机,参见:http://www.cnblogs.com/luna-lov ...

  3. 浅谈Aho-Corasick automaton(AC自动机)

    Aho-Corasick automaton是什么? 要学会AC自动机,我们必须知道什么是Trie,也就是字典树.Trie树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统 ...

  4. Aho-Corasick automaton,ac自动机实现

    文章目录 写在前面 算法概述 trie树的构建 trie树的节点结构 插入P串到trie树中 fail指针的创建 搜索过程 测试程序 写在前面 原作者的视频讲解链接:[算法]轻松掌握ac自动机_哔哩哔 ...

  5. AC自动机——Aho-Corasick Automaton

    这是一个英文版的讲的比较好的AC自动机资料. http://www.cs.uku.fi/~kilpelai/BSA05/lectures/slides04.pdf 如果不爱看英文,可以看我整理的大致的 ...

  6. AC自动机的使用案例

    #coding:utf-8 import ahocorasickdef make_AC(AC, word_set):for word in word_set:AC.add_word(word,word ...

  7. AC自动机——多个kmp匹配

    (并不能自动AC) 介绍: Aho-Corasick automaton,最经典的处理多个模式串的匹配问题. 是kmp和字典树的结合. 精髓与灵魂: ①利用trie处理多个模式串 ②引入fail指针. ...

  8. 【学习笔记+习题集】字符相关(输入输出流,字典树,AC自动机,后缀自动机)(4598字)(更新至2022.12.28)

    目录 板块零:输入输出流 情况一:读取字符串和读取行混用的时候 情况二:关于识别空行 第一题:hdoj2072 情况三:用char数组接受getline函数的输入流 情况四:关于汉字 补充练习: 第一 ...

  9. 字符串处理【AC自动机】 - 原理 AC自动机详解

    字符串处理[AC自动机] - 原理 AC自动机详解 AC自动机(Aho-Corasick automaton)在1975年产生于贝尔实验室,是著名的多模匹配算法. 学习AC自动机,要有KMP和Trie ...

最新文章

  1. 解决ajax.open方法失效问题
  2. linux c 多态原理,看了所谓的面向对象中靠继承多态实现的所谓重用 哥笑了
  3. android网络通信之SOAP教程实例汇总
  4. python函数装饰器有什么用_Python @函数装饰器及用法(超级详细)
  5. datalist 的用法。也是增删改查,但是比较智能。用数据绑定的方式,可以有不同的显示方法,下面是对一个表的增删改查的参考代码...
  6. STC51入门笔记(郭天祥C语言)---第十一节:使用DS12C887时钟芯片设计高精度时钟
  7. winxp如何打开计算机的端口,xp系统怎么打开445端口呢?开启445端口的教程
  8. 1元云购网站建设,一元云购网站制作,夺宝网站定制公司,一元云购源码开发
  9. 软件项目经理(实施)流程经验及理解
  10. 华为OD机试(JAVA)真题II
  11. 阿里云备案服务号是什么怎么用?
  12. 如何将标准地图服务中的eps格式中国地图应用到论文中带审图号的地图制作?(二)
  13. iOS APP版本自动更新
  14. Django 中 models 用法及参数详解
  15. 塑胶模具设计-双色注塑模具设计36条经典经验分享
  16. unbanu配置mysql数据库_UbuntuMySQL使用配置
  17. python只显示重复值_使用内置条件格式的OpenPyXL:重复值和唯一值
  18. 微信支付当前url未注册问题
  19. Spring AOP动态代理
  20. linux第三方SDK库冲突,摄像机SDK对接第三方平台一SDK库问题FAQ

热门文章

  1. Android启动过程五个步骤,Android启动流程、app启动原理
  2. 利用for循环调用插入方法批量插入 一条失败_算法与数据结构(1):基础部分——以插入排序为例...
  3. python多线程读取数据库数据_Python基于多线程操作数据库相关知识点详解
  4. 将太阳光聚集起来可以用来做饭!?
  5. 如何才能避免聚会尬聊
  6. 为什么睡觉时身体突然抖一下?答案吓到我了!
  7. 私房钱就藏在老婆眼皮底下
  8. 数据时代,信息的无处遁形
  9. 软件开发有哪些规范和标准_深圳APP软件开发的流程是什么?
  10. 专升本c语言网课听谁的好_都说塑钢泥比玻璃胶好,填缝永不变黑,师傅却说不好用,听谁的?...