Lilliput Steps

小さな一歩から着実に. 数学やプログラミングのことを書きます.

PCK 2011 本選 - 絵柄の一致

問題文 : 絵柄の一致


3 次元配列を2 次元にmapping するだけだが, 東から見る絵柄は配列としては逆の位置になっているので注意が必要. サンプルが巧妙だった(こなみ).
2 WA. 図をちゃんとみましょう(戒め).

#include <cstdio>

using namespace std;

int main()
{
	int n;
	
	while (scanf("%d", &n) && n){
		bool south[128][128] = {0}, east[128][128] = {0};
		
		for (int d = 0; d < n; d++){
			for (int i = 0; i < n; i++){
				char x[128];
				scanf("%s", x);
				for (int j = 0; j < n; j++){
					if (x[j] == '1'){
						south[d][j] = 1;
						east[d][n - 1 - i] = 1;
					}
				}
			}
		}
		
		bool same = false;
		for (int r = 0; r < 4; r++){
			bool match = true;
			for (int i = 0; i < n; i++){
				for (int j = 0; j < n; j++){
					if (south[i][j] != east[i][j]) match = false;
				}
			}
			same |= match;
			bool tmp[128][128];
			for (int i = 0; i < n; i++)
				for (int j = 0; j < n; j++)
					tmp[i][j] = east[i][j];
			
			for (int i = 0; i < n; i++)
				for (int j = 0; j < n; j++)
					east[j][n - 1 - i] = tmp[i][j];
		}
		
		printf("%s\n", same ? "yes" : "no");
	}
	
	return (0);
}