您的位置:首页 > 其它

Catch That Cow POJ - 3278

2018-02-23 07:11 225 查看
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?
InputLine 1: Two space-separated integers: N and KOutputLine 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处出现.然而那只逃逸的奶牛,悲剧地没有发现自己的处境多么糟糕,正站在那儿一动不动.    那么,约翰需要多少时间抓住那只牛呢?代码

#include <iostream>  
#include <cstdio>  
#include <cstring>  
#include <algorithm>  
#include <queue>  
#include <vector>  
using namespace std;  
const int MAXN=500001;  
bool visit[MAXN];  
vector <int> Q;  
struct xx  
{  
    int s,cnt;  
}a[MAXN];  
int main(int argc, char *argv[])  
{  
    int n,k,head,tail,d=0,zt,i;  
    scanf("%d%d",&n,&k);  
    a[1].s=n;  
    head=1,tail=1;  
    while(head<=tail)  
    {  
        zt=tail;  
        for(i=head;i<=tail;i++)  
        {  
            if(a[i].s==k) {  
                printf("%d\n",a[i].cnt);  
                return 0;  
            }  
            if(a[i].s+1<MAXN)  
            if(visit[a[i].s+1]==false)   
            {  
                zt++;  
                a[zt].s=a[i].s+1;  
                a[zt].cnt=a[i].cnt+1;  
                visit[a[zt].s]=true;  
            }  
            if(a[i].s-1>=0)  
            if(visit[a[i].s-1]==false)   
            {  
                zt++;  
                a[zt].s=a[i].s-1;  
                a[zt].cnt=a[i].cnt+1;  
                visit[a[zt].s]=true;  
            }  
            if(a[i].s*2<MAXN)  
            if(visit[a[i].s*2]==false)   
            {  
                zt++;  
                a[zt].s=a[i].s*2;  
                a[zt].cnt=a[i].cnt+1;  
                visit[a[zt].s]=true;  
            }  
            head=tail+1;  
            tail=zt;  
        }  
    }  
    return 0;  
}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: