Trie树TLE,85pts。。。
求调。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
using namespace std;
const int MAXN=2e6+10;
int n,m,node[410][26],tot,ans;
bool exist[410],vis[MAXN];
string ss;
void insert(string s){
int len=s.length(),u=0;
for(int i=0;i<len;i++){
int k=s[i]-'a';
if(node[u][k]==0){
tot++;
node[u][k]=tot;
}
u=node[u][k];
}
exist[u]=1;
return ;
}
void query(int pos,int cur){
int k=ss[pos]-'a',u=node[cur][k];
if(exist[u]==1){
ans=max(ans,pos+1);
if(vis[pos]==0){
query(pos+1,0);
}
vis[pos]=1;
}
if(u!=0){
query(pos+1,u);
}
return ;
}
int main() {
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
string s;
cin>>s;
insert(s);
}
for(int i=1;i<=m;i++){
memset(vis,0,sizeof(vis));
ans=0;
cin>>ss;
query(0,0);
printf("%d\n",ans);
}
return 0;
}