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