• 统计难题


    hdoj1251

    题目大意: 求出以某字符串为前缀的单词的数量

    解决:trie树 

    #include <iostream>
    #include <cstring>
    using namespace std;
    struct node
    {
        int cnt;
        int next[26];
    };
    node trie[3000000];
    int top=0;
    void init()
    {//初始化字典树,0号为根节点,只需将next值置为0就行了
       memset(trie[0].next,0,sizeof(trie[0].next));
        top=1;
    }
    
    void insert(char *str)
    {
        int i=0,id;//i为根节点
        while(*str)
        {
            id=*str-'a';
            if(trie[i].next[id]==0)
            {//若为空,开辟新空间,并初始化新空间
                trie[i].next[id]=top;
                trie[top].cnt=1;
                memset(trie[top].next,0,sizeof(trie[top].next));
                top++;
                i=trie[i].next[id];
            }
            else 
            {//若不空,指向下一个地址,并对下一个地址的元素操作
                i=trie[i].next[id];
                trie[i].cnt++;
            }
            str++;
        }
    }
    
    int search(char *str)
    {
        int i=0,id;
        while(*str)
        {
            id=*str-'a';
            if(trie[i].next[id]==0)return 0;
            i=trie[i].next[id];
            str++;
        }
        return trie[i].cnt;
    }
    
    int main()
    {
        char str[15];
        init();
        while(gets(str),strcmp(str,"")!=0)insert(str);
        while(~scanf("%s",str))printf("%d\n", search(str));
     //   system("pause");
        return 0;
    }
    

  • 相关阅读:
    Course Schedule II
    Vim笔记
    python programming
    暴风电视刷机教程
    python asyncio
    sqlalchemy lock and atomic
    rust学习(二)
    rust-vmm 学习(二)
    e3s10 网络管理
    打造VIM成为IDE - nerdtree
  • 原文地址:https://www.cnblogs.com/hpustudent/p/2133905.html
Copyright © 2020-2023  润新知