统计难题
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submission(s): 33505 Accepted Submission(s): 12721
注意:本题只有一组测试数据,处理到文件结束.
banana band bee absolute acm ba b band abc
2 3 1 0
#include <iostream>
#include <cstdio>
#include <cstring>
#include <malloc.h>
using namespace std;
char str[11];
struct Tree
{
int v;
Tree *next[28];
};
void creatTree(char *s);
int findTree(char *s);
Tree root;
int main()
{
Tree *p=&root;
for(int i=0;i<28;i++)
{
p->next[i]=NULL;
}
while(gets(str))
{
if(strcmp(str,"")==0)
{
break;
}
creatTree(str);
}
while(scanf("%s",str)!=EOF)
{
printf("%d\n",findTree(str));
}
return 0;
}
void creatTree(char *s)
{
Tree *p=&root;
for(int i=0;s[i];i++)
{
int id=s[i]-'a';
if(p->next[id]==NULL)
{
Tree *q=new Tree;
q->v=1;
for(int j=0;j<28;j++)
{
q->next[j]=NULL;
}
p->next[id]=q;
p=p->next[id];
}
else
{
int num=(p->next[id])->v + 1;
((p->next[id])->v)=num;
p=p->next[id];
}
}
return ;
}
int findTree(char *s)
{
Tree *p=&root;
for(int i=0;s[i];i++)
{
int id=s[i]-'a';
if(p->next[id]!=NULL)
{
p=p->next[id];
}
else
{
return 0;
}
}
return p->v;
}