只有二十分,只有第一个测试点通过,求助大佬(>.<))
查看原帖
只有二十分,只有第一个测试点通过,求助大佬(>.<))
1292265
Zzz123456789101112楼主2024/3/22 16:14
#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 {
            // 处理 mpile[mark-1].m 为 0 的情况
        }
    }
    
    cout << fixed << setprecision(2) << vsum;
    
    return 0;
}
  

是因为精度丢失吗?怎样改正呢

2024/3/22 16:14
加载中...