• SDUT 1500 Message Flood trie树


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

    大意:输入几个字符串,然后再输入几个字符串,看第一次输入的字符串有多少没有在后面的字符串中出现(后输入的字符串不一定出现在之前的字符串中)

    代码:

    View Code
      1 #include <stdio.h>
      2 #include <string.h>
      3 #include <stdlib.h>
      4  struct node
      5 {
      6     int flag;
      7     struct node *next[27];
      8 };
      9 struct node *new_node()
     10 {
     11     struct node *p;
     12     p = (struct node *)malloc(sizeof(struct node));
     13     int i;
     14     for(i = 0;i < 27;i++)
     15     {
     16         p->next[i] = NULL;
     17     }
     18     p->flag = 0;
     19     return p;
     20 }
     21 void insert(struct node *rt,char *s)
     22 {
     23     struct node *p;
     24     p = rt;
     25     int t,i;
     26     for(i = 0;s[i] != '\0';i++)
     27     {
     28         if(s[i] >= 'A' && s[i] <= 'Z')
     29         s[i] =s[i]-'A'+'a';
     30         t = s[i]-'a';
     31         if(p->next[t] == NULL)
     32         p->next[t] = new_node();
     33         p = p->next[t];
     34     }
     35     p->flag = 1;
     36 
     37 }
     38 
     39 int search(struct node *rt,char s[])
     40 {
     41     int i;
     42     struct node *p;
     43     p = rt;
     44     for(i = 0; s[i] != 0;i++)
     45     {
     46         if(s[i] >= 'A' && s[i] <= 'Z')
     47         s[i]+=32;
     48         int t;
     49         t = s[i]- 'a';
     50         if(p->next[t] == NULL)
     51             return 0;
     52         p = p->next[t];
     53     }
     54     if(p->flag)
     55     {
     56         p->flag = 0;
     57         return 1;
     58     }
     59     return 0;
     60 }
     61 void del(struct node * p)
     62 {
     63     int i;
     64     if(p)
     65     {
     66         for(i=0;i<26;i++)
     67             if(p->next[i])
     68                 del(p->next[i]);
     69     }
     70     free(p);
     71     p=NULL;
     72 }
     73 int main()
     74 {
     75     char s[105];
     76     int n,m,i,j,leap;
     77     while(~scanf("%d",&n)&&n)
     78     {
     79         scanf("%d",&m);
     80         struct node *rt;
     81         rt = new_node();
     82         leap = 0;
     83         int temp =  n;
     84         while(n--)
     85         {
     86             scanf("%s",s);
     87             insert(rt,s);
     88         }
     89         leap = 0;
     90         while(m--)
     91         {
     92             scanf("%s",s);
     93             if(search(rt,s))
     94             leap++;
     95 
     96         }
     97         del(rt);
     98         printf("%d\n",temp-leap);
     99     }
    100     return 0;
    101 } 
  • 相关阅读:
    神经网络
    机器学习摘要
    one-vs-all案例
    VHDL
    docker 摘要(入门版)
    Windows与Unix思想
    安装 fedora 之后
    逻辑回归实战
    TensorFlow安装
    Haskell语言学习笔记(65)Data.HashMap
  • 原文地址:https://www.cnblogs.com/0803yijia/p/2636988.html
Copyright © 2020-2023  润新知