蒟蒻求助,52分,3、4、5TLE
查看原帖
蒟蒻求助,52分,3、4、5TLE
1128376
hh1812827楼主2023/11/2 23:00
#include<iostream>
using namespace std;

const int N = 3000100;
int son[N][63], cnt[N], idx;

int getNum(char c)
{
	int t = (int)c;
	if (t >= 48 && t <= 57) return t - 48;
	if (t >= 65 && t <= 90) return t - 65+10;
	if (t >= 97 && t <= 122)return t - 97+36;
 }

void insert(const string& str)
{
	int p = 0;
	for (int i = 0; i<str.size(); i++)
	{
		int t = getNum(str[i]);
		if (!son[p][t]) son[p][t] = ++idx;
		p = son[p][t];
		cnt[p]++;
	}
}

int find(const string& str)
{
	int p = 0;
	for (int i = 0; i < str.size(); i++)
	{
		int t = getNum(str[i]);
		if (!son[p][t]) return 0;
		p = son[p][t];
	}
	return cnt[p];
}

int main()
{
	cin.tie(0);
	cout.tie(0);
	int T;
	cin >> T;
	int n,q;
	string str;
	for (int i = 0; i < T; i++)
	{
		cin >> n >> q;
		for (int j = 0; j < n; j++)
		{
			cin >> str;
			insert(str);
		}
		for (int j = 0; j < q; j++)
		{
			cin >> str;
			cout << find(str) << endl;
		}
		for (int i = 0; i <= idx; i++)
		{
			cnt[i] = 0;
			for (int j = 0; j <= 62; j++)
			{
				son[i][j] = 0;
			}
		}
	}

	return 0;
}
2023/11/2 23:00
加载中...