这题用穷举法最合适,每种骰子至多有24种状态,读入数据穷举一下就行了。
1.为了提高效率,可以分别用特征数字100(b)/10(g)/1(r)来表示每个面的颜色,这样两个等价骰子的特征数字之和必然是相等的。如果不相等则直接输出'FALSE'
2.骰子可以沿着x/y/z三个方向旋转,如果两个特征数字相等的骰子对不上,那就旋转吧。
一次ac。
//#define LOCAL
//#define TESTING
#include<stdio.h>
#include<ctype.h>
#include<string.h>
char cube1[7],cube2[7],tempcube[7];
int sum1,sum2;
int code(char color)
{
if(color == 'r') return 1;
else if(color == 'g') return 10;
else if(color == 'b') return 100;
}
int check()
{
for(int i = 1; i <= 6; i++)
{
if(tempcube[i]!=cube2[i]) return i;
}
return 0;
}
void rotatex()
{
char temps;
temps = tempcube[1];
tempcube[1] = tempcube[2];
tempcube[2] = tempcube[6];
tempcube[6] = tempcube[5];
tempcube[5] = temps;
}
void rotatey()
{
char temps;
temps = tempcube[2];
tempcube[2] = tempcube[3];
tempcube[3] = tempcube[5];
tempcube[5] = tempcube[4];

该博客介绍了如何解决算法竞赛入门经典(第2版)中的一道习题4-4——Cube painting。作者建议使用穷举法,通过特征数字表示骰子的六个面颜色,优化效率。当两个骰子的特征数字之和不等时,判断为不等价。如果特征数字相等但无法对应,则考虑骰子的旋转。这种方法成功帮助作者一次性通过了AC验证。
最低0.47元/天 解锁文章
1402

被折叠的 条评论
为什么被折叠?



