hdu 2846
来源:互联网 发布:软件项目管理软件书籍 编辑:程序博客网 时间:2024/06/06 09:39
#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct node{ int s,id; node *next[28]; node():s(0),id(-1) { memset(next,0,sizeof(next)); }};node *root = new node;void Insert(char *str,int id){ int l=strlen(str); int i; node *p,*t=root; for(i=0;i<l;i++) { if(t->next[str[i]-'a']==0) { p=new node; t->next[str[i]-'a']=p; t=t->next[str[i]-'a']; } else { t=t->next[str[i]-'a']; } if(t->id!=id) { t->s++; t->id=id; } }}int Find(char *str){ node *t=root; int l=strlen(str); int i; for(i=0;i<l;i++) { t=t->next[str[i]-'a']; if(!t) return 0; } return t->s;}int main(){ int p; scanf("%d",&p); int i,j; char str[50]; for(i=0;i<p;i++) { scanf("%s",str); int l=strlen(str); for(j=0;j<l;j++) Insert(str+j,i); } scanf("%d",&p); for(i=0;i<p;i++) { scanf("%s",str); int s=Find(str); printf("%d\n",s); } return 0;}