当前位置: 首页 > news >正文

P5357 【模板】AC 自动机

题目背景

本题原为“AC 自动机(二次加强版)”。完成本题前可以先完成 AC 自动机(简单版) 和 AC 自动机(简单版 II) 两道题,为 AC 自动机更简单的应用。

题目描述

给你一个文本串 \(S\)\(n\) 个模式串 \(T_{1 \sim n}\),请你分别求出每个模式串 \(T_i\)\(S\) 中出现的次数。

输入格式

第一行包含一个正整数 \(n\) 表示模式串的个数。

接下来 \(n\) 行,第 \(i\) 行包含一个由小写英文字母构成的非空字符串 \(T_i\)

最后一行包含一个由小写英文字母构成的非空字符串 \(S\)

数据不保证任意两个模式串不相同

输出格式

输出包含 \(n\) 行,其中第 \(i\) 行包含一个非负整数表示 \(T_i\)\(S\) 中出现的次数。

输入输出样例 #1

输入 #1

5
a
bb
aa
abaa
abaaa
abaaabaa

输出 #1

6
0
3
2
1

说明/提示

对于 \(100 \%\) 的数据,\(1 \le n \le 2 \times {10}^5\)\(T_{1 \sim n}\) 的长度总和不超过 \(2 \times {10}^5\)\(S\) 的长度不超过 \(2 \times {10}^6\)

把这个数据加强版的代码稍加修改即可通过另外两题了

题解

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long ll;
int n;
int tree[N][26];
int fail[N];
int cnt = 0;
int ed[N];
int t[N];
vector<int>e[N];void insert(int idx,string s)
{int u = 0;for(auto ch:s){int c = ch - 'a';if(tree[u][c]==0)tree[u][c] = ++cnt;u = tree[u][c];}ed[idx] = u;
} void setfail()
{queue<int>q;for(int c =0;c<26;++c){if(tree[0][c])q.push(tree[0][c]);}while(!q.empty()){int u = q.front();q.pop();for(int c=0;c<26;c++){if(tree[u][c]==0){tree[u][c] = tree[fail[u]][c];}else{fail[tree[u][c]] = tree[fail[u]][c];q.push(tree[u][c]);}}}
}void f1(int u)
{for(int v:e[u]){f1(v);t[u]+=t[v];}
}void solve()
{cin>>n;for(int i=1;i<=n;i++){string s;cin>>s;insert(i,s);}setfail();string text;cin>>text;int u = 0;for(auto ch:text){int c = ch-'a';u = tree[u][c];t[u]++;}for(int i=1;i<=cnt;i++){e[fail[i]].push_back(i);}f1(0);for(int i=1;i<=n;i++){cout<<t[ed[i]]<<endl;}
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int _=1;// cin>>_;while(_--){solve();}return 0;
}
http://www.zskr.cn/news/64452.html

相关文章:

  • 2025年终总结
  • P5367 【模板】康托展开
  • Day5 Scrum冲刺博客
  • 台达变频器与西门子1200 PLC互联借Modbus RTU转Profinet推动工业物联网
  • 二维偏序(离线二维数点)
  • 敏捷冲刺随笔-2
  • 2025年12月高压固态软启动柜厂家排行榜,技术创新+24小时售后,工业采购测评推荐
  • 我是如何用浏览器插件轻松抓取抖音评论并实现精准搜索分析的
  • useEffect详解
  • 详解np.random.normal(0, 3, size=x.shape)
  • 代码随想录Day23_回溯_组合.md
  • 何以为生
  • Gemini3疯了!0.09接入Nano Banana Pro 4k画质API(附实战教程)
  • 东方博宜OJ 1119:求各位数字之和 ← 循环结构
  • 2025.11.28
  • 多项式次数选择完整演示
  • Java 线程池深度解析:原理、策略与生产环境调优指南
  • 会赢吗
  • 2025年11月电动叉车销售企业避坑指南:市场主流品牌横向对比
  • U636459 网格
  • 2025-11-28 用后端java的架构来类比 NestJS 的各个部分(deepseek)
  • java真分页查询两个库的数据,合并成一个结果集分页查询
  • 2025年11月晶振厂家推荐:权威榜与选择指南
  • 2025年11月晶振厂家推荐榜单:主流厂商综合对比与选择指南
  • YXC扬兴科技联系方式:产品服务与技术支持相关指南
  • 选择性检索增强代码补全技术解析
  • W55MH32 网络继电器三模自由控制:小程序按键网页随选 - 实践
  • Azure DevOps Server 2022.2 补丁(Patch 7)
  • 2025年免费简历模板排行榜:媲美付费版的优质选择
  • 笔记本电脑外接显示器偶尔不亮