zoukankan      html  css  js  c++  java
  • HDOJ 1251 统计难题(trie树入门)

    题意:

    对于每个提问,给出以该字符串为前缀的单词的数量.

    思路:

    字典树。

    #include <iostream>
    using namespace std;
    
    struct node {
        int w;
        int child[26];
    } trie[1000010];
    
    int size = 0;
    
    void Insert(char* word, int i, int rt)
    {
        if (!word[i])
            return ;
    
        int m = word[i] - 'a';
        if (trie[rt].child[m])
        {
            trie[trie[rt].child[m]].w += 1;
            Insert(word, i + 1, trie[rt].child[m]);
        }
        else
        {
            trie[rt].child[m] = ++size;
            trie[trie[rt].child[m]].w += 1;
            Insert(word, i + 1, size);
        }
    }
    
    int Query(char* word, int i, int rt)
    {
        if (!word[i])
            return trie[rt].w;
    
        int m = word[i] - 'a';
        if (trie[rt].child[m])
            return Query(word, i + 1, trie[rt].child[m]);
        else
            return 0;
    }
    
    int main()
    {
        char word[12];
        while (gets(word) && word[0])
            Insert(word, 0, 0);
    
        while (gets(word))
            printf("%d\n", Query(word, 0, 0));
    
        return 0;
    }
  • 相关阅读:
    四则运算(web)
    二维数组
    java (数组)
    GitHub
    PSP(第四周)
    四则运算三
    PSP表(第三周)
    软件需求阅读笔记02
    软件需求阅读笔记01
    Android开发进度06
  • 原文地址:https://www.cnblogs.com/kedebug/p/2872287.html
Copyright © 2011-2022 走看看