36ptsTLE
查看原帖
36ptsTLE
703319
Sylvia_starx楼主2023/6/30 16:07
#include<bits/stdc++.h>
using namespace std;
const int N = 3e6 + 5;
int trie[N][65],cnt[N];
int n,m,t,tot;
string s;
int convert(char c)
{
	if(c >= 'a' && c <= 'z')
		return c - 'a';
	else if(c >= 'A' && c <= 'Z')
		return c - 'A' + 26;
	else
		return c - '0' + 52;
	return 0;
}
void insert(string s)
{
	int u=0,len=s.size();
	for(int i=0;i<len;i++)
	{
		int c = convert(s[i]);
		if(trie[u][c] == 0)
			trie[u][c] = ++tot;
		u = trie[u][c];
		cnt[u]++;
	}
	return;
}
int search(string s)
{
	int u=0,len=s.size(),ans=0;
	for(int i=0;i<s.size();i++)
	{
		int c = convert(s[i]);
		if(trie[u][c] == 0)
			return 0;
		u = trie[u][c];
	}
	ans += cnt[u];
	return ans;
}
int main()
{
	cin>>t;
	while(t--)
	{
		memset(trie,0,sizeof(trie));
		memset(cnt,0,sizeof(cnt));
		cin>>n>>m;
		for(int i=1;i<=n;i++)
		{
			string t;
			cin>>t;
			insert(t);
		}
		for(int i=1;i<=m;i++)
		{
			cin>>s;
			cout<<search(s)<<"\n";
		}
	}
	return 0;
}
2023/6/30 16:07
加载中...