hatword
题意:给你一些单词,让你判断每一单词能否再给你的这些单词中找到两个不同的单词组成,如果能就输出;
理解题意后,就剩怎样查询了,在查询中我用了两成for循环解决了问题;
代码如下:
#include#include #include #include #include #define Max 28using namespace std;struct dot{ dot *next[Max]; int flag;};dot root;dot *newnode(){ dot *temp=new dot; temp->flag=0; for(int i=0;i next[i]=NULL; return temp;}void creatree(char *st){ int len=strlen(st); int id=0; dot *p=&root; for(int i=0;i next[id]==NULL) p->next[id]=newnode(); p=p->next[id]; } p->flag=1;}int find(char *st){ int len=strlen(st); int id=0; dot *p=&root; for(int i=0;i next[id]==NULL) return 0; p=p->next[id]; if(p->flag) { dot *q=&root; int k=1; int im=0; for(int j=i+1;j next[im]==NULL) { k=0; break; } q=q->next[im]; } if(k&&q->flag) return 1; } } return 0;} char st[50005][20];int main(){ int i,j,k; while(scanf("%s",&st[i])!=EOF) creatree(st[i++]); for(j=0;j