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

x./AC自动机

前置::trie , kmp

AC自动机

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;const int MAXN = 2e5 + 5; // 模式串长度之和int tr[MAXN][26], fail[MAXN], tot = 0;
int e[MAXN], sum[MAXN];
vector<int> G[MAXN];
int ins(string s) {int u = 0;for (auto ch : s) {int c = ch - 'a';if (!tr[u][c])tr[u][c] = ++tot;u = tr[u][c];}return u;
}
void bfs() {queue<int> q;for (int c = 0; c < 26; c++)if (tr[0][c])q.push(tr[0][c]);while (!q.empty()) {int u = q.front(); q.pop();for (int c = 0; c < 26; c++)if (tr[u][c]) {fail[tr[u][c]] = tr[fail[u]][c];q.push(tr[u][c]);} elsetr[u][c] = tr[fail[u]][c];}
}int main() { ios::sync_with_stdio(0); cin.tie(0);int n; cin >> n; for (int i = 1; i <= n; i++) {string s; cin >> s;e[i] = ins(s);}bfs();for (int u = 1; u <= tot; u++)G[fail[u]].push_back(u);string t; cin >> t;int u = 0;for (auto ch : t) {int c = ch - 'a';u = tr[u][c];sum[u]++;}auto dfs = [&](int u, auto&& self) -> void {for (auto v : G[u]) {self(v, self);sum[u] += sum[v];}};dfs(0, dfs);for (int i = 1; i <= n; i++)cout << sum[e[i]] << '\n';return 0;
}
http://www.jsqmd.com/news/30334/

相关文章:

  • P1029 [NOIP 2001 普及组] 最大公约数和最小公倍数问题
  • SQL Server 并发控制 第四篇:Snapshot Isolation (SI) 和 Read Committed Snapshot Isolation (RCSI)
  • godot 描边插件
  • 怎么在现有App里融入AI对话能力
  • DFS 序 O(1) 求 LCA
  • @pytest.fixture和setup/teardown
  • 矿山通信如何实现全域一体化?迈威为煤矿装上了“智慧神经网络”
  • Java异常处理实战精要:构建稳定应用的基石
  • €$P2025
  • CSP2025 补题
  • 哈希学习总结
  • 142.环形链表 II
  • 2025 年 11 月制冷设备厂家推荐排行榜,小型制冷设备,空调制冷设备,工业制冷设备,商用制冷设备,大型制冷设备,制冷设备安装与维修服务公司推荐
  • 从创作到分析全搞定!2025公众号效率工具深度测评,这波升级95%的人还不知道
  • 20232304 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • k8s-java应用部署(4)
  • 指数函数和对数函数
  • 2025-11-03 早报新闻
  • 单目三角化原理 - MKT
  • [CEOI 2017] Sure Bet
  • Java数组——三种初始化及内存分析,数组的基本特点,下标越界与小结
  • LeRobot v0.4.0 正式发布:全面提升开源机器人的学习能力
  • QPS、TPS、PV、UV、并发量
  • 补码加减法
  • 今天总结
  • whk 笔记
  • 冬月做题记录
  • 11月3号
  • 低代码与传统开发:不是替代,而是互补
  • 11.3模拟赛