#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
struct pile {
float m;
float v;
float ratio;
void calculate() {
ratio = v / m;
}
} mpile[105];
bool cmp(pile a, pile b) {
return a.ratio > b.ratio;
}
int main() {
int n, t;
float msum = 0, vsum = 0;
int mark = 0;
cin >> n >> t;
for (int i = 0; i < n; i++) {
cin >> mpile[i].m >> mpile[i].v;
}
for (int i = 0; i < n; i++) {
mpile[i].calculate();
}
sort(mpile, mpile + n, cmp);
while (msum <= t && mark < n) {
msum += mpile[mark].m;
vsum += mpile[mark].v;
mark++;
}
if (msum > t) {
if (mpile[mark - 1].m != 0) {
vsum -= (t - msum) * mpile[mark - 1].v / mpile[mark - 1].m;
}
else {
}
}
cout << fixed << setprecision(2) << vsum;
return 0;
}
是因为精度丢失吗?怎样改正呢