#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct GoldCoin {
int weight;
int value;
int factor;
};
bool compare(GoldCoin g1, GoldCoin g2) {
return g1.factor > g2.factor;
}
int main() {
int n;
double bag;
cin >> n >> bag;
vector<GoldCoin> vec;
for (int i = 0; i < n; i++) {
int w, v;
cin >> w >> v;
GoldCoin g;
g.weight = w;
g.value =v;
g.factor = double(v)/double(w);
vec.push_back(g);
}
sort(vec.begin(), vec.end(), compare);
double value = 0.0;
double weight = 0.0;
for (auto &gold_coin : vec) {
// cout << "Current weight: " << weight << endl;
//cout << "This coin's weight: " << gold_coin.weight << endl;
if (bag - weight >= gold_coin.weight) {
// add gold coin
weight += gold_coin.weight;
value += gold_coin.value;
} else {
double weight_left = bag - weight;
double value1 = weight_left * gold_coin.factor;
weight += weight_left;
value += value1;
}
}
printf("%.2f", value);
}
样例和第一个测试点可以过,但是其他的测试点都奇葩的WA,感觉思路也没有错误,死活不知道为什么无法通过,求助