Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 33045 | Accepted: 10160 |
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
Output
Sample Input
5 17
Sample Output
4
Hint
Source
#include <iostream>
#include <cstring>
using namespace std;
int status[100010];
int queue[100010];
int step[100010];
int main()
{
void bfs(int n,int k);
int i,j,n,m,s,t;
int k;
cin>>n>>k;
memset(step,0,sizeof(step));
memset(status,0,sizeof(status));
bfs(n,k);
cout<<step[k]<<endl;
return 0;
}
void bfs(int n,int k)
{
int base,top,i,j;
int xend,x;
base=top=0;
queue[top++]=n;
step[n]=0;
status[n]=1;
while(base<top)
{
x=queue[base]; base+=1;
for(i=0;i<=2;i++)
{
if(i==0)
{
xend=x-1;
}else if(i==1)
{
xend=x+1;
}else
{
xend=2*x;
}
if(xend>=0&&xend<=100000&&status[xend]==0)
{
status[xend]=1;
step[xend]=step[x]+1;
queue[top++]=xend;
if(xend==k)
{
break;
}
}
}
if(i!=3)
{
break;
}
}
}