Official

B - Trimmed Mean Editorial by mechanicalpenciI


解法としてはいくつかありますが一番シンプルな方法としては、\(5N\) 人による評点をソートした後に上から \((N+1)\)番目の人から \(4N\) 番目までの平均を求めるというものがあります。

ソートは用意された関数を用いるのが基本的には十分高速かつ簡単な方法ですが、\(N\)\(100\) 程度であるため、バブルソートなどを自分で実装しても十分間に合います。平均を取る際、整数型ではなく(浮動 or 固定)小数点数型に直してから平均を取る必要があることに注意しましょう。

c++ による実装例 :

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

int main() {
	int n;
	double sum=0.0;
	cin>>n;

	vector<double> a(5*n);
	for(int i=0;i<5*n;i++)cin>>a[i];

	sort(a.begin(),a.end());
	for(int i=n;i<4*n;i++)sum+=a[i];
	cout<<sum/((double)(3*n))<<endl;

	return 0;
}

Pythonによる実装例 :

import numpy as np

n=int(input())
a=list(map(float,input().split()))
a.sort()
print(np.mean(a[n:4*n]))

posted:
last update: