Trie tle85pts求调
查看原帖
Trie tle85pts求调
483928
Z1qqurat楼主2022/8/7 18:10

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;
}
2022/8/7 18:10
加载中...