AC自动机 LA 4670 Dominating Patterns
题意:训练指南P216
分析:求出现最多次数的字串,那么对每个字串映射id,cnt记录次数求最大就可以了。
#include <bits/stdc++.h>
using namespace std; const int N = 150 + 5;
const int NODE = N * 70;
const int LEN = 1e6 + 5;
const int SIZE = 26;
struct AC {
int ch[NODE][SIZE], fail[NODE], val[NODE], cnt[N], sz;
map<string, int> ms;
void clear(void) {
memset (ch[0], 0, sizeof (ch[0]));
memset (cnt, 0, sizeof (cnt));
sz = 1; val[0] = 0;
ms.clear ();
}
int idx(char c) {
return c - 'a';
}
void insert(char *P, int id) {
ms[string (P)] = id;
int u = 0;
for (int c, i=0; P[i]; ++i) {
c = idx (P[i]);
if (!ch[u][c]) {
memset (ch[sz], 0, sizeof (ch[sz]));
val[sz] = 0; ch[u][c] = sz++;
}
u = ch[u][c];
}
val[u] = id;
}
void build(void) {
queue<int> que; fail[0] = -1;
int u;
for (int i=0; i<SIZE; ++i) {
u = ch[0][i];
if (u) {
fail[u] = 0; que.push (u);
}
}
while (!que.empty ()) {
u = que.front (); que.pop ();
for (int i=0; i<SIZE; ++i) {
int &v = ch[u][i];
if (!v) {
v = ch[fail[u]][i]; continue;
}
que.push (v);
fail[v] = ch[fail[u]][i];
}
}
}
void query(char *T) {
int u = 0, v;
for (int c, i=0; T[i]; ++i) {
c = idx (T[i]);
u = ch[u][c]; v = u;
cnt[val[v]]++;
}
}
}ac;
char pattern[N][75], text[LEN];
int n; void solve(void) {
int best = -1;
for (int i=1; i<=n; ++i) {
if (ac.cnt[i] > best) best = ac.cnt[i];
}
printf ("%d\n", best);
for (int i=1; i<=n; ++i) {
if (ac.cnt[ac.ms[string (pattern[i])]] == best) {
printf ("%s\n", pattern[i]);
}
}
} int main(void) {
while (scanf ("%d", &n) == 1) {
if (!n) break;
ac.clear ();
for (int i=1; i<=n; ++i) {
scanf ("%s", &pattern[i]);
ac.insert (pattern[i], i);
}
ac.build ();
scanf ("%s", &text);
ac.query (text);
solve ();
} return 0;
}
AC自动机 LA 4670 Dominating Patterns的更多相关文章
- LA 4670 (AC自动机 模板题) Dominating Patterns
AC自动机大名叫Aho-Corasick Automata,不知道的还以为是能自动AC的呢,虽然它确实能帮你AC一些题目.=_=|| AC自动机看了好几天了,作用就是多个模式串在文本串上的匹配. 因为 ...
- LA 4670 Dominating Patterns (AC自动机)
题意:给定n个字符串和一个文本串,查找哪个字符串出现的次数的最多. 析:一匹配多,很明显是AC自动机.只需要对原来的进行修改一下,就可以得到这个题的答案, 计算过程中,要更新次数,并且要映射字符串.如 ...
- LA 4670 Dominating Patterns (AC自动机)
题意:给定一个一篇文章,然后下面有一些单词,问这些单词在这文章中出现过几次. 析:这是一个AC自动机的裸板,最后在匹配完之后再统计数目就好. 代码如下: #pragma comment(linker, ...
- 【暑假】[实用数据结构]UVAlive 4670 Dominating Patterns
UVAlive 4670 Dominating Patterns 题目: Dominating Patterns Time Limit: 3000MS Memory Limit: Unkn ...
- UVALive 4670 Dominating Patterns --AC自动机第一题
题意:多个模板串,一个文本串,求出那些模板串在文本串中出现次数最多. 解法:AC自动机入门模板题. 代码: #include <iostream> #include <cstdio& ...
- UVALive 4670 Dominating Patterns (AC自动机)
AC自动机的裸题.学了kmp和Trie以后不难看懂. 有一些变化,比如0的定义和f的指向,和建立失配边,以及多了后缀连接数组last.没有试过把失配边直接当成普通边(一开始还是先这样写吧). #inc ...
- uvalive 4670 Dominating Patterns
在文本串中找出现次数最多的子串. 思路:AC自动机模板+修改一下print函数. #include<stdio.h> #include<math.h> #include< ...
- UVALive - 4670 Dominating Patterns AC 自动机
input n 1<=n<=150 word1 word2 ... wordn 1<=len(wirdi)<=70 s 1<=len(s)<=1000000 out ...
- UVa Live 4670 Dominating Patterns - Aho-Corasick自动机
题目传送门 快速的通道I 快速的通道II 题目大意 给定一堆短串,和一个文本串,问哪些短串在文本串中出现的次数最多. 我觉得刘汝佳的做法,时间复杂度有问题.只是似乎这道题短串串长太短不好卡.比如给出的 ...
随机推荐
- 25个增强iOS应用程序性能的提示和技巧(中级篇)(3)
25个增强iOS应用程序性能的提示和技巧(中级篇)(3) 2013-04-16 14:42 破船之家 beyondvincent 字号:T | T 本文收集了25个关于可以提升程序性能的提示和技巧,分 ...
- NYOJ题目1048破门锁
- xdg-open filename 以相应的程序 打开文件
[root@ok network-scripts]# xdg-open ifcfg-eth0
- Oracle数据库备份与还原操作具体步骤
Oracle数据库导出操作 导入导出都要进行目录创建与授权. 在pl/sql里面编写也可以 select * from dba_directories(这个是查看创建的目录) drop directo ...
- LeetCode之Binary Tree Level Order Traversal 层序遍历二叉树
Binary Tree Level Order Traversal 题目描述: Given a binary tree, return the level order traversal of its ...
- 自制工具:迅速打开一个Node 环境的Playground
需求 经常有这种情况,写代码的时候需要实验种想法,亟需一种playground 环境来玩耍.如果是前端的话可以打开chrome 的控制台,但是如果是Node 的话就比较麻烦了.我要打开我的存放试验代码 ...
- 用CocoaPods做iOS程序的依赖管理(转摘)
转摘自:http://blog.devtang.com/blog/2014/05/25/use-cocoapod-to-manage-ios-lib-dependency/ 文档更新说明 2012-1 ...
- emc 郵件設置
1. 進入Data Domain管理界面后,在Administration--->Settings界面.點擊More mail Server--->Set Mail Server---&g ...
- ASP.NET 5 Beta7发布
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 前几天,ASP.NET 5如期发布了Beta 7,根据路线图 (https://github ...
- Windows phone 8.0 本地化遇到的两个问题
基本上来说,按照msdn来讲的,本地化和全球化没有太多的问题,链接如下: http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/ff ...