数组开到千万级才AC。。。。
#include<cstdio>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
#define size 28
#define maxno 1000000
using namespace std;
struct trie
{
int ch[maxno][size];
int v[maxno];
int sz;
void clear()
{
sz=1;
memset(ch[0],0,sizeof(ch[0]));
}
int change(char x){return x-'a';}
void insert(char *s)
{
int u=0;
int n=strlen(s);
for(int i=0;i<n;i++)
{
int c=change(s[i]);
if(!ch[u][c])
{
memset(ch[sz],0,sizeof(ch[sz]));
v[sz]=0;
ch[u][c]=sz++;
}
u=ch[u][c];
v[u]++;
}
// v[u]++;
}
int find(char *s)
{ int u=0;
int n=strlen(s);
for(int i=0;i<n;i++)
{
int c=change(s[i]);
if(!ch[u][c])
{
return 0;
}
u=ch[u][c];
}
return v[u];
}
}h;
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
// int n,m,i;
char s[20];
h.clear();
while(gets(s),*s)
h.insert(s);
// for(i=0;i<19;i++)
// printf("%d ",h.v[i]);
while(scanf("%s",s)!=EOF)
printf("%d\n",h.find(s));
return 0;
}