Dominating Patterns (AC 自动鸡模版题, 出现次数最多的子串)
题意: 给你n个模式串, 再给你一个 文本串,问模式串在文本串中出现次数最多是多少。
出现次数最多的模式串有哪些。
解: 模版题。
#include <bits/stdc++.h>
#define LL long long
#define rep(i, j, k) for(int i = j; i <= k; i++)
#define dep(i, j, k) for(int i = k; i >= j; i--)
#define mem(i, j) memset(i, j, sizeof(i))
using namespace std;
const int N = * + , M = ;
map<string, int> vis;
char s[], b[][];
struct Trie {
int a[N][M], tot, val[N], Fail[N], last[N];
///last[j]:节点j沿着失配指针往回走时,遇到的下一个单词节点的编号
void init() {
mem(a[], -); tot = ; val[] = -; last[] = ;
}
int get(char Q) {
return Q - 'a';
}
void join(char s[], int v) {
int len = strlen(s); int now = ;
rep(i, , len - ) {
int id = get(s[i]);
if(a[now][id] == -) {
mem(a[tot], -);
val[tot] = -;
a[now][id] = tot++;
}
now = a[now][id];
}
val[now] = v;
}
void getFail() {
queue<int>Q; while(!Q.empty()) Q.pop();
Fail[] = ;
rep(i, , M - ) {
if(a[][i] == -) a[][i] = ;
else {
Fail[a[][i]] = ;
Q.push(a[][i]);
last[a[][i]] = ;
}
}
while(!Q.empty()) {
int now = Q.front(); Q.pop();
rep(i, , M - ) {
int u = a[now][i];
if(a[now][i] == -) a[now][i] = a[Fail[now]][i];
else {
Fail[u] = a[Fail[now]][i];
Q.push(u);
last[u] = val[Fail[u]] == - ? last[Fail[u]] : Fail[u];
}
}
}
}
int num[];
void print(int x) {
if(x) {
num[val[x]]++;
print(last[x]);
}
}
void query(char s[], int n) {
mem(num, );
int len = strlen(s);
int now = ;
rep(i, , len - ) {
now = a[now][get(s[i])];
if(val[now] != -) print(now);
else if(last[now] != -) print(last[now]);
}
int ma = ;
rep(i, , n) {
ma = max(ma, num[i]);
}
printf("%d\n", ma);
rep(i, , n) {
if(num[vis[b[i]]] == ma) {
printf("%s\n", b[i]);
}
}
}
};
Trie AC;
int main() {
int n;
while(scanf("%d", &n) && n) {
AC.init(); vis.clear();
rep(i, , n) {
scanf("%s", b[i]);
AC.join(b[i], i);
vis[b[i]] = i;
}
AC.getFail();
scanf("%s", s);
AC.query(s, n);
}
return ;
}
Dominating Patterns (AC 自动鸡模版题, 出现次数最多的子串)的更多相关文章
- UVALive 4670 Dominating Patterns --AC自动机第一题
题意:多个模板串,一个文本串,求出那些模板串在文本串中出现次数最多. 解法:AC自动机入门模板题. 代码: #include <iostream> #include <cstdio& ...
- LA4670 Dominating Patterns AC自动机模板
Dominating Patterns 每次看着别人的代码改成自己的模板都很头大...空间少了个0卡了好久 裸题,用比map + string更高效的vector代替蓝书中的处理方法 #include ...
- Keywords Search HDU - 2222 ( ac自动机)模版题
Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others ...
- UVa1449 - Dominating Patterns(AC自动机)
题目大意 给定n个由小写字母组成的字符串和一个文本串T,你的任务是找出那些字符串在文本中出现的次数最多 题解 一个文本串,多个模式串,这刚好是AC自动机处理的问题 代码: #include <i ...
- UVa 1449 - Dominating Patterns (AC自动机)
题目大意:给出多个字符串模板,并给出一个文本串,求在文本串中出现最多的模板,输出最多的次数并输出该模板(若有多个满足,则按输入顺序输出). 思路:赤裸裸的 AC自动机,上模板. 代码: #includ ...
- POJ 1204 Word Puzzles | AC 自动鸡
题目: 给一个字母矩阵和几个模式串,矩阵中的字符串可以有8个方向 输出每个模式串开头在矩阵中出现的坐标和这个串的方向 题解: 我们可以把模式串搞成AC自动机,然后枚举矩阵最外围一层的每个字母,向八个方 ...
- LA 4670 Dominating Patterns (AC自动机)
题意:给定一个一篇文章,然后下面有一些单词,问这些单词在这文章中出现过几次. 析:这是一个AC自动机的裸板,最后在匹配完之后再统计数目就好. 代码如下: #pragma comment(linker, ...
- POJ 2778 DNA Sequence (矩阵快速幂 + AC自动鸡)
题目:传送门 题意: 给你m个病毒串,只由(A.G.T.C) 组成, 问你生成一个长度为 n 的 只由 A.C.T.G 构成的,不包含病毒串的序列的方案数. 解: 对 m 个病毒串,建 AC 自动机, ...
- UVA 11468 Substring (记忆化搜索 + AC自动鸡)
传送门 题意: 给你K个模式串, 然后,再给你 n 个字符, 和它们出现的概率 p[ i ], 模式串肯定由给定的字符组成. 且所有字符,要么是数字,要么是大小写字母. 问你生成一个长度为L的串,不包 ...
随机推荐
- 【题解】Luogu P4910 帕秋莉的手环
原题传送门 "连续的两个中至少有1个金的"珂以理解为"不能有两个木相连" 我们考虑一个一个将元素加入手环 设f\([i][0/1]\)表示长度为\(i\)手环末 ...
- C# 生成随机的6位字母,包含大小写
今天自己做项目需要生成随机的6位字母,于是自己写了一个,下面代码是可以生成任意位数字母的. string _zimu = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg ...
- Window 使用Nginx 部署 Vue 并把nginx设为windows服务开机自动启动
1.编译打包Vue项目 在终端输入 npm run build 进行打包编译.等待... 打包完成生成dist文件夹,这就是打包完成的文件. 我们先放着,进行下一步. 2下载Nginx 下载地址: h ...
- js 简单的滑动2
js 简单的滑动教程(二) 作者:Lellansin 转载请标明出处,谢谢 现在我们让滑动多一个功能,三张图.点击左边向左滑动,点右向右滑,碰到临界值的时候可以循环滑动 原理也很将简单,用posi ...
- ubuntu classicmenu-indicator
sudo add-apt-repository ppa:diesch/testing sudo apt-get update sudo apt-get install classicmenu-in ...
- 使用jQuery开发datatable分页表格插件
当系统数据量很大时,前端的分页.异步获取方式就成了较好的解决方案.一直以来,我都希望使用自己开发的 jquery 插件做系统. 现在,学习了 jquery 插件开发之后,渐渐地也自己去尝试着开发一些简 ...
- Android Jetpack组件
带你领略Android Jetpack组件的魅力 Android新框架jetpack的内容讲解:Room.WorkManager.LifeCycles.LiveData.ViewModel.DataB ...
- SAP云平台上的SSO Principal Propagation设置
我今天试图使用SAP云平台的SAP WebIDE Fullstack时,发现打不开, 遇到如下错误信息: You are not authorized to work with SAP Web IDE ...
- java git .gitignore常用规则
# Created by .ignore support plugin (hsz.mobi).gitignore # Operating System Files *.DS_Store Thumbs. ...
- 使用PLSQL工具连接远程Oracle
在不安装Oracle的情况下使用PLSQL连接远程的数据库步骤: 1)官网下载Instant client工具包 http://www.oracle.com/us/solutions/index-09 ...