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

农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上幽发,尽快把那只奶牛抓回来.
    他们都站在数轴上.约翰在N(O≤N≤100000)处,奶牛在K(O≤K≤100000)处.约翰有
两种办法移动,步行和瞬移:步行每秒种可以让约翰从z处走到x+l或x-l处;而瞬移则可让他在1秒内从x处消失,在2x处出现.然而那只逃逸的奶牛,悲剧地没有发现自己的处境多么糟糕,正站在那儿一动不动.
    那么,约翰需要多少时间抓住那只牛呢?

代码

  1. #include <iostream>  
  2. #include <cstdio>  
  3. #include <cstring>  
  4. #include <algorithm>  
  5. #include <queue>  
  6. #include <vector>  
  7. using namespace 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. }  






扫描二维码关注公众号,回复: 183468 查看本文章

猜你喜欢

转载自blog.csdn.net/usernamezzz/article/details/79350518