【问题标题】:How codechef compiler works?codechef 编译器是如何工作的?
【发布时间】:2025-12-27 03:55:06
【问题描述】:

我想知道 codechef 编译器是如何工作的。实际上,不仅 codechef 编译器,其他竞争平台的编译器如何在后端工作。因为我过去在本地编译器上获得的输出有时与专门在 codechef 上的在线编译器不同。

例如,在我的本地编译器上,当我运行以下代码时,我得到了正确的输出:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    // your code goes here
    int t;
    cin >> t;
    while (t--)
    {
        int val, N, Z, count = 0, evacuate = 0;
        vector<int> v;
        cin >> N >> Z;
        for (int i = 0; i < N; i++)
        {
            cin >> val;
            v.push_back(val);
        }
        std::make_heap(v.begin(), v.end());
        while (Z > 0)
        {
            int power = v.front();
            Z = Z - power;
            std::pop_heap(v.begin(), v.end());
            v.pop_back();
            power = power / 2;
            if (power)
            {
                v.push_back(power);
                std::push_heap(v.begin(), v.end());
            }
            else if(power == 0 && Z > 0){
                evacuate = 1;
                break;
            }
            if (Z < 0)
            {
                count++;
                break;
            }
            count++;
        }
        if (evacuate)
            cout << "Evacuate" << endl;
        else
            cout << count << endl;
    }
}

当我在 codechef 编译器上运行相同的代码来解决 codechef problem 时,我得到了意外的输出(只有 0)

另外,cpp.sh 上的代码。

CodeChef 编译器如何工作以及两者的输出有何不同?可能问题也可能出在代码上,但在本地,我正在为手动提供的输入获得正确的输出。

【问题讨论】:

  • CodeChef 使用的编译器可以在这里找到:codechef.com/wiki/list-compilers
  • 哦,那我应该使用与 codechef 相同的编译器而不是 Visual Studio 或其他任何编译器吗?在否决问题之前,您是否研究过完整的问题?
  • 不用担心使用相同的编译器。如果您不使用任何高级语言功能,并且您的代码没有 UB,那么任何最新的编译器都应该为您提供相同的结果。
  • @HolyBlackCat 请注意 gcc 6.3 有点旧,仅部分支持 c++17。不支持 string_viewgcdto_chars 之类的内容。

标签: compiler-construction c++14


【解决方案1】:

刚刚检查过,您的代码工作正常。问题是您没有任何输入内容。

勾选“自定义输入”,然后输入“1 5 25 7 13 8 17 3”,就可以看到预期的结果了。

编辑:

为此,您首先要选中红色圆圈中的复选框,然后下方会显示一个文本框,您可以在蓝色框中输入您的测试用例。

【讨论】:

  • 我想知道我没有什么类型的输入。我看到你刚才在codechef上成功提交了代码,但是有什么变化。
  • @shivanshshrivastava 我没有更改任何内容,这正是您拥有的代码。很抱歉,如果我不小心提交了它,不知道你是否还能继续处理它。我只是想检查它是否有效。
  • 知道了,我应该提交而不是运行。我不熟悉 codechef 编译器,这就是为什么在上面的问题中询问它的原因。
  • @shivanshshrivastava 检查我的编辑,这就是您尝试自定义测试用例的方式。对于练习来说,这并不重要,但如果您可以先尝试不同的测试用例,那仍然会很好。但是如果你要参加任何比赛,如果你提交了任何错误的答案,你通常会被扣分。
  • 最后一件事为什么没有为我启用这个自定义输入。我的意思是我无法点击它。如何使用它 ?大声笑