#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
typedef long long ll;
int main()
{
int n1, n2, n;
while(scanf("%d%d%d", &n1, &n2, &n) != EOF && (n1 + n2 + n)){
ll a;
ll sum = 0;
priority_queue <ll, vector<ll>, greater<ll> > small, big;//优先队列数字越小优先越低 所以这样让小的数字优先级变高
for(int i = 0; i < n; i++){
scanf("%lld", &a);
sum += a;
big.push(a);
if(big.size() > n1)
big.pop();
small.push(-a);
if(small.size() > n2)
small.pop();
}
for(int i = 0; i < n1; i++){
sum -= big.top();
big.pop();
}
for(int i = 0; i < n2; i++){
sum += small.top();
small.pop();
}
printf("%f\n", (sum*1.0) / (n - n1 - n2)); //这里手误写成了%llf然后一直wa
}
return 0;
}
poj2833(优先队列)
最新推荐文章于 2022-03-08 09:13:55 发布