問題の説明
n個の整数が与えられた場合、各整数の出現回数を数え、出現回数の順に出力してください。
入力フォーマット入力
の最初の行には、指定された数値の数を表す整数nが含まれています。
2行目にはn個の整数が含まれ、隣接する整数はスペースで区切られ、指定された整数を示します。
出力形式
複数の行を出力します。各行には、指定された整数とその出現回数をそれぞれ表す2つの整数が含まれています。発生順に出力します。2つの整数が同じ回数出現する場合、小さい方の値が最初に出力され、次に大きい方の値が出力されます。
サンプル入力
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を超えない負でない整数です。
これはどのような操作ですか?どの時代のコンパイラが使用されていますか?まあ、私はそれを探して見つけています。とにかく、方法は問題ありません。。これ、出された。変更されました、右。
コンパイルエラー
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
bool cmp(pair<int,int> p1,pair<int,int> p2){
if(p1.second!=p2.second)
return p1.second>p2.second;
else
return p1.first<p2.first;
}
int main(){
int n,num;
cin >> n;
map<int,int> m;
vector<pair<int,int>> v;
for(int i = 0;i<n;i++){
cin >> num;
m[num]++;
}
for(auto it = m.begin();it!=m.end();it++){
v.push_back(make_pair(it->first,it->second));
}
sort(v.begin(),v.end(),cmp);
for(auto it = v.begin();it!=v.end();it++){
cout << it->first << " " << it->second << endl;
}
return 0;
}
ACコード
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
bool cmp(pair<int,int> p1,pair<int,int> p2){
if(p1.second!=p2.second)
return p1.second>p2.second;
else
return p1.first<p2.first;
}
int main(){
int n,num;
cin >> n;
map<int,int> m;
for(int i = 0;i<n;i++){
cin >> num;
m[num]++;
}
vector<pair<int,int> > v(m.begin(),m.end());
sort(v.begin(),v.end(),cmp);
for(int i = 0;i<v.size();i++){
cout << v[i].first << " " << v[i].second << endl;
}
return 0;
}