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
- UVA253——骰子涂色(Cube painting)
- UVa253--Cube painting--骰子涂色--重在算法思想
- 骰子涂色(Cube painting)
- UVa 253 Cube painting(骰子涂色)
- UVa 253 Cube painting (骰子涂色)
- UVa253 Cube painting(骰子涂色)(27行,比较简洁的样子)
- 算法竞赛入门经典 第二版 习题4-4 骰子涂色 Cube painting uva253
- UVA - 253 Cube painting(骰子涂色)
- UVa253骰子涂色
- uva253 骰子涂色
- UVA253 Cube painting-20140127
- UVA253 - Cube painting
- UVa253 - Cube painting
- UVA253 Cube painting
- UVA253 Cube painting
- Uva253 Cube painting
- UVA253 Cube Painting
- 水题:UVa253-Cube painting
- Hadoop集群应用于大数据分析优势和挑战
- asp.net备忘
- 有新的订单,刷新并有提示音
- Jsp简单入门与Jsp实用教程总结
- linux基本命令(57)——ss命令
- UVA253——骰子涂色(Cube painting)
- java内存管理和垃圾回收
- (java:11276): GLib-GObject-WARNING **: cannot register existing type `GdkDisplayManager'
- 如何安装最新版的Google play服务
- codevs 2287 火车站
- Android Studio 下的 GitHub 配置
- C++二级笔记
- PPT文档实用美化技巧
- leetCode 72. Edit Distance