/* ID: mytbk921 LANG: C++ TASK: transform */ #include #include #define MAXN 10 using namespace std; typedef struct { int n; char pattern[MAXN][MAXN]; }Tile,*pTile; void Rotate(pTile src,pTile dest) { //to rotate 90 degrees //(i,j) -> (j,n-1-i) int tmp[MAXN][MAXN]; int n=src->n; for (int i=0;ipattern[i][j]; } } for (int i=0;ipattern[i][j]=tmp[i][j]; } } void reflect(pTile src,pTile dest) { int tmp[MAXN][MAXN]; int n=src->n; for (int i=0;ipattern[i][j]; } for (int i=0;ipattern[i][j]=tmp[i][j]; } } int isequal(pTile a,pTile b) { if (a->n != b->n) return 0; int n=a->n; for (int i=0;ipattern[i][j]!=b->pattern[i][j]) return 0; return 1; } int main() { int n; Tile a[2]; ifstream fin("transform.in"); fin >> n; for (int i=0;i<2;i++){ for (int j=0;j> a[i].pattern[j][k]; a[i].n=n; } fin.close(); //input complete ofstream fout("transform.out"); for (int i=1;i<=3;i++){ Rotate(a+0,a+0); if (isequal(a,a+1)){ fout << i << endl; return 0; } } Rotate(a+0,a+0); //recover a reflect(a+0,a+0); if (isequal(a+0,a+1)){ fout << 4 << endl; return 0; } for (int i=0;i<3;i++){ Rotate(a+0,a+0); if (isequal(a+0,a+1)){ fout << 5 << endl; return 0; } } Rotate(a+0,a+0); reflect(a+0,a+0); if (isequal(a+0,a+1)){ fout << 6 << endl; return 0; } else{ fout << 7 << endl; return 0; } fout.close(); }