【洛谷 P1271】【深基9.例1】选举学生会 题解(计数排序)

45 阅读1分钟

【深基9.例1】选举学生会

题目描述

学校正在选举学生会成员,有 n ( n ≤ 999 ) n(n\le 999) n(n≤999) 名候选人,每名候选人编号分别从 1 到 n n n,现在收集到了 m ( m < = 2000000 ) m(m<=2000000) m(m<=2000000) 张选票,每张选票都写了一个候选人编号。现在想把这些堆积如山的选票按照投票数字从小到大排序。

输入格式

输入 n n n 和 m m m 以及 m m m 个选票上的数字。

输出格式

求出排序后的选票编号。

样例 #1

样例输入 #1

5 10
2 5 2 2 5 2 2 2 1 2

样例输出 #1

1 2 2 2 2 2 2 2 5 5

思路

计数排序,用数组储存票数。

AC代码

#include <iostream>
#include <cstring>
#define AUTHOR "HEX9CF"
using namespace std;

const int maxn = 100005;

int main() {
    int n, m;
    int vote[maxn];
    memset(vote, 0, sizeof(vote));
    cin >> n >> m;
    for(int i = 0; i < m; i++){
        int v;
        cin >> v;
        vote[v]++;
    }
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= vote[i]; j++){
            cout << i << " ";
        }
    }

    return 0;
}