题目

说明

有一天,大雄和他的伙伴们想穿越时空进行探险,可是时光机却出了一点故障,只能进行有限的时空穿越操作。大雄他们需要从现在出发,到达一个目标时间点进行探险,结束后再返回到现在,他们希望尽可能减少时光机的操作次数,你能帮助他们吗?

假设大雄和他的伙伴们出发的时间点(现在)为 S(0 < S < 1,000,000),希望到达的时间点(目标)为 T(0 < T < 1,000,000),已知时光机可以进行如下的时空穿越操作(X 为正整数):

可以从任意时刻X穿越到 X+1 或者 X-1 时刻

可以从任意时刻X穿越到 X * 2 时刻

当 X 为偶数时,可以从 X 时刻穿越到 X/2 时刻

请问,大雄和他的伙伴们从 S 时刻出发,先到达 T 时刻,再回到 S 时刻最少需要多少次时空穿越操作?

输入格式

输入的第一个数是一个正整数 N,表示测试数据一共有 N 组(0 < N < 20)。之后有 N 行,每一行包含两个正整数 S 和 T,表示出发和到达时间点。

保证 S != T

输出格式

输出包括N行,每一行一个正整数,表示每组测试数据对应的最少时光机操作次数。

样例

输入数据 1

2

5 17

4 8

输出数据 1

8

2

提示

对于 S=5,T=17:

操作如下:5->4->8->16->17->16->8->4->5

对于 S=4,T=8:操作如下:4->8->4


思路

建议先做信奥一本通1253抓住那头牛。

典型的数轴bfs问题

大雄和他的伙伴们可以从x 走到x ± 1 或2x或x/2,请问农夫大雄和他的伙伴们最少移动多少次就能到达t时刻。

深搜很有可能会找不到答案。而且不一定要搜到底,所以就想到广搜,求最少步数。

把当前能到达的位置加入队列,对于每个位置按次序往四个方向加入队列,然后用一个vis判断是否走过,当走到目标点时,输出步数。

注意:在这里因为是往返2次,所以要bfs2次,一次是bfs(n,k) ,一次是bfs(k,n)

ps:


代码

#include <bits/stdc++.h>
using namespace std;
int vis[1000010],dx[5];
int n,k;
queue <int> q;
int bfs(int x,int k)
{while(!q.empty()) q.pop();memset(vis,0,sizeof(vis));vis[x] = 1;q.push(x);while(!q.empty()){int t = q.front();if(t == k) return vis[t];dx[0] = t + 1;dx[1] = t - 1;dx[2] = t * 2;int p = 3;if(t % 2 == 0) dx[3] = t / 2,p++;for(int i = 0; i < p; i++){if(dx[i] <= 1000000 && dx[i] >= 0 && vis[dx[i]] == 0){q.push(dx[i]);vis[dx[i]] = vis[t] + 1;}}q.pop();}
}
int main()
{int t;cin>>t;while(t--){cin>>n>>k;cout<<(bfs(n,k) - 1) + (bfs(k,n) - 1)<<'\n';}return 0;
}

#I. 哆啦A梦的时光机(bfs经典习题)相关推荐

  1. [openjudge6043]哆啦A梦的时光机

    [openjudge6043]哆啦A梦的时光机 试题描述 哆啦A梦有一个神奇的道具:时光机.坐着它,大雄和他的伙伴们能穿越时空,回到过去或者去到未来. 有一天,大雄和他的伙伴们想穿越时空进行探险,可是 ...

  2. 【搜索】C042_openj_哆啦A梦的时光机(暴力 / 记忆化)

    一.Problem 哆啦A梦有一个神奇的道具:时光机.坐着它,大雄和他的伙伴们能穿越时空,回到过去或者去到未来. 有一天,大雄和他的伙伴们想穿越时空进行探险,可是时光机却出了一点故障,只能进行有限的时 ...

  3. 8.20 最小新整数 哆啦A梦的时光机(bfs)

    给定一个十进制正整数 n(0 < n < 1000000000),每个数位上数字均不为 0.n 的位数为 m. 现在从 m 位中删除 k 位 (0<k < m),求生成的新整数 ...

  4. NOI openjudge 6043:哆啦A梦的时光机(双向宽搜)

    在线评测: http://noi.openjudge.cn/ch0407/6043/ 整体思路: 这种题随便宽搜一下就好了,没啥思路可讲,,,, 失误之处: 1.开始脑子里想的是一面扩展一层,这样子可 ...

  5. OpenJudge 6043 哆啦A梦的时光机——又短又快的双向广搜

    题目链接 早上也写了一篇这道题关于双向广搜的题解,但那个写法有一个漏洞,而且很慢,在下面我将一一道来.我们知道,单向广搜时由起始点出发,引出4个分支,再由4个分支引出16个分支,可以看出这个增长速度是 ...

  6. Git,哆啦A梦的时光机(二)

    上一篇介绍了Git的作用和优势,本篇就仔细说一说Git到底是什么. 1.到底什么是Git? 组成部分 进入Git官网直接下载安装,https://git-scm.com/downloads 如图所示为 ...

  7. HTML5期末大作业:动漫人物介绍网站设计——哆啦A梦(5页) HTML+CSS+JavaScript 学生动漫网页设计模板下载 哆啦A大学生HTML网页制作作品 简单漫画网页设计成品...

    常见网页设计作业题材有 ​​个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 明星. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 游 ...

  8. 再过92年,哆啦A梦就要诞生了!

    还记得哆啦A梦是从哪一年出生的吗? 2112年9月3日. 也就是说,再过92年,哆啦A梦,也许就能诞生了. 很多人的童年,或许都有这么一只哆啦,可以成为我们的伙伴. 虽然这些幻想存在于童年,但它的出现 ...

  9. python哆啦a梦的百宝箱_你最想要哆啦A梦百宝箱里的什么东西

    五月天有一句关于哆啦A梦的歌词:  "如果说最后宜静不是嫁给了大雄,一生相信的执着一秒就崩落"或许每个在哆啦A梦的故事中成长起来的孩子都期待着自己也能有一个属于自己的机器猫那只没有 ...

最新文章

  1. 面向对象设计领域的OCP原则
  2. 我把面试官问的没话说了,这样好吗?
  3. 调整屏幕亮度,调整字体大小
  4. Augmented World Expo(AWE)重磅来袭!
  5. 皮一皮:这几天最容易搞错的事情...
  6. 【初探移动前端开发02】移动设备的页面
  7. audio 上一首 下一首 自定义样式_总有一首网易云,藏着你忘不掉的人。
  8. Linux 管道使用示例
  9. 小米10正式发布:3999元起!
  10. 等响度曲线_等响曲线是如何绘制的?响度级
  11. 关于在Winphone中使用Google Map的问题(徐林峰)
  12. 用CommonDialog公共对话框选取多个文件
  13. 防火墙、WAF、IPS、IDS都是什么
  14. docker学习之docker hub寻宝游戏
  15. 支付宝小程序对接流程和工具类
  16. segment routing详解十一问
  17. 视频变声用的什么软件?来看看今天的分享
  18. 矩阵快速幂: 网易2017实习生编程题 魔力手环
  19. Python可视化案例:Mutual Funds和ETFs对比
  20. chromebook刷机_某些Chromebook无法获得Linux应用。 这是您可以做的

热门文章

  1. 什么是网络安全,以及网络安全的特征
  2. Android 使用WebView 实现播放爱奇艺视频,可全屏(使用的腾讯的X5内核) (一)
  3. 中兴智能视觉大数据报道:人脸识别改变未来生活
  4. 毕业四年的职场经历自述
  5. gs_fs0文件是什么_汇编 - 什么是“FS”/“GS”寄存器?
  6. 2022年6月英语六级作文范文
  7. (转)CSS3之pointer-events(屏蔽鼠标事件)属性说明
  8. web应用程序和web服务
  9. 软件设计师(二):操作系统基本原理
  10. 一个网页版的随机点名系统