usaco 1.2 Transformations(模拟)

来源:互联网 发布:数控钻铣床编程 编辑:程序博客网 时间:2024/05/20 13:12

我的做法就是一个一个情况枚举出来


注意计算公式:

( 变换后的矩阵记为C)

顺时针旋转90°:C[i] [j]=A[n-j-1] [i]

(旋转180°和270° 可以多转几个九十度来推)

对称:C[i] [n-j-1]=A[i] [j]


代码有点长 。。。

/*ID: who jayLANG: C++TASK: transform*/#include<stdio.h>bool cmp(char B[][10],char C[][10],int n){    int i,j;    bool flag=1;    for(i=0; i<n; i++)    {        if(!flag)            break;        for(j=0; j<n; j++)            if(B[i][j]!=C[i][j])            {                return 0;                flag=0;                break;            }    }    if(flag)        return 1;}void rotate(char A[][10],char C[][10],int n){    int i,j;    for(i=0; i<n; i++)        for(j=0; j<n; j++)            C[i][j]=A[n-j-1][i];}void reflect(char A[][10],char C[][10],int n){    int i,j;    for(i=0; i<n ; i++)        for(j=0; j<n; j++)            C[i][n-j-1]=A[i][j];}int main(){    FILE *fin  = fopen ("transform.in", "r");    FILE *fout = fopen ("transform.out", "w");    int n,i,j;    bool flag;    char A[10][10],B[10][10],C[10][10],D[10][10];    fscanf(fin,"%d",&n);        flag=1;        for(i=0; i<n; i++)            fscanf(fin,"%s",A[i]);        for(i=0; i<n; i++)            fscanf(fin,"%s",B[i]);        rotate(A,C,n);        if(flag && cmp(B,C,n))        {            fprintf(fout,"1\n");            flag=0;        }        rotate(C,D,n);        if(flag && cmp(B,D,n))        {            fprintf(fout,"2\n");            flag=0;        }        rotate(D,C,n);        if(flag && cmp(B,C,n))        {            fprintf(fout,"3\n");            flag=0;        }        reflect(A,C,n);        if(flag && cmp(B,C,n))        {            fprintf(fout,"4\n");            flag=0;        }        rotate(C,D,n);        if(flag && cmp(B,D,n))        {            fprintf(fout,"5\n");            flag=0;        }        rotate(D,C,n);        if(flag && cmp(B,C,n))        {            fprintf(fout,"5\n");            flag=0;        }        rotate(C,D,n);        if(flag && cmp(B,D,n))        {            fprintf(fout,"5\n");            flag=0;        }        if(flag && cmp(A,B,n))        {            fprintf(fout,"6\n");            flag=0;        }        if(flag)            fprintf(fout,"7\n");    return 0;}


0 0
原创粉丝点击