无法找出下面的程序中的错误

时间:2019-03-25 16:05:35

标签: c++ algorithm brute-force

我正在解决问题https://codeforces.com/contest/489/problem/B

这是一种简单的蛮力方法,在我输入命令的终端中

#include<bits/stdc++.h>
using namespace std;
vector <int> b;
vector <int> g;
int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        int a;
        cin >> a;
        b.push_back(a);
    }
    int m;
    cin >> m;
    for (int i = 0; i < m; i++) {
        int a;
        cin >> a;
        g.push_back(a);
    }
    sort(b.begin(), b.end());
    sort(g.begin(), g.end());
    int ans = 0;


    bool visited[10000];
    memset(visited, sizeof(visited), false);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if(!visited[j])
            if (abs(b[i] - g[j]) <= 1) {
                visited[j] = true;
                ans++;
                break;
            }
        }

    }
    cout << ans;

}

4

1 4 6 2

5

5 1 5 7 9

我得到的正确输出为3,这也是对代码强制的第一个测试用例,代码强制将输出显示为2并显示为错误的答案。

请在此处查看Proof,我从未在竞争中遇到过此类问题 编程。 接受的解决方案solution here

下方还有与此相关的公告。

1 个答案:

答案 0 :(得分:0)

这是未定义行为的情况:if(!visited[j])未定义。 visited未初始化,因为调用memset(visited, sizeof(visited), false);是错误的。您正在读取未初始化的变量。

memset的声明为

void *memset( void *dest, int ch, size_t count );

您正在将值10000的0倍写入visited。在您的计算机上,此内存中填充了零。但是在其他计算机上,可以有不同的值。