蒟蒻求助
查看原帖
蒟蒻求助
343342
Obviathy楼主2022/5/3 18:49

评测记录

#include<bits/stdc++.h>
using namespace std;
const int N = 3e6+5;
int t[N][70],f[N];
int n,q,tot=1;
char str[N];
void Insert(char *s){
	int p = 1,len = strlen(s);
	for(int i = 0;i < len;i ++){
		int c;
		if('A'<=s[i]&&s[i]<='Z')c = s[i]-'A';
		if('a'<=s[i]&&s[i]<='z')c = s[i]-'a'+26;
		else c = s[i] - '0' + 52;
		if(t[p][c] == 0)t[p][c] = ++tot;
		p = t[p][c];
		f[p] ++;
	}
}
int ans;
/*
void dfs(int x){
	f[x] = siz[x];
	for(int i = 0;i < 62;i ++){
		int v = t[x][i];
		if(v == 0)continue;
		dfs(v);
		f[x]+=f[v];
	}
}
*/
int solve(char *s){
	int len = strlen(s),p =1;
	for(int i = 0;i < len;i ++){
		int c;
		if('A'<=s[i]&&s[i]<='Z')c = s[i]-'A';
		if('a'<=s[i]&&s[i]<='z')c = s[i]-'a'+26;
		else c = s[i] - '0' + 52;
		if(t[p][c] == 0)return 0;
		p = t[p][c];
	}
	return f[p];
}
int main(){
	int T;
	cin >> T;
	while(T--){
		scanf("%d%d",&n,&q);
		for(int i = 0;i <= tot;i ++)f[i] = 0;
		for(int i = 0;i <= tot;i ++)for(int j = 0;j <= 66;j ++)t[i][j] = 0;
		tot=1;
		for(int i = 1;i <= n;i ++){
			scanf("%s",str);
			Insert(str);
		}
		for(int i = 1;i <= q;i ++){
			scanf("%s",str);
			ans = solve(str);
			printf("%d\n",ans);
		}
	}
	return 0;
}

大佬帮调一下吧,谢谢!

2022/5/3 18:49
加载中...