您的位置:首页 > 其它

字典序 动物统计 输出姓名和个数

2016-02-04 17:01 169 查看

题目描述

在美丽大兴安岭原始森林中存在数量繁多的物种,在勘察员带来的各种动物资料中有未统计数量的原始动物的名单。科学家想判断这片森林中哪种动物的数量最多,但是由于数据太过庞大,科学家终于忍受不了,想请聪明如你的ACMer来帮忙

输入

第一行输入动物名字的数量N(1<=N<=4000000),接下来的N行输入N个字符串表示动物的名字(字符串的长度不超过10,字符串全为小写字母,并且只有一组测试数据)

输出

输出这些动物中最多的动物的名字与数量,并用空格隔开(数据保证最多的动物不会出现两种以上)。

样例输入

10
boar
pig
sheep
gazelle
sheep
sheep
alpaca
alpaca
marmot
mole

样例输出

sheep3



            很明显的字典树问题看起来好看但是不好用呀....    

所有的结构算法都是一种思想重要的是掌握这一种思想知道是怎么回事然后在不同的环境下对其进行一点点的改变就可以达到不同的效果.

/*有看不懂的错误看看是不是定义重复了*/
#include<stdio.h>
#include<malloc.h>
#include<string.h>
structnode
{
intsum;
node*next[26];
};
intInsert(chara[],node*t);//这个放到函数声明的上面会出现node没有声明的错误
intmain()
{
inti,n,sum,maxn=0;
chara[12],b[12];
while(scanf("%d",&n)!=EOF)
{
node*t;
t=(node*)malloc(sizeof(node));//开辟一个根节点每次加入新单词
t->sum=0;//t就作为了根节点
for(i=0;i<26;i++)
t->next[i]=NULL;
maxn=0;
while(n--)
{
scanf("%s",a);
sum=Insert(a,t);
if(sum>maxn)
{
maxn=sum;
strcpy(b,a);
}
}
printf("%s%d\n",b,maxn);
}
return0;
}
intInsert(char*a,node*t)
{
node*p,*q;
intid,i,j,l;
p=t;//已经开了空间
l=strlen(a);
for(i=0;i<l;i++)
{
id=a[i]-'a';
if(p->next[id]==NULL)//如果没有这个线段的话
{
q=(node*)malloc(sizeof(node));
q->sum=0;
for(j=0;j<26;j++)
q->next[j]=NULL;
p->next[id]=q;//建立线段.线段的另一端已经设置好了.
}
p=p->next[id];
}
(p->sum)++;
returnp->sum;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: