UVA253——骰子涂色(Cube painting)

来源:互联网 发布:linux 文件上传工具 编辑:程序博客网 时间:2024/04/29 05:40

别人都是1000bytes就搞定了。我却要3000bytes。不过一次性AC的感觉真的很不错!

用的方法是:将第二个骰子的每个面都转到第1个面,然后以第1个面为轴旋转4次来判断是否相等。这样就能枚举出所有的可能。


#include<stdio.h>#include<string.h>char a[8];char b[8];char temp[8];int check(){for(int i=0;i<6;i++){if(a[i]!=temp[i]) return 0;}return 1;}void rotate1(){//以1面的法线为轴,逆时针旋转。即以右大拇指为轴,四指弯曲所指的方向旋转.//总共变换4个面char tt=temp[3];temp[3]=temp[1];temp[1]=temp[2];temp[2]=temp[4];temp[4]=tt;}void rotate2(){//以2面的法线为轴,逆时针旋转。char tt=temp[0];temp[0]=temp[3];temp[3]=temp[5];temp[5]=temp[2];temp[2]=tt;}void rotate3(){//以3面的法线为轴,逆时针旋转。char tt=temp[0];temp[0]=temp[1];temp[1]=temp[5];temp[5]=temp[4];temp[4]=tt;}int main(){char s[15];//freopen("input.txt","r",stdin);while(scanf("%s",s)!=EOF){int ar=0,ag=0,ab=0;int br=0,bg=0,bb=0;for(int i=0;i<6;i++){a[i]=s[i];b[i]=s[i+6];}strcpy(temp,b);for(int i=0;i<=6;i++){if(a[i]=='r') ar++;if(a[i]=='g') ag++;if(a[i]=='b') ab++;if(b[i]=='r') br++;if(b[i]=='g') bg++;if(b[i]=='b') bb++;}if(ar!=br || ag!=bg|| ab!=bb){printf("FALSE\n");continue;}//********以b第1个面为轴,变换4次,观察与a是否重合strcpy(temp,b);if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}//*********将b第2个面变换到第1面,作为轴,变换4次strcpy(temp,b);;rotate3();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}//*********将b第3个面变换到第1面,作为轴,变换4次strcpy(temp,b);;rotate2();rotate2();rotate2();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}//**********将b第4个面变换到第1个面,作为轴,变换4次strcpy(temp,b);;rotate2();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}//**********将b第5面变换到第1个面,作为轴,变换4次strcpy(temp,b);;rotate3();rotate3();rotate3();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}//**********将b第6面变换到第1个面,作为轴,变换4次strcpy(temp,b);;rotate3();rotate3();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}rotate1();if(check()) {printf("TRUE\n");continue;}printf("FALSE\n");}return 0;}


0 0
原创粉丝点击