trie re1-4 求助
查看原帖
trie re1-4 求助
226167
呆呆的她啊楼主2024/3/30 15:41
#include<bits/stdc++.h>
#define int long long 
#define endl '\n'
using namespace std;
const int range=3e6+10;
int n;
string s;
int q;
int cnt[range];
char ch[range][70];
int idx=0;
int get(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;		
}
void jianli(string s)
{
	int p=0;
	for(int i=0;i<=s.size()-1;i++)
	{
		int x=get(s[i]);
		if(ch[p][x]==0){
			ch[p][x]=++idx;
		}
		p=ch[p][x];	cnt[p]++;
	}
	return ;
}
int query(string s)
{
	int p=0;
	for(int i=0;i<=s.size()-1;i++)
	{
	    int j=get(s[i]);
		if(!ch[p][j])return 0;
		p=ch[p][j];
	}
  return cnt[p];
}
void solve()
{
  for(int i=0;i<=idx;i++)
  {	cnt[i]=0;
	  for(int j=0;j<=119;j++)ch[i][j]=0;
	  	
}
	idx=0;
	cin>>n>>q;
	for(int i=1;i<=n;i++)
	{
	cin>>s;
	jianli(s);
	}
	while(q--)
	{
		cin>>s;
		cout<<query(s)<<endl;
	}
}
signed main()
{  
	int t;  cin>>t;
	ios::sync_with_stdio();
	cin.tie(0);
	cout.tie(0);
	while(t--)solve();
	return 0;
	
	
} 
2024/3/30 15:41
加载中...