Morass

SONGMAN-INDEXING

Sep 9th, 2016
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.10 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. using LINT = long long int;
  5. using PII = pair<int,int>;
  6.  
  7. #define PB push_back
  8. #define FI first
  9. #define SE second
  10. #define REP(i,n) for(int i=0;i<(n);++i)
  11. #define FOR(i, a, b) for(int i=(a);i<(b);++i)
  12.  
  13. int n,q;
  14.  
  15. struct Node{
  16.     int cnt;
  17.     Node* children[27];
  18.     Node(){
  19.         cnt=0;
  20.         memset(children,0,sizeof children);
  21.     }
  22. };
  23.  
  24. Node * root = new Node();
  25.  
  26. void insert(Node ** node, const string & s, int idx){
  27.     if(*node==nullptr)
  28.         *node = new Node();
  29.  
  30.     if(idx>=s.size()){
  31.         (*node)->cnt++;
  32.         return;
  33.     }
  34.  
  35.     (*node)->cnt++;
  36.     insert(&((*node)->children[s[idx]-'a']), s, idx+1);
  37. }
  38.  
  39. int query(Node * node, const string & s, int idx){
  40.     if(idx>=s.size())return node->cnt;
  41.     if(node->children[s[idx]-'a']==nullptr)return 0;
  42.     return query(node->children[s[idx]-'a'],s,idx+1);
  43. }
  44.  
  45. int main() {
  46.     cin>>n>>q;
  47.     REP(i,n){
  48.         string s;cin>>s;
  49.         insert(&root,s,0);
  50.     }
  51.     REP(i,q){
  52.         string s;cin>>s;
  53.         cout<<query(root,s,0)<<endl;
  54.     }
  55.  
  56.  
  57.     return 0;
  58. }
Add Comment
Please, Sign In to add comment