题目传送门

题意:训练指南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的更多相关文章

  1. LA 4670 (AC自动机 模板题) Dominating Patterns

    AC自动机大名叫Aho-Corasick Automata,不知道的还以为是能自动AC的呢,虽然它确实能帮你AC一些题目.=_=|| AC自动机看了好几天了,作用就是多个模式串在文本串上的匹配. 因为 ...

  2. LA 4670 Dominating Patterns (AC自动机)

    题意:给定n个字符串和一个文本串,查找哪个字符串出现的次数的最多. 析:一匹配多,很明显是AC自动机.只需要对原来的进行修改一下,就可以得到这个题的答案, 计算过程中,要更新次数,并且要映射字符串.如 ...

  3. LA 4670 Dominating Patterns (AC自动机)

    题意:给定一个一篇文章,然后下面有一些单词,问这些单词在这文章中出现过几次. 析:这是一个AC自动机的裸板,最后在匹配完之后再统计数目就好. 代码如下: #pragma comment(linker, ...

  4. 【暑假】[实用数据结构]UVAlive 4670 Dominating Patterns

    UVAlive 4670 Dominating Patterns 题目:   Dominating Patterns   Time Limit: 3000MS   Memory Limit: Unkn ...

  5. UVALive 4670 Dominating Patterns --AC自动机第一题

    题意:多个模板串,一个文本串,求出那些模板串在文本串中出现次数最多. 解法:AC自动机入门模板题. 代码: #include <iostream> #include <cstdio& ...

  6. UVALive 4670 Dominating Patterns (AC自动机)

    AC自动机的裸题.学了kmp和Trie以后不难看懂. 有一些变化,比如0的定义和f的指向,和建立失配边,以及多了后缀连接数组last.没有试过把失配边直接当成普通边(一开始还是先这样写吧). #inc ...

  7. uvalive 4670 Dominating Patterns

    在文本串中找出现次数最多的子串. 思路:AC自动机模板+修改一下print函数. #include<stdio.h> #include<math.h> #include< ...

  8. UVALive - 4670 Dominating Patterns AC 自动机

    input n 1<=n<=150 word1 word2 ... wordn 1<=len(wirdi)<=70 s 1<=len(s)<=1000000 out ...

  9. UVa Live 4670 Dominating Patterns - Aho-Corasick自动机

    题目传送门 快速的通道I 快速的通道II 题目大意 给定一堆短串,和一个文本串,问哪些短串在文本串中出现的次数最多. 我觉得刘汝佳的做法,时间复杂度有问题.只是似乎这道题短串串长太短不好卡.比如给出的 ...

随机推荐

  1. PHP安全编程:不要让不相关的人看到报错信息

    没有不会犯错的开发者,PHP的错误报告功 能可以协助你确认和定位这些错误,可以提供的这些错误的详细描述,但如果被恶意攻击者看到,这就不妙了.不能让大众看到报错信息,这一点很重要.做到这一 点很容易,只 ...

  2. HTML/CSS题库

    一.    填空题 使用文本编辑器编辑完HTML后,扩展名可以是__html___或___htm__. 表格的标签是____table______,单元格的标签是____td______. 在编辑ta ...

  3. 多线程编程2 - NSOperation

    一.NSOperation 1.简介 NSOperation实例封装了需要执行的操作和执行操作所需的数据,并且能够以并发或非并发的方式执行这个操作. NSOperation本身是抽象基类,因此必须使用 ...

  4. jQuery中读取json文件示例代码

    json文件是一种轻量级的数据交互格式.一般在jquery中使用getJSON()方法读取,具体示例代码如下,感兴趣的朋友可以参考下哈,希望可以帮助到你   json文件是一种轻量级的数据交互格式.一 ...

  5. 对Object类中方法的深入理解

    看一下API中关于Object的介绍: 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 那么Object中到底有哪些方法,各自有什 ...

  6. MyEclipse2014配置Tomcat开发JavaWeb程序JSP以及Servlet(转载)

    转载地址:http://blog.csdn.net/21aspnet/article/details/21867241 1.安装准备 1).下载安装MyEclipse2014,这已经是最新版本. 2) ...

  7. DDD的思考

    概述 DDD领域驱动设计,它是对面向对象的的分析和设计(OOAD,Object Orient Analysis Design)的一个补充,对技术框架进行了分层规划,同时对每个类进行了策略和类型划分.领 ...

  8. 【tornado】系列项目(一)之基于领域驱动模型架构设计的京东用户管理后台

    本博文将一步步揭秘京东等大型网站的领域驱动模型,致力于让读者完全掌握这种网络架构中的“高富帅”. 一.预备知识: 1.接口: python中并没有类似java等其它语言中的接口类型,但是python中 ...

  9. Windows环境下Oracle数据库的自动备份脚本

    批处理文件(.bat) @echo off echo ================================================ echo  Windows环境下Oracle数据 ...

  10. js中ascii码的转换

    今天在把原来用C写的程序移植到javascript上,但是有个地方一直调不通,后来才发现是js奇葩的字符处理出的问题.c中使用的字符处理比如加上一个字符值强制转换一下,在js中就行不通了. 但是js提 ...