国庆训练赛第二场 模拟 能否一步还原二阶魔方
2018-10-03 20:32
190 查看
http://acm.hdu.edu.cn/showproblem.php?pid=5983
两种情况
一、一开始就还原好
二、要想一步还原 一定是有两面是好的(且是对立)
上下, 左右, 前后
有两层 可以发现每层模拟一下顺逆时针 会出现重复
所以可以得出结论 一共就3* 2种情况 枚举
[code]#include<iostream> #include<cstdio> #include<cstring> using namespace std; bool same(int a, int b, int c, int d){ if (a == b && a == c && a == d) return true; return false; } int a[7][5]; int b[7]; int main(){ int t; scanf("%d", &t); while (t--){ memset(b, 0, sizeof(b)); for (int i = 1; i <= 6; ++i){ b[i] = 1; for (int j = 1; j <= 4; ++j){ scanf("%d", &a[i][j]); //顺便看下 这个面是不是都一个颜色 if (j >= 2){ if (a[i][j] != a[i][j - 1]) b[i] = 0; } } } int success = 0; //一开始就好的情况 if (same(a[1][1], a[1][2], a[1][3], a[1][4]) && same(a[2][1], a[2][2], a[2][3], a[2][4]) && same(a[3][1], a[3][2], a[3][3], a[3][4]) && same(a[4][1], a[4][2], a[4][3], a[4][4]) && same(a[5][1], a[5][2], a[5][3], a[5][4]) && same(a[6][1], a[6][2], a[6][3], a[6][4])) success = 1; //转一步 一定就是有对立面 颜色相同 即上下13, 左右56, 前后24 只需转一层顺逆 就好了 不是转两次顺逆 因为重复了 //上下面同 if (b[1] && b[3] && same(a[2][1], a[2][2], a[5][3], a[5][1]) && same(a[5][4], a[5][2], a[4][1], a[4][2])&& same(a[4][3], a[4][4], a[6][4], a[6][2])&& same(a[6][3], a[6][1], a[2][3], a[2][4])) success = 1; if (b[1] && b[3] && same(a[2][1], a[2][2], a[6][4], a[6][2]) && same(a[6][3], a[6][1], a[4][1], a[4][2])&& same(a[4][3], a[4][4], a[5][3], a[5][1])&& same(a[5][4], a[5][2], a[2][3], a[2][4])) success = 1; //左右同 if (b[5] && b[6] && same(a[2][2], a[2][4], a[1][3], a[1][1]) && same(a[1][2], a[1][4], a[4][3], a[4][1])&& same(a[4][4], a[4][2], a[3][1], a[3][3])&& same(a[3][2], a[3][4], a[2][1], a[2][3])) success = 1; if (b[5] && b[6] && same(a[2][2], a[2][4], a[3][1], a[3][3]) && same(a[3][2], a[3][4], a[4][1], a[4][3])&& same(a[4][2], a[4][4], a[1][1], a[1][3])&& same(a[1][2], a[1][4], a[2][1], a[2][3])) success = 1; //前后同 if (b[2] && b[4] && same(a[1][3], a[1][4], a[5][2], a[5][1]) && same(a[5][4], a[5][3], a[3][3], a[3][4])&& same(a[3][1], a[3][2], a[6][1], a[6][2])&& same(a[6][3], a[6][4], a[1][1], a[1][2])) success = 1; if (b[2] && b[4] && same(a[1][3], a[1][4], a[6][1], a[6][2]) && same(a[6][3], a[6][4], a[3][3], a[3][4])&& same(a[3][1], a[3][2], a[5][2], a[5][1])&& same(a[5][3], a[5][4], a[1][1], a[1][2])) success = 1; if (success) puts("YES"); else puts("NO"); } return 0; }
阅读更多
相关文章推荐
- 判断二阶魔方能否一步还原 (HDU 5983)
- HDU 5983-Pocket Cube(一步还原二阶魔方)
- 2018年全国多校算法寒假训练营练习比赛(第二场) A 吐泡泡(模拟)
- 离模拟世界又近一步!谷歌推出开源量子计算平台OpenFermion
- 2013 - ECJTU 暑期训练赛第二场-problem-J
- 2013暑假集训B组训练赛第二场 - A Bus Game
- 2018年全国多校算法寒假训练营练习比赛(第二场) A 吐泡泡(模拟)
- 2013暑假集训B组训练赛第二场 - E Queue at the School
- HDU 2017 多校联合训练赛3 3003 6058 Kanade's sum 枚举 模拟链表
- 2018年全国多校算法寒假训练营练习比赛(第二场) A 吐泡泡(模拟)
- 【模拟算法】 ◆寒假练习第二场◆ A - 2 3 5 7的倍数
- 2013暑假集训B组训练赛第二场 - B - Funky Numbers
- POJ 2993-Emag eht htiw Em Pleh(模拟-根据棋子位置还原棋盘)
- 通过模拟实验脚本还原阿里巴巴的四个苦逼小朋友抢购月饼现场
- 使用mysqldump模拟生产环境实现mysql数据库的备份与还原
- 蓝桥杯 二阶魔方旋转 模拟
- HDU 3459 Rubik 2×2×2 二阶魔方还原(IDA*)
- 【模拟】洛谷 P1321 单词覆盖还原
- 一步到位ghost全自动备份还原光盘 v1.1 绿色
- 通过模拟实验脚本还原阿里巴巴的四个苦逼小朋友抢购月饼现场