poj 2001 Shortest Prefixes(Trie)

 

 

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int ch[30000][30];
int val[30000][30];
char str[1000+10][20+10];
int sz;
int idx(char c) {return c-'a';}
void insert(char *s)
{
    int u=0;
    int len=strlen(s);
    int i;
    for(i=0;i<len;i++)
    {
       int c=idx(s[i]);
       while(!ch[u][c])
       {
           memset(ch[sz],0,sizeof(sz));
           ch[u][c]=sz++;
       }
       val[u][c]++;
       u=ch[u][c];
    }
}
void print(char *s)
{
    int u=0;
    int len=strlen(s);
    int i,j,k;
    for(i=0;i<len;i++)
    {
        int c=idx(s[i]);
        printf("%c",s[i]);
        if(val[u][c]==1) return;
        u=ch[u][c];
    }
    return ;
}
int main()
{
    int n=0;
    int i,j,k;
    sz=1;
    memset(ch[0],0,sizeof(ch[0]));
    memset(val,0,sizeof(val));
    while(scanf("%s",str[n])!=EOF)
    {
        insert(str[n]);
        n++;
    }
    for(i=0;i<n;i++)
    {
        printf("%s ",str[i]);
        print(str[i]);
        printf("\n");
    }
    return 0;
}

 

posted @ 2015-07-03 01:01  sola94  阅读(98)  评论(0编辑  收藏  举报