EX23 - 最頻値
https://atcoder.jp/contests/apg4b/tasks/APG4b_bz
連想配列の練習問題。
map関数を使う。
map関数の使い方
map<"型(int)", "型(int)"> "配列名(A)" ; //関数宣言
A["番号(4)"]="入力値(57)"; //入力
A["番号(2)"]="入力値(31)"; //入力
int a=A[2]; //呼び出し aに31が代入される
int a=A[10]; //宣言してない配列呼び出し A[10]=0で初期化され、a=0が代入されるはず
バケット法を関数でやれる。
今回の問題ではA[i]の数値を番号としてラベルし、その時の値をインクリメントするようにする。
# include <bits/stdc++.h>
# include <math.h>
using namespace std;
int main() {
long long N;
long long A[110000];
int max=0;
int ans;
map<long, long> B ;
cin>>N;
for(int i=0;i<N;i++){
cin>>A[i];
B[A[i]] = B[A[i]]+1; //A[i]の値をB配列に入力し、カウントアップする
if(max<B[A[i]]){
max=B[A[i]]; //最大値の個数を記録する。
ans=A[i]; //最大値を記録する。
}
}
cout<<ans<<" "<<B[ans]<<endl;
}