您的位置:首页 > 其它

hd 2717 Catch That Cow

2016-07-29 19:49 316 查看


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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: