hd 2717 Catch That Cow

来源:互联网 发布:汉字笔顺查询软件 编辑:程序博客网 时间:2024/06/06 09:38

Catch That Cow

Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 12304    Accepted Submission(s): 3822


Problem Description
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.
 

Sample Input
5 17
 

Sample Output
4
#include<cstdio>#include<cstring>#include<iostream>#include<queue>using namespace std;int s,e;int vis[1000010];struct node{    int x;    int step;};int bfs(){    node now,next;    queue<node > q;    now.x = s;    now.step = 0;    q.push(now);    while(!q.empty())    {        next = q.front();        q.pop();        if(next.x == e)                return next.step;        now.x = next.x + 1;        if(now.x >=0 && now.x <= 1000000 && !vis[now.x])        {            now.step = next.step + 1;            vis[now.x] = 1;            q.push(now);        }         now.x = next.x - 1;        if(now.x >=0 && now.x <= 1000000 && !vis[now.x])        {            now.step = next.step + 1;            vis[now.x] = 1;            q.push(now);        }         now.x = next.x * 2;        if(now.x >=0 && now.x <= 1000000&& !vis[now.x])        {            now.step = next.step + 1;            vis[now.x] = 1;            q.push(now);        }    }    return -1;}int main(){    while(cin >> s >> e)    {        memset(vis,0,sizeof(vis));        vis[s] = 1;        int ans = bfs();        cout << ans << endl;    }    return 0;}


0 0