0
点赞
收藏
分享

微信扫一扫

OJ刷题之旅

题目描述

布尔矩阵具有奇偶均势特性, 当且仅当每行、每列的元素总和为偶数。 例如 1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 每行每列的元素总和皆为偶数, 即具有奇偶均势特性。 现输入一个矩阵, 判断是否具有奇偶均势特性。若否那么判断可否通过修改某一位置上的数(0变1或1变0), 使得该布尔矩阵具有奇偶均势特性。 行则输出改变元素的坐标,否则为被破坏。

输入

第一行为整数n(1 ≤ n ≤ 100). 接下来n行, 每行n个数(0 or 1)。

输出

如有奇偶均势特性则输出“OK”, 若可通过修改一位请输出“Change bit(i, j)”, i,j 为修改位置的横纵坐标。若不行则输出"Corrupt"。(注意行列从1开始, 并且逗号后面有个空格。

样例

输入 Copy 4 1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1

输出 Copy OK 来源/分类 数组

题解

以下是C++代码实现:

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int row[n] = {0}, col[n] = {0}; // 分别记录每行和每列的元素总和
    int oddRow = 0, oddCol = 0; // 分别记录奇数行和奇数列的数量
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            int num;
            cin >> num;
            row[i] += num;
            col[j] += num;
        }
        if (row[i] % 2 == 1) oddRow++;
    }
    for (int i = 0; i < n; i++) {
        if (col[i] % 2 == 1) oddCol++;
    }
    if (oddRow == 0 && oddCol == 0) {
        cout << "OK" << endl;
    } else if (oddRow == 1 && oddCol == 1) {
        int rowIdx = -1, colIdx = -1;
        for (int i = 0; i < n; i++) {
            if (row[i] % 2 == 1) rowIdx = i;
            if (col[i] % 2 == 1) colIdx = i;
        }
        cout << "Change bit(" << rowIdx + 1 << ", " << colIdx + 1 << ")" << endl;
    } else {
        cout << "Corrupt" << endl;
    }
    return 0;
}

举报

相关推荐

0 条评论