我正在解决问题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并显示为错误的答案。
下方还有与此相关的公告。答案 0 :(得分:0)
这是未定义行为的情况:if(!visited[j])
未定义。 visited
未初始化,因为调用memset(visited, sizeof(visited), false);
是错误的。您正在读取未初始化的变量。
memset
的声明为
void *memset( void *dest, int ch, size_t count );
您正在将值10000的0倍写入visited
。在您的计算机上,此内存中填充了零。但是在其他计算机上,可以有不同的值。