因为有重复,结点用vector保存单词编号。

#include<iostream>
#include<vector>
#include<queue>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;const int MAX_NODE=15000;
const int SIGMA_SIZE=26;
struct ACAutomation
{int sz;int ch[MAX_NODE][SIGMA_SIZE];int fail[MAX_NODE];vector<int> val[MAX_NODE];void init(){sz=1;memset(ch[0],0,sizeof(ch[0]));val[0].clear();}int idx(char c){return c-'a';}void insert(const char *s,int v){int u=0;for(int i=0;s[i]!='\0';i++){int v=idx(s[i]);if(!ch[u][v]){memset(ch[sz],0,sizeof(ch[sz]));val[sz].clear();ch[u][v]=sz++;}u=ch[u][v];}val[u].push_back(v);}void construct(){fail[0]=0;queue<int> q;for(int c=0;c<SIGMA_SIZE;c++){int u=ch[0][c];if(u){fail[u]=0;q.push(u);}}while(!q.empty()){int r=q.front();q.pop();for(int c=0;c<SIGMA_SIZE;c++){int u=ch[r][c];if(!u){ch[r][c]=ch[fail[r]][c];continue;}q.push(u);int v=fail[r];while(v&&!ch[v][c])v=fail[v];fail[u]=ch[v][c];}}}void count(int u,int *da){for(int i=0;i<val[u].size();i++)da[val[u][i]]++;if(!val[fail[u]].empty())count(fail[u],da);}void find(const char *s,int *da){int u=0;for(int i=0;s[i]!='\0';i++){int v=idx(s[i]);u=ch[u][v];if(!val[u].empty())count(u,da);}}
};ACAutomation ac;
int n;
char dic[200][100];
char T[1000100];
int num[200];
int main()
{while(scanf("%d",&n)!=EOF&&n){ac.init();for(int i=1;i<=n;i++){scanf("%s",dic[i]);ac.insert(dic[i],i);}ac.construct();scanf("%s",T);memset(num,0,sizeof(num));ac.find(T,num);int maxx=0;for(int i=1;i<=n;i++)maxx=max(maxx,num[i]);printf("%d\n",maxx);for(int i=1;i<=n;i++)if(num[i]==maxx)printf("%s\n",dic[i]);}return 0;
}

View Code

转载于:https://www.cnblogs.com/BMan/p/3376368.html

UVA 1449 - Dominating Patterns AC自动机相关推荐

  1. AC自动机加强版 uva 1449 - Dominating Patterns

    AC自动机最初作用  一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过. 当然这不是AC自动机的全部作用. 本文就是一例,给出几个单词,查询在text里 ...

  2. LA4670 Dominating Patterns[AC自动机]

    The archaeologists are going to decipher a very mysterious "language". Now, they know many ...

  3. UVA 11468 Substring(AC自动机+dp)

    题意就是给你几个模板串,以及一些字符的出现概率,随机选择字符L次后得到一个长度为L的字符串,问这个字符串不包括任何一个模板串的概率. 比较简单的题,把模板串构建成AC自动机,随机选择字符相当于在字典树 ...

  4. UVa 11468 (AC自动机 概率DP) Substring

    将K个模板串构成一个AC自动机,那些能匹配到的单词节点都称之为禁止节点. 然后问题就变成了在Tire树上走L步且不经过禁止节点的概率. 根据全概率公式用记忆化搜索求解. 1 #include < ...

  5. AC自动机——Uva 11468 子串

    题目链接:http://vjudge.net/contest/142513#problem/A 题意:给出一些字符和各自对应的选择概率,随机选择L次后将得到一个长度为L的随机字符串S.给出K个模版串, ...

  6. LA_4670_Dominating_Patterns_(AC自动机+map)

    描述 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  7. CDOJ1633 Video Game Combos [AC自动机+dp]

    题目地址:http://acm.uestc.edu.cn/problem.php?pid=1633 AC自动机+BFS AC自动机,参见:http://www.cnblogs.com/luna-lov ...

  8. KMP算法、AC自动机算法的原理介绍以及Python实现

    KMP算法 要弄懂AC自动机算法,首先弄清楚KMP算法. 这篇文章讲的很好: http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E ...

  9. hihocoder第218周:AC自动机

    题目链接 问题描述 给定n个单词,给定一个长字符串s,单词总长度和字符串s的长度都不超过1e5.要求把s中所有的出现单词的位置用*替代. 例如: 样例输入 2 abc cd abcxyzabcd 样例 ...

  10. 2018北京ICPC H. Approximate Matching(AC自动机+DP)

    H : Approximate Matching 时间限制:1000ms,单点时限:1000ms,内存限制:512MB 描述 String matching, a common problem in ...

最新文章

  1. Beaglebone Black教程BeagleBone Black安装最新系统映像
  2. 暑期集训2:ACM基础算法 练习题C:CF-1008A
  3. mysql buffer pool_MySQL的查询缓存和Buffer Pool
  4. 关于用Delphi开发的一些基本的套路
  5. 华为路由器配置DHCP中继
  6. 第一篇 多线程笔试面试题汇总(转)
  7. linux 每日学一点《Linux链接文件类型》
  8. 【转载】如何把Mysql5.5数据库的数据导入到MSSql 数据库中【mysql-connector-odbc-3.51.28-win32】...
  9. 小心Java中封装类的值比较
  10. 论文综述(KNN算法)
  11. 统计学习方法——统计学习基础(一)
  12. RedHat免费订阅账号注册方式
  13. eclipse 中用svn共享项目
  14. STM32串口通信编程
  15. u盘怎么安装计算机系统,教您如何用u盘装系统
  16. python实现MACD策略背离点的判断
  17. haml VS erb
  18. 数据分析方法之用户画像分析!
  19. 微信小程序——生命周期
  20. 四川企立方电商:拼多多降价导致降权怎么

热门文章

  1. paip.输入法编程---输入法ATIaN历史记录 v8b
  2. 妙盈科技:ESG数据提供商获融资
  3. 高盛也上GitHub了!让交易员赚取10亿美元的神秘“利器” 即将开源
  4. Julia : 小s与关于绝对路径的转义方式
  5. 【数学建模】基于matlab贫困生评测系统【含Matlab源码 1744期】
  6. 【优化算法】斑点鬣狗优化算法(SHO)【含Matlab源码 1463期】
  7. 【TSP】基于matlab模拟退火算法求解31城市旅行商问题【含Matlab源码 1148期】
  8. 【运量预测】基于matlab BP神经网络公路运量预测【含Matlab源码 413期】
  9. 学计算机好还是学西点,女生学西点师有后悔的吗 西点师有前途吗
  10. 创建dqn的深度神经网络_深度Q网络(DQN)-I