APG4b EX23を解いた
APG4b(AtCoder Programming Guide for beginners )はAtCoderが提供する、C++の入門教材です。今日はその中で「辞書」を用いて回答するEX23に挑戦しました。EX23はABC(AtCoder Beginner Contest)でいうとB問題ぐらいの難易度だと思います。
EX23 - 最頻値
N要素の数列が与えられるので、最頻値とその回数を出力する問題
作成した解答
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;
int main() {
int n;
cin >> n;
map<int, int> am;
int max_num = 0;
am[max_num];
rep(i, n){
int a;
cin >> a;
am[a]++;
if(am.at(max_num) < am.at(a)) max_num = a;
}
cout << max_num << " " << am.at(max_num) << endl;
}
解説
シンプルに出てきた数を比較しているだけですが、配列へのアクセス同様APG4bでは「[]」よりも「.at()」がお勧めされているのでそれに従ってみました。2ヶ所「[]」でのアクセスが出てきていますが、これは「.at()」は値の初期化ができない(存在しないキーにアクセスしようとするとエラーになる)ためです。ちなみに「[]」で存在しないキーにアクセスした場合は、型の初期値で初期化されます。
この記事が気に入ったらサポートをしてみませんか?