yokobuttonの不定期で競技プログラミングをするブログ

不定期で解けた競技プログラミングコンテストの問題を載せています。

パナソニックプログラミングコンテスト2021(AtCoder Beginner Contest 231) B - Election

問題の要約
 選挙が行われる。
 N人が投票を行い,i(1<=i<=N)番目の人はSiという名前の候補者に投票した。
 得票数が最大の候補者の名前を答えよ。なお,与えられる入力では得票数が最大の候補者は一意に定まる。
制約
 1<=N<=100
入力
 N
 S1
 ...
 SN
考え方
 1,投票者の番号を1ずらす
  1<=i<=N => 0<=i<=N-1
 2,map<string,int>で投票数を管理する。
 3,map<string,int>の最大の投票数を得た候補者の名前を出力する。
  mapとは別にvector<string>で候補者の名前を管理しておく。
実際のプログラム
#include<iostream>
#include<map>
#include<string>
#include<vector>

using namespace std;

int main(){
  int N;
  cin >> N;
  map<string,int> mp;
  vector<string> S(N);
  for(int i = 0; i < N; i++){
    string Si;
    cin >> Si;
    S[i] = Si;
    mp[Si]++;
  }
  
  string ans;
  int max = -1;
  for(int i = 0; i < N; i++){
    if(max < mp[S[i]]){
      ans = S[i];
      max = mp[S[i]];
    }
  }
  
  cout << ans << endl;
  return 0;
}