无法找出以下程序中的错误[关闭]

问题描述 投票:-7回答:1

我正在解决问题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,我从未在竞争性编程中遇到过这样的问题。接受的解决方案solutionhere下面也有关于这个问题的公告

c++ algorithm brute-force
1个回答
0
投票

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

memset的宣言是

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

您正在将值10000的0倍写入qazxsw poi。在你的机器上,这个内存充满了零。但在其他机器上可能存在不同的值。

© www.soinside.com 2019 - 2024. All rights reserved.