B - Catch That Cow

/*
B - Catch That Cow
Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

Submit Status

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 <stdio.h>
#include <string.h>
#include <queue>
#define Max 200005
int used[Max];
using namespace std;
struct Node
{
	int n;
	int num;
};
int main()
{
	int N,K;
	while(scanf("%d%d",&N,&K)!=EOF)
	{
		memset(used,0,sizeof(used));
		queue<Node>Q;
		Node start;
		start.n = N;
		start.num = 0;
		Q.push(start);
		while(!Q.empty())
		{
			start = Q.front();
			Q.pop();
			
			int a,b;
			a = start.n;
			b = start.num;
			
			if(a==K)
			{
				break;
			}
			if(a<K && !used[a*2])
			{
				used[a*2] = 1;
				start.n = a * 2;
				start.num = b + 1 ;
				Q.push(start);
			}
			if(a>0 &&!used[a-1])
			{
				used[a-1] = 1;
				start.n = a - 1;
				start.num = b + 1 ;
				Q.push(start);
			}
			if(a<K && !used[a+1])
			{
				used[a+1] = 1;
				start.n = a + 1;
				start.num = b + 1 ;
				Q.push(start);
			}
		}
		printf("%d\n",start.num);	
	}
	return 0;
}


你可能感兴趣的:(B - Catch That Cow)