USACO 1.2 Transformations (模拟)

模拟题目,按照题目给定的要求变换图形即可,变换的优先级依次减小。这个题目我写的很乱。不过最还还是勉强可以运行

/*
  ID:twd30651
  PROG:transform
  LANG:C++
*/
#include<iostream>
#include<fstream>
#include<stdlib.h>
#include<string.h>
using namespace std;
#define MAX 10
char a[MAX][MAX];
char b[MAX][MAX];
char c[MAX][MAX];
char t[MAX][MAX];
int N;
int flag=0;
int check()
{
    for(int i=0;i<N;++i)
        for(int j=0;j<N;++j)
        {
            if(b[i][j]!=t[i][j])return 0;
        }
    return 1;
}
void do1(char a[][MAX],char b[][MAX],int f)//f是个标志,标志是第五个操作调用的,还是直接调用的
{
    for(int i=0;i<N;++i)
        for(int j=0;j<N;++j)
        {
            b[j][N-i-1]=a[i][j];
        }
    if(!f&&check()){printf("1\n");
        flag=1;
    }
}
void do2(char a[][MAX],char b[][MAX],int f)//同理
{
    for(int i=0;i<N;++i)
        for(int j=0;j<N;++j)
        {
            b[N-i-1][N-j-1]=a[i][j];
        }
    if(!f&&check()){
        printf("2\n");
        flag=1;
    }
}
void do3(char a[][MAX],char b[][MAX],int f)//同理
{
    for(int i=0;i<N;++i)
        for(int j=0;j<N;++j)
        {
            b[N-j-1][i]=a[i][j];
        }
    if(!f&&check()){
        printf("3\n");
        flag=1;
    }
}
void do4(char a[][MAX],char b[][MAX])
{
    for(int i=0;i<N;++i)
        for(int j=0;j<N;++j)
        {
            b[i][N-j-1]=a[i][j];
        }
    if(check()){
        printf("4\n");
        flag=1;
    }
}
void do5(char a[][MAX],char b[][MAX])
{
    do4(a,c);
    for(int i=0;i<3;++i)
    {
        if(i==0)
        {
            do1(c,b,1);
            if(check()){printf("5\n");
                flag=1;
            }
        }
        else if(i==1)
        {
            do2(c,b,1);
            if(check()){printf("5\n");
                flag=1;}
        }
        else
        {
            do3(c,b,1);
            if(check()){printf("5\n");
                flag=1;}
        }
    }
}
void do6(char a[][MAX],char b[][MAX])
{
    for(int i=0;i<N;++i)
        for(int j=0;j<N;++j)
        {
            b[i][j]=a[i][j];
        }
    if(check())
    {
        printf("6\n");
        flag=1;
    }
}


int main(int argc,char *argv[])
{
    freopen("transform.in","r",stdin);
    freopen("transform.out","w",stdout);
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    scanf("%d",&N);
    for(int i=0;i<N;++i)
        scanf("%s",a[i]);
    for(int i=0;i<N;++i)
        scanf("%s",t[i]);
    for(int i=1;i<=7;++i)
    {
        switch(i)
        {
        case 1:
            if(flag==0)
                do1(a,b,0);
            break;
        case 2:
            if(flag==0)
                do2(a,b,0);
            break;
        case 3:
            if(flag==0)
                do3(a,b,0);
            break;
        case 4:
            if(flag==0)
                do4(a,b);
            break;
        case 5:
            if(flag==0)
                do5(a,b);
            break;
        case 6:
            if(flag==0)
                do6(a,b);
            break;
        case 7:
            if(flag==0)
            printf("7\n");
            break;
        }
    }
    return 0;
}


你可能感兴趣的:(模拟,USACO)