当前位置: 首页 > 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.jsqmd.com/news/54412/

相关文章:

  • Revive Adserver存储型XSS漏洞技术分析
  • 2025年终总结
  • P5367 【模板】康托展开
  • 局域网---局域网传输文件及共享桌面
  • P2709 【模板】莫队 / 小B的询问
  • 并不打算的
  • P1903 【模板】带修莫队 / [国家集训队] 数颜色 / 维护队列
  • P1883 【模板】三分 / 函数
  • CSP2025 T4
  • Day5 Scrum冲刺博客
  • 台达变频器与西门子1200 PLC互联借Modbus RTU转Profinet推动工业物联网
  • 2025-11-28
  • Convolutional Neutral Network(CNN网络)
  • 二维偏序(离线二维数点)
  • Product Hunt 每日热榜 | 2025-10-30 - 教程
  • 2025年Q4球墨铸铁管厂家TOP5排行榜:场景适配+成本优化,采购选型指南
  • 2025年Q4中国GEO优化公司权威排行榜:TOP5服务商解锁Deepseek高转化,AI搜索营销新标杆
  • WPF的MVVM模式核心架构与达成细节
  • 2025年12月GPU平台哪家好?权威榜单TOP5 低延迟+动态扩容,企业/开发者核心推荐
  • 敏捷冲刺随笔-2
  • 2025年12月高压固态软启动柜厂家排行榜,技术创新+24小时售后,工业采购测评推荐
  • 力扣160 相交链表 java达成
  • `train_test_split` 是什么?
  • 解决LVGL与FATFS编码格式冲突及外挂字库方案
  • 我是如何用浏览器插件轻松抓取抖音评论并实现精准搜索分析的
  • 重练算法(代码随想录版) day24 - 回溯part3
  • useEffect详解
  • 详解np.random.normal(0, 3, size=x.shape)
  • 代码随想录Day23_回溯_组合.md
  • 详细介绍:【JUnit实战3_21】第十二章:JUnit 5 与主流 IDE 的集成 + 第十三章:用 JUnit 5 做持续集成(上):在本地安装 Jenkins