题面

题意:给你一个2*2的魔方,给你每个面每个小块的颜色,一共24个,然后问你能否在一步之内还原.

题解:手动在纸上画,推出每种变化对应的置换,显然,一共有6种,而且可以当成3种,(具体哪3种,就是绕x,y,z轴转一次的),另外一个方向,就是转三次就行了

而且你也不需要考虑什么上面转了下面转,相对关系是一样的

写的时候犯了个错,手写的u,v,r分不清楚了.....

转一次会有12个小面发生变化,写的时候可以只写8个面,因为有一个面的位置变了,

但是我们只问一步之内能不能还原,那一面的都没有到其他面,所以不影响也就是我注释部分,

   记得一进来就判这个魔方是不是已经是还原好的.

 #include<bits/stdc++.h>
using namespace std;
int T,f,a[],b[],x[];
int ok()
{
for (int i=;i<=;i++) if (x[i]!=x[]) return ;
for (int i=;i<=;i++) if (x[i]!=x[]) return ;
for (int i=;i<=;i++) if (x[i]!=x[]) return ;
for (int i=;i<=;i++) if (x[i]!=x[]) return ;
for (int i=;i<=;i++) if (x[i]!=x[]) return ;
for (int i=;i<=;i++) if (x[i]!=x[]) return ;
return ;
}
int okk()
{
for (int i=;i<=;i++) if (b[i]!=b[]) return ;
for (int i=;i<=;i++) if (b[i]!=b[]) return ;
for (int i=;i<=;i++) if (b[i]!=b[]) return ;
for (int i=;i<=;i++) if (b[i]!=b[]) return ;
for (int i=;i<=;i++) if (b[i]!=b[]) return ;
for (int i=;i<=;i++) if (b[i]!=b[]) return ;
return ;
}
void z1()
{
/*x[2]=a[1];
x[4]=a[2];
x[1]=a[3];
x[3]=a[4];*/
x[]=a[];
x[]=a[];
x[]=a[];
x[]=a[];
x[]=a[];
x[]=a[];
x[]=a[];
x[]=a[];
}
void z2()
{
/*x[21]=a[23];
x[23]=a[24];
x[22]=a[21];
x[24]=a[22];*/
x[]=a[];
x[]=a[];
x[]=a[];
x[]=a[];
x[]=a[];
x[]=a[];
x[]=a[];
x[]=a[];
}
void z3()
{
/*x[5]=a[6];
x[6]=a[8];
x[7]=a[5];
x[8]=a[7];*/
x[]=a[];
x[]=a[];
x[]=a[];
x[]=a[];
x[]=a[];
x[]=a[];
x[]=a[];
x[]=a[];
}
int ok1()
{
for (int i=;i<=;i++) a[i]=b[i];
for (int i=;i<=;i++) x[i]=a[i];
z1();
if (ok()) return ;
for (int i=;i<=;i++) a[i]=x[i];
z1();
for (int i=;i<=;i++) a[i]=x[i];
z1();
if (ok()) return ;
return ;
}
int ok2()
{
for (int i=;i<=;i++) a[i]=b[i];
for (int i=;i<=;i++) x[i]=a[i];
z2();
if (ok()) return ;
for (int i=;i<=;i++) a[i]=x[i];
z2();
for (int i=;i<=;i++) a[i]=x[i];
z2();
if (ok()) return ;
return ;
}
int ok3()
{
for (int i=;i<=;i++) a[i]=b[i];
for (int i=;i<=;i++) x[i]=a[i];
z3();
if (ok()) return ;
for (int i=;i<=;i++) a[i]=x[i];
z3();
for (int i=;i<=;i++) a[i]=x[i];
z3();
if (ok()) return ;
return ;
}
int main()
{
scanf("%d",&T);
while (T--)
{
f=;
for (int i=;i<=;i++) scanf("%d",&b[i]);
if (okk()) f=;
if (f==) if (ok1()) f=;
if (f==) if (ok2()) f=;
if (f==) if (ok3()) f=;
if (f==) puts("YES");else puts("NO");
}
return ;
}

Hdu-5983 2016ACM/ICPC亚洲区青岛站 B.Pocket Cube 模拟的更多相关文章

  1. Hdu-5992 2016ACM/ICPC亚洲区青岛站 K.Finding Hotels KDtree

    题面 题意:二维平面上有很多点,每个点有个权值,现在给你一个点(很多组),权值v,让你找到权值小于等于v的点中离这个点最近的,相同的输出id小的 题解:很裸的KDtree,但是查询的时候有2个小限制, ...

  2. HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)

    Recursive sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  3. HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)

    Counting Cliques Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  4. HDU 5948 Thickest Burger 【模拟】 (2016ACM/ICPC亚洲区沈阳站)

    Thickest Burger Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  5. HDU 5949 Relative atomic mass 【模拟】 (2016ACM/ICPC亚洲区沈阳站)

    Relative atomic mass Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  6. HDU 5976 Detachment 【贪心】 (2016ACM/ICPC亚洲区大连站)

    Detachment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  7. HDU 5979 Convex【计算几何】 (2016ACM/ICPC亚洲区大连站)

    Convex Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  8. 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

    摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...

  9. 2016ACM/ICPC亚洲区大连站现场赛题解报告(转)

    http://blog.csdn.net/queuelovestack/article/details/53055418 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原 ...

随机推荐

  1. Assembly之instruction之Indirect Autoincrement Mode

    Assembler Code Content of ROMMOV @R10+,0(R11)   MOV @R10+,0(R11) Length: One or two words Operation: ...

  2. C# 根据空格数截取

    #region --根据空格数截取 ; ; //循环截取 , }; while (!sr.EndOfStream) { ; i < strTest.Length - ; i++) { ).Tri ...

  3. 一个完整的jmeter APP登录接口测试实例

    最终效果: 知识点: 通过HTTP信息头管理器, 正则表达式提取器 提取登录要用的token,memcard,Debug Sampler,CSV Data set  config参数化登录,循环控制器 ...

  4. APICloud 获取缓存以及清除缓存(常用第三方方法)

    一.app中经常会有缓存的清除这个操作,具体如下 1.获取缓存大小 apiready = function() { api.getCacheSize(function(ret, err) { //si ...

  5. git_安装与配置

    安装 windows平台安装 在windows平台安装git,需要下载exe.文件,下载地址:https://gitforwindows.org/,双击下载的.exe文件,按照提示进行安装,安装完成后 ...

  6. 【Python基础】条件语句

    Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非空(null)值为tr ...

  7. Html 页面刷新后出现闪动

    Html 页面刷新后,或跳转后,出现闪动,抖动问题 1.查看有没有用到新字体,新字体链接位置是否存在 如: @font-face { font-family: "AvantGarde-Dem ...

  8. C语言中时钟编程

    目录 C语言中时钟编程 1. 文章目的 2.基本概念 2.1 UTC时间 2.2 UNIX纪元时间 2.3 格林威治时间 (GMT) 3.时间转换 3.1 asctime函数 3.2 ctime函数 ...

  9. PHP多进程初探 --- 利用多进程开发点儿东西吧

    [原文地址:https://blog.ti-node.com/blog...] 干巴巴地叨逼叨了这么久,时候表演真正的技术了! 做个高端点儿的玩意吧,加入我们要做一个任务系统,这个系统可以在后台帮我们 ...

  10. 用户输入input函数和代码注释

    一.读取用户输入 py3中input()读取用户输入,输出全部是默认str字符串数据类型,一般将其赋值变量,用户输入才继续往下走程序.(py2的不同已单独列出随笔) 二.注释 注释的作用:代码量大的时 ...