Catch That Cow
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 44151 | Accepted: 13789 |
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 <iostream> #include <stdio.h> #include <stdlib.h> #include <algorithm> #include <string.h> #include <stdlib.h> using namespace std; struct node { int x,sum; }q[100001]; int b[100001]; int xx[]={-1,1}; void bfs(int n,int m) { memset(b,0,sizeof(b)); b[n]=1; struct node t,r; t.x=n; t.sum=0; int k=0,l=0,i; q[l++]=t; while(k<l) { t=q[k++]; if(t.x==m) { printf("%d\n",t.sum); return ; } for(i=0;i<=2;i++) { if(i==2) r.x=2*t.x; else r.x=t.x+xx[i]; if(r.x>=0&&r.x<100001&&b[r.x]==0) { r.sum=t.sum+1; b[r.x]=1; q[l++]=r; } } } } int main() { int n,m; scanf("%d%d",&n,&m); bfs(n,m); }