背下来..
#include<iostream>
using namespace std;
struct trie
{
int num;
bool isword;
trie *child[26];
trie()
{
for(int i=0;i<26;i++) child[i]=0;
num=0;isword=0;
}
} root;
void insert(char *x)
{
int k=0;trie *p=&root;
while(x[k]!='\0')
{
if(p->child[x[k]-'a']==0)
p->child[x[k]-'a']=new trie;
p=p->child[x[k]-'a'];
p->num++;
k++;
}
p->isword=1;
}
int find(char *x)
{
int k=0;trie *p=&root;
while(x[k]!='\0'&&p->child[x[k]-'a']) p=p->child[x[k++]-'a'];//printf("!");
return x[k]=='\0'? p->num:0;
}
int main()
{
char x[20];
while(gets(x)&&x[0]!='\0') insert(x);
while(scanf("%s",x)!=EOF) printf("%d\n",find(x));
return 0;
}
题目:
HDU: 1004,1251,1075,1800,2072