題目連結: https://zerojudge.tw/ShowProblem?problemid=b005
# 解題思路
計算各個橫排跟直列的總數分開計算,如果橫排跟直列都有剛好一個奇數的總和就可以剛好轉換一次,如果全部都是偶數就以符合題意,其他就是 "Corrupt"。
# 程式碼
#include <bits/stdc++.h> | |
using namespace std; | |
int main(){ | |
int n; | |
while(cin>>n){ | |
int m[n][n],ap_c=0,ap_r=0,change_i,change_j; | |
for(int i=0;i<n;i++) | |
for(int j=0;j<n;j++) | |
cin>>m[i][j]; | |
for(int i=0;i<n;i++){ | |
int sum=0; | |
for(int j=0;j<n;j++) sum+=m[i][j]; | |
if(sum%2==1) { ap_c++; change_i=i; } | |
} | |
for(int i=0;i<n;i++){ | |
int sum=0; | |
for(int j=0;j<n;j++) sum+=m[j][i]; | |
if(sum%2==1) { ap_r++; change_j=i;} | |
} | |
if(ap_r==1&&ap_c==1) printf("Change bit (%d,%d)\n",change_i+1,change_j+1); | |
else if(!ap_r&&!ap_c) printf("OK\n"); | |
else printf("Corrupt\n"); | |
} | |
} |