诗人-with-BYD 2023-01-15 11:20 采纳率: 37.5%
浏览 81
已结题

C++OI方法编译错误,希望帮助

问题遇到的现象和发生背景

在做一道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;
}


更换环境成功编译,运行时错误

img

解答思路
  1. 创建结构体Metal存储金属的单位价值及重量。
  2. cmp()函数对应sort()函数的cemp()部分。按价值排序。
  3. sample[]存储金属。
  4. moreSpace记录当前袋子剩余空间。
  5. while循环内moreSpace和money的三目运算符很多,主要是判断该金属是否能装满袋子,以及计算其价值。
    付费悬赏!
  • 写回答

3条回答 默认 最新

  • X-道至简 2023-01-15 19:52
    关注

    在你的代码基础上改了,见如下代码块

    1. 执行结果是对了,输出符合预期
    2. 编译不过的问题修改了定义Metal的方式,可以先试试看是否解决了

    修改的部分加上了 ==== 的标识

    #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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月23日
  • 已采纳回答 1月15日
  • 修改了问题 1月15日
  • 修改了问题 1月15日
  • 展开全部

悬赏问题

  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上