前言:
21考研,正在啃《算法笔记》,不论能否进复试记录一下准备路上写下的垃圾代码。
解答:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(int a, int b) {
return a < b;
}
int main() {
int n ;
cin >> n;
while (n--) {
int count, vol, sum_vol = 0;
double temp;
double cur_w = 0, maxw;
vector<double> pi;
cin >> count >> vol >> maxw;
maxw /= 100;
for (int i = 0; i < count; i++) {
cin >> temp;
temp /= 100;
pi.push_back(temp);
}
sort(pi.begin(), pi.end());
if (pi[0] > maxw) //当最小浓度大于要求浓度w时,不可能完成
cout << "0 0.00" << endl;
else {
for (int i = 0; i < pi.size(); i++) {
//加入后浓度不超则加
if (((cur_w * sum_vol + pi[i] * vol) / (sum_vol + vol)) <= maxw) {
cur_w = (cur_w * sum_vol + pi[i] * vol) / (sum_vol + vol);
sum_vol += vol;
}
}
printf("%d %.2lf\n", sum_vol, cur_w);
}
}
return 0;
}
从浓度最低的开始加