AOJ 1600 Entrance Examination
問題
Entrance Examination | Aizu Online Judge
受験者の点数リストが与えられる。不合格者と合格者の点数差が最大になるn_min以上n_max以下で最大の合格者数を出力せよ
方針
点数を大きい順にソートし、n_min以上n_max以下の合格者数全てについて点数差を調べる
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define rep(i, n) for(int i=0; i<(n); ++i) int p[10001]; int main(void){ int m, n_min, n_max; while(cin >> m >> n_min >> n_max && m) { rep(i, m) cin >> p[i]; sort(p, p+m, greater<int>()); int gap = 0; int ans = 0; for(int i=n_min; i<=n_max; ++i) { if(p[i-1]-p[i] >= gap) { gap = p[i-1]-p[i]; ans = i; } } cout << ans << endl; } }
http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=1889215
反省
境界の扱いで若干ミスった