题意是说给定一个 2*2 魔方的各个面的情况,问是否能转动不超过一次使得魔方复原。

思路是先在输入的时候统计一下已完成的面数,要想以最多一次的转动使得魔方复原,那么已完成的面数只能是 2 面或者 6 面,此处可剪枝。

若已完成 6 面,那么一定可以复原;

若已完成 2 面,则要用一次转动完成其他六面,开始这里打算用结构体去存,结果在判断的时候自己混乱了……最终直接定了 24 个变量,a,b,c……w,x,

手动做了个小正方体,太丢人……(但不得不说这种方法挺好的,易于理解,而且不会乱^_^)

代码如下:

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3 int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x;
  4 bool xu[8];
  5 int main()
  6 {
  7     int times,cnt;
  8     bool wu;
  9     scanf("%d",&times);
 10     while(times--)
 11     {
 12         cnt = 0;
 13         memset(xu,0,sizeof(xu));
 14         scanf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j,&k,&l,&m,&n,&o,&p,&q,&r,&s,&t,&u,&v,&w,&x);
 15         if(a==b&&b==c&&c==d)
 16         {
 17             ++cnt;
 18             xu[0] = 1;
 19         }
 20         if(e==f&&f==g&&g==h)
 21         {
 22             ++cnt;
 23             xu[1] = 1;
 24         }
 25         if(i==j&&j==k&&k==l)
 26         {
 27             ++cnt;
 28             xu[2] = 1;
 29         }
 30         if(m==n&&n==o&&o==p)
 31         {
 32             ++cnt;
 33             xu[3] = 1;
 34         }
 35         if(q==r&&r==s&&s==t)
 36         {
 37             ++cnt;
 38             xu[4] = 1;
 39         }
 40         if(u==v&&v==w&&w==x)
 41         {
 42             ++cnt;
 43             xu[5] = 1;
 44         }
 45         if(cnt==6) puts("YES");
 46         else if(cnt==2)
 47         {
 48             wu = 0;
 49             if(xu[0]&&xu[2])
 50             {
 51                 if(m==n&&m==u&&m==w)
 52                 {
 53                     if(v==x&&v==e&&v==f)
 54                         if(g==h&&g==r&&g==t)
 55                             if(q==s&&q==o&&q==p)
 56                                 wu = 1;
 57                 }
 58                 else if(m==n&&m==r&&m==t)
 59                 {
 60                     if(q==s&&q==e&&q==f)
 61                         if(g==h&&g==u&&g==w)
 62                             if(v==x&&v==o&&v==p)
 63                                 wu = 1;
 64                 }
 65             }
 66             else if(xu[1] && xu[3])
 67             {
 68                 if(a==b&&a==w&&a==x)
 69                 {
 70                     if(u==v&&u==i&&u==j)
 71                         if(k==l&&k==s&&k==t)
 72                             if(q==r&&q==c&&q==d)
 73                                 wu = 1;
 74                 }
 75                 else if(a==b&&a==s&&a==t)
 76                 {
 77                     if(q==r&&q==i&&q==j)
 78                         if(k==l&&k==w&&k==x)
 79                             if(u==v&&u==c&&u==d)
 80                                 wu = 1;
 81                 }
 82             }
 83             else if(xu[4] && xu[5])
 84             {
 85                 if(a==c&&a==n&&a==p)
 86                 {
 87                     if(m==o&&m==j&&m==l)
 88                         if(i==k&&i==f&&i==h)
 89                             if(e==g&&e==b&&e==d)
 90                                 wu = 1;
 91                 }
 92                 else if(a==c&&a==f&&a==h)
 93                 {
 94                     if(e==g&&e==j&&e==l)
 95                         if(i==k&&i==n&&i==p)
 96                             if(m==o&&m==b&&m==d)
 97                                 wu = 1;
 98                 }
 99             }
100             if(wu) puts("YES");
101             else puts("NO");
102         }
103         else puts("NO");
104     }
105     return 0;
106 }

View Code

转载于:https://www.cnblogs.com/Taskr212/p/9740115.html

