A - 众数问题

Time Limit 2000 ms
Mem Limit 65536 KiB

Description

给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。对于给定的由n 个自然数组成的多重集S,计算S的众数及其重数。如果出现多个众数,请输出最小的那个。

Input

输入数据的第1行是多重集S中元素个数n(n<1300000);接下来的n行中,每行有一个最多含有5位数字的自然数,。

Output

输出数据的第1行给出众数,第2行是重数。

Sample

Input

6
1
2
2
2
3
5

Output

2
3

解析:

普通找众数问题,利用数组记录每个数的数量。

#include <iostream>

using namespace std;


int main()
{
    int a[123456];
    /*num 表示当前众数
      sum 表示当前众数个数*/
    int num,sum,n,i,x;
    sum = num = 0;
    scanf("%d",&n);
    //memset(a,0,sizeof(a));
    for(i=0;i<100050;i++){
        a[i] = 0;
    }
    for(i=0; i<n; i++){
        scanf("%d",&x);
        a[x]++;
        if(a[x]>sum){
            sum = a[x];
            num = x;
        }
        else if(a[x]==sum){
            if(x<num){
                num = x;
            }
        }
    }
    printf("%d\n%d\n",num,sum);
    return 0;
}
posted @ 2020-09-23 10:22  洛沐辰  阅读(436)  评论(0编辑  收藏  举报