Catch That Cow

来源:互联网 发布:81端口活跃ip段 编辑:程序博客网 时间:2024/06/03 21:22
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 X - 1 or X + 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.

Example Input

5 17

Example Output

4


一道很纯粹的BFS,三个方向,可是,,,做这道题的时候,我RE了八次啊QAQ(哭死,原因是没控制好范围,越界了,,,
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <queue>using namespace std;const int N = 1e5 + 3;int n, k;struct node{    int i, step;};int vis[N];int BFS(int x){    queue<node> q;    struct node t;    t.i = x;    t.step = 0;    vis[x] = 1;    q.push(t);    while(!q.empty())    {        t = q.front();        q.pop();        if(t.i == k)            return t.step;        struct node u;        u.i = t.i + 1;        u.step = t.step + 1;        if(!vis[u.i])        {            q.push(u);            vis[u.i] = 1;        }        u.i = t.i - 1;        u.step = t.step + 1;        if(u.i >= 0 && !vis[u.i])     //控制下标非负        {            q.push(u);            vis[u.i] = 1;        }        u.i = t.i * 2;                //下标乘二,很容易越界        u.step = t.step + 1;        if(u.i <= N && !vis[u.i])     //控制范围        {            q.push(u);            vis[u.i] = 1;        }    }}int main(){    memset(vis, 0, sizeof(vis));    scanf("%d%d", &n, &k);    if(n > k)        printf("%d", n-k);    else        printf("%d", BFS(n));    return 0;}