• Message Flood SDUT 1500


    链接 :http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1500

    题目大意 : 先输入N个字符串,再输入M个字符串,统计一下N个中有多少个为在M个出现。注意转换大小写。

    时间  110MS  内存  1474KB

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <cstdlib>
    #include <cmath>
    
    using namespace std;
    
    struct N
    {
        char b[11];
        bool m;
        struct N *l,*r;
    };
    
    N *creat()
    {
        N *p = (N *)malloc(sizeof(N));
        p->l = p->r = NULL;
        p->m = false;
        return p;
    }
    
    void insert(char *t,N *root)
    {
        if(strcmp(t,root->b) > 0)
        {
            if(root->l == NULL)
            {
                N *p = creat();
                strcpy(p->b,t);
                root->l = p;
                return ;
            }
            else
            {
                insert(t,root->l);
            }
        }
        else if(strcmp(t,root->b) < 0)
        {
            if(root->r == NULL)
            {
                N *p = creat();
                strcpy(p->b,t);
                root->r = p;
                return ;
            }
            else
            {
                insert(t,root->r);
            }
        }
        else return;
    }
    
    bool check(char *s,N *root)
    {
        if(root == NULL)
            return false;
    
        if(strcmp(s,root->b) == 0)
        {
            if(root->m == false)
            {
                root->m = true;
                return true;
            }
            else return false;
        }
    
        if(strcmp(s,root->b) > 0)
        {
            return(check(s,root->l));
        }
        else if(strcmp(s,root->b) < 0)
        {
            return(check(s,root->r));
        }
    }
    
    void low(char *s)
    {
        for(int i = 0;s[i] != ''; i++)
        {
            if('A' <= s[i] && s[i] <= 'Z')
                s[i] += 32;
        }
    }
    
    void qk(N *root)
    {
        if(root == NULL)
            return ;
        qk(root->l);
        qk(root->r);
        free(root);
    }
    
    int main()
    {
        int n,m,sum;
        int i;
        char t[11];
    
        while(cin>>n && n)
        {
    
            cin>>m;
    
            struct N *root = creat();
            if(n)
                cin>>root->b;
    
            low(root->b);
    
            for(i = 1;i < n; i++)
            {
                cin>>t;
                low(t);
                insert(t,root);
            }
    
            for(sum = 0,i = 0;i < m; i++)
            {
                cin>>t;
                low(t);
                if(check(t,root))
                    sum++;
            }
    
            cout<<n-sum<<endl;
            qk(root);
        }
        return 0;
    }
    

      

  • 相关阅读:
    Mybatis学习(2)原始dao开发和使用mapper接口代理开发
    Mybatis学习(1)
    Leetcode | Merge Intervals
    GDB打印STL容器内容
    LeetCode | Max Points on a Line
    最长不减子序列【转】
    LeetCode | Evaluate Reverse Polish Notation
    LeetCode | Word Ladder II
    LeetCode | Valid Number
    LeetCode | Set Matrix Zeroes
  • 原文地址:https://www.cnblogs.com/zmx354/p/3160341.html
Copyright © 2020-2023  润新知