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;
    }
  • 相关阅读:
    编译和和运行amor
    用好C语言的中库,系统错误的处理
    C语言中的宏
    时隔多年,再次实现的链表
    脚本更改桌面背景
    python爬虫 一个security的RSA加密爬虫
    mysql 8.0版本
    mysql5.7的并行复制
    kinshard中间件问题
    Springboot2-@Transactional 事务不生效
  • 原文地址:https://www.cnblogs.com/tanhehe/p/2919441.html
Copyright © 2011-2022 走看看