• HDU1305Immediate Decodability(字典树)


    题目链接

    解题报告:

    现在假定两个字符串A,B。 A的长度小于B。分两种情况,

    当B先输入时(即长的先输入),途经的结点的flag如果为1,即如果有小于B的单词,便为前缀。

    当A先输入时(即短的先输入),当建立到A的最后一个字符时, 如果该结点已存在,那么证明,已有一个以该字符为前缀的字符已经输入。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAXN 2
    
    typedef struct TrieNode{
        int flag;
        struct TrieNode *next[MAXN];
    }TrieNode;
    
    TrieNode *CreateTrieNode(){
        TrieNode *p;
        int i;
        p = (TrieNode *)malloc(sizeof(TrieNode));
        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] - '0';
            if(i == len-1 && p->next[k]) return 0;
            if(!p->next[k]) {p->next[k] = CreateTrieNode();}
    
            p = p->next[k];
            if(p->flag == 1) return 0;
        }
        p->flag = 1;
        return 1;
    }
    
    void ReleaseTrie(TrieNode *T){
        int i;
        for(i=0; i<MAXN; i++){
            if(T->next[i]) ReleaseTrie(T->next[i]);
            T->next[i] = NULL;
        }
        free(T);
    }
    
    int main(){
        TrieNode *T = NULL;
        int flag = 1, cnt=1;
        char s[20];
        while(gets(s)){
            if(strcmp(s, "9") == 0){
                if(flag) printf("Set %d is immediately decodable\n", cnt);
                else printf("Set %d is not immediately decodable\n", cnt);
    
                ReleaseTrie(T);
                T = NULL;
                flag = 1;
                cnt++;
                continue;
            }
            if(flag){
                if(!InsertTrie(&T, s)) flag = 0;
            }
        }
    
        return 0;
    }
  • 相关阅读:
    Hadoop
    Mapreduce
    ssh原理
    HDFS
    Centos
    创建jira插件
    新型的领导者是一名推动者,而不是一名发号施令者
    上善若水,虚怀若谷
    GoAhead 嵌入式web
    Eclipse基金会
  • 原文地址:https://www.cnblogs.com/tanhehe/p/2919441.html
Copyright © 2020-2023  润新知