• 【数据结构】Trie


    struct TrieNode {
        int cnt;
        int nxt[26];
    
        void Init() {
            cnt = 0;
            memset(nxt, 0, sizeof(nxt));
        }
    };
    
    struct Trie {
    
        static const int MAXN = 4000000;
        TrieNode tn[MAXN + 5];
        int root, top;
    
        int NewNode() {
            tn[++top].Init();
            return top;
        }
    
        void Init() {
            top = 0;
            root = NewNode();
        }
    
        void Insert(char *a, int id) {
            int n = strlen(a + 1), cur = root;
            for(int i = 1; i <= n; ++i) {
                int &nxt = tn[cur].nxt[a[i] - 'a'];
                if(!nxt)
                    nxt = NewNode();
                cur = nxt;
            }
            tn[cur].cnt = id;
        }
    
        int Query(char *a) {
            int n = strlen(a + 1), cur = root;
            for(int i = 1; i <= n; ++i) {
                int &nxt = tn[cur].nxt[a[i] - 'a'];
                if(!nxt)
                    return 0;
                cur = nxt;
            }
            return tn[cur].cnt;
        }
    
    } trie;
    
  • 相关阅读:
    使用高精度计算斐波那契数列 c++
    纪中9日T4 2298. 异或
    洛谷 P1416 攻击火星
    线段树小结
    纪中5日T3 1566. 幸运锁(lucky.pas/c/cpp)
    Title
    Title
    Title
    Title
    Title
  • 原文地址:https://www.cnblogs.com/purinliang/p/14265186.html
Copyright © 2020-2023  润新知