动物统计加强版

来源:互联网 发布:excel数据合并汇总 编辑:程序博客网 时间:2024/04/29 15:47

动物统计加强版

时间限制: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

来源

[陈玉张云聪]原创

上传者

陈玉

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#define N 400000

typedef struct node{

       structnode *next[26];

       intcount;

}tree;

tree *head;

int num=0;

int num1=0;

char ch[12];

char ch1[12];

int initialtree(){

       inti;

       head=(tree*)malloc(sizeof(tree));

       head->count=0;

       for(i=0;i<26;i++)

       {

              head->next[i]=NULL;

       }

      

       return0;

}

void inserttree(char *a){

       tree*p,*q=head;

       intl,i,j;

       l=strlen(a);

       for(i=0;i<l;i++)

       {

              if(q->next[a[i]-'a']==NULL)

              {

                     p=(tree*)malloc(sizeof(tree));

                     q->next[a[i]-'a']=p;

                     q=q->next[a[i]-'a'];

                     q->count=0;

                     for(j=0;j<26;j++)

                     {

                            q->next[j]=NULL;

                     }

              }

              else

              {

                     q=q->next[a[i]-'a'];

              }

       }

              q->count++;

             

              if(q->next)

              if(num<q->count)

              {

                     num=q->count;

                     strcpy(ch,a);

              }    

              if(num1<=q->count)

              {

                     num1=q->count;

                     if(num1==num)                  

                            strcpy(ch1,a);

              }

 

}

int findtree(char *a){

       inti,l;

       tree*p=head;

       l=strlen(a);

       for(i=0;i<l;i++)

       {

              if(p->next[a[i]-'a']==NULL)return 0 ;

              elsep=p->next[a[i]-'a'];

       }

 

       returnp->count;

}

int main(){

       intm=0,i,n;

       chara[N];

      initialtree();

       scanf("%d",&n);

       for(i=0;i<n;i++)

       {

             getchar();

              scanf("%s",a);

              inserttree(a);

       }

       if(strcmp(ch,ch1)!=0&&num==num1)

       {

              printf("%s%d ",ch,num);

              printf("%s%d\n",ch1,num); 

       }

       else

       {

              printf("%s%d\n",ch,num);

       }

 

       return0;

}


原创粉丝点击