Catch That Cow POJ - 3278

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 - 1 or + 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

Farmer John is notified that one of his cows has escaped! So he decided to catch the cow as soon as possible.
    They are all on the number line. John is at N (O≤N≤100000), and the cow is at K (O≤K≤100000). John has
Two ways to move, walking and teleporting: walking per second allows John to go from z to x+l or xl; teleporting allows him to disappear from x in 1 second and appear at 2x. Yet the fleeing cow, tragically unaware of her situation, was standing motionless.
    So, how much time does John need to catch the cow?

code

  1. #include <iostream>  
  2. #include <cstdio>  
  3. #include <cstring>  
  4. #include <algorithm>  
  5. #include <queue>  
  6. #include <vector>  
  7. usingnamespace std;   
  8. const int  MAXN = 500001;   
  9. bool visit[MAXN];  
  10. vector <int> Q;  
  11. struct xx  
  12. {  
  13.     int s,cnt;  
  14. } a [MAXN];  
  15. int main(int argc, char *argv[])  
  16. {  
  17.     int n,k,head,tail,d=0,zt,i;  
  18.     scanf("%d%d",&n,&k);  
  19.     a[1].s=n;  
  20.     head=1,tail=1;  
  21.     while(head<=tail)  
  22.     {  
  23.         zt=tail;  
  24.         for(i=head;i<=tail;i++)  
  25.         {  
  26.             if(a[i].s==k) {  
  27.                 printf("%d\n",a[i].cnt);  
  28.                 return 0;  
  29.             }  
  30.             if(a[i].s+1<MAXN)  
  31.             if(visit[a[i].s+1]==false)   
  32.             {  
  33.                 zt++;  
  34.                 a[zt].s=a[i].s+1;  
  35.                 a[zt].cnt=a[i].cnt+1;  
  36.                 visit[a[zt].s]=true;  
  37.             }  
  38.             if(a[i].s-1>=0)  
  39.             if(visit[a[i].s-1]==false)   
  40.             {  
  41.                 zt++;  
  42.                 a[zt].s=a[i].s-1;  
  43.                 a[zt].cnt=a[i].cnt+1;  
  44.                 visit[a[zt].s]=true;  
  45.             }  
  46.             if(a[i].s*2<MAXN)  
  47.             if(visit[a[i].s*2]==false)   
  48.             {  
  49.                 zt++;  
  50.                 a[zt].s=a[i].s*2;  
  51.                 a[zt].cnt=a[i].cnt+1;  
  52.                 visit[a[zt].s]=true;  
  53.             }  
  54.             head=tail+1;  
  55.             tail=zt;  
  56.         }  
  57.     }  
  58.     return 0;  
  59. }  






Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325888366&siteId=291194637