我正在解决问题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下面也有关于这个问题的公告
这是一个未定义的行为:if(!visited[j])
未定义。 visited
未初始化,因为调用memset(visited, sizeof(visited), false);
错误。您正在阅读未初始化的变量。
memset
的宣言是
void *memset( void *dest, int ch, size_t count );
您正在将值10000的0倍写入qazxsw poi。在你的机器上,这个内存充满了零。但在其他机器上可能存在不同的值。