hdu 6138
来源:互联网 发布:易语言与php数据交互 编辑:程序博客网 时间:2024/06/03 16:41
/* ac自动机*/#include<bits/stdc++.h>using namespace std;#define ms(x) memset(x,0,sizeof(x))const int M =1e5+10;namespace AC{ int ch[M][26],de[M],f[M],vis[M],cnt=0,q[M*2]; inline void Init() { ms(vis);ms(f);ms(de);cnt=0;f[0]=-1;ms(ch); } void Insert(char *s) { int r=0; for(int i=0;s[i];++ i) { if(!ch[r][s[i]-'a']) { ++cnt; ms(ch[cnt]); ch[r][s[i]-'a'] = cnt; de[cnt]=i+1; } r = ch[r][s[i]-'a']; } } void Getfail() { int t=0,x; for(int i=0;i<26;i++) if(ch[0][i]) q[++t]=ch[0][i]; for(x=1;x<=t;x++) { int xx=x; x =q[xx]; for(int i=0;i<26;++ i) if(ch[x][i]) f[ch[x][i]]=ch[f[x]][i],q[++t]=ch[x][i]; else ch[x][i] =ch[f[x]][i]; x =xx; } } int Ans(char *s1,char *s2,int vi) { int ans=0; for(int l=strlen(s1),i=0,x=0;i<l;i++) { while(!ch[x][s1[i]-'a']) x=f[x]; x =ch[x][s1[i]-'a']; for(int j=x;j;j=f[j]) vis[j]=vi; } for(int l=strlen(s2),i=0,x=0;i<l;i++) { while(!ch[x][s2[i]-'a']) x=f[x]; x =ch[x][s2[i]-'a']; for(int j=x;j;j=f[j]) if(vis[j]==vi) ans =max(ans,de[j]); } return ans; }};char s[110][M];//AC ac;int main(){ int t,n,m; scanf("%d",&t); while(t--) { using namespace AC; Init(); scanf("%d",&n); for(int i=1;i<=n;++i) { scanf("%s",s[i]); Insert(s[i]); } Getfail(); scanf("%d",&m); while(m--) { int x1,x2; scanf("%d%d",&x1,&x2); printf("%d\n",Ans(s[x1],s[x2],m+1)); } } return 0;}
阅读全文
0 0
- hdu 6138
- hdu 6138
- HDU 6138 AC自动机
- hdu 6138 ac自动机
- HDU 6138 AC自动机
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- 带有动态效果得返回顶部
- java和mqtt的那些事(一)
- three.js 01-01 之基本骨架
- STM32学习之:事件标志组
- XML_概述,DOM4J解析器,Pull解析器,DOM4J增删改
- hdu 6138
- 2017/10/16一个新项目上线过程中所记录的
- Python正则表达式详解
- 任学堂说科技:你所不知道的人工智能发展史,未来的方向志在何方
- 利用python保存网页文本
- 安装setuptools和pip
- Linux命令小结
- 解决Tomcat: Can't load IA 32-bit .dll on a AMD 64-bit platform问题
- python易犯的错误