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;}