字典树模板RE求调悬棺
查看原帖
字典树模板RE求调悬棺
616964
Adolfo_North楼主2023/8/24 20:28
#include<bits/stdc++.h>
using namespace std;
int cnt[70],tr[3000001][70],tot;
int cal(char x){
	if(x>='A'&&x<='Z')
        return x-'A';
    else if(x>='a'&&x<='z')
        return x-'a'+26;
    else
        return x-'0'+52;
//	return a>='A'&&a<='Z'?a-'A':a>='a'&&a<='z'?a-'a'+26:a-'0'+52;
}
void build(string a){
	int u=0,sa=a.size();
	for(int i=0;i<sa;i++){
		int x=cal(a[i]);
		if(!tr[u][x]) tr[u][x]=++tot;
		u=tr[u][x];
		cnt[u]++;
	}
}
int query(string a){
	int u=0,sa=a.size();
	for(int i=0;i<sa;i++){
		int x=cal(a[i]);
		if(!tr[u][x]) return 0;
		u=tr[u][x];
	}
	return cnt[u];
}
int main(){
//	freopen("P8306_1.in","r",stdin);
//	freopen("ans.out","w",stdout);
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	int T;
	cin>>T;
	while(T--){
		for(int i=0;i<=tot;i++)	for(int j=0;j<=65;j++) tr[i][j]=0;
		for(int i=0;i<=tot;i++) cnt[i]=0;
		tot=0;
		int n,m;
		cin>>n>>m;
		string a;
		for(int i=1;i<=n;i++) cin>>a,build(a);
		for(int i=1;i<=m;i++) cin>>a,cout<<query(a)<<'\n';
	}
	return 0;
}
2023/8/24 20:28
加载中...