模板題 :
/* W w w mm mm 222222222 7777777777777 */
/* W w w w m m m m 222 22 7777 */
/* w w w w m m m m 22 777 */
/* w w w w m m m m 22 77 */
/* w w w w m m m m 222 77 */
/* w w w w m m m m 222 77 */
/* w w w w m m m m 222 77 */
/* w w w w m m m m 222 77 */
/* w w w w m m m m 222 77 */
/* ww ww m mm m 222222222222222 77 */
//#pragma comment(linker, "/STACK:102400000,102400000")
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
using namespace std;
char s[15];
typedef struct trie
{
int v;
struct trie *next[26];
}Trie;
Trie root;
void insert(char *s)
{
int len=strlen(s);
Trie *p=&root,*q;
for(int i=0;i<len;i++)
{
int id=s[i]-'a';
if(p->next[id]==NULL)
{
q=(Trie*)malloc(sizeof(root));
q->v=1;
for(int j=0;j<26;j++)
{
q->next[j]=NULL;
}
p->next[id]=q;
p=q;
}
else
{
p->next[id]->v++;
p=p->next[id];
}
}
}
int search(char *s)
{
int len=strlen(s);
Trie *p=&root;
for(int i=0;i<len;i++)
{
int id=s[i]-'a';
p=p->next[id];
if(p==NULL)return 0;
}
return p->v;
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("test.in","r",stdin);
#endif
for(int i=0;i<26;i++)
{
root.next[i]=NULL;
}
while(1)
{
gets(s);
if(s[0]==0)break;
insert(s);
}
while(~scanf("%s",s))
{
printf("%d\n",search(s));
}
}