MnZn求助字典树
查看原帖
MnZn求助字典树
594848
djfuck楼主2022/11/25 16:40
#include<bits/stdc++.h> 
using namespace std;
//#define int long long
int read()
{
	int x=0,f=1;
	char ch=getchar();
	while((ch>57||ch<48)&&ch!=45) ch=getchar();
	if(ch==45) f=-1,ch=getchar();
	while(ch>=48&&ch<=57) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	return x*f;
}
void print2(int x)
{
	if(x>9) print2(x/10);
	putchar((x%10)^48);
} 
void print(int x)
{
	if(x<0) putchar(45),x=-x;
	print2(x);
} 
int trie[4000500][65];
int t(char x)
{
	if('a'<=x&&x<='z') return x-'a'+1;
	if('A'<=x&&x<='Z') return x-'A'+27;
	else return x-'0'+53;
}
signed main()
{
	cin.tie(0),cout.tie(0),ios::sync_with_stdio(0);
	int T;cin>>T;
	while(T--)
	{
		int n,m;cin>>n>>m;
		memset(trie,0,sizeof(trie));
		while(n--)
		{
			string s;
			cin>>s;
			s=" "+s;
			int x=0;
			for(int i=1;i<s.size();++i)
			{
				if(trie[x][t(s[i])]==0) trie[x][t(s[i])]=++trie[0][0];
				x=trie[x][t(s[i])];
				++trie[x][0];
			}
		} 
		while(m--)
		{
			string s;
			cin>>s;
			s=" "+s;
			int x=0,ok=1;
			for(int i=1;i<s.size();++i)
			{
				if(trie[x][t(s[i])]==0) 
				{
					puts("0");
					ok=0;
					break;
				}
				x=trie[x][t(s[i])];
			}
			if(ok) cout<<trie[x][0]<<endl;
		}
	} 
	return 0;
}

RT,谢谢各位巨佬喵。

2022/11/25 16:40
加载中...