命运石之门

Time Limit: 1000 MS     Memory Limit: 256 MB

Submit Status

“这一切都是命运石之门的选择!“

凶真博士发明了能够逆转时间的电话微波炉,也就是微型时光机。每次时光机开机时,时光机顶部的数字屏上会随机显示一个数字n,表示此时在什么也不放置的情况下启动微波炉,会回到距离现在n小时之前。凶真博士可以通过烤香蕉的形式改变数字n。如果凶真博士一次烤两根香蕉,数字n会变为原来的两倍。如果凶真博士一次烤三根香蕉,数字n会减去3。如果凶真博士一次烤一根香蕉或三根以上香蕉,时光机就会爆炸。此外,如果在烤香蕉的过程中,n太大(n>500000)或n太小(n≤0),时光机也会因为太阳黑子带来的压力过大而爆炸。

凶真博士想要回到距离现在m小时之前的世界,他至少要花费多少根香蕉呢?

Input

两个空格隔开的整数n,m.

1≤n,m≤500000

Output

一个整数,表示最少需要烤多少个香蕉。

如果怎样烤香蕉都不能回到m小时之前的世界,输出-1.

Sample input and output

Sample Input Sample Output
4 5
5
4 6
-1

Hint

样例1:可以先烤两根香蕉将n从4变为8,再烤三根香蕉将其变为5.

Source

2018 UESTC ACM Training for Graph Theory

题解:

bfs中,每次有两种走向,一个是当前值*2,一个是当前值-3,用dis记录消耗香蕉数,总体实现出来就和spfa的思想一样

AC代码为:

#include<bits/stdc++.h>

using namespace std;

long long dis[1000010], n, m, i;

long long bfs(void)

{

    queue<long long> que;

    long long v;

    v = 0;

    que.push(n);

    dis[n] = 0;

    while (!que.empty())

    {

        long long x = que.front();

        que.pop();

        for (long long i = 1; i <= 2; i++)

        {

            long long nx;

            if (i == 1) nx = x * 2;

            if (i == 2) nx = x - 3;

            if (i == 1 && nx>0 && nx <= 500000 && dis[x] + 2<dis[nx])

            {

                que.push(nx);

                dis[nx] = dis[x] + 2;

                if (nx == m) { v = 1; break; }

            }

            else if (i == 2 && nx>0 && nx <= 500000 && dis[x] + 3<dis[nx])

            {

                que.push(nx);

                dis[nx] = dis[x] + 3;

                if (nx == m) { v = 1; break; }

            }

        }

        if (v == 1) break;

    }

    if (v == 1) return dis[m];

    else return -1;

}

int main()

{

    scanf("%lld%lld", &n, &m);

    if (n == m) { printf("0\n"); return(0); }

    for (long long i = 0; i <= 600000; i++)

        dis[i] = 10000000000000000;

    printf("%lld\n", bfs());

    return(0);

}

