0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AtCoderログ:0068 - ABC 213 B

Posted at

問題

問題文

$1,\ldots,N$ の番号のついた $N$ 人の選手がゲームを行いました。選手 $i$ のスコアは $A_i$ であり、スコアが小さい方が上位になります。
ブービー賞に該当する選手、すなわち、下位から $2$ 番目の選手の番号を求めてください。

制約

・$2 \le N \le 2 \times 10^5$
・$1 \le A_i \le 10^9$
・$A_i$ は相異なる
・入力に含まれる値は全て整数である

回答

回答1 (AC)

スコアをソートして下位から2番目の要素を取り出せば良いでしょう。設問のゲームではスコアが小さい方が上位になるので、昇順(小さい順)にソートした場合には、大きい方から2番目を取り出す必要があります。コードは以下のようになりました。

abc213b-1.cpp
#include <bits/stdc++.h>
using namespace std;
 
int main() {
  int n;
  cin >> n;

  vector<int> a(n), b(n);
  for ( int i=0; i<n; i++ ) {
    cin >> a.at(i);
  }
  copy( a.begin(), a.end(), b.begin() );
  sort( b.begin(), b.end() );
  
  for ( int i=0; i<n; i++ ) {
    if ( a.at(i)==b.at(n-2) ) {
      cout << i+1 << endl;
    }
  }
}

調べたこと

AtCoder の解説公式解説

解き方は回答1と同じですが、実装には pair を使っていて、スコアと選手番号をペアとして保持することで、ソートした後の処理を簡略化していました。

学んだこと

  • pair の第1成分に関するソートの処理方法

リンク

前後の記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?