usaco-transform

来源:互联网 发布:沈阳市网络金融 编辑:程序博客网 时间:2024/05/17 03:42

又是模拟题,估计一开始usaco都是模拟题。

这个模拟题比较麻烦,需要模拟两种状态。

1,翻转90度。

2,镜像翻转。

注意:如果有多种可能,输出序号小的。

/*ID: rowanha3LANG: C++TASK: transform*/#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;int map[11][11];int map1[11][11];int map2[11][11];int maps[11][11];int n;int bijiao()//比较翻转后的结果{    int i,j;    for(i=0;i<n;i++)    {        for(j=0;j<n;j++)        {            if(map2[i][j]!=maps[i][j])return 0;        }    }    return 1;}void zhi()//把中转数组置为翻转后的数组{    int i,j;    for(i=0;i<n;i++)    {        for(j=0;j<n;j++)        {            map1[i][j]=map2[i][j];        }    }}void fanzhuan()//翻转90度{    int i,j;    for(j=0;j<n;j++)    {        for(i=n-1;i>=0;i--)        {            map2[j][n-1-i]=map1[i][j];        }    }}int dos()//进行1~3步的翻转{    zhi();    fanzhuan();    if(bijiao())return 1;    zhi();    fanzhuan();    if(bijiao())return 2;    zhi();    fanzhuan();    if(bijiao())return 3;    return 0;}int jing()//进行镜像翻转{    int i,j;    for(i=0;i<n;i++)    {        for(j=0;j<n;j++)        {            map2[i][j]=map[i][n-j-1];        }    }    if(bijiao())return 1;    return 0;}int main(){    freopen("transform.in","r",stdin);    freopen("transform.out","w",stdout);    cin>>n;    getchar();    int i,j;    char c;    for(i=0;i<n;i++)    {        for(j=0;j<n;j++)        {            c=getchar();            if(c=='@')map[i][j]=map1[i][j]=map2[i][j]=0;            else map[i][j]=map1[i][j]=map2[i][j]=1;        }        getchar();    }    for(i=0;i<n;i++)    {        for(j=0;j<n;j++)        {            c=getchar();            if(c=='@')maps[i][j]=0;            else maps[i][j]=1;        }        getchar();    }    int leapp;    leapp=0;    if(bijiao())leapp=1;    if(1)    {        int leap;        leap=dos();        if(leap)cout<<leap<<endl;        else if(jing())cout<<"4"<<endl;        else        {            if(dos())            {                cout<<"5"<<endl;            }            else if(leapp) cout<<"6"<<endl;            else cout<<"7"<<endl;        }    }    fclose(stdin);    fclose(stdout);    return 0;}