记录编号 42229 评测结果 AAAAAAAAAA
题目名称 轮回游戏 最终得分 100
用户昵称 Gravatar苏轼 是否通过 通过
代码语言 C++ 运行时间 0.715 s
提交时间 2012-09-17 20:53:55 内存使用 0.31 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include <algorithm>
using namespace std;
int q[24];
int w[20],biao;
int answer=0;
int ff[8]={6, 7, 8, 11, 12, 15, 16, 17};
int f[8][7]={{0,2,6,11,15,20,22},{1,3,8,12,17,21,23},{10,9,8,7,6,5,4},{19,18,17,16,15,14,13},{23,21,17,12,8,3,1},{22,20,15,11,6,2,0},{13,14,15,16,17,18,19},{4,5,6,7,8,9,10}};
int deep=0;
bool dfs(int x);
int tong()
{
	int a[3]={0};
	for (int i=0;i<8;i++)
	{
		a[q[ff[i]]-1]++;
	}
	return 8 - max(max(a[0], a[1]), a[2]);
}

bool dfs(int x)
{
	if (x>deep)
		return 0;
	for (int i=0;i<8;i++)
	{
		w[x]=i;
		int a;
		a=q[f[i][0]];
		for (int j=0;j<6;j++)
		{
			q[f[i][j]]=q[f[i][j+1]];
		}
		q[f[i][6]]=a;
		int aa;
		aa=tong();
		if (!aa||(aa+x<deep&&dfs(x+1)))
			return 1;
		a=q[f[i][6]];
		for (int j=6;j>0;j--)
		{
			q[f[i][j]]=q[f[i][j-1]];
		}
		q[f[i][0]]=a;
	}
	return 0;
}
int main()
{
    freopen ("rotationa.in","r",stdin);
    freopen ("rotationa.out","w",stdout);
    while (1)
    {
		deep=0;
        for (int i=0;i<24;i++)
        {
            cin>>q[i];
            if (q[i]==0)
                exit(0);
        }
        answer=0;
		if (!tong())
		{
			printf("No moves needed\n%d\n", q[6]);
			continue;
		}
		while (!dfs(0))
		{
			deep++;
		}
		for (int i=0;i<deep;i++)
		{
			char b;
			b='A';
			b+=w[i];
			cout<<b;
		}
		cout<<endl<<q[6]<<endl;
	}
	return 0;
}