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;
    }
  • 相关阅读:
    【面积并】 Atlantis
    【动态前k大 贪心】 Gone Fishing
    【复杂枚举】 library
    【双端队列bfs 网格图建图】拯救大兵瑞恩
    【奇偶传递关系 边带权】 奇偶游戏
    【权值并查集】 supermarket
    CF w4d3 A. Pythagorean Theorem II
    CF w4d2 C. Purification
    CF w4d2 B. Road Construction
    CF w4d2 A. Cakeminator
  • 原文地址:https://www.cnblogs.com/tanhehe/p/2918099.html
Copyright © 2011-2022 走看看