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;
    }
  • 相关阅读:
    JQuery 入门学习附常用UI模块
    通过rsync+inotify实现数据实时备份同步
    JS DOM操作
    Django 模型
    Mysql进阶(二)
    python小demo-01: 线程池+多进程实现cpu密集型操作
    (转)flask的context机制
    (转)pythonC3线性算法
    python中的functools模块
    centos7+mysql5.7.11实现主从复制
  • 原文地址:https://www.cnblogs.com/tanhehe/p/2919671.html
Copyright © 2011-2022 走看看