HDU 5983(模拟魔方 模拟)相关推荐

  1. HDU 3328 Flipper 栈 模拟

    HDU 3328 Flipper 栈 模拟 首先想说,英语太烂这题读了很长时间才读懂......题意是说输入有几张牌,然后输入这些牌的初始状态(是面朝上还是面朝下),然后输入操作方式,R表示翻一下右边 ...

  2. 驱动级模拟驱动级模拟:直接读写键盘的硬件端口!

    驱动级模拟驱动级模拟:直接读写键盘的硬件端口! 有一些使用DirectX接口的游戏程序,它们在读取键盘操作时绕过了windows的消息机制,而使用DirectInput.这是因为有些游戏对实时性控制的 ...

  3. lammps计算聚合物例子_LAMMPS模拟聚合物结构,非晶态聚合物变形行为的模拟,纳米线变形模拟,单轴张力模拟,晶格参数计算...

    推荐一个网站,上面有LAMMPS模拟聚合物结构,非晶态聚合物变形行为的模拟,纳米线变形模拟,单轴张力模拟,晶格参数计算的lammps脚本,如下面是晶格参数计算的lammps脚本,具体网址是: LAMM ...

  4. 计算机CCT考试模拟操作题,基础计算机cct模拟测试模拟题.doc

    基础计算机cct模拟测试模拟题 一.单选 1. 用计算机进行图书资料的检索,该计算机应用属于 A. 数据处理 B. 自动控制 C. 辅助设计 D. 科学计算 8. 下列图标不会出现在"控制面 ...

  5. 重力模拟,模拟了高达100000粒子和一个中心物体之间的基本引力

    VisualFreeBasic 中的简单重力模拟 代码模拟了高达100000粒子和一个中心物体之间的基本引力. 可以调整模拟速度. 可以调整粒子的初始速度 (方向角是随机的) 可以调整粒子质量 重置微 ...

  6. 社恐人必备逃跑神器-模拟来电+模拟短信+模拟钱包+模拟关机

    小伙伴们注意:公众号的推送机制不再按照时间前后推送了,微信公众号信息流乱序.君哥建议大家把科技毒瘤君公众号置顶(设为星标⭐),以便第一时间看到推送,非常感谢~,方法如下图: 如果你是一个具有社交恐惧症 ...

  7. Week10 限时大模拟 B - 东东转魔方 HDU - 5983

    题目描述 东东有一个二阶魔方,即2×2×2的一个立方体组.立方体由八个角组成. 魔方的每一块都用三维坐标(h, k, l)标记,其中h, k, l∈{0,1}.六个面的每一个都有四个小面,每个小面都有 ...

  8. HDU 5250 三阶魔方(模拟、置换)

    题意: 给定N≤100的三阶魔方操作序列给定N\le100的三阶魔方操作序列 魔方操作如下图:魔方操作如下图: 求问:对一个初状态(六个面都是拼好的)的魔方进行多少次连续的序列操作后,魔方会恢复到初状 ...

  9. 圆桌会议 HDU - 1214(规律+模拟队列)

    Time limit     1000 ms Memory limit     32768 kB OS    Windows Source     杭电ACM省赛集训队选拔赛之热身赛 HDU ACM集 ...

最新文章

  1. 8种方案解决重复提交问题
  2. 为了撩妹用Python做了一个办公小工具,她说棒极了
  3. Linux驱动修炼之道-SPI驱动框架源码分析(上)
  4. 百度推出飓风算法,严厉打击恶劣采集
  5. 使用钩子函数[3] - 建立一个全局的鼠标钩子
  6. 单链表的逆序java_java 实现单链表的逆序
  7. 【Redis】Redis介绍与Redis3在Window下的安装
  8. conda pip安装在哪里_TensorFlow 2.0 安装指南
  9. 微信小程序把玩(三十二)Image API
  10. 【LeetCode】剑指 Offer 61. 扑克牌中的顺子
  11. RK 3399 切换以太网卡
  12. Linux系统上安装JDK和Tomcat服务器
  13. Q78:规则网格(Regular Grids)——Ray Tracing中的一种加速技术
  14. System.Transactions.Diagnostics.DiagnosticTrace 的类型初始值设定项引发异常。配置系统未能初始化
  15. sqlserver200864位下载_SQL Server 2008 官方简体中文正式版
  16. 蓝牙---AVRCP协议
  17. PHOTOSHOP中常用的四种抠图方法
  18. 学计算机拼音摇号,拼音真的很难教?要不要提前学?我们一起陪娃做好这些就够了!...
  19. 开发人员系统功能设计常用办公软件分享
  20. JavaScript展示商品详情图

热门文章

  1. elementUI中input组件的autofocus属性不生效
  2. php js函数作用域,javascript 作用域详解
  3. 关于CPU科普,这篇说得最详细
  4. menu显示菜单和提供选择
  5. Armbian 笔记一_初次登陆配置 Armbian 系统
  6. 微信小程序申请地理位置接口wx.getLocation不通过的应对方案 过率很高
  7. JavaScript <script>标签
  8. 【 C++11 】右值引用和移动语义
  9. l1-039 古风排版 20分 极简七行逻辑代码版
  10. FAT16介绍与结构