Uva-253 - Cube painting-AC

来源:互联网 发布:数据交换方案 编辑:程序博客网 时间:2024/04/25 12:14

题意是:给出俩正方体着色方案,看俩正方体是否能经过旋转后一致。

思路: 定住任意一个对面(有6种情况,1为上面6为下面为一种情况,6为上1为下另一种情况······),剩下4个面,旋转比较是否有一致的。

很明显我写麻烦了尴尬

AC代码:

#include <stdio.h>#include <stdlib.h>int same(char a0, char b0, char a1, char b1){    return (a0==a1&&b0==b1)||(a0==b1&&b0==a1);}int same4(char a[],char b[]){    int i,j;    for (i=0;i<4;i++)    {        for (j=0;j<4;j++)            if (a[j]!=b[(j+i)%4])                break;        if (j==4) return 1;    }    return 0;}int main(){    char a,b,cube[20],cube1[10],cube2[10],m1[10],m2[10],n[10];    int i,j;    while(gets(cube)!=NULL)    {        for (i=0;i<6;i++)            cube1[i]=cube[i];        for (i=0;i<6;i++)            cube2[i]=cube[i+6];        m1[0]=cube1[1];        m1[1]=cube1[3];        m1[2]=cube1[4];        m1[3]=cube1[2];        m2[0]=cube1[2];        m2[1]=cube1[4];        m2[2]=cube1[3];        m2[3]=cube1[1];        if (same(cube1[0],cube1[5],cube2[0],cube2[5]))        {            n[0]=cube2[1];            n[1]=cube2[3];            n[2]=cube2[4];            n[3]=cube2[2];            if (same4(m1,n)||same4(m2,n))            {                printf("TRUE\n");                continue;            }        }        if (same(cube1[0],cube1[5],cube2[1],cube2[4]))        {            n[0]=cube2[0];            n[1]=cube2[3];            n[2]=cube2[5];            n[3]=cube2[2];            if (same4(m1,n)||same4(m2,n))            {                printf("TRUE\n");                continue;            }        }        if (same(cube1[0],cube1[5],cube2[2],cube2[3]))        {            n[0]=cube2[0];            n[1]=cube2[1];            n[2]=cube2[5];            n[3]=cube2[4];;            if (same4(m1,n)||same4(m2,n))            {                printf("TRUE\n");                continue;            }        }        printf("FALSE\n");    }    return 0;}


 

 

0 0
原创粉丝点击