HDU 3065 病毒侵袭持续中 (AC自动机)
来源:互联网 发布:王欣庭审 知乎 编辑:程序博客网 时间:2024/05/29 18:25
中文题不解释
Sample Input
3AABBCCooxxCC%dAAAoen....END
Sample Output
AA: 2CC: 1
#include<stdio.h>#include<string.h>#include<queue>#include<algorithm>#include<iostream>using namespace std;const int kind = 26;const int M = 1005;struct node{node *fail;node *next[kind];int count;node(){fail = NULL;count = 0;memset(next,0,sizeof(next));}}*q[50*M];char keyword[1005][55],str[2000010];int head,tail;void insert(char *str,node *root,int num){node *p=root;int i=0,index;while(str[i]){index = str[i] - 'A';if(p->next[index]==NULL)p->next[index] = new node();p = p->next[index];i++;}p->count=num;}void build_ac(node *root){int i;root->fail=NULL;q[head++]=root;while(head!=tail){node *temp = q[tail++];node *p=NULL;for(i=0;i<kind;i++){if(temp->next[i]!=NULL){if(temp==root)temp->next[i]->fail=root;//失败指针指向rootelse {p = temp->fail;while(p!=NULL){if(p->next[i]!=NULL){temp->next[i]->fail=p->next[i];break;}p=p->fail;}if(p==NULL)temp->next[i]->fail=root;}q[head++]=temp->next[i];}}}}int vis[1005];void query(char *str,node *root){int i=0,cnt=0,index,len=strlen(str);node *p=root;while(str[i]){if(str[i]<'A'||str[i]>'Z'){p=root;i++;continue;}index = str[i]-'A';while(p->next[index]==NULL&&p!=root)p = p->fail;p=p->next[index];p=(p==NULL)?root:p;node *temp = p;while(temp!=root){vis[temp->count]++;temp=temp->fail;}i++;}}int main(){int n,m;while(~scanf("%d",&n)){head=tail=0;node *root = new node();getchar();for(int i=1;i<=n;i++){gets(keyword[i]);insert(keyword[i],root,i);}build_ac(root);scanf("%s",str);memset(vis,0,sizeof(vis));query(str,root);for(int i=1;i<=n;i++)if(vis[i])printf("%s: %d\n",keyword[i],vis[i]);}return 0;}
1 0
- 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自动机)
- HDU 3065 病毒侵袭持续中(AC自动机)
- HDU 3065 病毒侵袭持续中(AC自动机裸)
- HDU 3065 病毒侵袭持续中(AC自动机)
- HDU 3065 病毒侵袭持续中(ac自动机)
- HDU 3065 病毒侵袭持续中(AC自动机)
- HDU 3065 病毒侵袭持续中(AC自动机)
- hdu 3065 病毒侵袭持续中(AC自动机)
- Xamarin.ios 设置后退按钮的颜色和文字
- C++中各种类型的相互转换
- 全球最丑狗比赛冠军出炉 外表丑陋性格活泼
- ECM(Engineering Change Management) 相关表
- 黑马程序员—网络编程
- HDU 3065 病毒侵袭持续中 (AC自动机)
- view和canvas的坐标
- gdb 的info sh 找不到模块解决方法
- echo输出话语中的“.”与“,”区别在哪
- SensorTag编译错误Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition.
- hdu1853 费用流
- JS 字符串替换方法
- java将原目录下的文件复制到指定目录
- git 架設server