본문 바로가기

Solutions/Mr.K's Solution

PKU 2260. Error Correction. [판정:AC]




간만에 AC받도록 협조(?)해준 스파킹군에게 심심한 감사를 표하며 ㅋㅋ


원리는 간단합니다

모든 "행의 합"들과 "열의 합"들이 짝수가 나오는 경우
"행의 합"들 중 홀수가 1개, "열의 합"들 중 홀수가 1개 나오는 경우

를 제외하고는 전부 "Corrupt"를 출력해주시면 되겠습니다 :)

#include 
using namespace std;

int main()
{
	int size = 1;
	int rowsum[99];
	int colsum[99];

	while(1)
	{
		int i, j;
		int temp;
		int rowodds, colodds;

		scanf( "%d", &size );

		if( size == 0 )
		{
			break;
		}

		for( i = 0; i < size; i++ )
		{
			rowsum[i] = 0;
			colsum[i] = 0;
		}

		for( i = 0; i < size*size; i++ )
		{
			scanf( "%d", &temp );

			rowsum[ i/size ] += temp;
			colsum[ i%size ] += temp;
		}

		rowodds = 0;
		colodds = 0;
		for( i = 0; i < size; i++ )
		{
			if( rowsum[i] % 2 == 1 )
			{
				rowodds++;
			}
		}

		if( rowodds > 1 )
		{
			printf( "Corrupt\n" );
		}
		else
		{
			for( i = 0; i < size; i++ )
			{
				if( colsum[i] % 2 == 1 )
				{
					colodds++;
				}
			}

			if( colodds != rowodds )
			{
				printf( "Corrupt\n" );
			}
			else if( rowodds == 0 )
			{
				printf( "OK\n" );
			}
			else
			{
				for( i = 0; i < size; i++ )
				{
					if( rowsum[i] % 2 == 1 )
					{
						break;
					}
				}

				for( j = 0; j < size; j++ )
				{
					if( colsum[j] % 2 == 1 )
					{
						break;
					}
				}

				printf( "Change bit (%d,%d)\n", i+1, j+1 );
			}
		}
	}

	return 0;
}