POJ 2001-Shortest Prefixes(字典树)

来源:互联网 发布:matlab编程语言 编辑:程序博客网 时间:2024/03/29 09:55

题意:就是给你一些字符串,然后输出本身和本身字符串中最短非公共的前缀。

思路:用字典将之前的字符串插入字典树中,然后查询次数为1的节点。没有就输出整个字符串。

#include<stdio.h>#include<string.h>int cur=1;char s[20011][50];struct node{    int next[26];    int idx;    void init()    {        idx=0;        memset(next,-1,sizeof(next));    }}t[1000111];void insert(char *s){    int len=strlen(s),p=0;    for(int i=0;i<len;i++)    {        int x=s[i]-'a';        if(t[p].next[x]==-1)        {            t[cur].init();            t[p].next[x]=cur++;        }        p=t[p].next[x];        t[p].idx++;    }}void query(char *s){    int i=0,p=0;    while(s[i])    {        int x=s[i]-'a';        if(t[p].idx==1)        {            printf("%s ",s);            s[i]='\0';            printf("%s\n",s);            return ;        }        p=t[p].next[x];        i++;    }    printf("%s %s\n",s,s);}int main(){    int cnt=0;    t[0].init();    while(scanf("%s",s[cnt++])!=EOF)    {        insert(s[cnt-1]);    }    for(int i=0;i<cnt;i++)    {        query(s[i]);    }    return 0;}


0 0