首先我们来求第m次移动的盘子号数,先列出当m比较小可以直接观察的前几项

m : 1、2、3、4、5、6、7、8、9、10

id : 1、2、1、3、1、2、1、4、1、2

很容易联想到树状数组的lowbit,这题的id就是lowbit(m)在二进制中的编号。

for (id = 1; (m & 1) == 0; id++, m >>= 1); 就能求出id。

然后还要求从哪个盘移到哪个盘,经模拟前几项发现:

当n是奇数时:

如果id是奇数,那么盘子的移动顺序总是 1 -> 3 , 3 -> 2 , 2 -> 1 , 1 -> 3 , 3 -> 2 , 2 -> 1无限循环

如果id是偶数,那么盘子的移动顺序总是 1 -> 2 , 2 -> 3 , 3 -> 1 , 1 -> 2 , 2 -> 3 , 3 -> 1无限循环

当n是偶数时:

如果id是奇数,那么盘子的移动顺序总是 1 -> 2 , 2 -> 3 , 3 -> 1 , 1 -> 2 , 2 -> 3 , 3 -> 1无限循环

如果id是偶数,那么盘子的移动顺序总是 1 -> 3 , 3 -> 2 , 2 -> 1 , 1 -> 3 , 3 -> 2 , 2 -> 1无限循环

经过上面右移之后的m必然是一个奇数,m >> 1可以求出id号盘子之前被移动过几次;

Accepted 2511 0MS 1360K 589 B G++
#include "bits/stdc++.h"
using namespace std;
typedef long long LL;
int main() {
int t, n;
LL m;
scanf("%d", &t);
while (t--) {
scanf("%d%lld", &n, &m);
int id, from, to;
for (id = ; (m & ) == ; id++, m >>= );
if ((id & ) ^ (n & )) {
from = (m >> ) % + ;
to = from % + ;
} else {
// 这里这样写是为了保证from在1到3之间
from = (- - (m >> )) % + ;
to = (from + ) % + ;
}
printf("%d %d %d\n", id, from, to);
}
return ;
}

HDU-2511-汉诺塔 X的更多相关文章

  1. HDU 2511 汉诺塔X

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2511 1,2,...,n表示n个盘子.数字大盘子就大.n个盘子放在第1根柱子上.大盘不能放在小盘上.在 ...

  2. HDU 1207 汉诺塔II (找规律,递推)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1207 汉诺塔II Time Limit: 2000/1000 MS (Java/Others)     ...

  3. HDU 2077 汉诺塔IV (递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2077 还记得汉诺塔III吗?他的规则是这样的:不允许直接从最左(右)边移到最右(左)边(每次移动一定是 ...

  4. HDU 2064 汉诺塔III (递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2064 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到 ...

  5. hdu 1207 汉诺塔II (DP+递推)

    汉诺塔II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  6. HDU 2064 汉诺塔III

    汉诺塔III Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  7. HDU 2064 汉诺塔III(递归)

    题目链接 Problem Description 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘 ...

  8. HDU 1207 汉诺塔II (递推)

    经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘.上 ...

  9. HDU——2064汉诺塔III

    汉诺塔III Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  10. HDU 1997汉诺塔VII

    又是汉诺塔~ 回顾一下汉诺塔的移动过程. 从左到右设为A,B,C  3个盘子的时候 1: No.1  A -> C 2: No.2  A -> B 3: No.1  C -> B 4 ...

随机推荐

  1. 创建DateFrame的常用四种方式

    import pandas as pd %pylab 一.使用numpy创建 df = pd.DataFrame(np.arange(16).reshape((4,4)), index=list('a ...

  2. 吴裕雄--天生自然 PHP开发学习:面向对象

    <?php class Site { /* 成员变量 */ var $url; var $title; /* 成员函数 */ function setUrl($par){ $this->u ...

  3. Akka Typed系列:协议&行为

    引言 2019年11月6号LightBend公司发布了AKKA 2.6版本,带来了类型安全的actor,新的Akka Cluster底层通信设施——Artery,带来了更好的稳定性,使用Jackson ...

  4. js操作元素导致元素错位和大小改变

    使用js循环的方式批量控制元素的大小时结果往往不尽如人意. 我总结了一条规律 在一个循环体内不可以同时存在一下两种操作,否则容易导致元素错位或大小改变: 1.对元素的offsetWidth.offse ...

  5. 优秀的github java项目

    转载:https://www.zhihu.com/question/24834285/answer/251369977 biezhi/blade:先推荐下自己的哈哈,一款轻量级.高性能.简洁优雅的MV ...

  6. Covisibility Graph

    在Orb-Slam中有三个地图分别是Covisibility Graph,Spanning Graph,以及Essential Graph,它们三个分别是什么意思呢? 首先,图优化是目前视觉SLAM里 ...

  7. 架构之道(3) - 令後端的吐血和喊FUCK的次数锐减

    「那个产品经理不会技术,整天在需求,真操他妈的.」 这是很多产品经理遇到的一句话,如果你把顾客阶段完成了,回到自己的团队,遇到个技术大牛这麽说,那就表示,自己作为产品经理的功力还不够. 等我慢现解释, ...

  8. android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、爆炸菜单、风扇叶片效果等源码

    Android精选源码 复现网易云音乐引导页效果 高仿书旗小说 Flutter版,支持iOS.Android Android Srt和Ass字幕解析器 Material Design ViewPage ...

  9. codeforce 1189C Candies! ----前缀和

    题目大意:给你一个数组每个数不大于9,然后给你m个区间,每个区间的长度都是2的k次方(k=0 1 2.....)  有一种操作是把奇数位和偶数位相加  用和来代替之前的两个数,如果和大于等于10就要膜 ...

  10. Chapter1. The Electromagnetic Model (Field and Wave Electromagnetics. Second Edition) David K. Cheng

    1-1 Introduction electric charge n.电荷 vice versa adv. 反之亦然 elastic adj. 弹性的 postulate v.假定 hasten v. ...