HDU 5384 AC自动机模版
来源:互联网 发布:云计算的发展现状 编辑:程序博客网 时间:2024/06/05 21:17
点击打开链接
题意:n个A,m个B,对于每个A,输出所有B在A中出现的次数
思路:和AC自动机模版题2222相同,唯一的区别就是n个A不能开二维,自己处理一下就OK了
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int maxn=500010;const int N=26;struct node{ node *fail; node *next[N]; int num; node(){ fail=NULL; num=0; memset(next,NULL,sizeof(next)); }}*q[maxn];char str1[100010],str2[10010],str[10010];int tmp[100010];int head,tail;void insert_Trie(char *str,node *root){ node *p=root; int i=0; while(str[i]){ int id=str[i]-'a'; if(p->next[id]==NULL) p->next[id]=new node(); p=p->next[id];i++; } p->num++;}void build_ac(node *root){ root->fail=NULL; q[head++]=root; while(head!=tail){ node *temp=q[tail++]; node *p=NULL; for(int i=0;i<N;i++){ if(temp->next[i]!=NULL){ if(temp==root) temp->next[i]->fail=root; else{ 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 query(node *root,char str2[]){ int i=0,ans=0; node *p=root; while(str2[i]){ int id=str2[i]-'a'; while(p->next[id]==NULL&&p!=root) p=p->fail; p=p->next[id]; p=(p==NULL)?root:p; node *temp=p; while(temp!=root&&temp->num!=-1){ ans+=temp->num; temp=temp->fail; } i++; } return ans;}void del(node *p){ if(p==NULL)return ; for(int i=0;i<26;i++)del(p->next[i]); delete p;}int main(){ int T,n,m; scanf("%d",&T); while(T--){ node *root=new node(); head=tail=0; scanf("%d%d",&n,&m); int k=0; for(int i=0;i<n;i++){ scanf("%s",str); int len=strlen(str); tmp[i]=len; for(int j=0;j<len;j++) str1[k++]=str[j]; } for(int i=0;i<m;i++){ scanf("%s",str2); insert_Trie(str2,root); } build_ac(root);k=0; for(int i=0;i<n;i++){ for(int j=0;j<tmp[i];j++) str[j]=str1[k++]; str[tmp[i]]='\0'; int ans=query(root,str); printf("%d\n",ans); } del(root); } return 0;}
0 0
- HDU 5384 AC自动机模版
- ac自动机模版(hdu 5384)
- hdu 2222 ac自动机模版
- HDU 2222 AC自动机模版
- HDU 2222 AC自动机模版题
- hdu 2896 AC自动机模版题
- hdu 3065 AC自动机模版题
- hdu 2896 病毒侵袭 (AC自动机模版)
- HDU 2222 AC自动机模版题
- HDU 2896 AC自动机模版题
- HDU 3065 AC自动机模版题
- HDU 5384 AC自动机
- HDU 5384 (AC自动机)
- hdu2222 ac自动机模版
- AC自动机模版
- AC自动机模版
- AC自动机模版
- AC自动机模版
- mysql 建立索引的原则
- SVN代码丢失惊魂
- XNA載入圖片策略與效能
- 课时7 项目3-发工资
- java基础之----接口
- HDU 5384 AC自动机模版
- MySQL练习题
- ioctl()函数详解
- 使用LuManager快速建站
- eclipse用于开发java程序时候如何加入第三方jar包
- 增大胸围!Mr Burning带你在家全方位虐胸!
- 人才济济的时代诚信才能脱颖而出
- android完美退出自身进程的方法
- 牛人经验3(IC设计行业分类辨析)