字典序 动物统计 输出姓名和个数
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;
}
相关文章推荐
- LVS专有名词定义
- Android中的动画
- MyEclipse修改项目名称后,部署到 tomcat问题
- hdfs介绍
- 统计学总结之Bias(偏差),Error(误差),和Variance(方差)的区别
- 图论——昂贵的聘礼
- hdu1247 Hat’s Words
- js中function的带括号和不带括号的区别
- mybatis+jstl表达式
- htaPyfilpmiS.71
- 安卓日记——volley常用方法介绍
- 算法-踢人游戏
- C#基础
- 抽象方法真的不能实例化么?
- Thrift
- google group翻译(1)
- Scatter文件编写
- android 找不到启动activity
- 来自Uber的12条架构重构经验
- Java基础:包装类