简单的字典树,当然也可以用其他方法。
#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<queue>
using namespace std;
#define nn 1001000
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
struct Trie
{
int ch[nn][26];
int val[nn];
int sz;
Trie() { sz=1;memset(ch[0],0,sizeof(ch[0])); }
int idx(char c) {return c-'a';}
void insert(char *s,int v)
{
int u=0,n=strlen(s);
for(int i=0;i<n;i++)
{
int c=idx(s[i]);
if(!ch[u][c])
{
memset(ch[sz],0,sizeof(ch[sz]));
val[sz]=0;
ch[u][c]=sz++;
}
u=ch[u][c];
val[u]+=v;
}
}
int find(char *s)
{
int u,n=strlen(s);
for(int i=0;i<n;i++)
{
int c=idx(s[i]);
if(!ch[u][c]) return 0;
u=ch[u][c];
}
return val[u];
}
}t;
int main()
{
char s[20];
while(1)
{
gets(s);
if(strcmp(s,"")==0) break;
t.insert(s,1);
}
while(gets(s))
{
int ans=t.find(s);
printf("%d\n",ans);
}
return 0;
}