您的位置:首页 > 编程语言 > C语言/C++

C++_USACO_Transformations

2013-07-22 09:14 267 查看
#include<iostream>
#include<fstream>
using namespace std;
int main(){
ifstream fin("transform.in");
ofstream fout("transform.out");
char bimage[10][10];
char aimage[10][10];bool tryed[8]={false,false,false,false,false,false,false,false};
int n;
int i;
bool is_out=false;
fin>>n;
for(i=0;i<n;i++)
for(int j=0;j<n;j++)
fin>>bimage[i][j];
for(i=0;i<n;i++)
for(int j=0;j<n;j++)
fin>>aimage[i][j];
i=0;
while(i<n){
for(int j=0;j<n;j++){
if(bimage[i][j]!=aimage[j][n-i-1] && tryed[0]==false)
tryed[0]=true;
if(bimage[i][j]!=aimage[n-i-1][n-j-1] && tryed[1]==false)
tryed[1]=true;
if(bimage[i][j]!=aimage[j][i] && tryed[2]==false)
tryed[2]=true;
if(bimage[i][j]!=aimage[i][n-j-1] && tryed[3]==false)
tryed[3]=true;
if(bimage[i][j]!=aimage[n-j-1][n-i-1] && tryed[4]==false)
tryed[4]=true;
if(bimage[i][j]!=aimage[n-i-1][j] && tryed[5]==false)
tryed[5]=true;
if(bimage[i][j]!=aimage[n-j-1][i] && tryed[6]==false)
tryed[6]=true;
if(bimage[i][j]!=aimage[i][j] && tryed[7]==false)
tryed[7]=true;
}
i++;
}
for(int k=0;k<4;k++){
if(!tryed[k]){
is_out=true;
fout<<k+1<<endl;
break;
}
}
if(!is_out){
if(!tryed[4] || !tryed[5] || !tryed[6])
fout<<5<<endl;
else if(!tryed[7])
fout<<6<<endl;
else
fout<<7<<endl;
}
return 0;
}


本题很简单,就是图形变换,找出变换前后的坐标关系就行了。还有怎样排除不可能的变换形式,要思考清楚。我是逐步遍历,对每一个bimage[i][j],逐一验证各个变换规则,如果不满足的就标记,下次就不用再验证它了。没有被标记的就是正确的转换。另外,对于可能有多种遍历规则的,输出最小的一个变换规则的编号,测试过程中再次审题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: