1253:抓住那头牛

【题目描述】

农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0≤N≤100000)

,牛位于点K(0≤K≤100000)

。农夫有两种移动方式:

1、从X

移动到X−1或X+1

,每次移动花费一分钟

2、从X移动到2×X

,每次移动花费一分钟

假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?

【输入】

两个整数,N

K

【输出】

一个整数,农夫抓到牛所要花费的最小分钟数。

【输入样例】

5 17

【输出样例】

4
// Created on 2020/2/8

/*#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <climits>*/
#include <bits/stdc++.h>
#define MAXX 40*40+5

using namespace std;

//int i,j,k;

const int maxn=INT_MAX;

const int idata=100000+5;
//int aim[idata];
bool judge[idata];
bool flag;
int soux,souy,
    exitx,exity;
//int maps[idata][idata];
//const int change[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
long long n,m;
long long Count[idata];
long long nx,ny;
long long x[idata];

int main()
{
    long long head,tail;
    int i;
    cin>>n>>m;

    head=0,tail=1;
    x[1]=n;
    judge[n]=true;
    Count[n]=0;

    while(head<tail)
    {
        head++;

        for(i=0;i<3;i++)
        {
            switch(i)
            {
                case 0:nx=x[head]+1;break;
                case 1:nx=x[head]-1;break;
                case 2:nx=x[head]*2;break;
            }

            if(nx<=idata&&nx>=0&&!judge[nx])
            {
                judge[nx]=true;
                tail++;
                Count[nx]=Count[x[head]]+1;
                x[tail]=nx;
            }

            if(nx==m)
            {
                flag=true;
                break;
            }
        }
        if(flag) break;
    }
    cout<<Count[m]<<endl;
    return 0;
}
发布了177 篇原创文章 · 获赞 8 · 访问量 6347

猜你喜欢

转载自blog.csdn.net/C_Dreamy/article/details/104227800