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;
    }
  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    108. Convert Sorted Array to Binary Search Tree
    111. Minimum Depth of Binary Tree
    49. Group Anagrams
    使用MALTAB标定实践记录
    442. Find All Duplicates in an Array
    522. Longest Uncommon Subsequence II
    354. Russian Doll Envelopes
    opencv 小任务3 灰度直方图
    opencv 小任务2 灰度
  • 原文地址:https://www.cnblogs.com/tanhehe/p/2918099.html
Copyright © 2011-2022 走看看