原题: http://acm.hdu.edu.cn/showproblem.php?pid=2570
//hdu 2570
//贪心:将溶液的浓度从小到大排序,只要当前溶液的溶度<=所需浓度W就一直取下去,直到大于W,结束循环
//因为溶液时不可分割的,所以每次取都要一瓶一瓶地取。
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
double pi[101];
int cmp(double a,double b)
{
return a<b;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
double v,w;
int n;
scanf("%d %lf %lf",&n,&v,&w);
for(int i=0;i<n;i++)
{
scanf("%lf",&pi[i]);
}
sort(pi,pi+n,cmp);
double rs=0;
double c=0;
double tmpi=0;
for(int i=0;i<n;i++)
{
c=c+pi[i]*v;//溶质质量
rs=rs+v;//当前体积
tmpi=c/rs;
if(tmpi>w){
rs=rs-v;
c=c-pi[i]*v;
break;
}
}
if(rs==0){
printf("0 0.00\n");
}else{
printf("%.0lf %.2lf\n",rs,c/rs/100);
}
}
return 0;
} //AC
有一道类似的题目,但比这个要复杂
https://www.rqnoj.cn/status/1195613