hdu 1247 字典树

来源:互联网 发布:淘宝卖家上架宝贝 编辑:程序博客网 时间:2024/05/20 11:27
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int sz;int chd[50000+10][30];int key[50000+10];int find(char *str){    int p=0;    for(int i=0;str[i];i++)    {        int ch=str[i]-'a';        p=chd[p][ch];        if(!p)            return 0;    }    return key[p];}void insert(char *str){    int p=0;    for(int i=0;str[i];i++)    {        int ch=str[i]-'a';        if(!chd[p][ch])            chd[p][ch]=++sz;        p=chd[p][ch];    }    key[p]=1;}bool ok(char *s){    int len=strlen(s);    char t[500];    for(int i=0;i<len;i++)    {        int j;        for(j=0;j<=i;j++)            t[j]=s[j];        t[j]='\0';        if(find(t) && find(s+i+1))            return true;    }    return false;}char word[50000+10][500];int main(){    int i,t=0;    memset(chd,0,sizeof(chd));    memset(key,0,sizeof(key));    while(~scanf("%s",word[t]))        insert(word[t++]);    for(i=0;i<t;i++)        if(ok(word[i]))            printf("%s\n",word[i]);    return 0;}

原创粉丝点击