Official

B - Nineball Editorial by physics0523 Editorial for printing


原案: physics0523

バケットソート を利用すると簡単です。
バケットソートとは、 \(bk[x] = \{\) \(x\) が何個あるか \(\}\) という情報を作成することによってソートできたとみなすソートです。
これは、 \(A\) の各要素について \(bk[A_i]\) に \(1\) 加算するというような処理の繰り返しで実現可能です。

\(9\) 番のボールが残っているかどうかは \(bk[9]\) が \(0\) かどうかで判断できます。
残っているボールの番号の最小値を求めるためには、 \(i=1,2,\dots,9\) について順に \(bk[i]\) が \(1\) かどうか調べ、 \(bk[i]=1\) なる最小の \(i\) が求めるものであるとすればよいです。

一連の流れは、 if 文や for ループの組み合わせなどで実現可能です。

実装例 (C++):

#include<bits/stdc++.h>

using namespace std;

int main(){
  int K;
  cin >> K;
  vector<int> bk(10,0);
  for(int i=0;i<K;i++){
    int A;
    cin >> A;
    bk[A]=1;
  }
  if(bk[9]==0){cout << "-1\n"; return 0;}
  for(int i=1;i<=9;i++){
    if(bk[i]==1){
      cout << i << "\n";
      return 0;
    }
  }
  return 0;
}

posted:
last update: