公式

B - ずば抜けた得点 / Outstanding Score 解説 by kyopro_friends


ラウンドごとに独立に \(T\) 回問題を解きます。

ずば抜けている選手がもし存在するなら、そのラウンドの最高得点の選手です。ずば抜けている選手以外の得点の最大値は、全体で \(2\) 番目に高い得点です。

よって、各ラウンドについて、得点の最大値 \(x\) と高い方から \(2\) 番目 \(y\) について \(x\geq 2y\) であるかを調べればよいです。 選手の得点をソートすることで \(O(N\log N)\) で判定することができます。

実装例 (C++)

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

int main(){
  int n, t;
  cin >> n >> t;
  int ans = 0;
  for(int i=0; i<t; i++){
    vector<int>s(n);
    for(int j=0; j<n; j++) cin >> s[j];
    sort(s.rbegin(), s.rend());  //降順ソート
    if(s[0] >= 2 * s[1]){
      ans++;
    }
  }
  cout << ans << endl;
}

実装例 (Python)

N, T = map(int, input().split())
ans = 0
for _ in range(T):
  S = list(map(int, input().split()))
  S.sort()
  if S[-1] >= 2 * S[-2]:
    ans += 1

print(ans)

投稿日時:
最終更新: