题目描述

描述

哆啦A梦有一个神奇的道具:时光机。坐着它,大雄和他的伙伴们能穿越时空,回到过去或者去到未来。



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

假设大雄和他的伙伴们出发的时间点(现在)为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行,每一行一个正整数,表示每组测试数据对应的最少时光机操作次数。

样例输入

2

5 17

4 8

样例输出

8

2

提示

对于S=5,T=17:

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

对于S=4,T=8:

操作如下:4->8->4

题目分析

这是一道十分类似BFS的走迷宫的题,给一个数X就可以使用一步的时间分支出X-1,X+1,X*2,X/2(当X%2==0时)四或三种走法。依次枚举得到最小步骤再*2即可。

代码实现

//之前写复杂了可以批评指正
#include<iostream>
#include<cstring>
using namespace std;
int S,head=0,tail=1,a[1000005],q,cont[1000005],c=0,x[3]={1,-1};
bool b[1000005];
void print(int d)
{
    if(cont[d]!=0)print(cont[d]);
    //printf("%d\n",a[d]);
    c++;
}
void dfs(int n,int k)
{
    memset(b,0,sizeof(b));
    memset(a,0,sizeof(a));
    memset(cont,0,sizeof(cont));
    a[1]=n;
    b[n]=1;
    head=0;tail=1;
    while(head!=tail)
        {
            head++;
            x[2]=a[head];
            for(int i=0;i<=3;i++)
            {
                if(i==3)
                {
                    if(a[head]%2==0)q=a[head]/2;
                    else break;
                }
                else q=a[head]+x[i];
                if(!b[q]&&q<=1000000&&q>=0)
                {
                    tail++;
                    a[tail]=q;
                    cont[tail]=head;
                    b[q]=1;
                    if(a[tail]==k)
                    {
                        print(tail);
                        c--;
                        return ;
                    }
                }
            }
        }
}
int main()
{
    int n,k;
    scanf("%d",&S);
    for(int j=1;j<=S;j++)
    {
        c=0;
        scanf("%d%d",&n,&k);
        dfs(n,k);
        dfs(k,n);
        printf("%d\n",c);
    }
}

[openjudge-搜索]哆啦A梦的时光机的更多相关文章

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

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

  2. [css]我要用css画幅画(七) - 哆啦A梦

    接着之前的[css]我要用css画幅画(六),今天画的有所不同,画的是哆啦A梦,我们小时候对他的称呼其实是小叮当机器猫. (PS:这次我要做的事情,很多人已经做过,这并不是什么创新,我只是在学习并记录 ...

  3. 创建【哆啦A梦】风格字体

    学习canvas,为作画.对于一个毫无逻辑思维的人简直遭罪啊~想象坐标坐标坐标啊- - 好啦言归正传,基于本月16号,在春熙路IFS展出120只哆啦a梦,以及canvas的作用,在此介绍一种PS的美化 ...

  4. 哆啦A梦 canvas

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 哆啦A梦连连看游戏源码完整版

    这个源码是哆啦A梦连连看游戏源码完整版,也是安卓教程网android.662p.com分享过来的,哆啦A梦大家一定再熟悉不过了,这次登场的角色你能认出全部吗?赶紧把相同的小图标全部消除吧,一起体验下! ...

  6. 纯css画哆啦A梦

    今天有点无聊,照着网上的图写了个哆啦A梦,无技术可言,纯考耐心. <!doctype html> <html lang="en"> <head> ...

  7. 大雄和哆啦A梦

    题目:大雄和哆啦A梦题目介绍:这个图片名称有点奇怪?! 1,打开链接会看到大雄和哆啦A梦的照片,把它下载下来.就是下面这个图片. 2,用wireshark打开,会看到最后面出现 rar ,还有flag ...

  8. 哆啦A梦欺骗了你!浏览器CSS3测试遭质疑

    首先,说明,此处只是告诫各位参与CSS3.0学习使用或者将要使用或者学习CSS3.0的朋友,不要完全信任网络资源,依靠网络资源,我们需要利用网络资源的方便和可取的部分,结合自己的理解,学好,理解好! ...

  9. CSS源码之纯css3制作的哆啦a梦图片

    本文章向大家介绍一个纯css3制作的哆啦a梦图像,主要巧妙的使用了css3的border-radius属性,需要的朋友介意参考一下本文章的源码. 效果图: 源码 <!doctype html&g ...

随机推荐

  1. 动态补丁构建工具nuwa中的“坑”

    1. 继承android中的Application的类A1Application:并且A2Application继承自A1Application,并且配置在清单文件中name=".A2App ...

  2. 【PyQt5-Qt Designer】QComboBox-下拉列表框

    知识点: 1.QComboBox下拉列表框的一些常用方法 2.下拉列表框常用信号使用方法 案例:选中下拉框选项时触发信号 #[str] 表示comboBox中的选择框内容如A B C D 等 self ...

  3. LVS:三种负载均衡方式比较

    [转自http://soft.chinabyte.com/25/13169025.shtml] 1.什么是LVS? 首先简单介绍一下LVS (Linux Virtual Server)到底是什么东西, ...

  4. find 命令 查找

    find 查找文件和目录 find /home -name "" find 后接查找的目录,-name 后指定需要查找的文件名 文件名可以用*表示所有find /home -nam ...

  5. 20190122 Oracle if-- elsif -- else -- if end

    DECLARE V_SYSTIME VARCHAR2(8); PROCEDURE KB_RUNNING(I_DATE DATE) IS BEGIN V_SYSTIME :=TO_CHAR(I_DATE ...

  6. zookeeper三种模式安装详解(centos 7+zookeeper-3.4.9)

    zookeeper有单机.伪集群.集群三种部署方式,可根据自己实际情况选择合适的部署方式.下边对这三种部署方式逐一进行讲解. 一 单机模式 1.下载 进入要下载的版本的目录,选择.tar.gz文件下载 ...

  7. 三角形的优雅值(map和哈希表)

    给你 n 个三角形,每个三角形有一个优雅值,然后给出一个询问,每次询问一个三角形,求与询问的三角形,相似的三角形中的优雅值最大是多少.★数据输入第一行输入包括 n 一个数字,接下来 n 行,每行四个整 ...

  8. CentOS7下Docker的安装与使用

    前言 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言,并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到 ...

  9. Spark学习:ShutdownHookManager虚拟机关闭钩子管理器

    Java程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码. JAVA中的ShutdownHook提供了比较好的方案. JDK提供了Jav ...

  10. mysql 1,2,3 关联查询出数字代表的具体意思

    建表 TEST1 CREATE TABLE `TEST1` (`ID` int(11) NOT NULL,`IID` varchar(200) DEFAULT NULL,PRIMARY KEY (`I ...