84分倒数第二个测试点超时,求助
查看原帖
84分倒数第二个测试点超时,求助
632830
Mark_666楼主2024/7/2 15:44
#include <iostream>
#include <string.h>
using namespace std;
const int N = 3000005;
int n,m;
int trie[N][65], cnt[N], id;
string temp;
int ans;
int T;
char pd(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 insert(string s)
{
	int p = 0;
	for (int i = 0; i < s.size(); i++)
	{
		int x = pd(s[i]);
		if (trie[p][x] == 0) trie[p][x] = ++id;
		p = trie[p][x];
		cnt[p]++;
	}
	
}
int find(string s)
{
	int p = 0;
	for (int i = 0; i < s.size(); i++)
	{
		int x = pd(s[i]);
		if (trie[p][x] == 0) return 0;
		p = trie[p][x];
	}
	if (cnt[p]) return cnt[p];
	else return 0;
}
void init()
{
	for(int i=0;i<=id;i++)
		for(int j=0;j<65;j++)
			trie[i][j]=0;		
	memset(cnt,0,sizeof(cnt));
	id=0;
	ans=0;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>T;
	while(T--)
	{
		init();
		cin>>n>>m;
		for(int i=1;i<=n;i++)
		{
			cin>>temp;
			insert(temp);
		}
		for(int i=1;i<=m;i++)
		{
			cin>>temp;
			cout<<find(temp)<<'\n';
		}
	}
	
	
	return 0;
}
2024/7/2 15:44
加载中...