记录编号 |
47743 |
评测结果 |
AAAAAAAA |
题目名称 |
魔板 |
最终得分 |
100 |
用户昵称 |
Truth.Cirno |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.068 s |
提交时间 |
2012-11-03 10:55:33 |
内存使用 |
16.76 MiB |
显示代码纯文本
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <vector>
- using namespace std;
-
- struct quetype
- {
- int deep,dad,rec,data[8];
- };
-
- int sq8[8]={1};
- bool used[16777216];
- vector<quetype> que;
-
- void printway(int poi)
- {
- if (poi)
- {
- printway(que[poi].dad);
- cout<<char(que[poi].rec+'A'-1);
- }
- }
-
- int main(void)
- {
- freopen("msquare.in","r",stdin);
- freopen("msquare.out","w",stdout);
- unsigned int tail=0;
- int i,tar=0,temp;
- quetype a,b;
- for (i=1;i<8;i++)
- sq8[i]=sq8[i-1]*8;
- for (i=0;i<4;i++)
- {
- cin>>temp;
- temp--;
- tar+=sq8[i]*temp;
- }
- for (i=7;i>=4;i--)
- {
- cin>>temp;
- temp--;
- tar+=sq8[i]*temp;
- }
- a.data[0]=0;
- a.data[1]=1;
- a.data[2]=2;
- a.data[3]=3;
- a.data[4]=7;
- a.data[5]=6;
- a.data[6]=5;
- a.data[7]=4;
- temp=0;
- for (i=0;i<8;i++)
- temp+=sq8[i]*a.data[i];
- if (temp==tar)
- {
- cout<<"0\n";
- return(0);
- }
- used[temp]=true;
- a.deep=0;
- a.dad=-1;
- a.rec=0;
- que.push_back(a);
- while (tail<que.size())
- {
- a=que[tail];
- /*1*/
- for (i=0;i<4;i++)
- b.data[i]=a.data[i+4];
- for (i=4;i<8;i++)
- b.data[i]=a.data[i-4];
- temp=0;
- for (i=0;i<8;i++)
- temp+=sq8[i]*b.data[i];
- if (!used[temp])
- {
- used[temp]=true;
- b.deep=a.deep+1;
- b.dad=tail;
- b.rec=1;
- que.push_back(b);
- if (temp==tar)
- break;/*ans*/
- }
- /*1*/
- /*2*/
- b.data[0]=a.data[3];
- b.data[1]=a.data[0];
- b.data[2]=a.data[1];
- b.data[3]=a.data[2];
- b.data[4]=a.data[7];
- b.data[5]=a.data[4];
- b.data[6]=a.data[5];
- b.data[7]=a.data[6];
- temp=0;
- for (i=0;i<8;i++)
- temp+=sq8[i]*b.data[i];
- if (!used[temp])
- {
- used[temp]=true;
- b.deep=a.deep+1;
- b.dad=tail;
- b.rec=2;
- que.push_back(b);
- if (temp==tar)
- break;/*ans*/
- }
- /*2*/
- /*3*/
- b=a;
- b.data[1]=a.data[5];
- b.data[2]=a.data[1];
- b.data[5]=a.data[6];
- b.data[6]=a.data[2];
- temp=0;
- for (i=0;i<8;i++)
- temp+=sq8[i]*b.data[i];
- if (!used[temp])
- {
- used[temp]=true;
- b.deep=a.deep+1;
- b.dad=tail;
- b.rec=3;
- que.push_back(b);
- if (temp==tar)
- break;/*ans*/
- }
- /*3*/
- tail++;
- }
- temp=que.size()-1;
- cout<<que[temp].deep<<endl;
- printway(temp);
- return(0);
- }