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


    题目描述

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

    输入

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

    输出

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

    样例输入

    10
    boar
    pig
    sheep
    gazelle
    sheep
    sheep
    alpaca
    alpaca
    marmot
    mole

    样例输出

    sheep 3
     

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

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

     1 /*   有看不懂的 错误看看 是不是 定义重复了   */
     2 #include<stdio.h>
     3 #include<malloc.h>
     4 #include<string.h>
     5 struct node
     6 {
     7     int sum;
     8     node *next[26];
     9 };
    10 int Insert(char a[],node *t);   //这个  放到  函数声明的上面  会出现  node 没有声明的错误
    11 int main()
    12 {
    13     int i,n,sum,maxn=0;
    14     char a[12],b[12];
    15     while(scanf("%d",&n)!=EOF)
    16     {
    17         node *t;
    18         t=(node *)malloc(sizeof(node));   //开辟一个根节点   每次 加入新单词
    19         t->sum=0;             //  t 就作为 了  根节点
    20         for(i=0;i<26;i++)
    21             t->next[i]=NULL;
    22         maxn=0;
    23         while(n--)
    24         {
    25             scanf("%s",a);
    26             sum=Insert(a,t);
    27             if(sum>maxn)
    28             {
    29                 maxn=sum;
    30                 strcpy(b,a);
    31             }
    32         }
    33         printf("%s %d
    ",b,maxn);
    34     }
    35     return 0;
    36 }
    37 int Insert(char *a,node *t)
    38 {
    39     node *p,*q;
    40     int id,i,j,l;
    41     p=t;   //  已经开了空间
    42     l=strlen(a);
    43     for(i=0;i<l;i++)
    44     {
    45         id=a[i]-'a';
    46         if(p->next[id]==NULL)   //如果 没有  这个线段的话
    47         {
    48             q=(node *)malloc(sizeof(node));
    49             q->sum=0;
    50             for(j=0;j<26;j++)
    51                 q->next[j]=NULL;
    52             p->next[id]=q;        //  建立线段  . 线段 的 另一端 已经设置好了.
    53         }
    54         p=p->next[id];
    55     }
    56     (p->sum)++;
    57     return p->sum;
    58 }
     
  • 相关阅读:
    Python中的Dictionary
    Python中的list
    Python的string模块化方法
    Python字符串格式化表达式和格式化方法
    Python中的slice操作
    Python中的字符串
    华为笔试——C++进制转换
    华为笔试——C++消重输出
    华为笔试——C++转换字符串问题
    C++数字三角形问题与dp算法
  • 原文地址:https://www.cnblogs.com/A-FM/p/5181956.html
Copyright © 2020-2023  润新知