• hdu 4801模拟题


    /*
    模拟;
    注意:实质上一次魔方的一半要变化
    用c++超内存
    用g++过了
    */
    #include<stdio.h>
    #include<string.h>
    #include<queue>
    #include<algorithm>
    using namespace std;
    struct node
    {
        int f0[4],f4[4],f6[4],f8[4],f16[4],f20[4];
        int step;
    } s,next;
    int fnow[10000][6];
    int kk(int f[4])
    {
        if(f[0]==f[1]&&f[1]==f[2]&&f[2]==f[3])
            return 1;
        return 0;
    }
    int comp(struct node ss)//计算有几个面是同色
    {
        int sum=0;
        sum+=kk(ss.f0);
        sum+=kk(ss.f4);
        sum+=kk(ss.f6);
        sum+=kk(ss.f8);
        sum+=kk(ss.f16);
        sum+=kk(ss.f20);
        return sum;
    }
    void  clock(int f[4],int fd[4])//顺时针旋转
    {
        f[0]=fd[2];
        f[2]=fd[3];
        f[3]=fd[1];
        f[1]=fd[0];
        return ;
    }
    void clockfan(int f[4],int fd[4])//逆时针旋转
    {
        f[0]=fd[1];
        f[1]=fd[3];
        f[3]=fd[2];
        f[2]=fd[0];
        return ;
    }
    void Switch(struct node s,int k)//6种旋转方式
    {
        if(k==0)
        {
            next.f0[0]=s.f20[0];
            next.f0[2]=s.f20[2];
            next.f6[0]=s.f0[0];
            next.f6[2]=s.f0[2];
            next.f16[0]=s.f6[0];
            next.f16[2]=s.f6[2];
            next.f20[0]=s.f16[0];
            next.f20[2]=s.f16[2];
            clock(next.f4,s.f4);//要变化
        }
        if(k==1)
        {
            next.f20[0]=s.f0[0];
            next.f20[2]=s.f0[2];
            next.f0[0]=s.f6[0];
            next.f0[2]=s.f6[2];
            next.f6[0]=s.f16[0];
            next.f6[2]=s.f16[2];
            next.f16[0]=s.f20[0];
            next.f16[2]=s.f20[2];
            clockfan(next.f4,s.f4);//要变化
        }
        if(k==2)
        {
            next.f4[0]=s.f6[0];
            next.f4[1]=s.f6[1];
            next.f20[2]=s.f4[1];
            next.f20[3]=s.f4[0];
            next.f8[0]=s.f20[3];
            next.f8[1]=s.f20[2];
            next.f6[0]=s.f8[0];
            next.f6[1]=s.f8[1];
            clock(next.f0,s.f0);
        }
        if(k==3)
        {
            next.f6[0]=s.f4[0];
            next.f6[1]=s.f4[1];
            next.f4[0]=s.f20[3];
            next.f4[1]=s.f20[2];
            next.f20[3]=s.f8[0];
            next.f20[2]=s.f8[1];
            next.f8[0]=s.f6[0];
            next.f8[1]=s.f6[1];
            clockfan(next.f0,s.f0);
        }
        if(k==4)
        {
            next.f0[2]=s.f8[0];
            next.f0[3]=s.f8[2];
            next.f4[1]=s.f0[3];
            next.f4[3]=s.f0[2];
            next.f16[0]=s.f4[1];
            next.f16[1]=s.f4[3];
            next.f8[0]=s.f16[1];
            next.f8[2]=s.f16[0];
            clockfan(next.f6,s.f6);
        }
        if(k==5)
        {
            next.f8[0]=s.f0[2];
            next.f8[2]=s.f0[3];
            next.f0[3]=s.f4[1];
            next.f0[2]=s.f4[3];
            next.f4[1]=s.f16[0];
            next.f4[3]=s.f16[1];
            next.f16[1]=s.f8[0];
            next.f16[0]=s.f8[2];
            clock(next.f6,s.f6);
        }
    }
    int n,len;
    void chh(int &f,int fd[4])
    {
         f=fd[3];
         f=f*6+fd[2];
         f=f*6+fd[1];
         f=f*6+fd[0];
        return ;
    }
    void fswitch(struct node s,int kf[6])
    {
        chh(kf[0],s.f0);
        chh(kf[1],s.f4);
        chh(kf[2],s.f6);
        chh(kf[3],s.f8);
        chh(kf[4],s.f16);
        chh(kf[5],s.f20);
        return ;
    }
    void bfs(struct node s)
    {
        int j,k,maxx;
        struct node cur;
        maxx=comp(s);
        s.step=0;
        len=0;
        queue<node>q;
        q.push(s);
        while(!q.empty())
        {
            cur=q.front();
            q.pop();
            if(cur.step>=n)continue;
            for(k=0; k<6; k++)
            {
                next=cur;
                Switch(cur,k);
                j=comp(next);
                next.step++;
                q.push(next);
                if(j>maxx)
                    maxx=j;
                    if(maxx==6)break;
            }
            if(maxx==6)break;
        }
        printf("%d
    ",maxx);
        return ;
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            scanf("%d%d%d%d",&s.f0[0],&s.f0[1],&s.f0[2],&s.f0[3]);
            scanf("%d%d%d%d",&s.f4[0],&s.f4[1],&s.f6[0],&s.f6[1]);
            scanf("%d%d%d%d",&s.f8[0],&s.f8[1],&s.f4[2],&s.f4[3]);
            scanf("%d%d%d%d",&s.f6[2],&s.f6[3],&s.f8[2],&s.f8[3]);
            scanf("%d%d%d%d",&s.f16[0],&s.f16[1],&s.f16[2],&s.f16[3]);
            scanf("%d%d%d%d",&s.f20[0],&s.f20[1],&s.f20[2],&s.f20[3]);
            bfs(s);
        }
        return 0;
    }

  • 相关阅读:
    There is no Action mapped for namespace [/pages/action/student] and action name [findStudent]
    站点设计至尊 (展示文)
    【翻译自mos文章】DBA_JOBS 和 DBA_JOBS_RUNNING 不同的结果的解释
    Effective C++ 条款45
    NYOJ109 数列转换 【守恒法】
    Windows 上安装 pip
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0
    解决Eclipse 项目报错:Unbound classpath container: ‘JRE System Library [JavaSE-1.7]
    neuroph Perceptron Sample
    Visio 画图去掉页边距(图形四周的空白区域)的解决办法
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410542.html
Copyright © 2020-2023  润新知