/* Problem E, Error Correction */ #include #include #include #include #include #include #define DBG(x) #define MAXINT 0x7FFFFFFF FILE *input; int n, mat[100][100], m[100], m1[100]; int read_case() { int i, j; fscanf(input, "%d", &n); if (n) { for (i = 0; i < n; i++) { for (j = 0; j < n; j++) mat[i][j] = 0; m[i] = 0; m1[i] = 0; } for (i = 0; i < n; i++) for (j = 0; j < n; j++) { fscanf(input, "%d", &(mat[i][j])); if (mat[i][j]) { m[i]++; m1[j]++; } } return 1; } else return 0; } void solve_case() { int odd = 0, odd1 = 0, i, z = 0, s = 0; for (i = 0; i < n; i++) { if (m[i] % 2) { odd++; if (!z) z = i + 1; } if (m1[i] % 2) { odd1++; if (!s) s = i + 1; } } DBG(printf("odd: %d, odd1: %d\n", odd, odd1);) if (odd == 0 && odd1 == 0) printf("OK\n"); else if (odd == 1 && odd1 == 0) printf("Corrupt\n"); else if(odd == 1 && odd1 == 1) printf("Change bit (%d,%d)\n", z, s); else if (odd == 0 && odd1 == 1) printf("Corrupt\n"); else printf("Corrupt\n"); } int main() { input = fopen("error.in", "r"); assert(input != NULL); while (read_case()) solve_case(); fclose(input); return 0; }