Sylvia_starx @ 2023-06-30 16:07:47
#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;
}
by Rosaya @ 2023-06-30 16:27:46
你的 memset
复杂度是
by Sylvia_starx @ 2023-06-30 16:33:31
@Rosaya
不memset还会TLE吗?有啥解决办法?qwq
by Sylvia_starx @ 2023-06-30 16:41:47
感觉不管怎样都会T
by Rosaya @ 2023-06-30 16:57:13
不 memset
不会 T,你可以手动清空。
by th_2023 @ 2023-07-02 11:43:47
@liaoxueyi 可以根据tot的值,手动将已用过的trie和cnt数组进行清空。