题目链接 #pragma warning(disable:4996); #include<stdio.h> #include<math.h> #include<string.h> #include<iostream> #include<algorithm> #include<string> using namespace std; double p[101];//存放浓度 int main(){ int c; while (scanf("%d", &c) != EOF) { while (c--) { double n, v, w; scanf("%lf%lf%lf", &n, &v, &w); for (int i = 0;i <= n - 1;i++) { scanf("%lf", &p[i]); } sort(p, p + (int)n); double cv = 0;//当前溶液体积; double cp = 0;//当前浓度; double cm = 0;//当前质量; for (int i = 0;i < n;i++) { //从最小浓度溶液调试,满足则加进去,不满足跳过 if ((cm + p[i] * v) / (cv + v) <= w) { cv += v; cm += p[i] * v; cp = cm / cv; } else break;//如果碰到不满足的溶液,则其后一定也不满足; } cout << cv << " "; printf("%.2lf\n", cp * 0.01); } } return 0; }