ニンニク君面接-計ニンニク客


目次
タイトル
問題解
タイトル
  •  1000ms
  •  131072K

  •  
    ニンニク君がニンニク工場に面接に来たとき、こんな面接問題に出会ったことがあります.
    n個の整数を与え,中に出現回数が最も多い数を求め,複数の重複出現数があれば最大値の1つを求める.当時はニンニク君に困っていたが、今はニンニク君が試験に来た.
    入力フォーマット
    最初の行には整数n(1≦n≦100000)が入力され、次の行にはn個のint範囲の整数が入力されます.
    出力フォーマット
    出現回数が最も多い数と出現回数を出力し、中間を1つのスペースで区切って、複数の重複出現数があれば、出力値が最も大きいものを出力します.
    出力時の各行の末尾の余分なスペースは、答えの正確性に影響しません.
    「ファイル入出力」方式で問題を解くことを要求し、入力ファイルはinterviewである.in,出力ファイルはinterview.out
    サンプル入力1
    5
    1 1 2 3 4
    サンプル出力1
    1 2
    サンプル入力2
    10
    9 10 27 4 9 10 3 1 2 6
    サンプル出力2
    10 2
       
     
    問題:
    知識点:mapの応用
    分析:本題の難点はテストデータに負数があると配列を使うことができなくて、mapは配列の反復版に相当するので、mapでデータ(カウント)を保存して、反復器の使用に注意します.
    コード:
    #include
    #include
    #include
    using namespace std;
    int main(){
        freopen("interview.in","r",stdin);
        freopen("interview.out","w",stdout);
        mapmp;//      ,      
        int n;
        cin>>n;
        for (int i=0,x;i>x;
            mp[x]++;// map   
        }
        
        int ans=-1,cnt=0;//ans      ,cnt    
        for (map::iterator it=mp.begin();it!=mp.end();it++){
            if (it->second>=ans){//    、      
                ans=it->second;//
                cnt=it->first;
            }
        }
        cout<