HDU 2896 AC自动机
2016-05-06 12:11
357 查看
G++交MLE C++交AC
#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<queue>using namespace std;struct node{node *next[128];node *fail;int num;node(){num=0;fail=NULL;for(int i=0; i<128; i++)next[i]=NULL;}}*root;void Insert(char *str,int id){node *p=root;int temp;int len=strlen(str);for(int i=0; i<len; i++){temp=str[i];if(p->next[temp]==NULL)p->next[temp]=new node();p=p->next[temp];}p->num=id;}void build_ac(){node *p,*temp,*son;queue<node *>Q;Q.push(root);while(!Q.empty()){p=Q.front();Q.pop();for(int i=0; i<128; i++){son=p->next[i];if(son){if(p==root)son->fail=root;else{temp=p->fail;while(temp){if(temp->next[i]){son->fail=temp->next[i];break;}temp=temp->fail;}if(temp==NULL)son->fail=root;}Q.push(son);}}}}char str[80000];bool vis[1000];int n,m;bool query(int id){memset(vis,0,sizeof(vis));node *p=root,*temp;int len=strlen(str);int index,flag=0;for(int i=0; i<len; i++){index=str[i];while(p->next[index]==NULL&&p!=root)p=p->fail;p=p->next[index];if(p==NULL)p=root;temp=p;while(temp!=root){if(temp->num){vis[temp->num]=true;flag++;}temp=temp->fail;if(flag==3)break;}if(flag==3)break;}if(flag){printf("web %d:",id);for(int i=1; i<=n; i++)if(vis[i])printf(" %d",i);printf("\n");return true;}return false;}char s[300];void Dele(node *r){for(int i=0;i<128;i++)if(r->next[i])Dele(r->next[i]);delete r;}int main(){while(~scanf("%d",&n)){root=new node();for(int i=1; i<=n; i++){scanf("%s",s);Insert(s,i);}scanf("%d",&m);int num=0;build_ac(); ///别漏了调用build_ac();for(int i=1; i<=m; i++){scanf("%s",str);if(query(i))num++;}printf("total: %d\n",num);//Dele(root);}return 0;}
相关文章推荐
- 设计模式之单例模式(Singleton)
- android使用butterknife InjectView和BindView
- android 加载超大图片内存溢出问题
- 学习下 linux
- Spring基础 注解实现Bean依赖注入
- 01背包第k大
- 关于udev,sys,proc,tmpfs一些定义的问题
- C++程序设计必知:生存期
- Android API中被@hide注释的方法引用报错解决
- leetcode.279. Perfect Squares
- java底层知识(3)--CPU 高速缓存
- 今天经理给我讲了好多东西(spring mvc)
- RHEL6.2下挂载光驱安装软件
- 【C#设计模式-迭代器模式】
- Flask下拉列表与数据库同步
- css模块化策略
- Xshell如何修改字体大小和颜色
- Opengl ES 线的三角化
- IOS开发中UIAlertController(警告框)的使用
- Windows配置NetBeans为SourceCodePro字体