宁波现场热身赛B题
#include <stdio.h>
#include <algorithm>
#include <functional>
using namespace std;
int n1,n2,n,num;
int high[15],low[15];
int h,l;
__int64 sum;
int addhigh(int &num)
{
if (h<n1)
{
high[h++] = num;
return -1;
}
else
{
sort(high,high+n1,less<int>()); // 这里可以改进,其实不用完全排序,只要选出最小的放到high[0]。O(n*lgn)-->O(n)
if (num>high[0])
{
int temp = high[0];
high[0] = num;
return temp;
}
else return num;
}
}
int addlow(int &num)
{
if (l<n2)
{
low[l++] = num;
return -1;
}
else
{
sort(low,low+n2,greater<int>());
if (num<low[0])
{
int temp = low[0];
low[0] = num;
return temp;
}
else return num;
}
}
int main()
{
while(scanf("%d%d%d",&n1,&n2,&n))
{
if (!n1 && !n2 && !n) break;
h = l = 0; sum = 0;
for (int i=0;i<n;i++)
{
scanf("%d",&num);
if((num=addhigh(num))>0)
if((num=addlow(num))>0)
sum+=num;
}
printf("%.6lf/n",double(sum)/(n-n1-n2));
}
}