博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu2896 AC自动机
阅读量:5123 次
发布时间:2019-06-13

本文共 2055 字,大约阅读时间需要 6 分钟。

MLE无数发。后来换了c++交过了。。。

来个标记数组即可。

#include
#include
#include
#include
#define maxn 10010using namespace std;struct actrie{ actrie *fail; actrie *next[94]; int flag; int id; void init(){ fail=NULL; memset(next,NULL,sizeof(next)); flag=0; }}*q[60200];actrie *root;char s[maxn],str[210];int vis[550];void insert(char *s,int c){ actrie *p=root,*qq; int i,j,len=strlen(s); for(i=0;i
next[id]==NULL) { qq=new actrie; qq->init(); p->next[id]=qq; } p=p->next[id]; } p->flag++; p->id=c+1;}void getfail(){ actrie *p,*temp; int i,j; int head,tail; head=tail=0; q[tail++]=root; while(head!=tail) { p=q[head++]; for(i=0;i<94;i++) { if(p->next[i]==NULL) continue; if(p->next[i]!=NULL) { if(p==root) p->next[i]->fail=root; else { temp=p->fail; while(temp!=NULL) { if(temp->next[i]!=NULL) { p->next[i]->fail=temp->next[i]; break; } temp=temp->fail; } if(temp==NULL) p->next[i]->fail=root; } q[tail++]=p->next[i]; } } }}int query(char *s){ int i,len=strlen(s),flag; actrie *p=root,*temp; flag=0; memset(vis,0,sizeof(vis)); for(i=0;i
next[id]==NULL&&p!=root) p=p->fail; p=p->next[id]; if(p==NULL) p=root; temp=p; while(temp!=root) { if(temp->flag>0) { vis[temp->id]=1; flag=1; } temp=temp->fail; } } return flag;}int main(){ int i,j,t,n,m; while(scanf("%d",&n)!=EOF) { root=new actrie; root->init(); for(i=0;i

 

转载于:https://www.cnblogs.com/sweat123/p/4739837.html

你可能感兴趣的文章
FastDFS使用
查看>>
服务器解析请求的基本原理
查看>>
[HDU3683 Gomoku]
查看>>
【工具相关】iOS-Reveal的使用
查看>>
数据库3
查看>>
存储分类
查看>>
下一代操作系统与软件
查看>>
【iOS越狱开发】如何将应用打包成.ipa文件
查看>>
[NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
查看>>
Yii2 Lesson - 03 Forms in Yii
查看>>
Python IO模型
查看>>
Ugly Windows
查看>>
DataGridView的行的字体颜色变化
查看>>
Java再学习——关于ConcurrentHashMap
查看>>
如何处理Win10电脑黑屏后出现代码0xc0000225的错误?
查看>>
局域网内手机访问电脑网站注意几点
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Day19内容回顾
查看>>
第七次作业
查看>>
SpringBoot项目打包
查看>>