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;

}

 

你可能感兴趣的:(test)