公式

A - クラス委員長の選出 / Election of the Class President 解説 by physics0523


初心者の方へ


まず、 \(A\) の最大値を取ることで得票数の最大値 \(M\) を求めておきます。
これには for 文と if 文の組み合わせや、標準で実装されている最大値を取る機能を活用するなどの方法があります。

次に、最大数の票を得ているのが誰か (あるいは \(2\) 人以上いるのか) を判定します。例えば、以下の手順で求めることができます。

  • 最初、答え \(res=-2\) としておく。
  • \(i=1,2,\dots,N\) について、以下を繰り返す。
    • もし \(A_i = M\) ならその生徒は最大数の票を得ている。
      • もし \(res=-2\) なら \(res=i\) と置き換える。
      • そうでないなら、生徒 \(res\) と生徒 \(i\) がどちらも最大数の票を得ていることが分かるため、 \(res=-1\) とする。

こちらも、 for 文と if 文の組み合わせなどで実装できます。

実装例 (C++):

#include<bits/stdc++.h>

using namespace std;

int main(){
  int N;
  cin >> N;
  vector<int> A(N+1,0);
  for(int i=1;i<=N;i++){ cin >> A[i]; }
  int mxm=(*max_element(A.begin()+1,A.end()));
  int res=-2;
  for(int i=1;i<=N;i++){
    if(mxm==A[i]){
      if(res==-2){res=i;}
      else{res=-1;}
    }
  }
  cout << res << "\n";
  return 0;
}

投稿日時:
最終更新: