0

这是我的代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    freopen("bcount.in", "r", stdin);
    freopen("bcount.out", "w", stdout);
    int n, q;
    cin >> n >> q;
    vector<int> holsteins(n);
    vector<int> guernseys(n);
    vector<int> jerseys(n);
    for (int i = 0 ; i < n ; i++) {
        holsteins[i+1]=holsteins[i];
        guernseys[i+1]=guernseys[i];
        jerseys[i+1]=jerseys[i];
        int a;
        cin >> a;
        if (a==1) holsteins[i+1]++;
        else if (a==2) guernseys[i+1]++;
        else jerseys[i+1]++;
    }
    for (int i = 0; i < q ; i++) {
        int a, b;
        cin >> a >> b;
        cout << holsteins[b]-holsteins[a-1] << " " << guernseys[b]-guernseys[a-1] << " " << jerseys[b]-jerseys[a-1] << "\n";
    }
    return 0;
}

当我运行它时,它无法通过示例案例,并且官方评分者说存在运行时错误或内存失败。我怀疑它有一些带输入输出的东西,但没有。这里有什么问题?

4

1 回答 1

2

显示的代码中有多个错误,假设它甚至可以编译,因为:

#include <bits/stdc++.h>

这是一个非标准的头文件。在某些 C++ 编译器上,显示的代码甚至无法编译。假设显示的代码编译:

    cin >> n >> q;
    vector<int> holsteins(n);

不检查此输入的有效性。无效或负输入会导致未定义的行为。

    for (int i = 0 ; i < n ; i++) {
        holsteins[i+1]=holsteins[i];

i当is n-1、 so i+1isn和 this 分配给时,这会导致未定义的行为,而holsteins[n]后者不存在。

        guernseys[i+1]=guernseys[i];
        jerseys[i+1]=jerseys[i];

同样的错误,访问向量中不存在的值时的未定义行为。

        int a;
        cin >> a;
        if (a==1) holsteins[i+1]++;

第一个错误的继续/变化。无效或负输入会导致未定义的行为。

        int a, b;
        cin >> a >> b;
        cout << holsteins[b]-holsteins[a-1] << " " << guernseys[b]-

以上所有的错误,结合起来。由于无效或负输入,或由于访问不存在的向量值(when bor aisn或更大)而导致的未定义行为。

这些都是我可以看到为什么显示的代码由于未定义的行为而无法正常工作的原因。

于 2022-01-26T02:31:43.710 回答