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;
    }
  • 相关阅读:
    L1-046. 整除光棍
    判断素数
    L1-025. 正整数A+B
    L1-023. 输出GPLT
    L1-020. 帅到没朋友
    L1-016. 查验身份证
    L1-011. A-B
    UVa 400 Unix Is命令
    Uva 136 丑数
    The Preliminary Contest for ICPC Asia Xuzhou 2019 K. Center
  • 原文地址:https://www.cnblogs.com/tanhehe/p/2919671.html
Copyright © 2011-2022 走看看