HDU - 2896 病毒侵袭(AC自动机)
题目链接:点击查看
题目大意:给出 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自动机)相关推荐
- HDU 2896 病毒侵袭 AC自动机
我表示不是很懂HDU卡内存的优良传统.......以及他们卡输出的良好风尚........ AC自动机裸体关键在于http://ascii.911cha.com/ #include<cstrin ...
- HDU 2896 病毒侵袭 AC自己主动机题解
本题是在text里面查找key word的增强版.由于这里有多个text. 那么就不能够简单把Trie的叶子标志记录改动成-1进行加速了,能够使用其它技术.我直接使用个vis数组记录已经訪问过的节点, ...
- hdu 2896 病毒侵袭
http://acm.hdu.edu.cn/showproblem.php?pid=2896 AC自动机的简单题...忘记关debug了,wa了一次...囧! View Code 1 #include ...
- hdu 2896 病毒侵袭(AC自动机)
病毒侵袭 Time Limit: 2000/1000 ...
- HDU 2896 病毒侵袭(AC自动机/模板题)
传送门 病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- hdu2896 病毒侵袭 ac自动机
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=2896 题目: 病毒侵袭 Time Limit: 2000/1000 MS (Java/Othe ...
- hduoj-----(2896)病毒侵袭(ac自动机)
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 2896病毒侵袭
当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋--我们能在有生之年看到500年一遇的世界奇观,那是多么幸福的事儿啊~~ 但网路上总有那么些网站, ...
- HDU2896(病毒侵袭--AC自动机)
题目:病毒侵袭 #include <iostream> #include <string.h> #include <stdio.h> #include <al ...
最新文章
- 如何让hierarchyviewer调试查看商业版真机上的应用
- 【python】简单实现一个模板引擎
- Breeze库API总结(Spark线性代数库)(转载)
- python计数器函数_Python计数器Counter
- mpi4py linux例子,python-3.x – mpi4py中的共享内存
- 1011.log4cplus移植记录
- Hadoop中Writable类
- quick time不可用_教程|用Selenium爬资源:DIY还是花钱?
- 第二讲:Obj-C 点语法
- Django__WSGI
- html5rpg游戏策划案,HTML 5开发RPG游戏之一(地图人物实现)
- matlab 最速下降,matlab最速下降法
- python cnn 实例_Python实现CNN的多通道输入实例
- PTES执行内容思维导图
- 【修真院java小课堂】Shiro
- phpstorm+xdebug远程调试
- Linux下批量把GDK编码的文章转化为UTF-8编码的文章以及“iconv: 未知 xxx 处的非法输入序列”错误处理
- 小米路由器mini刷老毛子固件遇到的问题
- 依图在实时音视频中语音处理的挑战丨RTC Dev Meetup
- MATLAB7程序在哪,这个程序在MATLAB 7.0中为什么运行不起来 那个工具箱怎么装