zoukankan      html  css  js  c++  java
  • hdu 1075 What Are You Talking About

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1075

    题意:比较简单,易懂,这里不做说明。

    解法:第一种方法:用map映射,耗时1000+ms;第二种方法:用字典树处理,500+ms。

      1 #include<iostream>
      2 #include<cstdio>
      3 #include<cstring>
      4 #include<cstdlib>
      5 #include<cmath>
      6 #include<algorithm>
      7 #include<vector>
      8 #define inf 0x7fffffff
      9 using namespace std;
     10 char s1[20],s2[20];
     11 typedef struct NODE
     12 {
     13     NODE *child[26];
     14     char str[20];
     15     int ok;
     16     NODE () {ok=0 ;str[0]=0 ;for (int i=0 ;i<26 ;i++) child[i]=NULL; }
     17 
     18 }node;
     19 void insert(node *root)
     20 {
     21     node *cur=root;
     22     int len=strlen(s2);
     23     int k;
     24     for (int i=0 ;i<len ;i++)
     25     {
     26         k=s2[i]-'a';
     27         if (cur->child[k]!=NULL)
     28         {
     29             cur=cur->child[k];
     30         }else
     31         {
     32             node *q=new node;
     33             q->ok=0;
     34             q->str[0]=0;
     35             for (int i=0 ;i<26 ;i++) q->child[i]=NULL;
     36             cur->child[k]=q;
     37             cur=cur->child[k];
     38         }
     39     }
     40     cur->ok=1;
     41     strcpy(cur->str,s1);
     42 }
     43 int findTree(node *root)
     44 {
     45     node *cur=root;
     46     int len=strlen(s2);
     47     for (int i=0 ;i<len ;i++)
     48     {
     49         int k=s2[i]-'a';
     50         cur=cur->child[k];
     51         if (cur==NULL) return 0;
     52     }
     53     if (cur->ok == 1) {printf("%s",cur->str);return 1;}
     54     return 0;
     55 }
     56 void del(node *root)
     57 {
     58     for (int i=0 ;i<26 ;i++) if (root->child[i]) del(root->child[i]);
     59     delete root;
     60     root=NULL;
     61 }
     62 int main()
     63 {
     64     memset(s1,0,sizeof(s1));
     65     memset(s2,0,sizeof(s2));
     66     node *root=new node;
     67     cin>>s1;
     68     while (scanf("%s",s1)!=EOF)
     69     {
     70         if (strcmp(s1,"END")==0) break;
     71         scanf("%s",s2);
     72         //cout<<s1<<" "<<s2<<endl;
     73         insert(root);
     74     }
     75     cin>>s1;
     76     char s[3333];
     77     memset(s,0,sizeof(s));
     78     getchar();
     79     while (gets(s))
     80     {
     81         //if (s[0]=='E' && s[1]=='N' && s[2]=='D') break;
     82         if (strcmp(s,"END")==0) break;
     83         memset(s2,0,sizeof(s2));
     84         int cnt=0;
     85         int flag=0;
     86         int len=strlen(s);
     87         for (int i=0 ;i<len ;i++)
     88         {
     89             if (s[i]>='a' && s[i]<='z')
     90             {
     91                 flag=1;
     92                 s2[cnt++]=s[i];
     93             }
     94             else if (flag)
     95             {
     96                 flag=0;
     97                 s2[cnt]=0;
     98                 int m=findTree(root);
     99                 if (!m) printf("%s",s2);
    100                 cnt=0;
    101                 memset(s2,0,sizeof(s2));
    102             }
    103             if (!flag) printf("%c",s[i]);
    104         }
    105         if (flag)
    106         {
    107             s2[cnt]=0;
    108             int m=findTree(root);
    109             if (!m) printf("%s",s2);
    110         }
    111         cout<<endl;
    112     }
    113     del(root);
    114     //system("pause");
    115     return 0;
    116 }
  • 相关阅读:
    Linux 工具箱—17款文件管理器
    RMAN 初学者指南
    Oracle监听器Server端与Client端配置实例
    mysqlproxy完成mysql读写分离
    linux端口映射
    MYSQL分布式集群使用主从复制
    SQL高级运用
    Redis安装与使用
    mysql cpu 负载率超过理想值,解决方案总结
    揭秘:HR是如何做背景调查的?你真的就可以隐瞒事实了吗?
  • 原文地址:https://www.cnblogs.com/huangxf/p/3597027.html
Copyright © 2011-2022 走看看