zoukankan      html  css  js  c++  java
  • hdu 1075(字典树)

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

    wa了好多次啊。。。心都碎了。。。然后不知道怎么一改就对了。。。orz...

    建树的的时候每个单词的的最后一个结点应该加入译文的信息。。。

    islower()用于判断小写字母很好用。。。

    View Code
     1 #include<iostream>
     2 #include<string>
     3 #include<cstring>
     4 using namespace std;
     5 struct Tire{
     6     char s[14];
     7     Tire *next[26];
     8 };
     9 Tire *root;
    10 
    11 void CreateTire(char str[],char ss[]){
    12     int len=strlen(ss);
    13     Tire *p=root,*q;
    14     for(int i=0;i<len;i++){
    15         int id=ss[i]-'a';
    16         if(p->next[id]==NULL){
    17             q=(Tire *)malloc(sizeof(Tire));
    18             for(int i=0;i<26;i++){
    19                 q->next[i]=NULL;
    20             }
    21             strcpy(q->s,"");
    22             p->next[id]=q;
    23             p=p->next[id];
    24         }else {
    25             p=p->next[id];
    26         }
    27     }
    28     strcpy(p->s,str);
    29 }
    30 
    31 Tire *FindTire(string &ss){
    32     Tire *p=root;
    33     for(int i=0;i<ss.size();i++){
    34         int id=ss[i]-'a';
    35         if(p->next[id]==NULL)return NULL;
    36         p=p->next[id];
    37     }
    38     if(strcmp(p->s,""))return p;
    39     return NULL;
    40 }
    41 
    42 
    43 int main(){
    44     char str[3300];
    45     root=(Tire *)malloc(sizeof(Tire));
    46     for(int i=0;i<26;i++){
    47         root->next[i]=NULL;
    48     }
    49     strcpy(root->s,"");
    50     while(~scanf("%s",str)){
    51         if(str[0]=='S')continue;
    52         if(str[0]=='E')break;
    53         char ss[14];
    54         scanf("%s",ss);
    55         CreateTire(str,ss);
    56     }
    57     getchar();
    58     while(gets(str)){
    59         if(str[0]=='S')continue;
    60         if(str[0]=='E')break;
    61         int len=strlen(str);
    62         string s;
    63         for(int i=0;i<len;i++){
    64             s="";
    65             if(islower(str[i])){
    66                 int k=i;
    67                 while(k<len&&islower(str[k])){
    68                     s+=str[k];
    69                     k++;
    70                 }
    71                 Tire *p=FindTire(s);
    72                 if(p!=NULL){
    73                     printf("%s",p->s);
    74                 }else {
    75                     for(int j=i;j<k;j++){
    76                         printf("%c",str[j]);
    77                     }
    78                 }
    79                 i=k-1;
    80             }else 
    81                 printf("%c",str[i]);
    82         }
    83         printf("\n");
    84     }
    85     return 0;
    86 }
  • 相关阅读:
    zookeeper集群
    Hbase分布式集群
    smokeping Master/Slave安装配置
    CentOS修改163源(转载)
    linux 挂载(转载)
    linux挂载U盘(转载)
    linux下修改path变量(转载)
    tar.gz和rpm安装文件(转载)
    linux ps命令(转载)
    linux free命令(转载)
  • 原文地址:https://www.cnblogs.com/wally/p/3000962.html
Copyright © 2011-2022 走看看