Qianmo_su @ 2023-03-02 20:09:49
#include <bits/stdc++.h>
using namespace std;
const int N = 3e6+10;
int t[N][65],cnt[N],id,n,q,m;
string str;
//字符转化成为ASCII码
int getnum(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 = getnum(s[i]);
if(t[p][x] == 0) t[p][x] = id++;
p = t[p][x];
cnt[p]++;
}
}
//查询
int find(string s)
{
int p = 0;
for(int i=0;i<s.size();i++)
{
int x = getnum(s[i]);
//没有找到
if(t[p][x] == 0) return 0;
p = t[p][x];
}
return cnt[p];
}
int main()
{
cin >> m;
while(m--)
{
memset(t,0,sizeof(t));
memset(cnt,0,sizeof(cnt));
id = 0;
cin >> n >> q;
for(int i=1;i<=n;i++)
{
cin >> str;
insert(str);
}
for(int i=1;i<=q;i++)
{
cin >> str;
cout << find(str) << endl;
}
}
return 0;
}
by __QHY__ @ 2023-03-02 20:19:53
您的代码开O2会WA#1与#6,TLE其它点。
建议您改一下代码。(代码有点长,懒得看。。。)