• POJ


    Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting.

    * Walking: FJ can move from any point X to the points - 1 or + 1 in a single minute
    * Teleporting: FJ can move from any point X to the point 2 × X in a single minute.

    If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?

    Input

    Line 1: Two space-separated integers: N and K

    Output

    Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.

    Sample Input

    5 17

    Sample Output

    4

    Hint

    The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes.

    这道题是关于最短步数的,首先就要想到广搜,既然想到了广搜就可以写代码了。

    #include<iostream>
    #include<queue>
    #include<algorithm>
    #include<set>
    #include<cmath>
    #include<vector>
    #include<map>
    #include<stack>
    #include<bitset>
    #define Swap(a,b) a^=b^=a^=b
    #define cini(n) scanf("%d",&n)
    #define cinl(n) scanf("%lld",&n)
    #define cinc(n) scanf("%c",&n)
    #define coui(n) printf("%d",n)
    #define couc(n) printf("%c",n)
    #define coul(n) printf("%lld",n)
    #define speed ios_base::sync_with_stdio(0);//Çв»¿ÉÓÃscnaf£»
    #define Max(a,b) a>b?a:b
    #define Min(a,b) a<b?a:b
    using namespace std;
    typedef long long ll;
    const int INF=0x3f3f3f3f;
    const int maxn=1e6+10;
    const double esp=1e-9;
    int m,n,x,y;
    int cnt,mini=INF;
    bool flag[maxn];
    int bfs(int x);
    int main()
    {
        cin>>m>>n;
        cout<<bfs(m)<<endl;
    }
    int bfs(int x)
    {
        queue<pair<int,int> > t;
        t.push(make_pair(x,0));
        while(!t.empty())
        {
            pair<int,int>w=t.front();
            if(w.first==n)break;
            t.pop();
            w.first++,w.second++;
            if(w.first<0||w.first>100000||flag[w.first]);
            else t.push(w),flag[w.first]=1;
            w.first-=2;
            if(w.first<0||w.first>100000||flag[w.first]);
            else t.push(w),flag[w.first]=1;
            w.first++;
            w.first*=2;
            if(w.first<0||w.first>100000||flag[w.first]);
            else t.push(w),flag[w.first]=1;
        }
        return t.front().second;
    }
  • 相关阅读:
    精通javascript、javascript语言精粹读书笔记
    javascript语言精粹。3、对象;4、函数;深入原型链,对象的原理!
    权限管理
    javascript碎碎念(面向对象备忘)
    几个JavaScript面试题
    JavaScript类属性的定义方法和区别
    j
    Java调用SQL存储过程 输入输出参数(转)
    Java中文乱码解决
    js中eval详解
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/11316952.html
Copyright © 2020-2023  润新知