抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

总时间限制: 1000ms 内存限制: 65536kB

描述

给出由 0 和 1 组成的矩阵,如果矩阵的每一行和每一列的 1 的数量都是偶数,则认为符合条件。
你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。
"改变矩阵元素" 的操作定义为 0 变成 1,1 变成 0。

输入

包含多个测试数据。每个测试数据有多行,第一行为矩阵的大小 n (n < 100),以下 n 行为矩阵的值。
输入以 0 结束。

输出

如果矩阵符合条件,则输出 OK
如果矩阵仅改变一个矩阵元素就能符合条件,则输出 Change bit (x,y),其中 x 和 y 为该元素的坐标
如果不符合以上两条,输出 Corrupt

样例输入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
4
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
4
1 0 1 0
0 0 1 0
1 1 1 1
0 1 0 1
4
1 0 1 0
0 1 1 0
1 1 1 1
0 1 0 1
0

样例输出

1
2
3
OK
Change bit (2,3)
Corrupt

思路

  1. 输入一个整数 n,创建一个 nnn*n 的二维数组 a 和两个一维数组 linerow
  2. 读取矩阵的元素,并存储在二维数组 a 中。
  3. 遍历矩阵的每一行,统计每一行的元素为 1 的量。如果某一行的元素之和是奇数,将 line 数组的对应位置设为 1,并将 line[0]1line[0] 存储的是元素之和为奇数的行的数量。
  4. 遍历矩阵的每一列,统计每一列的元素为 1 的量。如果某一列的元素之和是奇数,将 row 数组的对应位置设为 1,并将 row[0]1row[0] 存储的是元素之和为奇数的列的数量。
  5. 检查 row[0]line[0] 的值。如果都是 1,输出 “Change bit (x,y)”,其中 xy 是元素之和为奇数的行和列的索引。如果都是 0,输出 “OK”。否则,输出 “Corrupt”。

Code

C++ STL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <bits/stdc++.h>
using namespace std;

int main() {
int n;
while (cin >> n && n != 0)
{
array<array<int, 200>, 200> a;
array<int, 100> line {} , row {}; // 0: count, 1-100: mark
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
cin >> a[i][j];
}
}
for(int i = 1; i <= n; i++)
{
int count = 0;
for(int j = 1; j <= n; j++)
{
if(a[i][j] == 1) count++;
}
if(count % 2 == 1)
{
line[i] = 1;
line[0]++;
}
}
for(int i = 1, j = 1; j <= n; j++, i = 1)
{
int count = 0;
for(; i <= n; i++)
{
if(a[i][j] == 1) count++;
}
if(count % 2 == 1)
{
row[j] = 1;
row[0]++;
}
}
if(row[0] == 1 && line[0] == 1)
{
int x, y;
for(int i = 1; i <= n; i++)
{
if(line[i] == 1) {x = i; break;}
}
for(int i = 1; i <= n; i++)
{
if(row[i] == 1) {y = i; break;}
}
cout << "Change bit ("<< x << "," << y <<")" << endl;
} else if(row[0] == 0 && line[0] == 0) cout << "OK" << endl;
else cout << "Corrupt" << endl;
}
}

C++ array

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <bits/stdc++.h>
using namespace std;

int main() {
int n;
while (cin >> n && n != 0)
{
int a[200][200] = {0};
int line[100] = {0}, row[100] = {0}; // 0: count, 1-100: mark
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
cin >> a[i][j];
}
}
for(int i = 1; i <= n; i++)
{
int count = 0;
for(int j = 1; j <= n; j++)
{
if(a[i][j] == 1) count++;
}
if(count % 2 == 1)
{
line[i] = 1;
line[0]++;
}
}
for(int i = 1, j = 1; j <= n; j++, i = 1)
{
int count = 0;
for(; i <= n; i++)
{
if(a[i][j] == 1) count++;
}
if(count % 2 == 1)
{
row[j] = 1;
row[0]++;
}
}
if(row[0] == 1 && line[0] == 1)
{
int x, y;
for(int i = 1; i <= n; i++)
{
if(line[i] == 1) {x = i; break;}
}
for(int i = 1; i <= n; i++)
{
if(row[i] == 1) {y = i; break;}
}
cout << "Change bit ("<< x << "," << y <<")" << endl;
} else if(row[0] == 0 && line[0] == 0) cout << "OK" << endl;
else cout << "Corrupt" << endl;
}
}

C

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>

int main() {
int n;
while (scanf("%d", &n) && n != 0)
{
int a[200][200] = {0};
int line[100] = {0}, row[100] = {0}; // 0: count, 1-100: mark
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
scanf("%d", &a[i][j]);
}
}
for(int i = 1; i <= n; i++)
{
int count = 0;
for(int j = 1; j <= n; j++)
{
if(a[i][j] == 1) count++;
}
if(count % 2 == 1)
{
line[i] = 1;
line[0]++;
}
}
for(int i = 1, j = 1; j <= n; j++, i = 1)
{
int count = 0;
for(; i <= n; i++)
{
if(a[i][j] == 1) count++;
}
if(count % 2 == 1)
{
row[j] = 1;
row[0]++;
}
}
if(row[0] == 1 && line[0] == 1)
{
int x, y;
for(int i = 1; i <= n; i++)
{
if(line[i] == 1) {x = i; break;}
}
for(int i = 1; i <= n; i++)
{
if(row[i] == 1) {y = i; break;}
}
printf("Change bit (%d,%d)\n", x, y);
} else if(row[0] == 0 && line[0] == 0) printf("OK\n");
else printf("Corrupt\n");
}
}