记录编号 |
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);
}