ZOJ-1949 行列和均偶数

1949:矩阵的每一行每一列的和都是偶数称为parity。 判定是否符合。如不符合是否可以改动一个数字符合。

Sample Input

4
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
4
1 0 1 0
0 0 1 0
1 1 1 1
0 1 0 1
4
1 0 1 0
0 1 1 0
1 1 1 1
0 1 0 1
0


Sample Output

OK
Change bit (2,3)
Corrupt



思路:分别进行行列检查。如果可以改动,则只有一行和只有一列不满足。否则不能改为符合。


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


int matrix[100][100];

int main()
{		
	int dim;
	int row;
	int col;
	int sum;
	bool rowchg;
	bool colchg;
	bool canchg;

	while(1)
	{
		canchg=true;
		rowchg=false;
		colchg=false;
		row=-1;
		col=-1;
		cin>>dim;

		if(dim==0)
			break;

		for(int i=0;i<dim;i++)
			for(int j=0;j<dim;j++)
				cin>>matrix[i][j];

		//check row
		for(int i=0;i<dim;i++)
		{
			sum=0;
			for(int j=0;j<dim;j++)
			{
				sum+=matrix[i][j];
			}
			
			if(sum%2==1)
			{
				if(rowchg)
				{
					canchg=false;
					break;
				}
				rowchg=true;
				row=i+1;
			}
			
		}

		//check col
		for(int i=0;i<dim;i++)
		{
			sum=0;
			for(int j=0;j<dim;j++)
			{
				sum+=matrix[j][i];
			}

			if(sum%2==1)
			{			
				if(colchg)
				{
					canchg=false;
					break;
				}
				colchg=true;
				col=i+1;
			}
			
		}
		
		if(row==-1&&col==-1)
			printf("OK\n");
		else if(canchg&&rowchg&&colchg)
			printf("Change bit (%d,%d)\n",row,col);
		else
			printf("Corrupt\n");

	}

}

你可能感兴趣的:(ZOJ)