zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    函数和常用模块【day04】:函数式编程(六)
    函数和常用模块【day04】:递归(五)
    函数和常用模块【day04】:函数参数及调用(二)
    函数和常用模块【day04】:函数介绍(一)
    第一模块:python基础语法
    Python基础【day03】:集合进阶(四)
    Python基础【day03】:字典进阶(二)
    Python基础【day02】:数据运算(二)
    Python基础【day01】:表达式if ...else语句(三)
    Python基础【day01】:Hello World程序(二)
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/11316952.html
Copyright © 2011-2022 走看看