这段代码存在以下问题:

  1. 在stone结构体中,sp()函数没有返回值,应该修改为返回long double类型的goods。

  2. 在cmp()函数中,比较浮点数应该使用std::abs()函数来判断两个浮点数是否相等,因为浮点数的精度问题可能导致直接比较不准确。

  3. 在main函数中,stone数组jw的大小应该是常量b,而不是变量b。可以使用动态数组或者使用vector替代。

  4. 在输出结果的时候,如果无法满足条件输出"Impossible",可以直接在循环结束后输出。不需要在每次条件满足的时候立即输出。

修正后的代码如下:

#include<bits/stdc++.h>
using namespace std;

struct stone
{
    long long size_, power;
    long double goods;

    long double sp()
    {
        goods = 1.0000000000000000000000000000000 * size_ / power;
        return goods;
    }
};

bool cmp(stone x, stone y)
{
    if(std::abs(x.goods - y.goods) > 1e-9)
    {
        return x.goods > y.goods;
    }
    return x.power < y.power;
}

int main()
{
    long long a, b, c;
    cin >> a >> b >> c;

    vector<stone> jw(b);
    for(int i = 0; i < b; i++)
    {
        cin >> jw[i].size_ >> jw[i].power;
    }

    for(int i = 0; i < b; i++)
    {
        jw[i].sp();
    }

    sort(jw.begin(), jw.end(), cmp);

    for(int i = 0; i < b; i++)
    {
        c -= jw[i].power;
        a -= jw[i].size_;

        if(c < 0)
        {
            cout << "Impossible";
            return 0;
        }
        else if(a <= 0)
        {
            cout << c;
            return 0;
        }
    }

    cout << "Impossible";
    return 0;
}
``

原文地址: https://www.cveoy.top/t/topic/h6RD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录