题意:

有n个字符串和一个文本串T,求那些字符串在文本中出现的次数最多,并按输入顺序输出。

AC自动机,板子题

#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;const int SIGMA_SIZE = 26;
const int MAXNODE = 11000;
const int MAXS = 150 + 10;map<string, int> ms;struct AhoCorasickAutomata {int ch[MAXNODE][SIGMA_SIZE];int f[MAXNODE];int val[MAXNODE];int last[MAXNODE];int cnt[MAXS];int sz;void init() {sz = 1;memset(ch[0], 0, sizeof ch[0] );memset(cnt, 0, sizeof cnt );ms.clear();}int idx(char c) {return c - 'a';}void insert(char *s, int v) {int u = 0, n = strlen(s);for(int i=0; i<n; ++i) {int c = idx(s[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] = v;ms[string(s)] = v;}void print(int j) {if(j) {cnt[val[j]]++;print(last[j]);}}int find(char* T) {int n = strlen(T);int j = 0;for(int i=0; i<n; ++i) {int c = idx(T[i]);while(j && !ch[j][c]) j = f[j];j = ch[j][c];if(val[j]) print(j);else if(last[j]) print(last[j]);}}void getFail() {queue<int> q;f[0] = 0;for(int c = 0; c <SIGMA_SIZE; ++c) {int u = ch[0][c];if(u) {f[u] = 0;q.push(u);last[u] = 0;}}while(!q.empty()) {int r = q.front();q.pop();for(int c =0; 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]];}}}
};AhoCorasickAutomata ac;char text[1000001], p[160][80];
int n;int main() {while(~scanf("%d", &n)&&n) {ac.init();for(int i=1; i<=n; ++i) {scanf("%s", p[i]);ac.insert(p[i], i);}ac.getFail();scanf("%s", text);ac.find(text);int best = 0;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[ms[string(p[i])]]==best)printf("%s\n", p[i]);}return 0;
}

LA 4670 Dominating Patterns,AC自动机相关推荐

  1. LA4670 Dominating Patterns[AC自动机]

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

  2. UVALive 4126 (LA 4126) Password Suspects AC自动机 + DP + 剪枝dfs

    题目大意: 白书练习题 就是给了M(0 <= M <= 10)个长度不超过10的串, 现在问长度为N(N <= 25)的包含所有这M个串作为子串的串有多少种 如果种数<=42按 ...

  3. LA_4670_Dominating_Patterns_(AC自动机+map)

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

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

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

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

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

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

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

  7. hihocoder第218周:AC自动机

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

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

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

  9. BZOJ2754: [SCOI2012]喵星球上的点名(AC自动机/后缀自动机)

    Description a180285幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣.   假设课堂上有N个喵星人,每个喵星人的名字由姓和名构成.喵星球上的老师会选择M个串 ...

  10. HDU 6208 The Dominator of Strings AC自动机

    题目链接:HDU 6208 The Dominator of Strings Time Limit: 3000/3000 MS (Java/Others)    Memory Limit: 65535 ...

最新文章

  1. ESP32-S的UART2的初始化需要注意的问题
  2. 087_html5表单元素
  3. 增加RIL组件时编辑出现的问题
  4. 转:陈梓瀚:关于编程的胡扯
  5. ===,!==,==,!=的使用
  6. 同样是程序员,为什么别人比你更优秀?
  7. ldap实现用户认证
  8. 【笔记】c c++如何打印变量地址
  9. STK Component Insight3D控件-WPF方式
  10. oppo r9s 解bl锁,刷入第三方recovery
  11. 外贸公司申请一个企业邮箱,国外邮箱大全对比
  12. 微信开放平台基于网站应用授权登录源码(java)
  13. 系统变慢,如何进行排查处理?
  14. winmerge 保存为html,使用WinMerge作为git的Merge工具
  15. 【数据库原理与应用MySQL版】实验指导
  16. Autojs在线云更新教程
  17. 可以加急的计算机核心期刊,什么核心期刊可以加急
  18. Logic Pro 使用教程之实时循环乐段(非常详细)
  19. 【机试题】2014大疆嵌入式笔试题(附超详细解答,下篇)
  20. 基于javaweb物业管理系统的设计与实现/小区物业管理系统

热门文章

  1. mysql server has gone away_mysql server has gone away的解决方法
  2. 【sql: 每天进步一点点】sql 中的 LIKE 用法
  3. Pseudo-伪标签
  4. python机械臂仿真_机械臂 python
  5. 正确开启用户实体行为分析(UEBA)番外篇:SIEM与UEBA
  6. Longhorn配置参数详解
  7. 私有云盘的搭建(owncloud、seafile)
  8. 计算机硬件未来发展前景,计算机硬件的未来发展趋势
  9. 计算机 26个英文字母代表数字,数字能量字母对照表-26个英文字母各代表什么数字...
  10. 【矩阵论】线性空间与线性变换(2)