POJ 1957 Beehives 模拟

来源:互联网 发布:java游戏服务器 pdf 编辑:程序博客网 时间:2024/06/05 16:26

百度都查不到题解,看了好多关于六边形的博客,还有讲到SLG游戏的,最后干脆直接模拟穷举,AC了

两次WA是因为刚开始判0的时候没加continue...智障了

代码如下:View Source On GitHub

#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using namespace std;struct Point2D{    int x,y;};int nextvec[6][2]={    {        1,0    },    {        1,1    },    {        0,1    },    {        -1,0    },    {        -1,-1    },    {        0,-1    }};char stra[1024];char strb[1024];char buff[1024];Point2D pa[2000];Point2D pb[2000];bool cmp(const Point2D& a,const Point2D& b){    if(a.x==b.x)    {        return a.y < b.y;    }    return a.x < b.x;}int main(){    int N;    scanf("%d%*c",&N);    while(N--)    {        memset(pa,0,sizeof(pa));        memset(pb,0,sizeof(pb));        gets(stra);        gets(strb);        gets(buff);        int lena=strlen(stra);        int lenb=strlen(strb);        if(lena==0&&lenb==0)        {            printf("true\n");            continue;        }        else if(lena!=lenb)        {            printf("false\n");            continue;        }        int x=0;        int y=0;        for(int i=0;i<lena;i++)        {            int dir=(stra[i]-'a');            x+=nextvec[dir][0];            y+=nextvec[dir][1];            pa[i].x=x;            pa[i].y=y;        }        pa[lena].x=0;        pa[lena].y=0;        sort(pa,pa+lena+1,cmp);        int flag=0;        for(int dirCLT=0;dirCLT<6;dirCLT++)        {            for(int startID=0;startID<=lena;startID++)            {                x=pa[startID].x;                y=pa[startID].y;                for(int i=0;i<lenb;i++)                {                    int dir=(strb[i]-'a'+dirCLT)%6;                    x+=nextvec[dir][0];                    y+=nextvec[dir][1];                    pb[i].x=x;                    pb[i].y=y;                }                pb[lenb].x=pa[startID].x;                pb[lenb].y=pa[startID].y;                sort(pb,pb+lenb+1,cmp);                int tflag=0;                for(int i=0;i<=lena;i++)                {                    if(pa[i].x!=pb[i].x||pa[i].y!=pb[i].y)                    {                        tflag=1;                        break;                    }                }                if(tflag==0)                {                    flag=1;                    break;                }            }            if(flag)                break;        }        if(flag)        {            printf("true\n");        }        else        {            printf("false\n");        }    }    return 0;}


0 0