题意:

给定N≤100的三阶魔方操作序列给定N\le100的三阶魔方操作序列
魔方操作如下图:魔方操作如下图:

求问:对一个初状态(六个面都是拼好的)的魔方进行多少次连续的序列操作后,魔方会恢复到初状态求问:对一个初状态(六个面都是拼好的)的魔方进行多少次连续的序列操作后,魔方会恢复到初状态

分析:

对魔方的每个方块标号之后,每个操作的置换可以手工推出对魔方的每个方块标号之后,每个操作的置换可以手工推出
由于多次操作的复合仍然是一个置换,因此魔方总是能复原,并且将置换分解成环之后,ans=这些环长度的lcm由于多次操作的复合仍然是一个置换,因此魔方总是能复原,并且将置换分解成环之后,ans=这些环长度的lcm
小细节:X与X′是互补的,即X′=3X,显然X2=2X小细节:X与X'是互补的, 即X'=3X, 显然X2=2X

代码:

//
//  Created by TaoSama on 2016-02-05
//  Copyright (c) 2016 TaoSama. All rights reserved.
//
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <algorithm>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <string>
#include <set>
#include <vector>using namespace std;
#define pr(x) cout << #x << " = " << x << "  "
#define prln(x) cout << #x << " = " << x << endl
const int N = 1e5 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;
const int L = 54;const char op[7]="FLRUDB";
const int d[6][5][4]=
{{{1,3,9,7},{2,6,8,4},{43,19,48,18},{44,22,47,15},{45,25,46,12}},//F{{10,12,18,16},{11,15,17,13},{37,1,46,36},{40,4,49,33},{43,7,52,30}},//L{{19,21,27,25},{20,24,26,22},{54,9,45,28},{51,6,42,31},{48,3,39,34}},//R{{37,39,45,43},{38,42,44,40},{28,19,1,10},{29,20,2,11},{30,21,3,12}},//U{{16,7,25,34},{17,8,26,35},{46,48,54,52},{47,51,53,49},{18,9,27,36}},//D{{28,30,36,34},{29,33,35,31},{27,39,10,52},{24,38,13,53},{21,37,16,54}}//B
};void trans(vector<int>& p, int o){for(int i = 0; i < 5; ++i){int t = p[d[o][i][3]];for(int j = 3; j; --j)p[d[o][i][j]] = p[d[o][i][j - 1]];p[d[o][i][0]] = t;}
}char s[N];vector<int> solve(){vector<int> p(L + 1);for(int i = 1; i <= L; ++i) p[i] = i;for(int i = 0; s[i]; ++i){int o = strchr(op, s[i]) - op;if(isalpha(s[i + 1]) || !s[i + 1]) trans(p, o);else {int cnt = s[i + 1] == '\'' ? 3 : 2;while(cnt--) trans(p, o);++i;}}return p;
}int main() {
#ifdef LOCALfreopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin);
//  freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout);
#endifios_base::sync_with_stdio(0);int t; scanf("%d", &t);while(t--){scanf("%s", s);vector<int> p = solve();int ans = 1;  bool vis[L + 1] = {};for(int i = 1; i <= L; ++i){if(vis[i]) continue;int cycle = 0, tmp = i;do{++cycle;vis[tmp] = true;tmp = p[tmp];}while(tmp != i);ans = ans / __gcd(ans, cycle) * cycle;}static int kase = 0;printf("Case #%d:\n%d\n", ++kase, ans);}return 0;
}

