poj2001

来源:互联网 发布:w2003办公软件下载 编辑:程序博客网 时间:2024/05/16 19:35

trie树。


#include<cstdio>
#include<cstring>
using namespace std;

int tot,size;
int t[300001][26],s[30001];
char a[300001][26],ch[100000];

void ins(char ch[])
{
    int k=0,u=0,len=strlen(ch+1);
    for (int i=1;i<=len;i++)
    {
        k=ch[i]-'a';
        if (t[u][k]==0) t[u][k]=++size;
        u=t[u][k];
        s[u]++;
    }
}

void solve(char ch[])
{
    int k=0,u=0,len=strlen(ch+1);
    for (int i=1;i<=len;i++)
    {
        if (s[u]==1) return;
        k=ch[i]-'a';        
        printf("%c",ch[i]);
        u=t[u][k];
    }
}

int main()
{
    while (~scanf("%s",a[++tot]+1))ins(a[tot]);
    for (int i=1;i<=tot;i++) {printf("%s ",a[i]+1);solve(a[i]);printf("\n");}
    return 0;
}

0 0
原创粉丝点击