这是一道字典树的典型应用,算是一道简单题吧,我是刚学字典树,话说也是理解了一天才理解了这种数据结构,,学数据结构的孩子你伤不起啊。。。。。。
题目:
-
输入
-
第一行输入动物名字的数量N(1<= N <= 4000000),接下来的N行输入N个字符串表示动物的名字(字符串的长度不超过10,字符串全为小写字母,并且只有一组测试数据)。
输出
-
输出这些动物中最多的动物的名字与数量,并用空格隔开(数据保证最多的动物不会出现两种以上)。
样例输入
-
10 boar pig sheep gazelle sheep sheep alpaca alpaca marmot mole
样例输出
-
sheep 3
#include <iostream>
#include <cstdio>
#include <string.h>
#include <malloc.h>
using namespace std;
struct Tire
{
int count;
struct Tire *tire[26];
}*a;
void init()
{
a=(Tire*)malloc(sizeof(Tire));
for(int i=0;i<26;i++)
a->tire[i]=NULL;
}
int insert(char ch[])
{
int length=strlen(ch);
Tire *head=a;
int i,j,k;
for(int i=0;i<length;++i)
{
k=(int)(ch[i]-97);
if(head->tire[k]==NULL)
{
head->tire[k]=new Tire;
head=head->tire[k];
head->count=0;
for(j=0;j<26;++j)
head->tire[j]=NULL;
}
else
head=head->tire[k];
}
head->count++;
return head->count;
}
int main()
{
char s[10],ss[10];
init();
int n;
scanf("%d",&n);
int max=0,sum=0;
while(n--)
{
scanf("%s",s);
sum=insert(s);
if(sum>max)
{
strcpy(ss,s);
max=sum;
}
}
printf("%s %d\n",ss,max);
//system("pause");
}