Advertisement
tien_noob

Trie

Jul 17th, 2021
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. //Make CSP great again
  2. #include <bits/stdc++.h>
  3. #define TASK "TESTCODE"
  4. using namespace std;
  5. struct Trie
  6. {
  7.     struct node
  8.     {
  9.         int num; // Số từ đi qua nút đó
  10.         int index; // Địa chỉ
  11.         int w_count; // Số từ kết thúc tại đây
  12.         int child[26]; // các nút con
  13.     };
  14.     vector<node> Tree;
  15.     void new_node()
  16.     {
  17.         node tmp;
  18.         tmp.num = 0;
  19.         tmp.w_count = 0;
  20.         tmp.index = Tree.size();
  21.         for (int i = 0; i < 26; ++ i)
  22.         {
  23.             tmp.child[i] = -1;
  24.         }
  25.         Tree.push_back(tmp);
  26.     }
  27.     void add_word(const string &s)
  28.     {
  29.         int id = 0;
  30.         for (int i = 0; i < s.length(); ++ i)
  31.         {
  32.             ++Tree[id].num;
  33.             int w = s[i] - 'a';
  34.             if (Tree[id].child[w] == -1)
  35.             {
  36.                 new_node();
  37.                 Tree[id].child[w] = Tree.size() - 1;
  38.             }
  39.             id = Tree[id].child[w];
  40.         }
  41.         ++Tree[id].num;
  42.         ++Tree[id].w_count;
  43.     }
  44.     int Index(const string & s)
  45.     {
  46.         int id = 0;
  47.         for (int i = 0; i < s.length(); ++ i)
  48.         {
  49.             int w = s[i] - 'a';
  50.             if(Tree[id].child[w] == -1)
  51.             {
  52.                 return -1;
  53.             }
  54.             id = Tree[id].child[w];
  55.         }
  56.         return id;
  57.     }
  58. };
  59. Trie Test;
  60. string s;
  61. int n;
  62. void read()
  63. {
  64.    Test.new_node();
  65.    cin >> n;
  66.    for (int i = 1; i <= n; ++ i)
  67.    {
  68.        cin >> s;
  69.        Test.add_word(s);
  70.        cout << Test.Index(s) << '\n';
  71.    }
  72. }
  73. void solve()
  74. {
  75.  
  76. }
  77. int main()
  78. {
  79.     ios_base::sync_with_stdio(false);
  80.     cin.tie(nullptr);
  81.     //freopen(TASK".INP", "r", stdin);
  82.     //freopen(TASK".OUT", "w", stdout);
  83.     int t = 1;
  84.     bool typetest = false;
  85.     if (typetest)
  86.     {
  87.         cin >> t;
  88.     }
  89.     for (int __ = 1; __ <= t; ++ __)
  90.     {
  91.         read();
  92.         solve();
  93.     }
  94. }
  95.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement