题目链接:http://118.190.20.162/view.page?gpid=T26
问题描述
试题编号: | 201503-2 |
试题名称: | 数字排序 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述
给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
输入格式
输入的第一行包含一个整数n,表示给定数字的个数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。 输出格式
输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
样例输入
12
5 2 3 3 1 3 4 2 5 2 3 5 样例输出
3 4
2 3 5 3 1 1 4 1 评测用例规模与约定
1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。
|
题解:
1 #include <iostream> 2 #include<queue> 3 using namespace std; 4 5 const int MAXN = 1005; 6 7 struct cmp { 8 bool operator ()(int &a, int &b) { 9 return a < b; 10 } 11 }; 12 13 struct T { 14 int value; 15 bool flag; 16 }; 17 18 void Initate(T t[]) { 19 for (int i = 0; i < MAXN; i++) { 20 t[i].flag = false; 21 t[i].value = 0; 22 } 23 } 24 25 int main() { 26 int n, m; 27 cin >> n; 28 T t[MAXN]; 29 Initate(t); 30 for (int i = 0; i < n; i++) { 31 cin >> m; 32 t[m].value++; 33 } 34 priority_queue<int, vector<int>, cmp>que; 35 for (int i = 0; i < MAXN; i++) { 36 if (t[i].value > 0) { 37 que.push(t[i].value); 38 } 39 } 40 while (!que.empty()) { 41 for (int i = 0; i < MAXN; i++) 42 if (t[i].value == que.top()&& t[i].flag==false) { 43 cout << i << " " << que.top() << endl; 44 t[i].flag = true; 45 } 46 que.pop(); 47 } 48 }