H:Problem H 填方阵
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
Hujie是中大的一名热爱学习的少年,他在无聊的时候喜欢在现代控制理论课堂上画方阵来填数字。
今天他来把这个游戏介绍给大家,首先随机写两个3×3的方阵,这个方阵只有'1'和'.'两种符号,'1'代表这个方阵有数,'.'代表这个方阵没有数。
然后你可以顺时针或者逆时针任意旋转这两个方阵(90°,180°,270°) 。
问你是否能够存在一种旋转方式,把一个旋转过的方阵中有数的部分,填到另一个方阵中相同的位置去,使得被填的方阵中每个位置有且仅有一个数。
输入
-
首先输入一个N,代表有N次游戏。
然后输入两个3×3的方阵,每个位置的内容由空格隔开。
输出
- 对应每组数据首先输出”case #: ”,代表是第#组,然后输出”YES”或”NO”,分别代表能或不能,每个结果占一行。 样例输入
-
2. . .. . .. 1 1. . .1 1 11 1 1. . .. . .1 1 1. 1 1. 1 1. 1 1
样例输出
-
case 1: NOcase 2: YES
#include<stdio.h> #include<string.h> int main() { int kase=1; char a[50][50],b[50][50],c[50][50]; int t; scanf("%d",&t); getchar(); while(t--) { //memset(a,0,sizeof(a)); //memset(b,0,sizeof(b)); // memset(c,0,sizeof(c)); int i,j; int flag=0; int count=0; for( i=0;i<3;i++) for(j=0;j<3;j++) scanf("%s",&a[i][j]); for( i=0;i<3;i++) for(j=0;j<3;j++) scanf("%s",&b[i][j]); printf("case %d: ",kase++); for(i=0;i<3;i++) for(j=0;j<3;j++) if(a[i][j]=='1'&&b[i][j]=='.'||a[i][j]=='.'&&b[i][j]=='1') count++; if(count==9) { printf("YES\n"); continue; } int vvv=3; while(vvv--) { count=0; c[0][0]=a[2][0]; c[0][1]=a[1][0]; c[0][2]=a[0][0]; c[1][0]=a[2][1]; c[1][1]=a[1][1]; c[1][2]=a[0][1]; c[2][0]=a[2][2]; c[2][1]=a[1][2]; c[2][2]=a[0][2]; a[0][0]=c[0][0]; a[0][1]=c[0][1]; a[0][2]=c[0][2]; a[1][0]=c[1][0]; a[1][1]=c[1][1]; a[1][2]=c[1][2]; a[2][0]=c[2][0]; a[2][1]=c[2][1]; a[2][2]=c[2][2]; for( i=0;i<3;i++) for( j=0;j<3;j++) if(c[i][j]=='1'&&b[i][j]=='.'||c[i][j]=='.'&&b[i][j]=='1') count++; if(count==9) { flag=1; printf("YES\n"); break; } } if(flag==0) printf("NO\n"); } return 0; }