无法找出下面程序中的错误
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
。在你的机器上,这个内存充满了零。但是在其他机器上可以有不同的值。
我正在解决一个问题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
。在你的机器上,这个内存充满了零。但是在其他机器上可以有不同的值。