<题目链接>

题目大意:

小t非常感谢大家帮忙解决了他的上一个问题。然而病毒侵袭持续中。在小t的不懈努力下,他发现了网路中的“万恶之源”。这是一个庞大的病毒网站,他有着好多好多的病毒,但是这个网站包含的病毒很奇怪,这些病毒的特征码很短,而且只包含“英文大写字符”。当然小t好想好想为民除害,但是小t从来不打没有准备的战争。知己知彼,百战不殆,小t首先要做的是知道这个病毒网站特征:包含多少不同的病毒,每种病毒出现了多少次。大家能再帮帮他吗?
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = *;
  5. int n,num[];
  6. char words[][];
  7.  
  8. struct Trie{
  9. int nxt[N][],fail[N],end[N];
  10. int root,pos;
  11. int newnode(){
  12. for(int i=;i<;i++)
  13. nxt[pos][i]=-;
  14. end[pos++]=;
  15. return pos-;
  16. }
  17. void init(){
  18. pos=;root=newnode();
  19. }
  20. void insert(char s[],int id){
  21. int len=strlen(s);
  22. int now=root;
  23. for(int i=;i<len;i++){
  24. int to=s[i];
  25. if(nxt[now][to] == -)
  26. nxt[now][to]=newnode();
  27. now=nxt[now][to];
  28. }
  29. end[now]=id;
  30. }
  31. void build(){
  32. fail[root]=root;
  33. queue<int>q;
  34. for(int i=;i<;i++){
  35. if(nxt[root][i]==-)
  36. nxt[root][i]=root;
  37. else{
  38. fail[nxt[root][i]]=root;
  39. q.push(nxt[root][i]);
  40. }
  41. }
  42. while(!q.empty()){
  43. int now=q.front();q.pop();
  44. for(int i=;i<;i++){
  45. if(nxt[now][i]==-)
  46. nxt[now][i]=nxt[fail[now]][i];
  47. else{
  48. fail[nxt[now][i]]=nxt[fail[now]][i];
  49. q.push(nxt[now][i]);
  50. }
  51. }
  52. }
  53. }
  54. void query(char s[]){
  55. int len=strlen(s);
  56. int now=root;
  57. for(int i=;i<len;i++){
  58. now=nxt[now][s[i]];
  59. int tmp=now;
  60. while(tmp!=root){
  61. if(end[tmp]!=)
  62. num[end[tmp]]++;
  63. //若每个模式串只在主串中匹配一次则加上 end[temp]=0;
  64. tmp=fail[tmp];
  65. }
  66. }
  67. for(int i=;i<=n;i++)
  68. if(num[i]!=)
  69. printf("%s: %d\n",words[i],num[i]);
  70. }
  71. }ac;
  72.  
  73. char buf[int(2e6+)];
  74. int main(){
  75. while(~scanf("%d",&n)){
  76. memset(num,,sizeof(num));
  77. ac.init();
  78. for(int i=;i<=n;i++){
  79. scanf("%s",words[i]);
  80. ac.insert(words[i],i);
  81. }
  82. ac.build();
  83. scanf("%s",buf);
  84. ac.query(buf);
  85. }
  86. }

hdu 3065 病毒侵袭持续中【AC自动机】的更多相关文章

  1. HDU 3065 病毒侵袭持续中 (AC自动机)

    题目链接 Problem Description 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的"万恶之源".这是一个庞大的病毒 ...

  2. hdoj 3065 病毒侵袭持续中(AC自动机)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 思路分析:问题需要模式匹配多个模式串,需要注意的是模式串会包含和重叠,需要对AC自动机的匹配过 ...

  3. HDU 3065 病毒侵袭持续中

    HDU 3065 病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. HDU 3065 病毒侵袭持续中(AC自己主动机)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=3065 Problem Description 小t非常感谢大家帮忙攻克了他的上一个问题.然而病毒侵袭 ...

  5. hdu3065 病毒侵袭持续中 AC自动机入门题 N(N <= 1000)个长度不大于50的模式串(保证所有的模式串都不相同), 一个长度不大于2000000的待匹配串,求模式串在待匹配串中的出现次数。

    /** 题目:hdu3065 病毒侵袭持续中 链接:http://acm.hdu.edu.cn/showproblem.php?pid=3065 题意:N(N <= 1000)个长度不大于50的 ...

  6. hdu----(3065)病毒侵袭持续中(AC自动机)

    病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  7. hdu 3065病毒侵袭持续中

    病毒侵袭持续中 http://acm.hdu.edu.cn/showproblem.php?pid=3065 Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  8. HDU 3065 病毒侵袭持续中 (模板题)

    病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  9. HDU3065 病毒侵袭持续中 —— AC自动机

    题目链接:https://vjudge.net/problem/HDU-3065 病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others)    Memory Li ...

随机推荐

  1. Database学习 - mysql 数据库 索引

    索引 索引在mysql 中也叫 '键',是存储引擎用来快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要. 索引优化应该是对查询性能优化 ...

  2. try 、catch 、finally 、throw 测试js错误

    try语句允许我们定义在执行时进行错误测试的代码块. catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块. finally 语句在 try 和 catch 之后无论有无异常都会执 ...

  3. 发送http请求的方法

    在http/1.1 协议中,定义了8种发送http请求的方法 get post options head put delete trace connect patch. 根据http协议的设计初衷,不 ...

  4. CentOS和RedHat Linux的区别

    RHEL 在发行的时候,有两种方式.一种是二进制的发行方式,另外一种是源代码的发行方式. 无论是哪一种发行方式,你都可以免费获得(例如从网上下载),并再次发布.但如果你使用了他们的在线升级(包括补丁) ...

  5. linux服务器last查看关机记录

    1.查看重启记录 last reboot命令 [root@test ~]# last reboot reboot system boot -.el6.x Mon May : - : (+:) rebo ...

  6. mysql系列七、mysql索引优化、搜索引擎选择

    一.建立适当的索引 说起提高数据库性能,索引是最物美价廉的东西了.不用加内存,不用改程序,不用调sql,只要执行个正确的'create index',查询速度就可能提高百倍千倍,这可真有诱惑力.可是天 ...

  7. js使用中的小问题----textarea是否有value属性

    使用jquery的选择器时想给textarea设置一个默认值时,采取了下面的方法: 不过失败了,但是看教程上确实成功的,那么肯定是有问题的. 经过上网查找以及自己验证发现: 1.textarea标签确 ...

  8. centos下httpd-2.4的编译安装

    httpd-2.4编译安装     依赖于更高版本的apr和apr-util      apr 全称  apache portable runtime 首先停用低版本的httpd服务 service ...

  9. Centos6安装FreeSWITCH 1.5时./configure问题解决记录

    系统:Centos 6.4 64位: FreeSWITCH版本:1.5 具体的安装过程参考FreeSWITCH 官网wiki (也可以参考我的博客<Centos6安装FreeSWITCH> ...

  10. [学习笔记]Javascript的包装对象

    例子1: var s="test"; s.len = 4; var t = s.len // t is undefined 原因是s是字符串,第二行代码,实际上是创建一个临时字符串 ...