编译器的不同输出

different output with compilers?

本文关键字:输出 编译器      更新时间:2023-10-16

我正在解决一个网站上的编程问题。在我的机器(Visual Studio 2010)上,一个测试用例给出了错误的结果,而在网站上给出了正确的结果。我不确定网站评判的编译器是什么,但我认为它类似于gcc或cygwin。

代码

一个图形问题。这里的图形表示为一棵树。该图是有向的,不包含循环。解决方案为(2 * sum of all edges - max path length from root)

//     to-vertex & edge-length
vector<pair<int, int> > pr[100];
int dfs(int i) // to find max path length from root
{
    int mx = 0;
    for (int j = 0; j < pr[i].size(); ++j)
        mx = max(mx, dfs(pr[i][j].first) + pr[i][j].second);
    return mx;
}
int PowerOutage::estimateTimeOut(vector <int> from_vertex,
                 vector <int> to_vertex, vector <int> edge_length)
{
    int tot = 0;
    for (int i = 0; i < from_vertex.size(); ++i)
    {
        pr[from_vertex[i]].push_back(make_pair(to_vertex[i], edge_length[i]));
        tot += (2 * edge_length[i]);
    }
    return tot - dfs(0);
}

测试用例

from_vertex   {0,     0,   0,   0,   0}
to_vertex     {1,     2,   3,   4,   5}
edge_length   {100, 200, 300, 400, 500}

Visual Studio返回:2493而站点的编译器返回正确答案:2500

为什么这两个结果不同?我认为VS中出现了一些隐藏的错误,给出了错误的答案,但在其他编译器中却失败了。我应该确定网站的编译器并使用它吗?

尽管我第一次(错误)假设,OP已经发现它是2500,但在我问他"2500在哪里打印?"之后,测试函数出现了缺陷。