link
5TLE
代码:
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=2e6;
int n,m,ch[MAXN+10][30],tot=1,ans;
char s[MAXN+10];
bool ed[MAXN+10],vis[MAXN+10];
void Insert(char *s) {
int n=strlen(s),u=1;
for(int i=0; i<n; i++) {
int c=s[i]-'a';
if(ch[u][c]) u=ch[u][c];
else {
ch[u][c]=++tot;
u=ch[u][c];
}
}
ed[u]=1;
}
void Query(int x,char *s) {
if(vis[x]) return ;
vis[x]=1;
ans=max(ans,x);
int u=1;
for(int i=x; i<strlen(s); i++) {
int c=s[i]-'a';
if(!ch[u][c]) return ;
else u=ch[u][c];
if(ed[u]) Query(i+1,s);
}
if(!ed[u]) return ;
ans=strlen(s);
}
int main() {
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++) {
scanf("%s",s);
Insert(s);
}
for(int i=1; i<=m; i++) {
scanf("%s",s);
memset(vis,0,sizeof(vis));
ans=0;
Query(0,s);
printf("%d\n",ans);
}
return 0;
}