nyoj 95-众数问题 (map)

Posted getcharzp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nyoj 95-众数问题 (map)相关的知识,希望对你有一定的参考价值。

95-众数问题


内存限制:64MB 时间限制:3000ms 特判: No
通过数:16 提交数:29 难度:3

题目描述:

所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数,

多重集合S重的重数最大的元素成为众数。例如:S={1,2,2,2,3,5},则多重集S的众数是2,其重数为3。

现在你的任务是:对于给定的由m个自然数组成的多重集S,计算出S的众数及其重数。

输入描述:

第一行为n,表示测试数据组数。(n<30)
每组测试的第一行是一个整数m,表示多重集S中元素的个数为m
接下来的一行中给出m(m<100)个不大于10万的自然数
(不会出现不同元素出现的次数相同的情况,如:S={11,11,22,22,33,33})。

输出描述:

每组测试数据输出一行,包含两个数,第一个是众数,第二个是其重数,中间以空格隔开。

样例输入:

1
6
1 2 2 2 3 5

样例输出:

2 3

C/C++ AC:
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <cmath>
 6 #include <stack>
 7 #include <set>
 8 #include <map>
 9 #include <queue>
10 #include <climits>
11 
12 using namespace std;
13 int n, m;
14 
15 int main()
16 {
17     cin >>n;
18     while (n --)
19     {
20         int a, b = 0, temp;
21         map <int, int> my_map;
22         pair <map<int, int> :: iterator, bool> pr;
23         scanf("%d", &m);
24         while (m --)
25         {
26             cin >> temp;
27             pr = my_map.insert(pair<int, int>(temp, 1)); // 注意map插入,pair<int, int>(temp, 1);
28             if (!pr.second)
29             {
30                 my_map[temp] ++;
31                 if (b < my_map[temp])
32                 {
33                     a = temp;
34                     b = my_map[temp];
35                 }
36             }
37         }
38         printf("%d %d
", a, b);
39     }
40 }

 






以上是关于nyoj 95-众数问题 (map)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 229 求众数 II[Map] HERODING的LeetCode之路

nyoj 991 Registration system (map)

nyoj 1112 求次数 (map)

nyoj 1112 求次数(map, set)

4.3 合并重复的条件执行片段

nyoj 277-车牌号 (map, pair, iterator)