trie求调
查看原帖
trie求调
464732
luqyou楼主2023/2/23 16:18
#include<bits/stdc++.h> 
using namespace std;
const int maxn=3e6+10;
int t,n,q,trie[maxn][63],cnt,e[maxn];
int id(char c){
	if('a'<=c&&c<='z') return c-'a';
	else if('A'<=c&&c<='Z') return 26+c-'A';
	else return 52+c-'0';
}
void insert(string s){
	int len=s.size(),now=0;
	s=" "+s;
	for(int i=1;i<=len;i++){
		if(!trie[now][id(s[i])]){
			trie[now][id(s[i])]=++cnt;
		}
		now=trie[now][id(s[i])];
		e[now]++;
	}
}
int query(string s){
	int len=s.size(),now=0;
	s=" "+s;
	for(int i=1;i<=len;i++){
		if(trie[now][id(s[i])]){
			now=trie[now][id(s[i])];
		}
		else{
			return 0;
		}
	}
	return e[now];
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>t;
	while(t--){
		for(int i=1;i<=cnt;i++){
			for(int j=1;j<=63;j++){
				trie[i][j]=0; 
			}
		}
		for(int i=1;i<=cnt;i++){
			e[i]=0;
		}
		cnt=0;
		cin>>n>>q;
		for(int i=1;i<=n;i++){
			string s;
			cin>>s;
			insert(s);
		}
		for(int i=1;i<=q;i++){
			string s;
			cin>>s;
			cout<<query(s)<<endl;
		}
	}
	return 0;
}

2023/2/23 16:18
加载中...