问题描述
试题编号: | 201503-2 |
试题名称: | 数字排序 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。 输入格式 输入的第一行包含一个整数n,表示给定数字的个数。 输出格式 输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。 样例输入 12 样例输出 3 4 评测用例规模与约定 1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。 |
思路
先统计,后排序。可使用STL的包装类实现。
代码
#include<iostream>
#include<map>
#include<queue>
using namespace std;
struct node
{
int key;
int num;
bool operator < (const node& n) const
{
if(num==n.num)
return key>n.key;
else
return num<n.num;
}
};
int main()
{
priority_queue<node> q;
map<int,int> a;
int n,c;
cin>>n;
while(n--)
{
cin>>c;
a[c]++;
}
//构建优先队列
node keynum;
for(map<int,int>::iterator it=a.begin();it!=a.end();it++)
{
keynum.key=it->first;
keynum.num=it->second;
q.push(keynum);
}
while(!q.empty())
{
keynum=q.top();
q.pop();
cout<<keynum.key<<" "<<keynum.num<<endl;
}
return 0;
}