请检查代码有什么问题:#includebitsstdc++husing namespace std;struct stone long long size_power; long double goods; long double sp goods = 10000000000000000000000000000000 size_ power; ;b
这段代码存在以下问题:
-
在stone结构体中,sp()函数没有返回值,应该修改为返回long double类型的goods。
-
在cmp()函数中,比较浮点数应该使用std::abs()函数来判断两个浮点数是否相等,因为浮点数的精度问题可能导致直接比较不准确。
-
在main函数中,stone数组jw的大小应该是常量b,而不是变量b。可以使用动态数组或者使用vector替代。
-
在输出结果的时候,如果无法满足条件输出"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 著作权归作者所有。请勿转载和采集!