题面有误!10,11,12操作类别为A,13,14,15类别为B,16,17,18类别为C.

分析:一道大暴力,每次记录一下走了多少步,上一步操作类别是啥就可以了.最后只需要写6种操作,每一次操作进行4次就还原了,所以不用memcpy再来转.

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; int n, ans[], cnt, c[];
bool stop = false; void turn1()
{
int tmp, tmp2;
tmp = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = tmp;
tmp = c[];
tmp2 = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = tmp2;
c[] = tmp;
} void turn2()
{
int tmp,tmp2;
tmp = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = tmp;
tmp = c[];
tmp2 = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = tmp2;
c[] = tmp;
} void turn3()
{
int tmp = c[], tmp2;
c[] = c[];
c[] = c[];
c[] = c[];
c[] = tmp;
tmp = c[];
tmp2 = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = tmp;
c[] = tmp2;
} void turn4()
{
int tmp = c[], tmp2;
c[] = c[];
c[] = c[];
c[] = c[];
c[] = tmp;
tmp = c[];
tmp2 = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = tmp;
c[] = tmp2;
} void turn5()
{
int tmp = c[], tmp2;
c[] = c[];
c[] = c[];
c[] = c[];
c[] = tmp;
tmp = c[];
tmp2 = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = tmp2;
c[] = tmp;
} void turn6()
{
int tmp = c[], tmp2;
c[] = c[];
c[] = c[];
c[] = c[];
c[] = tmp;
tmp = c[];
tmp2 = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = c[];
c[] = tmp;
c[] = tmp2;
} bool check()
{
return c[] == c[] && c[] == c[] && c[] == c[] &&
c[] == c[] && c[] == c[] && c[] == c[] &&
c[] == c[] && c[] == c[] && c[] == c[] &&
c[] == c[] && c[] == c[] && c[] == c[] &&
c[] == c[] && c[] == c[] && c[] == c[] &&
c[] == c[] && c[] == c[] && c[] == c[];
} void dfs(int dep, int flag)
{
if (check())
{
cnt = dep;
stop = ;
return;
}
if (dep >= n)
return;
if (flag != )
{
for (int i = ; i <= ; i++)
{
turn1();
ans[dep + ] = i;
dfs(dep + , );
if (stop)
return;
}
turn1();
}
if (flag != )
{
for (int i = ; i <= ; i++)
{
turn2();
ans[dep + ] = + i;
dfs(dep + , );
if (stop)
return;
}
turn2();
}
if (flag != )
{
for (int i = ; i <= ; i++)
{
turn3();
ans[dep + ] = + i;
dfs(dep + , );
if (stop)
return;
}
turn3();
} if (flag != )
{
for (int i = ; i <= ; i++)
{
turn4();
ans[dep + ] = + i;
dfs(dep + , );
if (stop)
return;
}
turn4();
}
if (flag != )
{
for (int i = ; i <= ; i++)
{
turn5();
ans[dep + ] = + i;
dfs(dep + , );
if (stop)
return;
}
turn5();
}
if (flag != )
{
for (int i = ; i <= ; i++)
{
turn6();
ans[dep + ] = + i;
dfs(dep + , );
if (stop)
return;
}
turn6();
} } int main()
{
scanf("%d", &n);
for (int i = ; i <= ; i++)
scanf("%d", &c[i]);
dfs(, );
for (int i = ; i <= cnt; i++)
printf("%d ", ans[i]); return ;
}

