hdu 3065 病毒侵袭持续中 AC自动机模版题
来源:互联网 发布:莲子心 知乎 编辑:程序博客网 时间:2024/05/11 01:50
做法:基本的AC自动机,因为每次循环验证的位置不同(后缀位置),所以,每次fail过后都是新的字串,可以放进dudu
#include <iostream>#include <cstdio>#include <cstring>#include <deque>#define CNUM 30#define LMT 2000005using namespace std;struct node{ node *chl[CNUM]; node *fail; int aim; node():aim(0),fail(0) { memset(chl,0,sizeof(chl)); }};char sec[LMT];node *root;deque<node *>q;int dudu[1002];void insert(char src[],int sign){ int len=strlen(src),index; node *current=root; for(int i=0;i<len;i++) { index=src[i]-'A'; if(current->chl[index])current=current->chl[index]; else { current->chl[index]=new node; current=current->chl[index]; } } current->aim=sign;}void build_ac(void){ node *current,*tem; q.clear(); q.push_back(root); while(!q.empty()) { current=*q.begin(); q.pop_front(); for(int i=0;i<CNUM;i++) if(current->chl[i]) { if(current==root)current->chl[i]->fail=root; else { tem=current->fail; while(tem) { if(tem->chl[i]) { current->chl[i]->fail=tem->chl[i]; break; } tem=tem->fail; } if(!tem)current->chl[i]->fail=root; } q.push_back(current->chl[i]); } }}bool equry(void){ int index,ret=0,len=strlen(sec); node *current=root,*tem; memset(dudu,0,sizeof(dudu)); for(int i=0;i<len;i++) { if(sec[i]>='A'&&sec[i]<='Z') index=sec[i]-'A'; else index=27; while(current&¤t->chl[index]==NULL) current=current->fail; if(!current)current=root; else current=current->chl[index]; tem=current; while(tem!=root) { dudu[tem->aim]++; tem=tem->fail; } } return ret;}void kill(node *x){ for(int i=0;i<CNUM;i++) if(x->chl[i])kill(x->chl[i]); delete x;}int main(){ int n; char str[1002][55]; while(~scanf("%d",&n)) { root=new node; for(int i=1;i<=n;i++) { scanf("%s",str[i]); insert(str[i],i); } build_ac(); scanf("%s",sec); equry(); for(int i=1;i<=n;i++) if(dudu[i]) printf("%s: %d\n",str[i],dudu[i]); kill(root); } return 0;}
- hdu 3065 病毒侵袭持续中 AC自动机模版题
- [HDU 3065]病毒侵袭持续中[AC自动机][模板题]
- hdu 3065 病毒侵袭持续中(ac自动机模板题)
- hdu 3065 病毒侵袭持续中 ac自动机模板题
- hdu 3065 病毒持续侵袭中 AC自动机入门题
- HDU 病毒侵袭持续中(AC自动机)
- AC自动机 病毒侵袭持续中 HDU
- HDU 3065 病毒侵袭持续中(AC自动机)
- hdu 3065 病毒侵袭持续中 //AC自动机
- HDU 3065:病毒侵袭持续中(AC自动机)
- HDU 3065 病毒侵袭持续中 AC自动机
- hdu 3065 病毒侵袭持续中 - AC自动机
- HDU 3065 病毒侵袭持续中(AC自动机模板)
- hdu 3065 病毒侵袭持续中(AC自动机)
- hdu 3065 病毒侵袭持续中(AC自动机)
- hdu 3065 病毒侵袭持续中 (AC自动机)
- HDU 3065 AC 自动机再来。。 病毒持续侵袭中
- HDU 3065 病毒侵袭持续中(AC自动机)
- memcached+spring集成
- GUI_成长历程_part3
- linux 如何关闭防火墙
- wxWidgets的编译(未完)
- Unity3d NavMeshAgent 路径点寻路
- hdu 3065 病毒侵袭持续中 AC自动机模版题
- free
- 基于C#的开源GIS项目介绍之SharpMap篇
- editText中动态插入图片
- 公鸡为什么会打鸣
- 关于用存储过程中动态创建视图的一点心得。
- GUI_成长历程_part4
- 使用easyui的Tree 实现无限子节点绑定
- C++ 析构函数