#include <iostream>
#include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std;
long long maxx[15],minx[15],total,r;
double avr;
int main()
{
int n1,n2,n,i;
// freopen("in.txt","r",stdin);
while (1)
{
scanf("%d%d%d",&n1,&n2,&n);
if (n1+n2+n==0) break;
memset(minx,100000001,sizeof(minx));
memset(maxx,0,sizeof(maxx));
total=0;
for (i=1;i<=n;i++)
{
scanf("%lld",&r);
total+=r;
sort(minx+1,minx+n2+1);
sort(maxx+1,maxx+n1+1);
if (minx[n2]>r) minx[n2]=r; //r<最小值组里的最大值
if (maxx[1]<r) maxx[1]=r; //r>最大值组里的最小值
}
for (i=1;i<=n2;i++) total-=minx[i];
for (i=1;i<=n1;i++) total-=maxx[i];
avr=double(total)/double(n-n1-n2);
printf("%.6f\n",avr);
}
// cout << "Hello world!" << endl;
return 0;
}
给出N个分数,要求去掉n1个最高分,n2个最低分,然后算平均分。
其实不太难,只是数据量太大,不能一次读入,但是可以看到,n1,n2都很小很小,只用全部加起来再减去n1个最大的数,减去n2个最小的数,于是,问题简化,球所有数的和,再减去即可