题目链接:点击查看

题目大意:给出 n 个模式串,再给出 m 个匹配串,问有多少个模式串在匹配串中出现,需要分别对应上其编号

题目分析:对应编号问题我们可以直接开一个数组映射,也是比较经典的模板问题了,注意输出格式就好了,还有如果MLE的话,用指针的朋友可以用C++交一下试试,用数组的朋友不要滥用memset,剩下的就是模板了

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;char s[N];int fail[N],trie[N][130],cntword[N],rk[N],vis[N],cnt,tot;void insert_word(int id)
{int len=strlen(s);int pos=0;for(int i=0;i<len;i++){int to=s[i];if(!trie[pos][to])trie[pos][to]=++cnt;pos=trie[pos][to];}cntword[pos]++;rk[pos]=id;
}void getfail()
{queue<int>q;for(int i=0;i<130;i++){if(trie[0][i]){fail[trie[0][i]]=0;q.push(trie[0][i]);}}while(!q.empty()){int cur=q.front();q.pop();for(int i=0;i<130;i++){if(trie[cur][i]){fail[trie[cur][i]]=trie[fail[cur]][i];q.push(trie[cur][i]);}elsetrie[cur][i]=trie[fail[cur]][i];}}
}int search_word(int id)
{vector<int>ans;int len=strlen(s),pos=0;for(int i=0;i<len;i++){int to=s[i];pos=trie[pos][to];int temp=pos;while(temp&&vis[temp]!=id){vis[temp]=id;if(cntword[temp])//如果匹配成功ans.push_back(rk[temp]);temp=fail[temp];}}if(ans.size()){tot++;sort(ans.begin(),ans.end());printf("web %d:",id);for(int i=0;i<ans.size();i++)printf(" %d",ans[i]);printf("\n");}
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int n;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%s",s);insert_word(i);}getfail();scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%s",s);search_word(i);}printf("total: %d\n",tot);return 0;
}

HDU - 2896 病毒侵袭(AC自动机)相关推荐

  1. HDU 2896 病毒侵袭 AC自动机

    我表示不是很懂HDU卡内存的优良传统.......以及他们卡输出的良好风尚........ AC自动机裸体关键在于http://ascii.911cha.com/ #include<cstrin ...

  2. HDU 2896 病毒侵袭 AC自己主动机题解

    本题是在text里面查找key word的增强版.由于这里有多个text. 那么就不能够简单把Trie的叶子标志记录改动成-1进行加速了,能够使用其它技术.我直接使用个vis数组记录已经訪问过的节点, ...

  3. hdu 2896 病毒侵袭

    http://acm.hdu.edu.cn/showproblem.php?pid=2896 AC自动机的简单题...忘记关debug了,wa了一次...囧! View Code 1 #include ...

  4. hdu 2896 病毒侵袭(AC自动机)

    病毒侵袭                                                                           Time Limit: 2000/1000 ...

  5. HDU 2896 病毒侵袭(AC自动机/模板题)

    传送门 病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)            Memory Limit: 131072/131072 K (Java/Other ...

  6. hdu2896 病毒侵袭 ac自动机

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=2896 题目: 病毒侵袭 Time Limit: 2000/1000 MS (Java/Othe ...

  7. hduoj-----(2896)病毒侵袭(ac自动机)

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

  8. HDU 2896病毒侵袭

    当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋--我们能在有生之年看到500年一遇的世界奇观,那是多么幸福的事儿啊~~  但网路上总有那么些网站, ...

  9. HDU2896(病毒侵袭--AC自动机)

    题目:病毒侵袭 #include <iostream> #include <string.h> #include <stdio.h> #include <al ...

最新文章

  1. 如何让hierarchyviewer调试查看商业版真机上的应用
  2. 【python】简单实现一个模板引擎
  3. Breeze库API总结(Spark线性代数库)(转载)
  4. python计数器函数_Python计数器Counter
  5. mpi4py linux例子,python-3.x – mpi4py中的共享内存
  6. 1011.log4cplus移植记录
  7. Hadoop中Writable类
  8. quick time不可用_教程|用Selenium爬资源:DIY还是花钱?
  9. 第二讲:Obj-C 点语法
  10. Django__WSGI
  11. html5rpg游戏策划案,HTML 5开发RPG游戏之一(地图人物实现)
  12. matlab 最速下降,matlab最速下降法
  13. python cnn 实例_Python实现CNN的多通道输入实例
  14. PTES执行内容思维导图
  15. 【修真院java小课堂】Shiro
  16. phpstorm+xdebug远程调试
  17. Linux下批量把GDK编码的文章转化为UTF-8编码的文章以及“iconv: 未知 xxx 处的非法输入序列”错误处理
  18. 小米路由器mini刷老毛子固件遇到的问题
  19. 依图在实时音视频中语音处理的挑战丨RTC Dev Meetup
  20. MATLAB7程序在哪,这个程序在MATLAB 7.0中为什么运行不起来 那个工具箱怎么装

热门文章

  1. 带你从源码了解SpringBoot启动流程
  2. Spring5的核心容器
  3. IntelliJ IDEA导入一个已经存在的子模块
  4. 设计 Redis Key
  5. response设置响应头
  6. 文件操作-读取文件后文件指针会发生变化
  7. triggered_time
  8. 服务器升级中不能修改信息,服务器升级页面
  9. 2020-09-26
  10. 高版本JDK13新特性以及与JDK8对比