问题遇到的现象和发生背景
在做一道OI题目时遇到编译错误。更换编译环境得到运行时错误。在本地(Code::Blocks c++17或VS Code c++23)上均编译通过,但在OJ(C++11~17)上提交却编译错误。本地答案也不太对。
题目和样例数据如下:
题目
G. 金银岛
内存限制:256 MiB
时间限制:1000 ms
标准输入输出
题目类型:传统
评测方式:文本比较
题目描述
某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为w的物品。岛上金属有s个种类, 每种金属重量不同,分别为n1,n2,...,ns,同时每个种类的金属总的价值也不同,分别为v1,v2,...,vs。KID想一次带走价值尽可能多的金属,问他最多能带走价值多少的金属。注意到金属是可以被任意分割的,并且金属的价值和其重量成正比。
输入格式
第1行是测试数据的组数k,后面跟着k组输入。
每组测试数据占3行,第1行是一个正整数w(1≤w≤10000),表示口袋承重上限。第2行是一个正整数s(1≤s≤100),表示金属种类。第3行有2s个正整数,分别为n1,v1,n2,v2,...,ns,vs分别为第一种,第二种,第s种金属的总重量和总价值(1≤ni≤10000,1≤vi≤10000)。
输出格式
k行,每行输出对应一个输入。输出应精确到小数点后2位。
样例
样例
样例输入
2
50
4
10 100 50 30 7 34 87 100
10000
5
1 43 43 323 35 45 43 54 87 43
样例输出
171.93
508.00
本地输出答案与样例不符。
报错。报错信息较长,很抱歉,但希望各位指点。
||=== 构建文件: "无目标" 在 "无项目" 中 (编译器: 未知的) ===|
||=== 构建文件: "无目标" 在 "无项目" 中 (编译器: 未知的) ===|
C:\Users\CodeS\Desktop\test\d15test7.cpp||In function 'int main(int, char**)':|
C:\Users\CodeS\Desktop\test\d15test7.cpp|26|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|27|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|27|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|29|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|29|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|31|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|31|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|32|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|33|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|35|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|36|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|37|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|38|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|39|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|40|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|42|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|43|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|44|error: reference to 'sample' is ambiguous|
D:\CodeBlocks\MinGW\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits\stl_algo.h|5813|note: candidates are: 'template<class _PopulationIterator, class _SampleIterator, class _Distance, class _UniformRandomBitGenerator> _SampleIterator std::sample(_PopulationIterator, _PopulationIterator, _SampleIterator, _Distance, _UniformRandomBitGenerator&&)'|
C:\Users\CodeS\Desktop\test\d15test7.cpp|13|note: 'Metal sample [105]'|
||=== 构建 失败: 18 error(s), 0 warning(s) (0 分, 0 秒) ===|
代码
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
const int MSTKND = 105;
double heav, mon, money;
int k, tmp = 1, s, moreSpace, mostBri;
struct Metal {
double nAve;
int nHea;
}sample[MSTKND];
bool cmp(Metal sample1, Metal sample2) {
return sample1.nAve < sample2.nAve;
}
int main(int argc, char* argv[]) {
ios::sync_with_stdio(false);
cin >> k;
for (int test = 0; test < k; ++test) {
cin >> mostBri >> s;
moreSpace = mostBri;
for (int i = 0; i < s; ++i) {
cin >> sample[i].nHea >> mon;
sample[i].nAve = mon / sample[i].nHea;
}
sort(sample, sample + s, cmp);
while (moreSpace >= 0) {
money += sample[s - tmp].nAve * ((sample[s - tmp].nHea > moreSpace ?
sample[s - tmp].nHea % moreSpace :
sample[s - tmp].nHea) == 0 ?
moreSpace :
(sample[s - tmp].nHea > moreSpace ?
sample[s - tmp].nHea % moreSpace :
sample[s - tmp].nHea));
moreSpace = moreSpace - ((sample[s - tmp].nHea > moreSpace ?
sample[s - tmp].nHea % moreSpace :
sample[s - tmp].nHea) == 0 ?
moreSpace :
(sample[s - tmp].nHea > moreSpace ?
sample[s - tmp].nHea % moreSpace :
sample[s - tmp].nHea));
++tmp;
}
cout << fixed << setprecision(2) << money << "\n";
money = 0, tmp = 1;
}
return 0;
}
更换环境成功编译,运行时错误
解答思路
- 创建结构体Metal存储金属的单位价值及重量。
- cmp()函数对应sort()函数的cemp()部分。按价值排序。
- sample[]存储金属。
- moreSpace记录当前袋子剩余空间。
- while循环内moreSpace和money的三目运算符很多,主要是判断该金属是否能装满袋子,以及计算其价值。
付费悬赏!