1212: [HNOI2004]L语言

来源:互联网 发布:怎样找淘宝客推广产品 编辑:程序博客网 时间:2024/05/22 10:36

题目链接

题解:

用trie,对于所有字典里的词建trie。

f[i]表示第i个字母是否已经匹配。

代码:

#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<iostream>using namespace std;const int N=(1<<20)+10;int n,m,tot=0;int sa[2010][100];char s[N];int len;bool tf[N];void ins(){len=strlen(s);int now=0;for(int i=0;i<len;i++){int yu=s[i]-'a';//printf("%d\n",yu);if(!sa[now][yu]) sa[now][yu]=++tot;now=sa[now][yu];}tf[now]=1;}int f[N];int work(int t){len=strlen(s+1);memset(f,0,sizeof(0));f[0]=t;int ans=0;for(int i=0;i<=len;i++){if(f[i]!=t) continue;else ans=i;for(int p=0,j=i+1;j<=len;j++){p=sa[p][s[j]-'a'];if(!p) break;if(tf[p])f[j]=t;}}return ans;}int main(){scanf("%d%d",&n,&m);memset(tf,0,sizeof(tf));memset(sa,0,sizeof(sa));for(int i=1;i<=n;i++){scanf("%s",s);ins();}for(int i=1;i<=m;i++){scanf("%s",s+1);printf("%d\n",work(i));}}


原创粉丝点击