HDU 5250 三阶魔方(模拟、置换)相关推荐

  1. 三阶魔方还原程序心得

    第一次写技术性的博客啊,本人菜鸟,如果哪里说的不够准确完善,欢迎大神前来点拨呀~ 先放几张效果图吧~ 这是我最近做的一个三阶魔方还原的小程序. 用的环境是VC++6.0,其中也大量运用了easyx库进 ...

  2. 三阶魔方自动求解及动态可视化matlab代码

    三阶魔方自动求解及动态可视化matlab代码 思路与步骤 总结 思考 参考链接 源代码 第一次写博客,想总结分享下以前做过的一些有趣的东西,目的是为了回望过去与展望未来,同时为了提高自己的写作表达能力 ...

  3. 12面魔方公式图解法_【高级篇】(三)三阶魔方CFOP高级玩法之——F2L

    一.F2L这一步要干什么 1.先了解一下"棱角对"和"槽位"的概念 棱角对:即由一个棱块和一个角块构成,是F2L的基本单元(共四组) 槽位:给"棱角对 ...

  4. 三阶魔方还原步骤图_研究人员开发的AI成功在1.2秒内还原三阶魔方

    据外媒报道,在2018年3月,麻省理工学院学生Ben Katz和软件开发人员Jared Di Carlo曾共同创建了机器人装置,以0.38秒解开三阶魔方.尽管魔方解开技术的最新重大进展并没有导致比Ka ...

  5. 数据流程图顶层一层二层_只需三个公式,三阶魔方超简单入门图文教程5:完全复原第二层...

    大家好,欢迎来到大超小志,上节课我们讲了"复原底层角块",也就是完全复原第一层,今天我们来复原第二层的棱块,也就是完全复原第二层. 第二层的棱块要么在第二层,要么在最顶层. 我们先 ...

  6. 异形3×3魔方还原教程_【理论篇】三阶魔方4.33千亿亿种变化是怎么计算出来的?...

    本篇文章主要介绍三阶魔方总状态数是如何计算出来的,并介绍了两种算法,尽量保证语言通俗易懂,不涉及高深的理论知识(当然我也不懂:P) 一.4.33千亿亿到底有多大? 我们都知道三阶魔方的总变化状态数量为 ...

  7. 三阶魔方魔方公式_观看此魔方的自我解决

    三阶魔方魔方公式 Finally: a Rubik's cube that can solve itself. A maker named Human Controller built it in J ...

  8. 异形3×3魔方还原教程_【初级篇】(四)最简单的三阶魔方入门教程——中层还原...

    本系列教程适合刚刚接触魔方,又比较有好奇心,是为渴望学会还原魔方,又不想死记公式的人准备的.全部教程只使用三种公式,还原过程以理解为主,公式为辅. 第四部分 中层棱块还原 4.1 预览中层棱块还原后的 ...

  9. 12面魔方公式图解法_三阶魔方入门

    一.魔方的构造 这里只讲常见的普通三阶魔方. 三阶魔方一共有26个色块,分三个层,从上到下分别为顶层.中间层.底层. 26个色块按位置分为中心块.角色块.棱色块. 中心块6个,角色块8个,棱色块12个 ...

最新文章

  1. 二元学习法3.0:三把学习大剑,打通学习的底层密码_学习方法
  2. Leaflet中绘制同心圆、多个中心对称多边形、平行四边形网格、矩形网格
  3. 旋转矩阵和角速度的一些应用
  4. 东莞计算机应用能力报名,2017广东职称计算机考试报名:东莞职称计算机报名入口...
  5. mysql 创建和删除库_mysql入门系列:mysql创建、删除和选择数据库
  6. android7.1以太网动态ip,android7.1编译路上的那些坑!(部分转自网络整理)
  7. python x轴加范围_Python,Matplotlib,subplot:如何设置轴范围?
  8. python名词同义词只替换2个_用同义词替换句子中的每个单词的Python程序
  9. 【数字电子技术课程设计】多功能数字电子钟的设计
  10. 移动硬盘打不开(不用格式化)修复方法
  11. 【codeforces 760B】Frodo and pillows
  12. wireshark分析PS流格式解析详解
  13. mysql grant produce_ERROR 1045 (28000) Mysql中grant 使用不当导致的生产事故
  14. 分享Android单元测试
  15. pr学习日记①初接触
  16. linux ps 被替换文件怎么恢复,被覆盖的文件如何恢复_被替换掉的文件怎么恢复-win7之家...
  17. 19个免费的ppt制作网站
  18. 关于标签系统的一点想法。
  19. Mysql命令大全宁静致远
  20. 风储VSG-基于虚拟同步发电机的风储并网系统MATLAB仿真

热门文章

  1. linux上json文件格式化的查看工具jq
  2. Calculator Conundrum UVA - 11549(floyd判圈)
  3. 门禁信息推送不了服务器,十牛校园门禁系统封闭化管理不封闭消息
  4. 单例设计模式(拉勾教育大数据学习笔记)
  5. 嵌入式系统与通用计算机系统的区别,嵌入式操作系统和通用计算机系统的区别是什么...
  6. sja1000 中断_SJA1000的错误中断处理
  7. PCB做板子步骤和经验
  8. 如何用企业微信做好私域流量的引流、转化和精细化运营?
  9. 保研数据中隐藏了哪些信息?用数理统计解决信息不对称问题!
  10. 【CF比赛】Educational Codeforces Round 102 (Rated for Div. 2)