Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using LINT = long long int;
- using PII = pair<int,int>;
- #define PB push_back
- #define FI first
- #define SE second
- #define REP(i,n) for(int i=0;i<(n);++i)
- #define FOR(i, a, b) for(int i=(a);i<(b);++i)
- int n,q;
- struct Node{
- int cnt;
- Node* children[27];
- Node(){
- cnt=0;
- memset(children,0,sizeof children);
- }
- };
- Node * root = new Node();
- void insert(Node ** node, const string & s, int idx){
- if(*node==nullptr)
- *node = new Node();
- if(idx>=s.size()){
- (*node)->cnt++;
- return;
- }
- (*node)->cnt++;
- insert(&((*node)->children[s[idx]-'a']), s, idx+1);
- }
- int query(Node * node, const string & s, int idx){
- if(idx>=s.size())return node->cnt;
- if(node->children[s[idx]-'a']==nullptr)return 0;
- return query(node->children[s[idx]-'a'],s,idx+1);
- }
- int main() {
- cin>>n>>q;
- REP(i,n){
- string s;cin>>s;
- insert(&root,s,0);
- }
- REP(i,q){
- string s;cin>>s;
- cout<<query(root,s,0)<<endl;
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment