JZOJ 2136. 【GDKOI2004】汉诺塔

traveller-ly 2018-07-19 原文
  古老的汉诺塔问题是这样的:用最少的步数将N个半径互不相等的圆盘从1号柱利用2号柱全部移动到3号柱,在移动的过程中小盘要始终在大盘的上面。
  现在再加上一个条件:不允许直接把盘从1号柱移动到3号柱,也不允许直接把盘从3号柱移动到1号柱。
  把盘按半径从小到大用1到N编号。每种状态用N个整数表示,第i个整数表示i号盘所在的柱的编号。则N=2时的移动方案为:
  (1,1)=>(2,1)=>(3,1)=>(3,2)=>(2,2)=>(1,2)=>(1,3)=>(2,3)=>(3,3)
  初始状态为第0步,编程求在某步数时的状态。
 
  输入文件的第一行为整数T(1<=T<=50000),表示输入数据的组数。
  接下来T行,每行有两个整数N,M(1<=n<=19,0<=M<=移动N个圆盘所需的步数)。
  输出文件有T行。
  对于每组输入数据,输出N个整数表示移动N个盘在M步时的状态,每两个数之间用一个空格隔开,行首和行末不要有多余的空格。
 
  1. 4
  2. 2 0
  3. 2 5
  4. 3 0
  5. 3 1
  1. 1 1
  2. 1 2
  3. 1 1 1
  4. 2 1 1
 
做法:模拟然后找规律, 具体看代码啦
 
代码如下:

  1. 1 #include <cstdio>
  2. 2 #include <cstring>
  3. 3 #include <string>
  4. 4 #include <algorithm>
  5. 5 using namespace std;
  6. 6 int t;
  7. 7 long long n, m;
  8. 8
  9. 9 int main()
  10. 10 {
  11. 11 scanf("%d", &t);
  12. 12 int g[6] = {1, 2, 3, 3, 2, 1};
  13. 13 while (t--)
  14. 14 {
  15. 15 scanf("%lld%lld", &n, &m);
  16. 16 long long p = 6, p2 = 1;
  17. 17 for (int i = 1; i <= n - 1; i++)
  18. 18 {
  19. 19 printf("%d ", g[(m % p) / p2]);
  20. 20 p *= 3;
  21. 21 p2 *= 3;
  22. 22 }
  23. 23 printf("%d", g[(m % p) / p2]);
  24. 24 if (t != 0) printf("\n");
  25. 25 }
  26. 26 }

 

发表于 2018-07-19 21:06 执迷于沿途风景的旅人 阅读() 评论() 编辑 收藏

 

版权声明:本文为traveller-ly原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/traveller-ly/p/9338402.html

JZOJ 2136. 【GDKOI2004】汉诺塔的更多相关文章

  1. JZOJ 1264. 乱头发节

    JZOJ 1264. 乱头发节 1264. 乱头发节(badhair.pas/c/cpp) (File IO) […]...

  2. JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C

    JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C 3509. 【NOIP2013模拟11. […]...

  3. JZOJ 3223. 【HBOI2013】Ede的新背包问题

    JZOJ 3223. 【HBOI2013】Ede的新背包问题 3223. 【HBOI2013】Ede的新背包问 […]...

  4. JZOJ 3462. 【NOIP2013模拟联考5】休息(rest)

    JZOJ 3462. 【NOIP2013模拟联考5】休息(rest) 3462. 【NOIP2013模拟联考5 […]...

  5. JZOJ 3385. 【NOIP2013模拟】黑魔法师之门

    JZOJ 3385. 【NOIP2013模拟】黑魔法师之门 3385. 【NOIP2013模拟】黑魔法师之门  […]...

  6. JZOJ 3382. 【NOIP2013模拟】七夕祭 (Standard IO)

    JZOJ 3382. 【NOIP2013模拟】七夕祭 (Standard IO) 3382. 【NOIP201 […]...

  7. JZOJ 1266. 玉米田

    JZOJ 1266. 玉米田 1266. 玉米田(cowfood.pas/c/cpp) (File IO):  […]...

  8. JZOJ 4269. 【NOIP2015模拟10.27】挑竹签

    JZOJ 4269. 【NOIP2015模拟10.27】挑竹签 4269. 【NOIP2015模拟10.27】 […]...

随机推荐

  1. 获取字符串指定字符的第n次出现位置

    create function uf_findx (@text nvarchar(max),@find_x v […]...

  2. 语音识别的基础知识与CMUsphinx介绍

    语音识别的基础知识与CMUsphinx介绍 转载自http://blog.csdn.net/zouxy09/a […]...

  3. teamview超出用户限制——新电脑无法登录的问题(已解决)

    一个账号下,可以登录的电脑的台数有限制。达到一定量后无法用新的电脑登录teamview。   解决方法: 1、 […]...

  4. Win10登陆界面卡住,进去后无法打开网络相关的设置,谷歌浏览器无法上网

    今天Win10抽风,进入登录页面输入用户名和密码之后,大约过了10分钟才进入桌面。重启后仍然如此。 经过调查, […]...

  5. 内核模式和用户模式

    内核模式和用户模式 tags: 内核模式 用户模式 总是发现在要讲解一个问题的时候不得不去先讲解另一个问题。比 […]...

  6. Fiddler原理~知多少?

    首先我们学习Fidder这个工具,我们就应该去了解它的基本东西,比如这个单词的意思。Fiddler叫:小提琴、 […]...

  7. vux版本升级

    一开始用的笨办法, 先卸载npm uninstall vux –save; 然后在安装npm in […]...

  8. C# 使用 SmtpClient.SendAsync 方法发送邮件失败,总是返回 Cancelled

    问题: 调用 SmtpClient.SendAsync,在 SendCompleted 的回调函数里面总是获取 […]...

展开目录

目录导航