作者:
asdypeij
,
2022-09-04 10:16:16
,
所有人可见
,
阅读 7
// Problem: P8306 【模板】字典树
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P8306
// Memory Limit: 512 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include <bits/stdc++.h>
using namespace std;
#define F(i,j,k) for (signed i=signed(j);i<=signed(k);i++)
#define endl '\n'
//#define int long long
int T;
struct trie{
struct trie_node{
int cnt=0;
unordered_map<char,int> c;
};
vector<trie_node> a={{}};
void insert(string s){
int node=0;
for(auto i:s) {
if(a[node].c.count(i)) node=a[node].c[i];
else a.push_back({}),a[node].c[i]=a.size()-1,
node=a.size()-1;
}
a[node].cnt++;
}
int get_node(string s){
int node=0,ans=0;
for(auto i:s){
if(a[node].c.count(i)) node=a[node].c[i],ans+=a[node].cnt;
else return ans;
}
return ans;
}
};
string rev(string s){
reverse(begin(s),end(s));
return s;
}
main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,q;
string s;
trie t;
cin>>n>>q;
F(i,1,n) cin>>s,t.insert(s);
F(i,1,q) cin>>s,cout<<t.get_node(s)<<endl;
return 0;
}