二次联通门 : UvaLive 4670 Dominating Patterns

/*UvaLive 4670 Dominating Patterns AC自动机题目大意有个由小写字母组成的模式串以及一个文本串。每个模式串可能会在文本串中出现多次。你需要找出哪些模式串在文本串中出现的次数最多。 注意可能会有多组相同的模式串加个数组判一判就好了。。具体是在Trie树中的叶节点维护一个small_number表示最早的串之后计数什么的, 都记到这个上
*/
#include <cstring>
#include <cstdio>
#include <queue>#define Max 1000009bool read (int &now)
{now = 0;register char word = getchar ();while (word < '0' || word > '9')word = getchar ();while (word >= '0' && word <= '9'){now = now * 10 + word - '0';word = getchar ();}return now > 0;
}inline int max (int a, int b)
{return a > b ? a : b;
}struct Trie_Data
{Trie_Data *Fail;Trie_Data *child[26];int small_number;Trie_Data (){for (int i = 0; i < 26; i ++)this->child[i] = NULL;this->Fail = NULL;small_number = 0;}
};Trie_Data *Root;int number[Max / 1000];
int count[Max / 1000];char line[Max / 1000][Max / 1000];
char Need[Max];int Answer;class AC_Type
{private :int __Count_;public :void Clear (){__Count_ = 0;memset (number, 0, sizeof (number));memset (count, 0, sizeof count);}void Insert (char *key){int Len = strlen (key);__Count_ ++;Trie_Data *now = Root, *pos;int Id;for (int i = 0; i < Len; i ++){Id = key[i] - 'a';if (now->child[Id] == NULL)now->child[Id] = new Trie_Data;now = now->child[Id];}if (!now->small_number)now->small_number = __Count_;number[__Count_] = now->small_number;}void Build_AC (){std :: queue <Trie_Data *> Queue;Queue.push (Root);  Trie_Data *now, *pos;while (!Queue.empty ()){pos = NULL;now = Queue.front ();Queue.pop ();for (int i = 0; i < 26; i ++){if (now->child[i] == NULL)continue;if (now == Root)now->child[i]->Fail = Root;else{for (pos = now->Fail; pos; pos = pos->Fail)if (pos->child[i]){now->child[i]->Fail = pos->child[i];break;}if (pos == NULL)now->child[i]->Fail = Root;}Queue.push (now->child[i]); }  }}void Query (char *key){Trie_Data *now = Root, *pos;int Len = strlen (key);int Id;for (int i = 0; i < Len; i ++){Id = key[i] - 'a';for (; now != Root && now->child[Id] == NULL; now = now->Fail);now = now->child[Id];if (now == NULL)now = Root;for (pos = now; pos != Root; pos = pos->Fail)count[pos->small_number] ++;}}
};AC_Type Make;int main (int argc, char *argv[])
{int N;for (int N; read (N); ){Root = new Trie_Data;Make.Clear ();for (register int i = 1; i <= N; i ++){scanf ("%s", line[i]);Make.Insert (line[i]); }Make.Build_AC ();scanf ("%s", Need);Make.Query (Need);Answer = 0;for (int i = 1; i <= N; i ++)Answer = max (Answer, count[i]);printf ("%d\n", Answer);for (int i = 1; i <= N; i ++)if (count[number[i]] == Answer)puts (line[i]);}    return 0;
}

转载于:https://www.cnblogs.com/ZlycerQan/p/6979464.html

UvaLive 4670 Dominating Patterns相关推荐

  1. LA4670 Dominating Patterns[AC自动机]

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

  2. Dominating Patterns

    题目链接:http://vjudge.net/problem/36265 #include<bits/stdc++.h> #define N 200 using namespace std ...

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

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

  4. jenkins换服务器找不到包,服务器重启后Jenkins项目部分丢失问题解决方法

    UVALive 4670 Dominating Patterns --AC自动机第一题 题意:多个模板串,一个文本串,求出那些模板串在文本串中出现次数最多. 解法:AC自动机入门模板题. 代码: #i ...

  5. LA_4670_Dominating_Patterns_(AC自动机+map)

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

  6. DP UVALive 6506 Padovan Sequence

    题目传送门 /*题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大DP:状态转移方程:dp[i][j] = max (dp[i][j], dp[1-i][j-1] + a[ ...

  7. [转] Leaving patterns practices

    [J.D. Meier's Blog]"Life is like skiing.  Just like skiing, the goal is not to get to the botto ...

  8. 视频中的运动特征--Learning Motion Patterns in Videos

    Learning Motion Patterns in Videos CVPR2017 Torch code: http://thoth.inrialpes.fr/research/mpnet 本文要 ...

  9. Conventions and patterns for multi-platform development

    For Developers‎ > ‎Design Documents‎ > ‎ Conventions and patterns for multi-platform developme ...

  10. 艾伟_转载:C# Design Patterns (3) - Decorator

    Decorator Pattern (装饰模式) 装饰模式可「动态」地给一个对象添加一些额外的职责,提供有别于「继承」的另一种选择.就扩展功能而言,Decorator Pattern 透过 Aggre ...

最新文章

  1. php修改时区MST,4、修改Cacti绘图的时间精度
  2. MySQL 大表优化方案
  3. 配置 docker0 网桥
  4. react中的状态机_在基于状态图的状态机上使用React的模式
  5. c语言分治算法求最大值,分治法找最大值(C語言)
  6. 前端错误日志收集方案
  7. 主攻计算机专业英语翻译,湖师大“博导”黄振定,主攻“翻译学”
  8. 多次fork问题(python 版)
  9. python2 和 python3 在print时的细微差别 (sep等操作)
  10. 超越Mask-RCNN:谷歌大脑的AI,自己写了个目标检测AI
  11. Visual Studio 2019 配置汇编和masm32教程
  12. 个人微信api接口调用代码
  13. bootmgr快速修复win7_这可能是史上最简单的一键安装虚拟机win7系统了
  14. FFmpeg无损转换ts为mp4
  15. VMWare 导出vmdk并转为qcow2格式
  16. 聊天系统服务器端类图,使用Java多线程来实现多人聊天室 附实例代码
  17. 作为产品经理的你,画原型图时崩溃过吗?
  18. 以自动开发票为例,解析RPA(机器人流程自动化)在财务场景的使用
  19. 混沌工程落地的六个阶段
  20. 微信小游戏子域中请求微信头像,cocos create会自动添加前缀的问题

热门文章

  1. (轉貼) 馬英九特別費案起訴書全文 (News)
  2. seaweedfs springboot 文件名乱码
  3. c# ppt 转 html,C# 实现PPT 每一页转成图片
  4. access简述报表的功能_access中报表的作用
  5. 看完比尔盖茨30年的56条思考,我才理解他为什么能17年斩获世界首富!
  6. 微信连wifi3.1总结
  7. Nginx反向代理(解决纯前端项目部署到服务器上无法访问接口数据)
  8. Thinkpad X61驱动下载及安装方法 for windows XP
  9. bedtools subtract 基因区段取差集
  10. 进程和线程的主仆问题