NYOJ 题目290 动物统计加强版(字典树)

来源:互联网 发布:windows自带图片编辑器 编辑:程序博客网 时间:2024/06/05 18:38

动物统计加强版

时间限制:3000 ms  |  内存限制:150000 KB
难度:4
描述
在美丽大兴安岭原始森林中存在数量繁多的物种,在勘察员带来的各种动物资料中有未统计数量的原始动物的名单。科学家想判断这片森林中哪种动物的数量最多,但是由于数据太过庞大,科学家终于忍受不了,想请聪明如你的ACMer来帮忙。
输入
第一行输入动物名字的数量N(1<= N <= 4000000),接下来的N行输入N个字符串表示动物的名字(字符串的长度不超过10,字符串全为小写字母,并且只有一组测试数据)。 
输出
输出这些动物中最多的动物的名字与数量,并用空格隔开(数据保证最多的动物不会出现两种以上)。 
样例输入
10boarpigsheepgazellesheepsheepalpacaalpacamarmotmole
样例输出
sheep 3
来源
[陈玉 张云聪]原创
上传者

陈玉

map超时

ac代码
#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct s{struct s * child[30];int n;}node,*Node;Node root;int max;char ans[10010];void insert(char *s){int i,now,len=strlen(s);Node cur,newnode;cur=root;for(i=0;i<len;i++){int now=s[i]-'a';if(cur->child[now]!=NULL){cur=cur->child[now];//(cur->n)++;}else{newnode=(Node)calloc(1,sizeof(node));cur->child[now]=newnode;cur=cur->child[now];cur->n=0;}}cur->n++;if(cur->n>max){max=cur->n;strcpy(ans,s);}}int main(){int n;while(scanf("%d",&n)!=EOF){root=(Node)calloc(1,sizeof(node));char s[10010];int i;max=-1;for(i=0;i<n;i++){scanf("%s",s);insert(s);}printf("%s %d\n",ans,max);}}        


0 0
原创粉丝点击