• pku2001 Shortest Prefixes


    http://poj.org/problem?id=2001

    数据结构,Trie

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 const int CHARSET = 26, BASE = 'a', MAX_NODE = 20100;
     5 
     6 struct trie
     7 {
     8     int tot, root, child[MAX_NODE][CHARSET];
     9     bool flag[MAX_NODE];
    10     int cnt[MAX_NODE];
    11     trie()
    12     {
    13         memset(child[1], 0, sizeof(child[1]));
    14         memset(cnt, 0, sizeof(cnt));
    15         flag[1] = false;
    16         root = tot = 1;
    17     }
    18     void insert(const char *str)
    19     {
    20         int *cur = &root;
    21         for(const char *p=str; *p; ++p)
    22         {
    23             cur = &child[*cur][*p-BASE];
    24             if(*cur == 0)
    25             {
    26                 *cur = ++tot;
    27                 memset(child[tot], 0, sizeof(child[tot]));
    28                 flag[tot] = false;
    29             }
    30             cnt[*cur] ++;
    31         }
    32         flag[*cur] = true;
    33     }
    34     int query(const char *str)
    35     {
    36         int cur = root;
    37         int i = 1;
    38         int j;
    39         for(j=0; str[j]; j++, i++)
    40         {
    41             cur = child[cur][str[j]-BASE];
    42             if(cnt[cur] == 1)
    43             {
    44                 return i;
    45             }
    46             if(str[j+1] == 0)
    47             {
    48                 return i;
    49             }
    50         }
    51         return i;
    52     }
    53 };
    54 char s[1002][22]; 
    55 int main()
    56 {
    57     int i, j, n, m;
    58     memset(s, 0, sizeof(s));
    59     trie t;
    60     for(i=1; ~scanf("%s", s[i]); i++)
    61     {
    62         t.insert(s[i]);
    63     }
    64     n = i-1;
    65     for(i=1; i<=n; i++)
    66     {
    67         m = t.query(s[i]);
    68         printf("%s ", s[i]);
    69         for(j=0; j<m; j++)
    70         {
    71             printf("%c", s[i][j]);
    72         }
    73         printf("\n");
    74     }
    75     return 0;
    76 }
  • 相关阅读:
    python中修改元组
    c语言中语音警告转义字符
    linux中防火墙策略管理工具firewalld
    C语言获取数值的最后几位数
    VMware安装win7虚拟机
    python中字符串的常规处理
    专家详解面试成功法宝和技巧
    怎样学好java
    一个Java程序员应该掌握的10项技能
    专家详解面试成功法宝和技巧
  • 原文地址:https://www.cnblogs.com/yuan1991/p/pku2001.html
Copyright © 2020-2023  润新知