hdu 3065 病毒侵袭持续中
来源:互联网 发布:指纹定位算法 编辑:程序博客网 时间:2024/05/01 23:16
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3065
题目大意及思路:ac自动机。
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<string>#include<queue>#include<algorithm>#include<vector>#include<stack>#include<list>#include<iostream>#include<map>using namespace std;#define inf 0x3f3f3f3f#define Max 1100int max(int a,int b){return a>b?a:b;}int min(int a,int b){return a<b?a:b;}int q[60*Max],cnt;char s[2001000];char str[Max][60];int hash[Max];struct node{ int id,fail; int next[26]; void init() { memset(next,0,sizeof(next)); id=fail=0; }}tri[60*Max];void insert(char *s,int id){ int i,p,x; p=0; for(i=0;s[i];i++) { x=s[i]-'A'; if(!tri[p].next[x]) { tri[++cnt].init(); tri[p].next[x]=cnt; } p=tri[p].next[x]; } tri[p].id=id;}void bfs(){ int i,p,suf,head=0,tail=0; p=0; for(i=0;i<26;i++) { if(tri[0].next[i]) { q[tail++]=tri[0].next[i]; tri[q[tail-1]].fail=0; } else tri[0].next[i]=0; } while(head<tail) { // printf("akkk\n"); p=q[head++];suf=tri[p].fail; for(i=0;i<26;i++) { if(tri[p].next[i]) { q[tail++]=tri[p].next[i]; tri[q[tail-1]].fail=tri[suf].next[i]; } else tri[p].next[i]=tri[suf].next[i]; } }}void query(char *s){ int i,x,p,tmp; p=0; memset(hash,0,sizeof(hash)); for(i=0;s[i];i++) { x=s[i]-'A'; if(x>=0&&x<26) { p=tri[p].next[x]; tmp=p; while(tmp) { if(tri[tmp].id) { hash[tri[tmp].id]++; } tmp=tri[tmp].fail; } } else p=0; }}int main(){ int i,n;//char str[60]; while(scanf("%d",&n)!=EOF) { cnt=0; tri[0].init(); for(i=1;i<=n;i++) { scanf("%s",str[i]); insert(str[i],i); } // printf("c"); bfs();////printf("e"); scanf("%s",s); // printf("f"); query(s); for(i=1;i<=n;i++) { if(hash[i]) printf("%s: %d\n",str[i],hash[i]); } }}
- HDU 2896 病毒侵袭 && HDU 3065 病毒侵袭持续中
- hdu 3065 病毒侵袭持续中
- hdu 3065 病毒侵袭持续中
- hdu 3065 病毒侵袭持续中
- hdu 3065 病毒侵袭持续中
- HDU 3065 病毒侵袭持续中
- Hdu 3065 病毒侵袭持续中
- HDU 3065 病毒侵袭持续中
- hdu 3065 病毒侵袭持续中 ac_automaton
- HDU 3065 病毒侵袭持续中
- hdu 3065 病毒侵袭持续中
- HDU 3065 病毒侵袭持续中
- hdu 3065 病毒侵袭持续中
- HDU 3065 病毒侵袭持续中
- HDU - 3065 病毒侵袭持续中
- hdu 3065 - 病毒侵袭持续中
- hdu 3065 病毒侵袭持续中
- HDU 3065 病毒侵袭持续中
- Java Swing多线程死锁问题解析+我的另类解决方法
- Linux 嵌入式启动以及优化
- asp.net学习心得总结
- 判断并输出1000到2000之间能同被17和37整除的的数
- 从RTP到ORTP
- hdu 3065 病毒侵袭持续中
- ScrollBar使用-很全
- 64位Ubuntu无法运行Adnroid SDK adb命令
- ortp库使用入门
- 第十五周 任务二
- MAP和FIELD伪操作定义的内存表结构(绝对地址与相对地址的区别)
- Wince屏幕旋转使用的代码段
- 最小二乘法直线拟合
- 回调函数应用1