【CCF CSP-20150302】数字排序
题意概述
给定 n 个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
输入输出格式
输入的第一行包含一个整数 n,表示给定数字的个数。第二行包含 n 个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
数据规模
1 ≤ n ≤ 1000 1\le n\le 1000 1≤n≤1000,给出的数都是不超过 1000 的非负整数。
算法设计
题目比较简单,先用 unordered_map 将遇到的数字及其出现次数储存起来,然后将 unordered_map 中所有元素搬迁到 vector 中,对 vector 按要求排序输出即可。
C++代码
#include <bits/stdc++.h>
using namespace std;
using gg = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
gg ni, ai;
cin >> ni;
unordered_map<gg, gg> um;
while (ni--) {
cin >> ai;
++um[ai];
}
vector<pair<gg, gg>> ans(um.begin(), um.end());
sort(ans.begin(), ans.end(),
[](const pair<gg, gg>& p1, const pair<gg, gg>& p2) {
return tie(p2.second, p1.first) < tie(p1.second, p2.first);
});
for (auto& i : ans) {
cout << i.first << " " << i.second << "\n";
}
return 0;
}