UVALive 4670 Dominating Patterns (AC自动机)
AC自动机的裸题。学了kmp和Trie以后不难看懂。
有一些变化,比如0的定义和f的指向,和建立失配边,以及多了后缀连接数组last。没有试过把失配边直接当成普通边(一开始还是先这样写吧)。
- #include<bits/stdc++.h>
- using namespace std;
- const int maxlen = 1e6+, maxnds = *+, sigma_size = , maxsubs = ;
- char str[maxlen];
- #define idx(x) x-'a';
- int last[maxnds];//后缀连接 为0表示空
- int ch[maxnds][sigma_size];
- int val[maxnds];
- int nds;
- char subs[maxsubs][];
- int cnt[maxsubs+];
- int f[maxnds];
- void init() {
- memset(ch,,sizeof(ch)); last[] = ; val[] = ; nds = ;
- memset(cnt,,sizeof(cnt));
- }
- void cal(int j)
- {
- while(j){
- cnt[val[j]]++;
- j = last[j];
- }
- }
- void Find(char *t)
- {
- for(int i = , j = ; t[i] ; i++){
- int c = idx(t[i]);
- while(j && !ch[j][c]) j = f[j];
- j = ch[j][c];
- if(val[j]) cal(j);
- else if(last[j]) cal(last[j]);
- }
- }
- int getF()
- {
- queue<int> q;
- f[] = ;
- for(int c = ; c < sigma_size; c++){
- int u = ch[][c];
- if(u) { f[u] = ; q.push(u); last[u] = ; }
- }
- while(q.size()){
- int r = q.front(); q.pop();
- for(int c = ; c < sigma_size; c++){
- int u = ch[r][c];
- if(!u) continue;
- q.push(u);
- int v = f[r];
- while(v && !ch[v][c]) v = f[v];
- f[u] = ch[v][c];
- last[u] = val[f[u]] ? f[u] : last[f[u]];
- }
- }
- }
- void add(char *s,int str_id)
- {
- int u = ;
- for(int i = ; s[i]; i++){
- int c = idx(s[i]);
- if(!ch[u][c]){
- memset(ch[nds],,sizeof(ch[nds]));
- val[nds] = ;
- ch[u][c] = nds++;
- }
- u = ch[u][c];
- }
- val[u] = str_id;
- }
- int main()
- {
- //freopen("in.txt","r",stdin);
- int n;
- while(scanf("%d\n",&n),n){
- init();
- for(int i = ; i <= n; i++){
- scanf("%s",subs[i]);
- add(subs[i],i);
- }
- getF();
- scanf("%s",str);
- Find(str);
- int best = *max_element(cnt+,cnt++n);
- printf("%d\n",best);
- for(int i = ; i <= n; i++){
- if(cnt[i] == best) puts(subs[i]);
- }
- }
- return ;
- }
UVALive 4670 Dominating Patterns (AC自动机)的更多相关文章
- UVALive 4670 Dominating Patterns --AC自动机第一题
题意:多个模板串,一个文本串,求出那些模板串在文本串中出现次数最多. 解法:AC自动机入门模板题. 代码: #include <iostream> #include <cstdio& ...
- 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自动机模板+修改一下print函数. #include<stdio.h> #include<math.h> #include< ...
- UVa1449 - Dominating Patterns(AC自动机)
题目大意 给定n个由小写字母组成的字符串和一个文本串T,你的任务是找出那些字符串在文本中出现的次数最多 题解 一个文本串,多个模式串,这刚好是AC自动机处理的问题 代码: #include <i ...
- UVa 1449 - Dominating Patterns (AC自动机)
题目大意:给出多个字符串模板,并给出一个文本串,求在文本串中出现最多的模板,输出最多的次数并输出该模板(若有多个满足,则按输入顺序输出). 思路:赤裸裸的 AC自动机,上模板. 代码: #includ ...
- LA4670 Dominating Patterns AC自动机模板
Dominating Patterns 每次看着别人的代码改成自己的模板都很头大...空间少了个0卡了好久 裸题,用比map + string更高效的vector代替蓝书中的处理方法 #include ...
- UVa Live 4670 Dominating Patterns - Aho-Corasick自动机
题目传送门 快速的通道I 快速的通道II 题目大意 给定一堆短串,和一个文本串,问哪些短串在文本串中出现的次数最多. 我觉得刘汝佳的做法,时间复杂度有问题.只是似乎这道题短串串长太短不好卡.比如给出的 ...
随机推荐
- select2的远程加载非分页实例
$("#c01-select").select2({ ajax: { url: "data.json", dataType: 'json', delay: 25 ...
- Python 数据分析:让你像写 Sql 语句一样,使用 Pandas 做数据分析
Python 数据分析:让你像写 Sql 语句一样,使用 Pandas 做数据分析 一.加载数据 import pandas as pd import numpy as np url = ('http ...
- 大话Spark(1)-Spark概述与核心概念
说到Spark就不得不提MapReduce/Hadoop, 当前越来越多的公司已经把大数据计算引擎从MapReduce升级到了Spark. 至于原因当然是MapReduce的一些局限性了, 我们一起先 ...
- OVN学习(二)
部署OVN实验环境 同OVN学习(一) L3网络 创建逻辑交换机和路由 ### Central节点 ### 创建逻辑交换机和路由器 # ovn-nbctl ls-add inside # ovn-nb ...
- python-根据URL地址下载文件
博主个人网站:https://chenzhen.online 使用Python中提供的urllib.request下载网上的文件 #coding=utf-8 """ 目标 ...
- How to use unity CreateExternalTexture on Android?
http://stackoverflow.com/questions/33324753/how-to-use-unity-createexternaltexture-on-android Can so ...
- 洛谷P2687 [USACO4.3]逢低吸纳Buy Low, Buy Lower
P2687 [USACO4.3]逢低吸纳Buy Low, Buy Lower 题目描述 “逢低吸纳”是炒股的一条成功秘诀.如果你想成为一个成功的投资者,就要遵守这条秘诀: "逢低吸纳,越低越 ...
- Java基础--基本规则、语法
一.关键字.保留字.标识符.常量.变量 1.关键字:使用某种语言赋予特殊含义的单词. 2.保留字:没有赋予特殊含义,但以后可能会使用的单词. 3.标识符:自定义的单词,以数字.字母.下划线以及$符组成 ...
- maven - 初识
一.Maven是什么? Maven官网的描述:Apache Maven is a software project management and comprehension tool. Based o ...
- Django模板语言,标签整理
Django模板语言 标签 内置标签引用 1. autoescape 控制自动转义是否可用. 这种标签带有任何 on 或 off 作为参数的话,他将决定转义块内效果. 该标签会以一个endautoes ...