zoukankan      html  css  js  c++  java
  • 统计难题

    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;
    }
    

  • 相关阅读:
    我的第一篇博客
    文献笔记5
    文献笔记4
    文献笔记8
    文献笔记6
    文献笔记10
    文献笔记7
    文献笔记1
    文献笔记2
    文献笔记3
  • 原文地址:https://www.cnblogs.com/hpustudent/p/2133905.html
Copyright © 2011-2022 走看看