/*
ID: lucien23
PROG: transform
LANG: C++
*/
#include<iostream>
#include<fstream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
ifstream infile("transform.in");
ofstream outfile("transform.out");
if(!infile || !outfile)
{
cout<<"file operation failure!"<<endl;
return -1;
}
int N;
infile>>N;
string *strBefore=new string[N];
string *strAfter=new string[N];
for (int i=0;i<N;i++)
{
infile>>strBefore[i];
}
for (int i=0;i<N;i++)
{
infile>>strAfter[i];
}
string **strTrans=new string*[8];
for (int i=0;i<8;i++)
{
strTrans[i]=new string[N];
for (int j=0;j<N;j++)
{
strTrans[i][j]=strBefore[j];
}
}
//计算机各种变换的结果
for (int i=0;i<N;i++)
{
for (int j=0;j<N;j++)
{
//旋转90度
strTrans[0][j][N-1-i]=strBefore[i][j];
//旋转180度
strTrans[1][N-1-i][N-1-j]=strBefore[i][j];
//旋转270度
strTrans[2][N-1-j][i]=strBefore[i][j];
//反射
strTrans[3][i][N-1-j]=strBefore[i][j];
//反射+旋转90度
strTrans[4][N-1-j][N-1-i]=strBefore[i][j];
//反射+旋转180度
strTrans[5][N-1-i][j]=strBefore[i][j];
//反射+旋转270度
strTrans[6][j][i]=strBefore[i][j];
//不变
strTrans[7][i][j]=strBefore[i][j];
}
}
int trans=-1;
//比较确定何种变换
for (int i=0;i<8;i++)
{
int j;
for (j=0;j<N;j++)
{
if (strAfter[j]!=strTrans[i][j])
break;
}
if(j==N)
{
trans=i;
break;
}
}
if(trans>=0 && trans<=3)
{
trans+=1;
}else if(trans>=4 && trans<=6){
trans=5;
}else if(trans==7){
trans=6;
}else{
trans=7;
}
outfile<<trans<<endl;
delete[] strBefore;
delete[] strAfter;
for (int i=0;i<8;i++)
{
delete[] strTrans[i];
}
return 0;
}
USACO Section 1.2 Transformations
最新推荐文章于 2025-04-13 21:24:33 发布