求大佬解释为什么tle
查看原帖
求大佬解释为什么tle
1300671
Halen1happy楼主2024/12/14 17:53
#include<bits/stdc++.h>
using namespace std;
//字典树的基本操作:查找,插入,删除
//字典树的应用 串的快速检索,串排序,前缀统计及判断,最长公共前序
//trie树是字典树 
const int N=3000005;
int son[N][65],cnt[N],idx;
char str[N];
int ge(char x){
    if(x>='A'&&x<='Z')
        return x-'A';
    else if(x>='a'&&x<='z')
        return x-'a'+26;
    else
        return x-'0'+52;
}
//插入字符串 
void insert(char *str){
	int p=0;
	for(int i=0;i<strlen(str);i++){
		int u=ge(str[i]);
		if(!son[p][u])
		 son[p][u]=++idx;
		p=son[p][u];
		cnt[p]++;
	}
}
//查询字符串
int query(char *str){
	int p=0;
	for(int i=0;i<strlen(str);i++){
		int u=ge(str[i]);
		if(!son[p][u]) 
		return 0;
		p=son[p][u];
	}
	return cnt[p];
} 
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		idx=0;
		for(int i=1;i<=N;i++){
			for(int j=1;j<=122;j++){
				son[i][j]=0;
			}
		}
		for(int i=1;i<=N;i++){
			cnt[i]=0;
		}
		int n,m;
		scanf("%d%d",&n,&m);
		for(int i=1;i<=n;i++){
	    	scanf("%s",str);
			insert(str);
    	}
		for(int i=1;i<=m;i++){
			scanf("%s",str);
			 printf("%d\n",query(str));
		}	
	}


	
	
	return 0;
} 
2024/12/14 17:53
加载中...