AcWing 3213. 数字排序
原题链接
简单
作者:
南川嘉子
,
2024-10-05 17:26:41
,
所有人可见
,
阅读 2
#include<iostream>
#include<algorithm>
using namespace std;
struct re{
int value;//数值
int num;//次数
}re[1010];
bool cmp(struct re a,struct re b){
if(a.num==b.num) return a.value<b.value;//次数相同是小的优先
return a.num>b.num;//次数不相同是次数优先
}
int cnt[1010];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
cnt[x]++;//x这个数 出现了几次
}
int m=0; //做多少个记录结构体
for(int i=0;i<1010;i++){
if(cnt[i]){//有这个数 a 不会重复 但是如果前面用a[i]就会重复
re[m++]={i,cnt[i]};//一开始是re[0] 最后假如是m到10 其实是0-9 正好是10个
}
}
sort(re,re+m,cmp);
for(int i=0;i<m;i++){
cout<<re[i].value<<' '<<re[i].num<<endl;
}
return 0;
}
/*
#include<bits/stdc++.h>
using namespace std;
int cnt[1117];
bool cmp(int a, int b)
{
return (cnt[a] > cnt[b]) ? true : (cnt[a] == cnt[b]) ? (a < b) : false;
}
int main()
{
int n;
cin >> n;
while((cin >> n)) cnt[n] ++;
vector<int> res;
for(int i = 0; i <= 1000; i ++) if(cnt[i]) res.push_back(i);
sort(res.begin(), res.end(), cmp);
for(auto x : res) cout << x << ' ' << cnt[x] << endl;
int u = 0;
}
*/