zoukankan      html  css  js  c++  java
  • sdut 1500 Message Flood(Trie树)

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

    View Code
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<stdlib.h>
     5 using namespace std;
     6 struct node
     7 {
     8     int flag;
     9     node *next[26];
    10 };
    11 int num;
    12 node *build()
    13 {
    14     node *p;
    15     int i;
    16     p=new node;
    17     p->flag=0;
    18     for(i=0;i<26;i++)
    19     p->next[i]=NULL;
    20     return p;
    21 }
    22 void insert(node *p, char *s)
    23 {
    24     int len,i,t;
    25     len=strlen(s);
    26     for(i=0;i<len;i++)
    27     {
    28         if(s[i]>='A'&&s[i]<='Z')
    29         t=s[i]-'A';
    30         else
    31         t=s[i]-'a';
    32         if(p->next[t]==NULL)
    33             p->next[t]=build();
    34         p=p->next[t];
    35     }
    36     p->flag=1;
    37 }
    38 int search(node *p,char *s)
    39 {
    40     int t,i,len;
    41     len=strlen(s);
    42     for(i=0;i<len;i++)
    43     {
    44         if(s[i]>='A'&&s[i]<='Z')
    45         t=s[i]-'A';
    46         else
    47         t=s[i]-'a';
    48         if(p->next[t]==NULL)
    49         return 0;
    50         p=p->next[t];
    51     }
    52     if(p->flag==1)
    53     {
    54          num++;
    55          p->flag=-1;
    56          return 1;
    57     }
    58     return 0;
    59 }
    60 void deal(node *p)
    61 {
    62     int i;
    63     if(p)
    64     {
    65         for(i = 0 ;i < 26 ; i++)
    66         if(p->next[i])
    67         deal(p->next[i]);
    68     }
    69     free(p);
    70     p=NULL;
    71 }
    72 int main()
    73 {
    74     int m,n,i,k;
    75     char str[25];
    76     node *p;
    77     while(~scanf("%d",&m))
    78     {
    79         if(m==0)
    80         break;
    81         scanf("%d",&n);
    82         p=build();
    83         num=0;
    84         for(k=1;k<=m;k++)
    85         {
    86             scanf("%s",str);
    87             insert(p,str);
    88         }
    89         while(n--)
    90         {
    91             scanf("%s",str);
    92             search(p,str);
    93         }
    94         printf("%d\n",m-num);
    95         deal(p);
    96     }
    97     return 0;
    98 }
  • 相关阅读:
    mybatis(十)缓存
    mybatis(八)复杂查询
    mybatis(六)分页
    mybatis(九)动态SQL
    mybatis(七)只用注解开发
    mybatis(五) 日志
    log4j.properties 相关配置
    mybatis(四)中可能出现的问题
    MyBatis(三) 配置解析
    IIS 发布 .net core 3.1
  • 原文地址:https://www.cnblogs.com/wanglin2011/p/2636974.html
Copyright © 2011-2022 走看看