36分求助
查看原帖
36分求助
1199534
ycy1124楼主2024/6/18 19:13
#include<bits/stdc++.h>
using namespace std;
struct Node{
	int f,ch,js;
	int z[63];
}a[3000001];
int tot=0;
int ss(char c){
	if(c>='a'&&c<='z'){
		return c-'a'+1;
	}
	else if(c>='A'&&c<='Z'){
		return c-'A'+27;
	}
	else{
		return c-'0'+53;
	}
}
void insert(string s){
	int len=s.size();
	int x=0;
	a[x].js++;
	for(int i=0;i<len;i++){
		if(a[x].z[ss(s[i])]==0){
			a[x].z[ss(s[i])]=++tot;
			x=tot;
			a[x].ch=ss(s[i]);
		}
		else{
			x=a[x].z[ss(s[i])];
		}
		a[x].js++;
	}
}
int find(string s){
	int len=s.size(),x=0;
	for(int i=0;i<len;i++){
		if(a[x].z[ss(s[i])]!=0){
			x=a[x].z[ss(s[i])];
		}
		else{
			return 0;
		}
	}	
	return a[x].js;
}
int main(){
	int t;
	scanf("%d",&t);
	while(t){
		t--;
		tot=0;
		int n,p;
		scanf("%d%d",&n,&p);
		for(int i=1;i<=n;i++){
			string s;
			cin>>s;
			insert(s);
		}
		for(int i=1;i<=p;i++){
			string s;
			cin>>s;
			printf("%d\n",find(s));
		}
		for(int i=1;i<=n;i++){
			a[i].ch=0;
			a[i].f=0;
			a[i].js=0;
			for(int j=1;j<=62;j++){
				a[i].z[j]=0;
			}
		}
	}
	return 0;
}
2024/6/18 19:13
加载中...