Wednesday, June 10, 2015

UVa 541 - Error Correction

// UVa 541 - Error Correction

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;

int main() {
	int n;
	cin >> n;
	while (n) {

		int colsum[100];
		memset(colsum, 0, sizeof(colsum));
		int broken_rows = 0, broken_row;

		for (int i = 0; i < n; i++) {
			int rowsum = 0;
			for (int j = 0; j < n; j++) {
				int a;
				cin >> a;
				rowsum ^= a;
				colsum[j] ^= a;
			}
			if (rowsum) {
				broken_rows++;
				broken_row = i;
			}
		}

		int broken_cols = 0, broken_col;
		for (int j = 0; j < n; j++)
			if (colsum[j]) {
				broken_cols++;
				broken_col = j;
			}

		if (broken_cols == 0 && broken_rows == 0)
			printf("OK");
		else if (broken_cols == 1 && broken_rows == 1)
			printf("Change bit (%d,%d)", broken_row + 1, broken_col + 1);
		else
			printf("Corrupt");
		cout << endl;

		cin >> n;
	}
	return 0;
}

No comments:

Post a Comment