torus711 のアレ

主に競技プログラミングの問題について書きます

Codeforces 157, Division 2, A : Little Elephant and Chess

概要

チェス盤(のようなもの)の情報が与えられる。
行を回転( rotate )する操作が可能であるとき、正しいチェス盤にできるかどうか判定せよ。

解法

数を数える必要は無く、横に隣接するセル同士が全て異なっているかどうかで判定できます。

コード

typedef vector<string> VS;

#define REP( i, m, n ) for ( int i = (int)( m ); i < (int)( n ); ++i )
#define EACH( v, c ) for ( auto &v : c )

bool solve( const VS &board )
{
	REP( i, 0, 8 )
	{
		REP( j, 0, 7 )
		{
			if ( board[i][j] == board[i][ j + 1 ] )
			{
				return false;
			}
		}
	}

	return true;
}

int main()
{
	cin.tie( 0 );
	ios::sync_with_stdio( false );

	VS board( 8 );
	EACH( line, board )
	{
		cin >> line;
	}

	cout << ( solve( board ) ? "YES" : "NO" ) << endl;

	return 0;
}