zoukankan      html  css  js  c++  java
  • HDU1247Hat’s Words(字典树)

    题目链接

    解题报告:

    静态分配是比动态分配省时的。

    静态分配耗时:

    动态分配耗时:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAXN 26
    
    typedef struct TrieNode{
        int flag;
        struct TrieNode *next[MAXN];
    }TrieNode;
    
    TrieNode mem[500000];
    int pn;
    
    TrieNode *CreateTrieNode(){
        TrieNode *p;
        int i;
        p = &mem[pn++];
        p->flag = 0;
        for(i=0; i<MAXN; i++) p->next[i] = NULL;
        return p;
    }
    
    int InsertTrie(TrieNode **T, char *s){
        TrieNode *p;
    
        if(!(p = (*T))) p = (*T) = CreateTrieNode();
        int i=0, k, len;
        len = strlen(s);
        for(i=0; i<len; i++){
            k = s[i] - 'a';
    
            if(!p->next[k]) {p->next[k] = CreateTrieNode();}
    
            p = p->next[k];
        }
        p->flag = 1;
        return 1;
    }
    
    int SearchTrie(TrieNode *T, char *s){
        TrieNode *p;
        if(!(p = T)) return 0;
    
        int i, k;
        for(i=0; s[i]; i++){
            k = s[i] - 'a';
    
            if(!p->next[k]) return 0;
    
            p = p->next[k];
        }
        if(p->flag) return 1;
        else return 0;
    }
    
    char str[120010][20];
    
    int main(){
        TrieNode *T = NULL, *p;
        int n=0, i, j, len;
        while(scanf("%s", str[n]) == 1){InsertTrie(&T, str[n]); n++;}
    
        for(i=0; i<n; i++){
            len = strlen(str[i]);
            if(len < 2) continue;
            p = T;
            char *s = str[i];
            for(j=0; j<len-1; j++){
                int k = s[j] - 'a';
                p = p->next[k];
                if(p->flag){
                    if(SearchTrie(T, s+j+1)){
                        printf("%s\n", str[i]);
                        break;
                    }
                }
            }
        }
    
        return 0;
    }
  • 相关阅读:
    Sql中使用With创建多张临时表
    sql(join on 和where的执行顺序)
    什么是正则化
    ETL讲解(转)
    MySQL等 SQL语句在线练习
    Sublime text 3 --html
    Sublime text 3 搭建Python3 IDE
    地区列车经过查询
    Lasso回归算法: 坐标轴下降法与最小角回归法小结
    完全卸载VMware
  • 原文地址:https://www.cnblogs.com/tanhehe/p/2919671.html
Copyright © 2011-2022 走看看