公式

B - プログラミングコンテストの順位表 / Scoreboard of a Programming Contest 解説 by kyopro_friends 印刷ページ


問題文の指示通りの順序でソートしましょう。順位順は (スコア, レート, 参加番号の \(-1\) 倍) の \(3\) つ組を降順にソートしたものと一致するので、標準のソート関数を用いてソートすることができます。計算量は \(O(N\log N)\) になります。

(「スコアの降順、タイならレートの降順、タイなら参加番号の昇順」と、最後だけ昇順になっているため、全て降順となるように、参加番号を \(-1\) 倍しています)

実装例 (C++)

#include<bits/stdc++.h>
using namespace std;

int main(){
  int n;
  cin >> n;
  vector<array<int, 3>> data;
  for(int i=1; i<=n ;i++){
    int a, b;
    cin >> a >> b;
    data.push_back({b, a, -i});
  }

  sort(data.rbegin(), data.rend());  // 降順ソート
  for(auto [b, a, i]: data){
    cout << -i << endl;
  }
}

実装例 (Python)

N = int(input())
data = []
for i in range(1, N+1):
  a, b = map(int, input().split())
  data.append((b, a, -i))

data.sort(reverse=True)  # 降順ソート
for _, _, i in data:
  print(-i)

投稿日時:
最終更新: