在做一道OI题目时遇到编译错误。更换编译环境得到运行时错误。在本地(Code::Blocks c++17或VS Code c++23)上均编译通过,但在OJ(C++11~17)上提交却编译错误。本地答案也不太对。
题目和样例数据如下:
内存限制: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;
}
在你的代码基础上改了,见如下代码块
修改的部分加上了 ==== 的标识
#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;
typedef struct Metal {
double nAve;
int nHea;
} Metal;
//==== 解决编译的问题
Metal 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;
}
tmp = 1; //==== 每次执行要重新初始化tmp=1
sort(sample, sample + s, cmp);
while (moreSpace >= 0 && tmp <= s) {//==== 加上循环结束的条件tmp<=s
//==== 3目运算不需要这么复杂,只要判断剩余袋子和当前金属重量就行
// 如果剩余袋子大就取当前金属重量,如果小于就取剩余袋子的moreSpace
money += sample[s - tmp].nAve * ((sample[s - tmp].nHea > moreSpace ?
moreSpace :
//moreSpace :
//sample[s - tmp].nHea) == 0 ?
//moreSpace :
//(sample[s - tmp].nHea > moreSpace ?
sample[s - tmp].nHea));
moreSpace = moreSpace - (sample[s - tmp].nHea > moreSpace ?
moreSpace : sample[s - tmp].nHea);
++tmp;
}
cout << fixed << setprecision(2) << money << "\n";
money = 0, tmp = 1;
}
return 0;
}
望采纳!!!点击回答右侧采纳即可!!
我修改你的代码,你需要在main函数中调用这个代码,它会输出结果。
#include <iostream>
#include <cstring>
using namespace std;
const int N = 110, W = 1e4+10;
int n,m;
int w[N],v[N];
int f[W];
int main(){
int T;
cin >> T;
while(T--){
memset(f,0,sizeof f);
cin >> m >> n;
for(int i = 1;i <= n;i ++){
cin >> w[i] >> v[i];
}
for(int i = 1;i <= n;i ++){
for(int j = m;j >= w[i];j --){
f[j] = max(f[j],f[j-w[i]]+v[i]);
}
}
cout << f[m] << endl;
}
return 0;
}
我这里编译是没问题的除了setprecision要用到iomanip库,其他都没问题