首页 > 代码库 > usaco-tranform:pass

usaco-tranform:pass

这个题目是最简单的,虽然步数多了些,但它是最简单的,没怎么费脑力:

/*ID: qq104801LANG: C++TASK: transform*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>/* for debug only:counter*/void debug_dummy(void){    return;}const int MAX=10;typedef struct _kk{    char x[MAX][MAX];}kk,*pkk;int n;kk a,b,t,t1,t2;void rotate(kk* src,kk* tar){    for(int i=0;i<n;i++)        for(int j=0;j<n;j++)            tar->x[i][j]=src->x[n-j-1][i];    }void rotate1(){    rotate(&a,&t);}void rotate2(){    rotate(&a,&t2);    rotate(&t2,&t);}void rotate3(){    rotate(&a,&t);    rotate(&t,&t2);    rotate(&t2,&t);}void mirror(){    for(int i=0;i<n;i++)        for(int j=0;j<n;j++)            t.x[i][j]=a.x[i][n-1-j]; }int cmp(kk* src,kk* tar){    for(int i=0;i<n;i++)        for(int j=0;j<n;j++)            if (tar->x[i][j]!=src->x[i][j])                return 0;    return 1;}int trans(){        rotate1();if (cmp(&b,&t))return 1;    rotate2();if (cmp(&b,&t))return 2;        rotate3();if (cmp(&b,&t))return 3;    mirror();if (cmp(&b,&t))return 4;    rotate(&t,&t1);if(cmp(&b,&t1))return 5;    rotate(&t1,&t);if(cmp(&b,&t))return 5;    rotate(&t,&t1);if(cmp(&b,&t1))return 5;    if (cmp(&a,&b))return 6;    return 7;}void test(){    printf("%d\n",n);    printf("a:\n");    for(int i=0;i<n;i++)    {        for(int j=0;j<n;j++)                        printf("%c",a.x[i][j]);                printf("\n");    }    printf("b:\n");    for(int i=0;i<n;i++)    {        for(int j=0;j<n;j++)                        printf("%c",b.x[i][j]);                printf("\n");    }    printf("t:\n");    for(int i=0;i<n;i++)    {        for(int j=0;j<n;j++)                        printf("%c",t.x[i][j]);                printf("\n");    }}main () {        FILE *fin = fopen ("transform.in", "r");    FILE *fout = fopen ("transform.out", "w");     fscanf(fin,"%d",&n);    assert(getc(fin)==\n);    for(int i=0;i<n;i++){        for(int j=0;j<n;j++)            a.x[i][j]=getc(fin);        assert(getc(fin)==\n);    }    for(int i=0;i<n;i++){        for(int j=0;j<n;j++)            b.x[i][j]=getc(fin);        assert(getc(fin)==\n);    }            int b;    b=trans();    fprintf(fout,"%d\n",b);    //printf("%d\n\n",b);    //test();    fclose(fin);    fclose(fout);    exit (0);}

看下测试数据用例:

ll tom [qq104801]TASK: transformLANG: C++Compiling...Compile: OKExecuting...   Test 1: TEST OK [0.011 secs, 3520 KB]   Test 2: TEST OK [0.003 secs, 3520 KB]   Test 3: TEST OK [0.008 secs, 3520 KB]   Test 4: TEST OK [0.014 secs, 3520 KB]   Test 5: TEST OK [0.008 secs, 3520 KB]   Test 6: TEST OK [0.016 secs, 3520 KB]   Test 7: TEST OK [0.008 secs, 3520 KB]   Test 8: TEST OK [0.005 secs, 3520 KB]All tests OK.Your program (‘transform‘) produced all correct answers! This is your submission #2 for this problem. Congratulations!Here are the test data inputs:------- test 1 ----3-------------@----------- test 2 ----5-@@@--@@---@----------------------@---@@--@@@------------ test 3 ----5@@@@@@---@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@---@@@@@@------- test 4 ----6-@-@-@@-@-@--@-@-@@-@-@--@-@-@@-@-@-@-@-@--@-@-@@-@-@--@-@-@@-@-@--@-@-@------- test 5 ----3@@@---@@@@@@---@@@------- test 6 ----4@@@@@@@@-@@@@@@@@@@@@@@@@@@-@@@@------- test 7 ----4@-@@@@@@@@@@@@@@@@@@@@@@@@@@@-@@------- test 8 ----10@--------@------------------------------------------------------------------------------------------@--------------------------------------------------------------------------------------------------@Keep up the good work!Thanks for your submission!

 

usaco-tranform:pass