看了这个题目,统计难题,但一读题,原来是个关于Trie字典树的运用,完全是根据Trie算法,是一个模版题。
#include <iostream>
#include <string.h>
using namespace std;
const int sonsum=26,base='a';
char s1[12],ss[12];
struct Trie
{
int num;
bool flag;
struct Trie *son[sonsum];
Trie()
{
num=1;flag=false;
memset(son,NULL,sizeof(son));
}
};
Trie *NewTrie()
{
Trie *temp=new Trie;
return temp;
}
void Inset(Trie *root,char *s)
{
Trie *temp=root;
while(*s)
{
if(temp->son[*s-base]==NULL)
{
temp->son[*s-base]=NewTrie();
}
else
temp->son[*s-base]->num++;
temp=temp->son[*s-base];
s++;
}
temp->flag=true;
}
int search(Trie *root,char *s)
{
Trie *temp=root;
while(*s)
{
if(temp->son[*s-base]==NULL) return 0;
temp=temp->son[*s-base];
s++;
}
return temp->num;
}
int main()
{
Trie *root=NewTrie();
root->num=0;
//while(cin.get(s1,12))
while(gets(s1)&&strcmp(s1,"")!=0)
{
//if(strcmp(s1," ")==0)
//break;
Inset(root,s1);
}
while(cin>>ss)
{
int ans=search(root,ss);
cout<<ans<<endl;
}
return 0;
}