{"title":"请检查代码有什么问题:\n#include<bits/stdc++.h>\nusing namespace std;\n\nstruct stone\n{\n long long size_, power;\n long double goods;\n\n long double sp()\n {\n goods = 1.0000000000000000000000000000000 * size_ / power;\n return goods;\n }\n};\n\nbool cmp(stone x, stone y)\n{\n if(std::abs(x.goods - y.goods) > 1e-9)\n {\n return x.goods > y.goods;\n }\n return x.power < y.power;\n}\n\nint main()\n{\n long long a, b, c;\n cin >> a >> b >> c;\n\n vector jw(b);\n for(int i = 0; i < b; i++)\n {\n cin >> jw[i].size_ >> jw[i].power;\n }\n\n for(int i = 0; i < b; i++)\n {\n jw[i].sp();\n }\n\n sort(jw.begin(), jw.end(), cmp);\n\n for(int i = 0; i < b; i++)\n {\n c -= jw[i].power;\n a -= jw[i].size_;\n\n if(c < 0)\n {\n cout << "Impossible";\n return 0;\n }\n else if(a <= 0)\n {\n cout << c;\n return 0;\n }\n }\n\n cout << "Impossible";\n return 0;\n}\n本题为改编题。\n\n发鸠之山,其上多柘木。有鸟焉,其状如乌,文首,白喙,赤足,名曰精卫,其名自詨。是炎帝之少女,名曰女娃。女娃游于东海,溺而不返,故为精卫。常衔西山之木石,以堙于东海。——《山海经》\n\n精卫终于快把东海填平了!只剩下了最后的一小片区域了。同时,西山上的木石也已经不多了。精卫能把东海填平吗?\n\n事实上,东海未填平的区域还需要至少体积为 \n�\nv 的木石才可以填平,而西山上的木石还剩下 \n�\nn 块,每块的体积和把它衔到东海需要的体力分别为 \n�\nk 和 \n�\nm。精卫已经填海填了这么长时间了,她也很累了,她还剩下的体力为 \n�\nc。\n\n输入格式\n输入文件的第一行是三个整数:\n�\n, \n�\n, \n�\nv,n,c。\n\n从第二行到第 \n�\n+\n1\nn+1 行分别为每块木石的体积和把它衔到东海需要的体力。\n\n输出格式\n输出文件只有一行,如果精卫能把东海填平,则输出她把东海填平后剩下的最大的体力,否则输出 Impossible(不带引号)。\n\n输入输出样例\n输入 #1复制\n100 2 10\n50 5\n50 5\n输出 #1复制\n0\n输入 #2复制\n10 2 1\n50 5\n10 2\n输出 #2复制\nImpossible\n说明/提示\n数据范围及约定\n对于 \n20\n% \n20% 的数据,\n0\n< \n�\n≤ \n50\n0<n≤50;\n对于 \n50\n% \n50% 的数据,\n0\n< \n�\n≤ \n1000\n0<n≤1000;\n对于 \n100\n% \n100% 的数据,\n0\n< \n�\n≤ \n1\n0\n4\n0<n≤10 \n4\n ,所有读入的数均属于 \n[\n0\n, \n1\n0\n4\n] \n[0,10 \n4\n ],最后答案不大于 \n�\nc。内容:代码没有明显的语法错误,但是存在一些问题:\n\n1. 在sp()函数中,将size_除以power时,使用了long double类型,但是结果赋给的是goods,goods是long double类型,将size_强制转换为long double类型是多余的,可以直接赋值给goods。\n\n2. 在cmp()函数中,比较浮点数大小时,使用了std::abs()函数,这个函数是求绝对值的,对于浮点数比较,应该使用std::fabs()函数。\n\n3. 在main()函数中,输入了a、b、c三个变量,但是在后面的代码中没有使用a和c这两个变量,可以考虑删除或者使用这两个变量。\n\n4. 在排序时,使用了std::sort()函数,但是该函数默认是升序排序,根据题目描述的要求,应该是按照降序排序,可以考虑使用std::sort()的第三个参数指定排序规则,或者使用std::greater<>()比较器。\n\n5. 在计算剩余体力和判断是否填平时,没有考虑到木石的体积可能超过剩余的体力,应该在计算剩余体力时进行判断,如果剩余体力小于0,则输出"Impossible"。

C++ 代码优化:精卫填海问题解答

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

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