delete pics to save space
This commit is contained in:
84
2.1343.cpp
Normal file
84
2.1343.cpp
Normal file
@ -0,0 +1,84 @@
|
||||
#include<cstdio>
|
||||
#include<algorithm>
|
||||
using namespace std;
|
||||
int line[8][7]={
|
||||
{ 0, 2, 6,11,15,20,22}, // A
|
||||
{ 1, 3, 8,12,17,21,23}, // B
|
||||
{10, 9, 8, 7, 6, 5, 4}, // C
|
||||
{19,18,17,16,15,14,13}, // D
|
||||
};
|
||||
|
||||
const int rev[8]={5,4,7,6,1,0,3,2};
|
||||
const int center[8]={6,7,8,11,12,15,16,17};
|
||||
|
||||
int a[24];
|
||||
char ans[1000];
|
||||
|
||||
bool is_final()
|
||||
{
|
||||
for(int i=0;i<8;i++)
|
||||
if(a[center[i]]!=a[center[0]]) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
int diff(int target)
|
||||
{
|
||||
int ans=0;
|
||||
for(int i=0;i<8;i++)
|
||||
if(a[center[i]]!=target) ans++;
|
||||
return ans;
|
||||
}
|
||||
|
||||
inline int h()
|
||||
{
|
||||
return min(min(diff(1),diff(2)),diff(3));
|
||||
}
|
||||
|
||||
inline void move(int i)
|
||||
{
|
||||
int tmp=a[line[i][0]];
|
||||
for(int j=0;j<6;j++) a[line[i][j]]=a[line[i][j+1]];
|
||||
a[line[i][6]]=tmp;
|
||||
}
|
||||
|
||||
bool dfs(int d,int maxd)
|
||||
{
|
||||
if(is_final())
|
||||
{
|
||||
ans[d]='\0';
|
||||
printf("%s\n",ans);
|
||||
return true;
|
||||
}
|
||||
if(d+h()>maxd) return false;
|
||||
for(int i=0;i<8;i++)
|
||||
{
|
||||
ans[d]='A'+i;
|
||||
move(i);
|
||||
if(dfs(d+1,maxd)) return true;
|
||||
move(rev[i]);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
#ifdef local
|
||||
freopen("pro.in","r",stdin);
|
||||
#endif
|
||||
for(int i=4;i<8;i++)
|
||||
for(int j=0;j<7;j++)
|
||||
line[i][j]=line[rev[i]][6-j];
|
||||
while(scanf("%d",&a[0])==1&&a[0])
|
||||
{
|
||||
for(int i=1;i<24;i++) scanf("%d",&a[i]);
|
||||
for(int i=0;i<24;i++) if(!a[i]) return 0;
|
||||
if(is_final())
|
||||
printf("No moves needed\n");
|
||||
else
|
||||
{
|
||||
for(int maxd=1; ;maxd++)
|
||||
if(dfs(0,maxd)) break;
|
||||
}
|
||||
printf("%d\n",a[6]);
|
||||
}
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user