您的位置:首页 > 大数据 > 人工智能

UVA253 Cube painting

2016-02-24 22:58 513 查看
发现网络上大部分是穷举过的,也有其他牛逼的做法,我的做法好像跟大家不太一样,那就提供一点新的思路吧。我的方法是去观察给出的两个骰子的三个方向的四个面围成的圈,也就是

第一个圈:3 5 4 2

第二个圈:5 1 2 6

第三个圈:3 1 4 6
参照figure1就可明白,之后就观察两个骰子各自的三个圈能否一一对应(圈的方向可逆,即可顺时针,也可逆时针)这种做法幸运的Ac了,不过自己测试时自己想的一个数据过不了——abcdeffedcba 正确输出是FALSE,而我的输出是TRUE,所以这种做法有bug,不过所幸数据不刁钻,还是ac了,如果有大神能解决这个bug,欢迎指教。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
using namespace std;

int lstrcmp(char a[],char b[])
{
int i,j,flag=0;
for(i=0;i<4;i++)
{
int k=i;
for(j=0;j<4;j++,k++)
{
if(a[k%4]!=b[j])break;
}
if(j==4){flag=1;break;}
for(j=3;j>=0;j--,k++)
{
if(a[k%4]!=b[j])break;
}
if(j<0){flag=1;break;}
}
if(flag)return 1;
else return 0;
}
int main()
{
char a[20];
char s1[10][10],s2[10][10];
int vis[10];
while(scanf("%s",&a)!=EOF)
{
memset(s1,'\0',sizeof(s1));
memset(s2,'\0',sizeof(s2));
memset(vis,0,sizeof(vis));
int i,j,flag=1;
s1[1][0]=a[3-1];s1[1][1]=a[5-1];s1[1][2]=a[4-1];s1[1][3]=a[2-1];
s1[2][0]=a[5-1];s1[2][1]=a[1-1];s1[2][2]=a[2-1];s1[2][3]=a[6-1];
s1[3][0]=a[3-1];s1[3][1]=a[1-1];s1[3][2]=a[4-1];s1[3][3]=a[6-1];
s2[1][0]=a[3-1+6];s2[1][1]=a[5-1+6];s2[1][2]=a[4-1+6];s2[1][3]=a[2-1+6];
s2[2][0]=a[5-1+6];s2[2][1]=a[1-1+6];s2[2][2]=a[2-1+6];s2[2][3]=a[6-1+6];
s2[3][0]=a[3-1+6];s2[3][1]=a[1-1+6];s2[3][2]=a[4-1+6];s2[3][3]=a[6-1+6];
for(i=1;i<=3;i++)
{
int f=0;
for(j=1;j<=3;j++)
{
if(!vis[j]&&lstrcmp(s1[i],s2[j])==1){f=1;vis[j]=1;break;}
}
if(!f){flag=0;break;}
}
if(flag)printf("TRUE\n");
else printf("FALSE\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: