USACO 1.2 Transformations

/*
ID: aznfy1
PROG: transform
LANG: C++
*/

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<string.h>
#define clr(a,b); memset(a,b,sizeof(a));

using namespace std;

char newgraph[20][20];
char oldgraph[20][20];
char buf[20][20];
char want[20][20];
int n;

int compare()
{
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
        if(strcmp(want[i],newgraph[i])!=0)
        return 0;
    return 1;
}

void change1()
{
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    {
        newgraph[j][n-i-1]=buf[i][j];
    }
}

void change2()
{
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    {
        newgraph[n-i-1][n-j-1]=buf[i][j];
    }
}

void change3()
{
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    {
        newgraph[n-j-1][i]=buf[i][j];
    }
}

void Reflection()
{
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    {
        newgraph[i][n-j-1]=buf[i][j];
    }
}

int main()
{
    freopen("transform.in","r",stdin);
    freopen("transform.out","w",stdout);
    while(scanf("%d",&n)!=EOF)
    {
        clr(oldgraph,0);
        clr(newgraph,0);
        for(int i=0;i<n;i++)
        cin>>oldgraph[i];
        for(int i=0;i<n;i++)
        cin>>want[i];

        for(int i=0;i<n;i++)
        strcpy(buf[i],oldgraph[i]);
        change1();
        if(compare())
        {
            cout<<1<<endl;
            continue;
        }
        change2();
        if(compare())
        {
            cout<<2<<endl;
            continue;
        }
        change3();
        if(compare())
        {
            cout<<3<<endl;
            continue;
        }
        Reflection();
        if(compare())
        {
            cout<<4<<endl;
            continue;
        }
        Reflection();
        for(int i=0;i<n;i++)
        strcpy(buf[i],newgraph[i]);
        change1();
        if(compare())
        {
            cout<<5<<endl;
            continue;
        }
        for(int i=0;i<n;i++)
        strcpy(buf[i],oldgraph[i]);
        Reflection();
        for(int i=0;i<n;i++)
        strcpy(buf[i],newgraph[i]);
        change2();
        if(compare())
        {
            cout<<5<<endl;
            continue;
        }
        for(int i=0;i<n;i++)
        strcpy(buf[i],oldgraph[i]);
        Reflection();
        for(int i=0;i<n;i++)
        strcpy(buf[i],newgraph[i]);
        change3();
        if(compare())
        {
            cout<<5<<endl;
            continue;
        }
        for(int i=0;i<n;i++)
        strcpy(buf[i],oldgraph[i]);
        for(int i=0;i<n;i++)
        strcpy(newgraph[i],oldgraph[i]);
        if(compare())
        {
            cout<<6<<endl;
            continue;
        }
        cout<<7<<endl;
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/whatthefy/p/3085229.html