zoukankan      html  css  js  c++  java
  • hdu2027 trie树 字典树模板

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <sstream>
    using namespace std;
    
    #define Max 26
    
    const int maxn=100000;
    
    typedef struct TrieNode{
        int nCount;//根据需要改变
        struct TrieNode *next[Max];
    }TrieNode;
    
    TrieNode *root=NULL;
    
    int allcop=0,ans,flag;
    
    TrieNode memory[maxn];
    
    TrieNode *CreatTrieNode(){
         TrieNode *temp=&memory[allcop++];
         temp->nCount=0;
         for(int i=0;i<Max;i++) temp->next[i]=NULL;
         return temp;
    }
    
    void InsertTrie(TrieNode **pRoot,char *str){
          TrieNode *temp=*pRoot;
          int i=0,k;
          while(str[i]){
            k=str[i]-'a';
            if(temp->next[k]){
                    //temp->next[k]->nCount++;
            } else temp->next[k]=CreatTrieNode();
            temp=temp->next[k];
            i++;
          }
          temp->nCount++;
    }
    
    int SearchTrie(TrieNode *root,char *str){
        if(root==NULL) return 0;
        TrieNode *temp=root;
          int i=0,k;
          while(str[i]){
            k=str[i]-'a';
            if(temp->next[k]){
                    temp=temp->next[k];
            } else return 0;
            i++;
          }
          return temp->nCount;
    }
    
    void Traverse(TrieNode *root){
         for(int i=0;i<Max;i++){
            if(root->next[i]){
                    if(root->next[i]->nCount>0) ans++;
                    Traverse(root->next[i]);
            }
         }
    }
    
    char str[1010];
    
    void init(){
      ans=0;
      flag=0;
      allcop=0;
      memset(memory,0,sizeof(memory));
      root=CreatTrieNode();
    }
    
    int main()
    {
        while(1){
            init();
            string line;
            getline(cin,line);
            stringstream ss(line);
            while(ss>>str) {
            if(str[0]=='#') {
                    flag=1;
                    break;
            }
            InsertTrie(&root,str);
            }
            if(flag) break;
            Traverse(root);
            printf("%d
    ",ans);
        }
        return 0;
    }

    输入方式值得学习

  • 相关阅读:
    多表代换密码
    仿射变换
    LeetCode实战练习题目
    13.线性同余方程 扩展欧几里得算法
    12.扩展欧几里得算法
    11.快速幂求逆元
    10.快速幂
    9.筛法求欧拉函数
    8.欧拉函数
    7.最大公约数 欧几里得算法,也叫辗转相除法
  • 原文地址:https://www.cnblogs.com/GeniusYang/p/5547815.html
Copyright © 2011-2022 走看看