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

反省

境界の扱いで若干ミスった