zoukankan      html  css  js  c++  java
  • [字典树入门] HDOJ 1251 统计难题

    不需要保存是否结束(isend),在插入时每经过一个节点,将该节点的计数器 +1,在查找时输出最后一个字符所在节点的cnt值即可;
    PS:为什么加了删除树(del_Trie)会超时呢?

    # include <cstdio>
    # include <cstring>
    
    # define LEN 10 + 1
    
    struct node
    {
        int cnt;
        node * next[26];
        node ()
        {
            cnt = 0;
            memset(next, 0, sizeof(next));
        }
    };
    
    void insert_Trie(node *root, char *s)
    {
        int c;
        node *p = root;
        for (int i = 0; s[i]; ++i)
        {
            c = s[i]-'a';
            if (p->next[c] == NULL) p->next[c] = new node;
            p = p->next[c];
            ++(p->cnt);
        }
    }
    
    void build_Trie(node *root)
    {
        char s[LEN];
        while (gets(s) , strcmp(s, ""))
        {
            insert_Trie(root, s);
        }
    }
    
    void del_Trie(node *p)
    {
        for (int i = 0; i < 26; ++i)
            if (p->next[i]) del_Trie(p->next[i]);
        del_Trie(p);
    }
    
    int search(node *root, char *s)
    {
        int c;
        node *p = root;
        for (; *s; ++s)
        {
            c = *s-'a';
            if (p->next[c]) p = p->next[c];
            else return 0;
            if ((*(s+1)) == 0) return p->cnt;
        }
        return 0;
    }
    
    void solve(void)
    {
        char s[LEN];
        node *root = new node;
        build_Trie(root);
        while (gets(s) != NULL)
        {
            int ans = search(root, s);
            printf("%d\n", ans);
        }
        //del_Trie(root);     //TLE 
    }
    
    int main()
    {
        solve();
    
        return 0;
    }
  • 相关阅读:
    凤凰架构-读书笔记
    《团队协作的五大障碍》笔记
    MongoDB基本操作命令一
    NBI可视化集成clickhouse,实现百亿级数据分析能力
    AI文本与图像数据集荟萃
    gitLab内网部署
    git管理子模块
    git基础使用
    linux内核数据结构之链表-再实现
    win10下安装linux子系统
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2624096.html
Copyright © 2011-2022 走看看