poj2833

来源:互联网 发布:淘宝网购物女装皮衣 编辑:程序博客网 时间:2024/05/06 07:23
#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个最小的数,于是,问题简化,球所有数的和,再减去即可

0 0