动物统计加强版

动物统计加强版

时间限制:3000 ms  |  内存限制:150000 KB

难度:4

描述

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

输入

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

输出

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

样例输入

10

boar

pig

sheep

gazelle

sheep

sheep

alpaca

alpaca

marmot

mole

样例输出

sheep 3

http://acm.nyist.net/JudgeOnline/problem.php?pid=290

//统计每个字符串最后一个字符出现的次数,即是该字符串出现的次数。

 

#include<string.h>
#include<malloc.h>
#include<stdio.h>
int MAX_NUM;
char ss[15];
typedef struct node
{
	int count;
	struct node *next[26];
}*tree;
void insert(tree h,char *s)
{
	tree p=h;
	int len=strlen(s),i;
	for(i=0;i<len;i++)
	{
		int index=s[i]-'a';
		if(p->next[index]!=NULL)
		{
			p=p->next[index]; //到最后一个字符
		}
		else
		{
			tree tem=(tree)calloc(1,sizeof(node));
			tem->count=0;
			p->next[index]=tem;
			p=tem;
		}
	}
	p->count++;
	if(p->count>MAX_NUM)
	{
		MAX_NUM=p->count;
		strcpy(ss,s);
	}
}
void release(tree h)
{
	int i;
    for(i=0;i<26;i++)
        if(h->next[i]!=NULL)
        release(h->next[i]);
    free(h);
}
int main()
{
	//freopen("b.txt","r",stdin);
	char s[14];
	int t,n,i;
	MAX_NUM=0;
        tree head=(tree)calloc(1,sizeof(node));
        scanf("%d\n",&n);
        for(i=0;i<n;i++)
        {
        scanf("%s",s);
		insert(head,s);
        }
		printf("%s ",ss);
		printf("%d\n",MAX_NUM);
		release(head);
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值