zoukankan      html  css  js  c++  java
  • 动物统计加强版

    题目链接
    原文链接

    • 描述
      在美丽大兴安岭原始森林中存在数量繁多的物种,在勘察员带来的各种动物资料中有未统计数量的原始动物的名单。科学家想判断这片森林中哪种动物的数量最多,但是由于数据太过庞大,科学家终于忍受不了,想请聪明如你的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<algorithm>
    using namespace std;
    struct node
    {
        node *next[26];//node类的26个子类
        int count;//每一个类终端的个数
        node() //构造函数,用来初始化数据
        {
            memset(next,0,sizeof(next));
            count=0;
        }
    };
    int MAX;//用来记录最出现次数
    char flag[20]; //用来记录出现次数最多的字符串
    node *root=new node();//声明一个初始node类 (这个类决定了以下所有子类,是字典树的根)
    void insert(char *s) //插入新的字符串
    {
        node *p=root;
        int i,k;
        for(i=0; s[i]; i++)
        {
            k=s[i]-'a';
            if(p->next[k]==NULL) p->next[k]=new node();//不存在此节点则创建
            p=p->next[k];//移向下一个节点
        }
        p->count++;
        if(p->count>MAX) //更新MAX和flag
        {
            MAX=p->count;
            strcpy(flag,s);
        }
    }
    int main()
    {
        int n;
        char s[15];
        scanf("%d",&n);
        while(n--)
        {
            scanf("%s",s);
            insert(s);
        }
        printf("%s %d
    ",flag,MAX);
        return 0;
    }
    
  • 相关阅读:
    iOS MJRefresh的使用 (列表上拉加载更多)
    iOS 后台任务
    ios Alamofire网络插件的使用
    springboot shiro ehcache redis 简单使用
    android BottomNavigationView 简单使用
    iOS ksyhttpcache音视频缓存
    springboot 简单使用shiro登录
    springboot 使用 mybatis + mapper
    [LeetCode] Permutations
    【经典算法】回溯算法
  • 原文地址:https://www.cnblogs.com/dccmmtop/p/6756795.html
Copyright © 2011-2022 走看看