RE #1~#5 求调
查看原帖
RE #1~#5 求调
933802
ICU152_lowa_IS8楼主2024/3/1 22:41
#include<bits/stdc++.h>
#define int long long
using namespace std;
int sp(char x){
	if(x>='A'&&x<='Z')return x-'A';
	else return x-'a'+26;
}
int id;
int cnt[3000005];
int trie[3000005][55];
void ins(string s){
	int len=s.length();
	int now=0;
	for(int i=0;i<len;i++){
		if(!trie[now][sp(s[i])]){
			trie[now][sp(s[i])]=++id;
		}
		now=trie[now][sp(s[i])];
		cnt[now]++;
	}
}
int query(string s){
	int len=s.length();
	int now=0;
	for(int i=0;i<len;i++){
		if(!trie[now][sp(s[i])]){
			return 0;
		}
		now=trie[now][sp(s[i])];
	}
	return cnt[now];
}
signed main(){
	int t;
	cin>>t;
	while(t--){
		int n,q;
		cin>>n>>q;
		for(int i=0;i<=id;i++){
			for(int j=0;j<=54;j++){
				trie[i][j]=0;
			}
		}
		memset(cnt,0,sizeof(cnt));
		id=0;
		for(int i=1;i<=n;i++){
			string s;
			cin>>s;
			ins(s);
		}
		while(q--){
			string m;
			cin>>m;
			cout<<query(m)<<endl;
		}
	}
	return 0;
}

2024/3/1 22:41
加载中...