zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    pgpoolII3.1 的内存泄漏(二)
    iOS 开发的一些网址
    ios开发必备第三方库
    iOS截屏方法
    ios开发第三方库cocoapods安装
    iOS开发知识点总结
    iOS开发文件夹Copy items if needed
    iOS开源库最全的整理
    iOS图标抖动效果
    iOS 加密的3种方法
  • 原文地址:https://www.cnblogs.com/tanhehe/p/2919441.html
Copyright © 2011-2022 走看看