Catch That Cow
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 61826 | Accepted: 19329 |
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
Hint
The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes.
Source
[Submit] [Go Back] [Status] [Discuss]
#include<stdio.h> #include<string.h> #include<queue> #include<iostream> #include<algorithm> using namespace std; vis[200005]; struct node{ int x; int dis; }; node u,v; int bfs(int start,int end){ u.x=start; u.dis=0; queue<node>q; vis[start]=true; q.push(u); while(!q.empty()){ u=q.front(); q.pop(); if(u.x==end) return u.dis; for(int i=0;i<3;i++){ if(i==0) v.x=u.x+1; else if(i==1) v.x=u.x-1; else if(i==2) v.x=u.x*2; if(!vis[v.x]&&v.x>=0&&v.x<=100001){ vis[v.x]=true; v.dis=u.dis+1; q.push(v); } } } } int main(){ int start,end; while(scanf("%d%d",&start,&end)!=EOF){ memset(vis,false,sizeof(vis)); int step=bfs(start,end); printf("%d ",step); } return 0; }