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"); } } }