UESTC-1964命运石之门(类似SPFA的BFS)的更多相关文章

  1. CDOJ 1964 命运石之门【最短路径Dijkstra/BFS】

    给定数字n,m(1<=n,m<=500000) 将n变为n*2花费2,将n变为n-3花费3,要求过程中所有数字都在[1,500000]区间内. 求将n变为m的最少花费 思路:建图 将每个数 ...

  2. Luogu P2101 命运石之门的选择(分治+搜索)

    P2101 命运石之门的选择 题意 题目描述 在某一条不知名世界线的冈伦今天突然接到了一条\(dmail\),上面说世界线将会发生巨大变动,未来的他无论如何都无法扭转这种变动回到原来的世界线.而世界线 ...

  3. 洛谷 P2101 命运石之门的选择 (分治)

    P2101 命运石之门的选择 (分治) 介绍 El Psy Congroo 题目链接 没错,作为石头门厨,怎么能不做石头门的题呢?(在搜石头门的时 候搜到了本题) 本题作为一道分治基础练习题还是不错的 ...

  4. ACM数论之旅13---容斥原理(一切都是命运石之门的选择(=゚ω゚)ノ)

    容斥原理我初中就听老师说过了,不知道你们有没有听过(/≧▽≦)/ 百度百科说: 在计数时,必须注意没有重复,没有遗漏. 为了使重叠部分不被重复计算,人们研究出一种新的计数方法. 这种方法的基本思想是: ...

  5. UESTC 2015dp专题 j 男神的约会 bfs

    男神的约会 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/65 Descri ...

  6. Cocos2d-x 2地图步行实现:SPFA算法

    本文乃Siliphen原创,转载请注明出处:http://blog.csdn.net/stevenkylelee 上一节<Cocos2d-x 地图行走的实现1:图论与Dijkstra算法> ...

  7. ACM/ICPC 之 最短路-Floyd+SPFA(BFS)+DP(ZOJ1232)

    这是一道非常好的题目,融合了很多知识点. ZOJ1232-Adventrue of Super Mario 这一题折磨我挺长时间的,不过最后做出来非常开心啊,哇咔咔咔 题意就不累述了,注释有写,难点在 ...

  8. 最短路(spfa)

    http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory ...

  9. Windows内核中的CPU架构-6-中断门(32-Bit Interrupt Gate)

    Windows内核中的CPU架构-6-中断门(32-Bit Interrupt Gate) 中断门和调用门类似,也是一种系统段.同样的它也可以用来提权. 中断门: 虽然中断门的段描述符如下: 但是中断 ...

随机推荐

  1. JS 暴虐算法查找

      @dd|ad|fds|d@dd|ad|fds|d@dd|ad|fds|d@   var e = [];     window.onload = function () {         var ...

  2. Python 基础 内置函数 迭代器与生成器

    今天就来介绍一下内置函数和迭代器 .生成器相关的知识 一.内置函数:就是Python为我们提供的直接可以使用的函数. 简单介绍几个自己认为比较重要的 1.#1.eval函数:(可以把文件中每行中的数据 ...

  3. spark基于yarn的两种提交模式

    一.spark的三种提交模式 1.第一种,Spark内核架构,即standalone模式,基于Spark自己的Master-Worker集群. 2.第二种,基于YARN的yarn-cluster模式. ...

  4. java编程思想第四版第十四章 类型信息习题

    fda dfa 第三题u package net.mindview.typeinfo.test4; import java.util.ArrayList; import java.util.Array ...

  5. 理解Spark运行模式(二)(Yarn Cluster)

    上一篇说到Spark的yarn client运行模式,它与yarn cluster模式的主要区别就是前者Driver是运行在客户端,后者Driver是运行在yarn集群中.yarn client模式一 ...

  6. HashMap的源码学习以及性能分析

    HashMap的源码学习以及性能分析 一).Map接口的实现类 HashTable.HashMap.LinkedHashMap.TreeMap 二).HashMap和HashTable的区别 1).H ...

  7. 【Luogu P1439】最长公共子序列(LCS)

    Luogu P1439 令f[i][j]表示a的前i个元素与b的前j个元素的最长公共子序列 可以得到状态转移方程: if (a[i]==b[j]) dp[i][j]=dp[i-1][j-1]+1; d ...

  8. /proc/cpuinfo文件解读(超易理解)

    在linux系统中,提供了/proc目录下文件,显示系统的软硬件信息.如果想了解系统中CPU的提供商和相关配置信息,则可以查/proc/cpuinfo.但是此文件输出项较多,不易理解.例如我们想获取, ...

  9. 修改Linux克隆的物理地址 和 IP地址

    实在不行就重新启动一下   才会改成 ech0 完成后文件配置环境变量 作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具.

  10. fsockopen与HTTP 1.1/HTTP 1.0

    在前面的例子中,HTTP请求信息头有些指定了 HTTP 1.1,有些指定了 HTTP/1.0,有些又没有指定,那么他们之间有什么区别呢? 关于HTTP 1.1与HTTP 1.0的一些基本情况,可以参考 ...