记录编号 109471 评测结果 AAAAAAA
题目名称 方块转换 最终得分 100
用户昵称 Gravatardevil 是否通过 通过
代码语言 C++ 运行时间 0.005 s
提交时间 2014-07-08 19:53:07 内存使用 0.31 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;

const int MAXN=10+10;

char ori[MAXN][MAXN];
char tem[MAXN][MAXN];
char tem1[MAXN][MAXN];
char ans[MAXN][MAXN];
int n;

bool turn90()
{
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
    {
        int t=n-1;
        tem[j][t-i]=ori[i][j];
    }
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
    {
        if(tem[i][j]!=ans[i][j]) return false;
    }
    return true;
}

bool turn180()
{
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
    {
        int t=n-1;
        tem[t-i][t-j]=ori[i][j];
    }
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
    {
        if(tem[i][j]!=ans[i][j]) return false;
    }
    return true;
}

bool turn270()
{
    turn90();
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
    {
        int t=n-1;
        tem1[t-i][t-j]=tem[i][j];
    }
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
    {
        if(tem1[i][j]!=ans[i][j]) return false;
    }
    return true;
}

bool reflex()
{
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
    {
        int t=n-1;
        tem[i][t-j]=ori[i][j];
    }
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
    {
        if(tem[i][j]!=ans[i][j]) return false;
    }
    return true;
}

void asso()
{
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
    {
        int t=n-1;
        tem[i][t-j]=ori[i][j];
    }
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        ori[i][j]=tem[i][j];
}

bool cons()
{
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
    {
        if(ori[i][j]!=ans[i][j]) return false;
    }
    return true;
}

int main()
{
    freopen("transformations.in","r",stdin);
    freopen("transformations.out","w",stdout);
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%s",ori[i]);
    for(int i=0;i<n;i++)
        scanf("%s",ans[i]);
    if(turn90()) {printf("1");return 0;}
    memset(tem,0,sizeof(tem));
    if(turn180()) {printf("2");return 0;}
    memset(tem,0,sizeof(tem));
    if(turn270()) {printf("3");return 0;}
    memset(tem,0,sizeof(tem));
    if(reflex()) {printf("4");return 0;}
    memset(tem,0,sizeof(tem));
    asso();
    if(turn90()||turn180()||turn270()) {printf("5");return 0;}
    asso();
    if(cons()) {printf("6");return 0;}
    printf("7");
    return 0;
}