POJ 2001 Shortest Prefixes

次元传送门

题意:
给出一堆由26个小写字母组成的字符串,请你依次输出每个串最短的前缀使得该前缀不是任何其他字符串的前缀,找不到时输出该串。

分析:
Trie树,不解释

代码实现

#include<cstring>
#include<cstdio>
struct trie{
    int son;
    trie *next[30];
    trie(){
        memset(next,0,sizeof(next)),son=0;
    }
}root,*t;
int main(){
    char str[30],s[1000][30];
    while(scanf("%s",str)!=EOF){
        t=&root,t->son++,strcpy(s[root.son],str);
        for(int i=0;str[i]!='\0';i++){
            if(!t->next[str[i]-'a'])
                t->next[str[i]-'a']=new trie;
            t=t->next[str[i]-'a'],t->son++;
        }
    }
    for(int i=1;i<=root.son;i++,puts("")){
        printf("%s ",s[i]),t=&root;
        for(int j=0;t->son>1&&s[i][j]!='\0';t=t->next[s[i][j++]-'a'])
            printf("%c",s[i][j]);
    }
    return 0;
}

By YOUSIKI

你可能感兴趣的:(POJ 2001 Shortest Prefixes)