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

unable out figure out error in below program

我正在解决一个问题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,这也是 codeforces 上的第一个测试用例,codeforces 显示输出为 2 并显示为错误答案。

请看这里Proof,我从来没有遇到过这样的竞技问题 编程。 接受的解决方案 solution 下面还有与此问题相关的公告 here

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

memset的声明是

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

您正在将值 10000 乘以 0 写入 visited。在你的机器上,这个内存充满了零。但是在其他机器上可以有不同的值。