52pts求调
查看原帖
52pts求调
1162860
bhbffm35429楼主2024/1/6 23:25

https://www.luogu.com.cn/record/142153918

#include<bits/stdc++.h>

using namespace std;

constexpr int MAXN = 3e6+5;

int trie[MAXN][63],idx,tcnt[MAXN];
char tmps[MAXN];

int change(char x){
	if(x>='0'&&x<='9') return x-'0';
	else if(x>='A'&&x<='Z') return x-'A'+10;
	else if(x>='a'&&x<='z') return x-'a'+36;
}

void tadd(const char *x){
	int tmp=0;
	int len = strlen(x);
	for(int i=0;i<len;i++){
		if(!trie[tmp][change(x[i])]) trie[tmp][change(x[i])] = ++idx;
		tmp=trie[tmp][change(x[i])];
		tcnt[tmp]++;
	}
}

int tfind(const char *x){
	int tmp=0;
	int len = strlen(x);
	for(int i=0;i<len;i++){
		if(!trie[tmp][change(x[i])]) return 0;
		tmp=trie[tmp][change(x[i])];
	}
	return tcnt[tmp];
}

int main(){
	int T;
	scanf("%d",&T);
	for(int t=1;t<=T;t++){
		for(int i=0;i<=idx;i++) tcnt[idx] = 0;
		for(int i=0;i<=idx;i++)
			for(int j=0;j<=62;j++)
				trie[i][j] = 0;
		idx=0;
		
		int n,m;
		scanf("%d%d",&n,&m);
		for(int i=1;i<=n;i++){
			scanf("%s",&tmps);
			tadd(tmps);
		}
		for(int i=1;i<=m;i++){
			scanf("%s",&tmps);
			printf("%d\n",tfind(tmps));
		}
	}
	return 0;
}
2024/1/6 23:25
加载中...