迷瘴

TimeLimit: 1000MS Memory Limit: 65536KB

SubmitStatistic

Problem Description

 通过悬崖的yifenfei,又面临着幽谷的考验——

幽谷周围瘴气弥漫,静的可怕,隐约可见地上堆满了骷髅。由于此处长年不见天日,导致空气中布满了毒素,一旦吸入体内,便会全身溃烂而死。

幸好yifenfei早有防备,提前备好了解药材料(各种浓度的万能药水)。现在只需按照配置成不同比例的浓度。

现已知yifenfei随身携带有n种浓度的万能药水,体积V都相同,浓度则分别为Pi%。并且知道,针对当时幽谷的瘴气情况,只需选择部分或者全部的万能药水,然后配置出浓度不大于 W%的药水即可解毒。

现在的问题是:如何配置此药,能得到最大体积的当前可用的解药呢?

特别说明:由于幽谷内设备的限制,只允许把一种已有的药全部混入另一种之中(即:不能出现对一种药只取它的一部分这样的操作)。

提示:多种药水混合后的浓度=(浓度1*体积1+浓度2*体积2+……)/(体积和)

 

Input

 输入数据的第一行是一个整数C,表示测试数据的组数;

每组测试数据包含2行,首先一行给出三个正整数n,V,W(1<=n,V,W<=100)

接着一行是n个整数,表示n种药水的浓度Pi%(1<=Pi<=100)

Output

 对于每组测试数据,请输出一个整数和一个浮点数;

其中整数表示解药的最大体积,浮点数表示解药的浓度(四舍五入保留2位小数)

如果不能配出满足要求的的解药,则请输出0 0.00

Example Input

3

1 100 10

100

2 100 24

20 30

3 100 24

20 20 30

Example Output

0 0.00

100 0.20

300 0.23

Hint

hdoj2570

Author

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;


int cmp( const void*a,const void*b)
{

  return *(int *)a-*(int *)b;
}
int main()
{
int t;

  scanf("%d",&t);
  while(t--)
  {

      int n,v,w;
      int ah[101];
      scanf("%d%d%d",&n,&v,&w);
      for(int i=1;i<=n;i++)
      {

          scanf("%d",&ah[i]);

      }
      qsort(&ah[1],n,sizeof(ah[1]),cmp);
      if(ah[1]>w)
      {
      printf("0 0.00\n");
        continue;
       }
    int tempv = v;
    double tempp = ah[1];
    int i;
    for( i=2;i<=n;i++)
    {
        tempp+=ah[i];
        if(tempp/(i)<=w)
        {
           tempv += v;

        }
        else
        {
            tempp -=ah[i];
            break;
        }


    }
    i--;
    printf("%d %.2lf\n",tempv,tempp/i/100.0);


  }




  return 0;

}


/***************************************************
User name: jk160505徐红博
Result: Accepted
Take time: 0ms
Take Memory: 104KB
Submit time: 2017-01-11 20:35:36
****************************************************/