清北学堂模拟赛d5t6 cube的更多相关文章

  1. 清北学堂模拟赛day7 数字碰撞

    /* clj:水题别人都满分你不是你就完了,所以说水题一定要细心一点,有这么几个细节:①前导零的处理,全是零的时候要特判②换行要注意,不要多大一行,剩下就是水水的模拟了 */ #include< ...

  2. 清北学堂模拟赛d4t1 a

    分析:大模拟,没什么好说的.我在考场上犯了一个超级低级的错误:while (scanf("%s",s + 1)),导致了死循环,血的教训啊,以后要记住了. /* 1.没有发生改变, ...

  3. 清北学堂模拟赛day7 错排问题

    /* 考虑一下已经放回m本书的情况,已经有书的格子不要管他,考虑没有书的格子,不考虑错排有(n-m)!种,在逐步考虑有放回原来位置的情况,已经放出去和已经被占好的格子,不用考虑,剩下全都考虑,设t=x ...

  4. 清北学堂模拟赛day7 石子合并加强版

    /* 注意到合并三堆需要枚举两个端点,其实可以开一个数组记录合并两堆的结果,标程好像用了一个神奇的优化 */ #include<iostream> #include<cstdio&g ...

  5. 清北学堂模拟赛d6t6 棋盘迷宫

    3.棋盘迷宫(boardgame.pas/c/cpp)(boardgame.in/out)时间限制:5s/空间限制:256M[题目描述]小 A 和小 Z 是非常要好的朋友, 而且他们都对迷宫游戏非常有 ...

  6. 清北学堂模拟赛d1t2 火柴棒 (stick)

    题目描述众所周知的是,火柴棒可以拼成各种各样的数字.具体可以看下图: 通过2根火柴棒可以拼出数字“1”,通过5根火柴棒可以拼出数字“2”,以此类推. 现在LYK拥有k根火柴棒,它想将这k根火柴棒恰好用 ...

  7. 清北学堂模拟赛d1t1 位运算1(bit)

    题目描述LYK拥有一个十进制的数N.它赋予了N一个新的意义:将N每一位都拆开来后再加起来就是N所拥有的价值.例如数字123拥有6的价值,数字999拥有27的价值.假设数字N的价值是K,LYK想找到一个 ...

  8. 清北学堂模拟赛d2t6 分糖果(candy)

    题目描述总共有n颗糖果,有3个小朋友分别叫做L,Y,K.每个小朋友想拿到至少k颗糖果,但这三个小朋友有一个共同的特点:对3反感.也就是说,如果某个小朋友拿到3颗,13颗,31颗,333颗这样数量的糖果 ...

  9. 清北学堂模拟赛d2t5 吃东西(eat)

    题目描述一个神秘的村庄里有4家美食店.这四家店分别有A,B,C,D种不同的美食.LYK想在每一家店都吃其中一种美食.每种美食需要吃的时间可能是不一样的.现在给定第1家店A种不同的美食所需要吃的时间a1 ...

随机推荐

  1. ES6详解八:模块(Module)!--各种导入导出方法

    [-] 基本用法 命名导出named exports 默认导出 命名导出结合默认导出 仅支持静态导入导出 各种导入和导出方式总结   modules是ES6引入的最重要一个特性. 所以以后再写模块,直 ...

  2. cloudstack ---部署的架构

    cloudstack跟KVM一起部署的架构 下图是CloudStack跟kvm一起部署的架构: 在每个kvm的宿主机上都需要部署agent程序. cloudstack跟vsphere一起部署的架构 下 ...

  3. PCB SVN 服务端VisualSVN Server与TortoiseSVN

    PCB 工程系统SVN源代码招病毒破坏以后,一周时间都没有源代码同步更新了,今天终于将SVN源代码数据恢复并重建SVN服务器,这里将SVN搭建安装过程整理如下 一.服务端SVN安装 1.下载地址:ht ...

  4. PCB 挺有意思的基数排序----C#代码实现

    今天在头条看一个很有意思的排序算法[基数排序],以前所学习的排序算法都是基于数值对比的方式排序的,而这个算法挺有意思的非常独特.但从网上看到的例子通常是对个位,十位处理,并转为对应的桶索引的方式实现, ...

  5. 等价表达式 2005年NOIP全国联赛提高组(栈模拟)

    P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...

  6. GoLang 编译exe添加ICO图标

    我们在做Go开发的时候在Window平台下编译出来的exe后大部分都是没有图标,看起来很难看.下面我们说下如何添加一个图标. 1.首先在根目录下,exe的同级目录下创建.rc文件, IDI_ICON1 ...

  7. [Luogu 1052] noip 05 过河

    [Luogu 1052] noip 05 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是 ...

  8. 343 Integer Break 整数拆分

    给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化. 返回你可以获得的最大乘积.例如,给定 n = 2,返回1(2 = 1 + 1):给定 n = 10,返回36(10 = 3 ...

  9. vue 中展示PDF内容

    vue 中展示PDF内容 不久前有个需要改的需求,以前是直接根据链接让用户下载对应pdf文件来查看,最主要是给用户查看,然而这种并不是很安全的,其他用户可以进行下载或者使用pdf链接分享给其他人,所以 ...

  10. 把datagrid转换成gridview

    public gridview datagrid2gridview(datagrid dg) { gridview gv = new gridview(); foreach(var p in dg.c ...