stl优先队列,保持两个优先队列一个存大树一个是小数
#include<iostream>
#include<queue>
using namespace std;
priority_queue<int>big,little;
int main()
{
__int64 sum;
int a,i,p;
int n1,n2,n;
while(1)
{
sum=0;
scanf("%d%d%d",&n1,&n2,&n);
if(n1==0&&n2==0&&n==0)
break;
for(i=0;i<n;i++)
{
scanf("%d",&a);
sum+=a;
big.push(-a);//保存最小的负数,也就是最大的数
if(big.size()>n1)
big.pop();
little.push(a);//保存实际小数
if(little.size()>n2)
little.pop();
}
for(i=0;i<n1;i++)
{
sum+=big.top();
big.pop();
}
for(i=0;i<n2;i++)
{
sum-=little.top();
little.pop();
}
printf("%.6lf/n",(double)sum/((double)(n-n1-n2)));
}
return 0;
}