题解 P1205 【[USACO1.2]方块转换 Transformations】
teafrogsf
2017-08-18 09:51:50
一道还算正常的模拟。
好像和上一位大佬的题解有一点微妙的不同?但是代码行数比他的少一半多(实测少74行)。~~就是主函数有点晃眼睛~~
希望大家不要抄袭题解,好好做模拟题。
```cpp
#include<cstdio>
#include<iostream>
#define f(i,a,b) for(register int i=a;i<=b;++i)
int n;
char a[20][20],s[20][20],b[20][20];
void turn()
{
f(i,0,n-1)
f(j,0,n-1)
b[i][j]=a[i][j];
f(i,0,n-1)
f(j,0,n-1)
a[i][j]=b[n-1-j][i];
}
void mirror()
{
f(i,0,n-1)
f(j,0,n-1)
b[i][j]=a[i][j];
f(i,0,n-1)
f(j,0,n-1)
a[i][j]=b[i][n-1-j];
}
void check()//检验转换是否正确
{
f(i,0,n-1)puts(a[i]);
}
bool compare()
{
f(i,0,n-1)
f(j,0,n-1)
if(a[i][j]!=s[i][j])return 0;
return 1;
}
int main()
{
int i,j;
scanf("%d",&n);
getchar();
f(i,0,n-1)scanf("%s",a[i]);
f(i,0,n-1)scanf("%s",s[i]);
turn();if(compare()){printf("1\n");return 0;}
turn();if(compare()){printf("2\n");return 0;}
turn();if(compare()){printf("3\n");return 0;}
turn();mirror();//还原,镜像
if(compare()){printf("4\n");return 0;}
turn();if(compare()){printf("5\n");return 0;}
turn();if(compare()){printf("5\n");return 0;}
turn();if(compare()){printf("5\n");return 0;}
turn();if(compare()){printf("6\n");return 0;}
printf("7\n");return 0;
}
```