zoukankan      html  css  js  c++  java
  • SDUT1500Message Flood(字典树)

    题目链接

    结题报告:

    模板题。

    我用的动态分配内存。。每一组数据操作完都要释放内存。。否则的话。会Memory Limit Exceeded的。

    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAXN 26
    
    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;
    }
    
    void InsertTrie(TrieNode **T, char *s){
        TrieNode *p;
    
        if(!(p = (*T))) p = (*T) = CreateTrieNode();
    
        int i=0, k;
        for(i=0; s[i]; i++){
            if(s[i]>='A' && s[i] <= 'Z') k = s[i] -'A'; //大小写不敏感
            else k = s[i] - 'a';
    
            if(!p->next[k]) p->next[k] = CreateTrieNode();
    
            p = p->next[k];
        }
        p->flag = 1;
    }
    
    int SearchTrie(TrieNode *T, char *s){
        TrieNode *p;
        if(!(p = T)) return 0;
    
        int i, k;
        for(i=0; s[i]; i++){
            if(s[i] >= 'A' && s[i] <= 'Z') k = s[i] - 'A';
            else k = s[i] - 'a';
    
            if(!p->next[k]) return 0;
    
            p = p->next[k];
        }
        if(p->flag){p->flag = 0; return 1;}
        else return 0;
    }
    
    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;
        int n, m, i, cnt;
        char s[20];
        while(scanf("%d", &n) == 1 && n != 0){
            scanf("%d", &m);
            cnt = 0; T = NULL;
            for(i=0; i<n; i++){
                scanf("%s", s);
                InsertTrie(&T, s);
                cnt++;
            }
            for(i=0; i<m; i++){
                scanf("%s", s);
                if(SearchTrie(T, s)) cnt--;
            }
            printf("%d\n", cnt);
            ReleaseTrie(T);
        }
    
        return 0;
    }
  • 相关阅读:
    GET和POST区别
    es索引介绍
    前端 用法记录
    axios 使用
    react技巧 学习
    vuex 学习笔记
    fetch 学习笔记
    react-router 4.0 学习笔记
    react 学习笔记2
    react 学习笔记
  • 原文地址:https://www.cnblogs.com/tanhehe/p/2918099.html
Copyright © 2011-2022 走看看