1. 程式人生 > >ZZULIOJ 1126: 布林矩陣的奇偶性

ZZULIOJ 1126: 布林矩陣的奇偶性

題目描述
一個布林方陣具有奇偶均勢特性,當且僅當 每行、每列總和為偶數,即包含偶數個1。如下面這個4*4的矩陣就具有奇偶均勢特性:

1 0 1 0

0 0 0 0

1 1 1 1

0 1 0 1

編寫程式,讀入一個n階方陣並檢查它是否具有奇偶均勢特性。如果沒有,你的程式應當再檢查一下它是否可以通過修改一位(把0改為1,把1改為0)來使它具有奇偶均勢特性;如果不可能,這個矩陣就被認為是破壞了。

輸入
第一行是一個整數n ( 0< n < 100 ),代表該方陣的階數。然後輸入n 行,每行n個整數(0或1)。

輸出
如果矩陣是布林矩陣,輸出“OK”;如果能通過只修改該矩陣中的一位來使它成為布林矩陣,則輸出“Change bit(i,j)”,這裡i和j是被修改的元素的行與列(行,列號從0開始);否則,輸出“Corrupt”。

樣例輸入4
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1

樣例輸出OK

#include<bits/stdc++.h>
using namespace std;
int main(){
      int n,a[110][110],b,c;
      cin>>n;
      int i,j,flag1=0,flag2=0,sum;
     for(i=0;i<n;i++)
      for(j=0;j<n;j++)
      cin>>a[i][j];
     for(i=0;i<n;i++){
      sum=0;
      for
(j=0;j<n;j++) sum+=a[i][j]; if(sum%2!=0) flag1++,b=i; } for(i=0;i<n;i++){ sum=0; for(j=0;j<n;j++) sum+=a[j][i]; if(sum%2!=0) flag2++,c=i; } if(flag1==0&&flag2==0) cout<<"OK\n"<<endl; else if
(flag1==1&&flag2==1) printf("Change bit(%d,%d)\n",b,c); else cout<<"Corrupt\n"<<endl; return 0; }