A

来源:互联网 发布:mac 终端登录mysql 编辑:程序博客网 时间:2024/05/20 19:32

这个窗口的题,就是统计下行列相同的,可以旋转四次以后会有多少个相同的设计。行列不同的时候就是要上下旋转了检查一下就可以这个题。难度在于模拟,

队友出的这个题,具体的细节可以看代码~~四个旋转和两个旋转直接暴力就行

#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>#include <string>using namespace std;const int maxn=200;string mapp[maxn];struct note{    char a[150][150];    int flag;} g[30000];int n,m;int main(){    while(~scanf("%d%d",&n,&m))    {        for(int i=0; i<n; i++)            cin >> mapp[i];        int nn,mm;        for(int i=1; i<=n; i++)            if(mapp[i][1]=='#')            {                nn=i;                break;            }        for(int j=1; j<=m; j++)            if(mapp[1][j]=='#')            {                mm=j;                break;            }        int cnt=0;        for(int i=0; i<=n-nn; i+=nn)            for(int j=0; j<=m-mm; j+=mm)            {                cnt++;                for(int k=1; k<=nn-1; k++)                    for(int l=1; l<=mm-1; l++)                        g[cnt].a[k][l]=mapp[i+k][j+l];            }        for(int i=1; i<=cnt; i++)            g[i].flag=1;        int ans=0;        if(nn==mm)        {            for(int i=1; i<=cnt; i++)                if(g[i].flag)                {                    ans++;                    for(int j=1; j<=cnt; j++)                        if(i!=j)                        {                            int flag=0;                            for(int x=1; x<=nn-1; x++)                                for(int y=1; y<=mm-1; y++)                                    if(g[i].a[x][y]!=g[j].a[y][mm-x])                                        flag=1;                            if(flag==0)                            {                                g[j].flag=0;                                continue;                            }                            else flag=0;                            for(int x=1; x<=nn-1; x++)                                for(int y=1; y<=mm-1; y++)                                    if(g[i].a[x][y]!=g[j].a[mm-x][mm-y])                                        flag=1;                            if(flag==0)                            {                                g[j].flag=0;                                continue;                            }                            else flag=0;                            for(int x=1; x<=nn-1; x++)                                for(int y=1; y<=mm-1; y++)                                    if(g[i].a[x][y]!=g[j].a[x][y])                                        flag=1;                            if(flag==0)                            {                                g[j].flag=0;                                continue;                            }                            else flag=0;                            for(int x=1; x<=nn-1; x++)                                for(int y=1; y<=mm-1; y++)                                    if(g[i].a[x][y]!=g[j].a[mm-y][x])                                        flag=1;                            if(flag==0)                            {                                g[j].flag=0;                                continue;                            }                            else flag=0;                        }                }        }        else        {            for(int i=1; i<=cnt; i++)                if(g[i].flag)                {                    ans++;                    for(int j=1; j<=cnt; j++)                        if(i!=j)                        {                            int flag=0;                            for(int x=1; x<=nn-1; x++)                                for(int y=1; y<=mm-1; y++)                                    if(g[i].a[x][y]!=g[j].a[nn-x][mm-y])                                        flag=1;                            if(flag==0)                            {                                g[j].flag=0;                                continue;                            }                            else flag=0;                            for(int x=1; x<=nn-1; x++)                                for(int y=1; y<=mm-1; y++)                                    if(g[i].a[x][y]!=g[j].a[x][y])                                        flag=1;                            if(flag==0)                            {                                g[j].flag=0;                                continue;                            }                            else flag=0;                        }                }        }        printf("%d\n",ans);    }    return 0;}




原创粉丝点击