寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Aizu Online Judge in C++ #Volume0 - 0028 : Mode Value

Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。

・問題 "Mode Value"
https://onlinejudge.u-aizu.ac.jp/problems/0028
1〜100 の整数データを読みこんで、データの最頻値を出力するプログラムを作成してください。
複数ある場合は、値の小さい順に改行してすべて表示して下さい。

僕が作成、提出したコードは、以下のとおりです。

Aizu Online Judge in C++ #Volume0 - 0028 : Mode Value
/*
Aizu Online Judge in C++ #Volume0 - 0028 : Mode Value
https://onlinejudge.u-aizu.ac.jp/problems/0028
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    vector< pair<int,int> > v(100);
    for(int i=0;i<100;i++){
        v[i].first=0;
        v[i].second=i+1;
    }
    while(1){
        int n;
        cin>>n;
        if(cin.eof()){
            break;
        }
        v[n-1].first+=1;
        v[n-1].second=n;
    }
    sort(v.rbegin(),v.rend());
    vector<int> ans;
    ans.push_back(v[0].second);
    for(int i=1;i<100;i++){
        if(v[i].first==v[0].first){
            ans.push_back(v[i].second);
        }else{
            break;
        }
    }
    sort(ans.begin(),ans.end());
    for(int i=0;i<ans.size();i++){
        cout<<ans[i]<<endl;
    }
    return 0;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/