けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AOJ 1147 ICPC 得点集計ソフトウェア (ICPC 国内予選 2007 A) (100 点)

平均求めるだけ

問題概要

 N 個の 0 以上の整数  s_{1}, \dots, s_{N} が与えられる。これらの値のうち、最大値と最小値を除去する (複数あるときはそのうちの 1 つ)。

残った  N-2 個の値の平均値 (小数点以下切り捨て) を求めよ。

制約

  • データセット数  \le 20
  •  3 \le N \le 100

考えたこと

 O(N) でできるけど、実装上はソートして先頭と末尾を除いて足して平均をとるのが楽そう。その場合の計算量は  O(N \log N) になる。

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

int main() {
    int N;
    while (cin >> N, N) {
        vector<int> a(N);
        for (int i = 0; i < N; ++i) cin >> a[i];
        sort(a.begin(), a.end());
        int S = 0;
        for (int i = 1; i+1 < N; ++i) S += a[i];
        cout << S / (N-2) << endl;
    }
}