传送门

文章目录

  • 题意:
  • 思路:

题意:


思路:

这个只能搞failfailfail树了,让后跑一遍即可。

重复的字符串记一个,让后其他的都跟他一个答案即可。

// Problem: P3796 【模板】AC自动机(加强版)
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3796
// Memory Limit: 128 MB
// Time Limit: 3000 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=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
int tr[N][26],idx,ed[N],fail[N];
int cnt[N],pos[N],ans[N];
string s[N],ss;
vector<int>v[N];int newnode() {int u=++idx;for(int i=0;i<26;i++) tr[u][i]=0;return u;
}void insert(int id,string s) {int n=s.length(),p=0;for(int i=0;i<n;i++) {int u=s[i]-'a';if(!tr[p][u]) tr[p][u]=newnode();p=tr[p][u];}ed[p]=id;
}void get_fail() {queue<int>q;for(int i=0;i<26;i++) if(tr[0][i]) 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];}}
}void dfs(int u) {for(auto x:v[u]) dfs(x),cnt[u]+=cnt[x];
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);scanf("%d",&n);idx=0; for(int i=0;i<26;i++) tr[0][i]=0;map<string,int>mp;for(int i=1;i<=n;i++) {cin>>s[i]; if(!mp.count(s[i])) mp[s[i]]=i;insert(mp[s[i]],s[i]);}get_fail();cin>>ss;for(int i=1;i<=idx;i++) v[fail[i]].pb(i);int len=ss.length();int p=0;for(int i=0;i<len;i++) {int u=ss[i]-'a';p=tr[p][u];cnt[p]++;}dfs(0);for(int i=1;i<=idx;i++) if(ed[i]) ans[ed[i]]+=cnt[i];for(int i=1;i<=n;i++) printf("%d\n",ans[mp[s[i]]]); return 0;
}
/**/

P5357 【模板】AC自动机(二次加强版) fail树相关推荐

  1. 模板 - AC自动机

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

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

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

  3. fail树(bzoj 3172: [Tjoi2013]单词)

    3172: [Tjoi2013]单词 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 4223  Solved: 2051 [Submit][Stat ...

  4. 【学时总结模板时间】◆学时·10 模板·3◆ AC自动机

    ◇学时·10 & 模板·3◇ AC自动机 跟着高中上课--讲AC自动机的扩展运用.然而连KMP.trie字典树都不怎么会用的我一脸懵逼<(_ _)> 花一上午自学了一下AC自动机 ...

  5. AC自动机(题目+模板)

    学习博客:https://www.cnblogs.com/hyfhaha/p/10802604.html AC自动机可以认为是kmp+trie树. trie树数组大小是字符串数目n*最大字符串长度mx ...

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

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

  7. 数据结构与算法之美笔记——基础篇(下):图、字符串匹配算法(BF 算法和 RK 算法、BM 算法和 KMP 算法 、Trie 树和 AC 自动机)

    图 如何存储微博.微信等社交网络中的好友关系?图.实际上,涉及图的算法有很多,也非常复杂,比如图的搜索.最短路径.最小生成树.二分图等等.我们今天聚焦在图存储这一方面,后面会分好几节来依次讲解图相关的 ...

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

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

  9. 【AC自动机】【字符串】【字典树】AC自动机 学习笔记

    blog:www.wjyyy.top     AC自动机是一种毒瘤的方便的多模式串匹配算法.基于字典树,用到了类似KMP的思维.     AC自动机与KMP不同的是,AC自动机可以同时匹配多个模式串, ...

  10. 【算法无用系列】AC自动机敏感词过滤

    简介: 本文是博主自身对AC自动机的原理的一些理解和看法,主要以举例的方式讲解,同时又配以相应的图片.代码实现部分也予以明确的注释,希望给大家不一样的感受.AC自动机主要用于多模式字符串的匹配,本质上 ...

最新文章

  1. 研究速递:老年人的心智能力不一定在衰减,抗干扰的能力会更强
  2. python爬虫解决网页重定向问题
  3. python的jupyter的使用教程-Jupyter notebook快速入门教程
  4. java上三角数组_二维数组的三角填充 两种java实现的方法
  5. 微信测试号开发 服务器 token验证
  6. java继承时父类常量覆盖吗_Java父类继承中的static和final用法
  7. Spring Boot的RestTemplate 之exchange方法
  8. HDU 6182 2017广西邀请赛:A Math Problem
  9. mysql 物理删除 索引_MySQL 索引重建
  10. 显示和隐藏Mac隐藏文件的命令
  11. nginx负载均衡的方法
  12. ahk写入excel单元格_【进阶】Excel 自动化教程
  13. 一篇很感人的DOTA小说--我本近卫
  14. 很强大的上网行为管理终端软件-云子可信-一键禁止访问视频网站
  15. elasticsearch(15) match_phase的使用 slop的使用
  16. linux设置r语言环境,R语言 环境设置
  17. android计算器开源小项目代码(附安装包.apk)
  18. Apache Spark RDD 论文(中文翻译)
  19. eclipse 32位换成64位 maven tomcat svn 集成
  20. Altium Designer 20 安装方法及步骤

热门文章

  1. 海南橡胶机器人成本_「图说」海垦看点:海南橡胶联合北京理工华汇智能科技首创我国林间智能割胶机器人...
  2. 全球顶级大学,在中国录取率却不足0.5%,答案一针见血!
  3. 物理学家杨振宁到底有多厉害?
  4. 你们数学老师当年是怎么叫这些符号的…
  5. 雨雪出行伴侣,优质PVC时尚鞋套,防滑/防水更耐磨
  6. 这里聚集了优秀的数学老师、家长,有超多惊喜在等你!
  7. linux 系统迁移到固态硬盘,把Debian GNU/Linux迁移到SSD上
  8. python赋值语句格式_Python赋值语句后逗号的作用分析
  9. 超详细图解!【MySQL进阶篇】存储过程,视图,索引,函数,触发器
  10. win1编辑java环境,在win7下配置java编译环境