如果你52
查看原帖
如果你52
826079
Autumn_Rain楼主2024/10/24 21:28

注释掉的初始化方式是错的!!!

#include<bits/stdc++.h>
using namespace std;
int T; 
int n,q;
const int N=3e6+10;
int t[N][70];
int tot;
int word[N];
int num(char x){
    if(x>='A'&&x<='Z')return x-'A';
    if(x>='a'&&x<='z')return x-'a'+26;
    else return x-'0'+52;
} 
void insert(string s){
	int u=0;
	for(int i=0;i<s.size();i++){
		int a=num(s[i]);
		if(!t[u][a])t[u][a]=++tot;
		u=t[u][a];
		word[u]++;
	}
}
int qry(string s){
	int u=0;
	for(int i=0;i<s.size();i++){
		int a=num(s[i]);
		if(t[u][a]==0)return 0;
		u=t[u][a];
	}
	return word[u];
}
void solve(){
//	for(int i=0;i<=tot;i++){
//		word[i]=0;
//		for(int j=1;j<=68;j++){
//			t[i][j]=0;
//		}
//	}
//	tot=0;
	for(int i=0;i<=tot;i++){
        for(int j=0;j<=66;j++){
        	t[i][j]=0;
		} 
	} 
	for(int i=0;i<=tot;i++){
        word[i]=0;
	} 
    tot=0;
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		string s;
		cin>>s;
		insert(s);
	}
	while(q--){
		string s;
		cin>>s;
		cout<<qry(s)<<"\n";
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>T;
	while(T--)solve();
	return 0;
}
2024/10/24 21:28
加载中...