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;
    }
  • 相关阅读:
    通过socket,实现简易版的通讯
    控制台报错[WDS] Disconnected!
    js里面可以提升性能的有哪些方法
    构造函数与普通函数的区别
    事件循环(event loop)
    二维数组的创建以及简单举例
    es5数组的api(了解)
    字符串的api (基础)
    git常用命令
    连接MongoDB失败,处理办法
  • 原文地址:https://www.cnblogs.com/tanhehe/p/2919441.html
Copyright © 2011-2022 走看看