【挑战题】骰子
Description
(能独立写出来说明你的搜索基础比较扎实了)
桌面上有两个特别的骰子。骰子的每一个面,都写了一个不同的数字。设第一个骰子上下左右前后分别为a1, a2, a3, a4, a5, a6,第二个骰子分别为b1, b2, b3, b4, b5, b6。保证每个数字在区间 [1, 6] 内,而且对于所有的i ≠ j都有ai ≠ aj, bi ≠ bj。特别地,每个骰子相对的两面数字之和都不会为7
一开始,两个骰子的摆放可能是不同的(即对应面的数字可能不同),所以Ddy想通过如下操作使两个骰子摆放变得相同
左转:以CG为轴向左转90°,使ACGE变成底部
右转:以DH为轴向右转90°,使BDHF变成底部
前转:以CD为轴向前转90°,使ABCD变成底部
后转:以GH为轴向后转90°,使EFHG变成底部
现在Ddy想知道达到目的的最小步数是多少。
时间限制1s,空间限制128M.
Input
多组数据,直到EOF
对于每组数据,两行,分别表示两个骰子的状态。
每行6个数分别a1, a2, …, a6和b1, b2, …, b6
Output
对于每组数据输出一行,达到目的的最小步数。
无解则输出 -1
Sample Input
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 5 6 4 3
1 2 3 4 5 6
1 4 2 5 3 6
Sample Output
0
3
-1
Hint
注:如何处理这类输入问题?使用这种代码:
while (~scanf("")) //注意波浪线
{
...
}
//如:多组数据的A+B问题
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
while (~scanf("%d%d",&a,&b))
{
printf("%d\n",a+b);
}
return 0;
}
//注意数组清空等之类的问题