UVALive 4670 Dominating Patterns --AC自动机第一题
题意:多个模板串,一个文本串,求出那些模板串在文本串中出现次数最多。
解法:AC自动机入门模板题。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <map>
#define Mod 1000000007
using namespace std;
#define N 1000007 const int MAXNODE = ;
const int SIZE = ;
int cnt[MAXNODE];
struct Trie {
int ch[MAXNODE][SIZE],val[MAXNODE],sz,fail[MAXNODE],last[MAXNODE];
Trie() { sz = ; memset(ch[],,sizeof(ch[])); }
int idx(char c) { return c-'a'; };
void init() { sz = ; memset(ch[],,sizeof(ch[])); memset(cnt,,sizeof(cnt)); }
void print(int j) {
if(j) {
cnt[val[j]]++;
print(last[j]);
}
return;
}
void Insert(char *s,int v) {
int u = , n = strlen(s);
for(int i=;i<n;i++) {
int c = idx(s[i]);
if(!ch[u][c]) {
memset(ch[sz],,sizeof(ch[sz]));
val[sz] = ;
ch[u][c] = sz++;
}
u = ch[u][c];
}
val[u] = v;
}
void getFail() {
queue<int> q;
fail[] = ;
for(int c=;c<SIZE;c++) {
int u = ch[][c];
if(u) { fail[u] = ; q.push(u); last[u] = ; }
}
while(!q.empty()) {
int r = q.front(); q.pop();
for(int c=;c<SIZE;c++) {
int u = ch[r][c];
if(!u) continue;
q.push(u);
int v = fail[r];
while(v && !ch[v][c]) v = fail[v];
fail[u] = ch[v][c];
last[u] = val[fail[u]] ? fail[u] : last[fail[u]];
}
}
}
void query(char *T) {
int n = strlen(T), j = ;
for(int i=;i<n;i++) {
int c = idx(T[i]);
while(j && !ch[j][c]) j = fail[j];
j = ch[j][c];
if(val[j]) print(j);
else if(last[j]) print(last[j]);
}
}
};
char T[N],ss[][];
map<string,int> mp;
Trie ac; int main()
{
int n,i;
while(scanf("%d",&n)!=EOF && n)
{
mp.clear();
ac.init();
for(i=;i<=n;i++) {
scanf("%s",ss[i]);
ac.Insert(ss[i],i);
mp[string(ss[i])] = i;
}
ac.getFail();
scanf("%s",T);
ac.query(T);
int Maxi = -;
for(i=;i<=n;i++)
Maxi = max(Maxi,cnt[i]);
cout<<Maxi<<endl;
for(i=;i<=n;i++) {
if(cnt[mp[string(ss[i])]] == Maxi)
printf("%s\n",ss[i]);
}
}
return ;
}
UVALive 4670 Dominating Patterns --AC自动机第一题的更多相关文章
- UVALive - 4670 Dominating Patterns AC 自动机
input n 1<=n<=150 word1 word2 ... wordn 1<=len(wirdi)<=70 s 1<=len(s)<=1000000 out ...
- 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自动机的裸题.学了kmp和Trie以后不难看懂. 有一些变化,比如0的定义和f的指向,和建立失配边,以及多了后缀连接数组last.没有试过把失配边直接当成普通边(一开始还是先这样写吧). #inc ...
- LA4670 Dominating Patterns AC自动机模板
Dominating Patterns 每次看着别人的代码改成自己的模板都很头大...空间少了个0卡了好久 裸题,用比map + string更高效的vector代替蓝书中的处理方法 #include ...
- uvalive 4670 Dominating Patterns
在文本串中找出现次数最多的子串. 思路:AC自动机模板+修改一下print函数. #include<stdio.h> #include<math.h> #include< ...
- UVa1449 - Dominating Patterns(AC自动机)
题目大意 给定n个由小写字母组成的字符串和一个文本串T,你的任务是找出那些字符串在文本中出现的次数最多 题解 一个文本串,多个模式串,这刚好是AC自动机处理的问题 代码: #include <i ...
- UVa 1449 - Dominating Patterns (AC自动机)
题目大意:给出多个字符串模板,并给出一个文本串,求在文本串中出现最多的模板,输出最多的次数并输出该模板(若有多个满足,则按输入顺序输出). 思路:赤裸裸的 AC自动机,上模板. 代码: #includ ...
- UVa Live 4670 Dominating Patterns - Aho-Corasick自动机
题目传送门 快速的通道I 快速的通道II 题目大意 给定一堆短串,和一个文本串,问哪些短串在文本串中出现的次数最多. 我觉得刘汝佳的做法,时间复杂度有问题.只是似乎这道题短串串长太短不好卡.比如给出的 ...
随机推荐
- ASP.NET vNext总结:EntityFramework7
ASP.NET vNext总结:EntityFramework7 源码分享:http://www.jinhusns.com/Products/Download/?type=xcj 1.概述 关于EF7 ...
- Artificial intelligence(AI)
ORM: https://github.com/sunkaixuan/SqlSugar 微软DEMO: https://github.com/Microsoft/BotBuilder 注册KEY:ht ...
- luogg_java学习_07_抽象类_接口_多态学习总结
这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 抽象 一种专门用来做父类,被继承的. (模板) 格式: abs ...
- IDCM项目学习笔记
项目介绍: IDCM:Internet Data center monitoring 网络数据中心监控平台 IRP:Information Resource planing 信息资源规划 1.设置表中 ...
- CRM(四川网脉系统)项目总结
CRM系统(四川网脉系统)项目总结 为期八天的四川网脉系统(CRM系统)项目结束了,不管是在做这个项目的过程中还是答辩的过程中都有一些收获,下面对整个项目的开发做一个大致的总结. 一.项目概况 四川网 ...
- N-Tier Entity Framework开源项目介绍
N-Tier Entity Framework是一个基于微软Entity Framework的N层.NET解决方案. 并且与以下这此技术点无缝集成了: § WCF RIA Ser ...
- Hadoop中MR程序的几种提交运行模式
本地模型运行 1:在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行 ----输入输出数据可以放在本地路径下(c:/wc ...
- (原)3.2 Zookeeper应用 - 数据的发布与订阅
本文为原创文章,转载请注明出处,谢谢 数据的发布与订阅 1.应用 服务端监听数据改变,客户端创建/更新节点数据,客户端提供数据,服务端处理 2.原理 客户端监控节点数据改变事件(例如配置信息,下图的c ...
- Sqlserver 中系统表sysobjects、syscolumns以及函数object_id
1.sysobjects 系统对象表. 保存当前数据库的对象,如约束.默认值.日志.规则.存储过程等 sysobjects 重要字段解释: sysObjects ( Name sysname, --o ...
- canvas实现抽奖大转盘
这里不给用JS,下面地址有效果以及详细代码 效果地址:http://sandbox.runjs.cn/show/d2et4rys