2260 Error Correction

http://poj.org/problem?id=2260

概要

与えられた行列の各列各行の1の数が偶数であるか判定する。
偶数でない場合、ある一箇所を修正することで条件を満たすようにできるか調べる問題。

ソース

#include<cstdio>
#include<cstring>
using namespace std;

int main() {
  int n,a;
  int row[110],col[110];
  while(scanf("%d", &n), n) {
    memset(row, 0, sizeof(row));
    memset(col, 0, sizeof(col));
    for(int i=0; i<n; ++i) {
      for(int j=0; j<n; ++j) {
	scanf("%d", &a);
	col[j] += a;
	row[i] += a;
      }
    }

    int ercol = -1,errow = -1;
    for(int i=0; i<n; ++i) {
      if(col[i]%2 == 1) {
	if(ercol != -1) ercol = -2;
	else ercol = i;
      }
      if(row[i]%2 == 1) {
	if(errow != -1) errow = -2;
	else errow = i;
      }
    }

    if(ercol == -1 && errow == -1) {
      printf("OK\n");
    }else if(errow >= 0 && ercol >= 0) {
      printf("Change bit (%d,%d)\n", errow+1, ercol+1);
    }else {
      printf("Corrupt\n");
    }
  }
}