• 【UOJ 17】抓牛


    【题目描述】:
    农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来.

    他们都站在数轴上.约翰在N处,奶牛在K处.约翰有两种办法移动,步行和瞬移:步行每秒钟可以让约翰从x处走到x+l或x-l处;而瞬移则可让他在1秒内从x处消失,在2x处出现.然而那只逃逸的奶牛,悲剧地没有发现自己的处境多么糟糕,正站在那儿一动不动。

    那么,约翰需要多少时间抓住那只牛呢?

    【输入描述】:
    仅有两个整数N和K。

    【输出描述】:
    最短时间

    【样例输入】:
    5 17
    【样例输出】:
    4
    【时间限制、数据范围及描述】:
    时间:1s 空间:128M

    O<=N<=100000

    O<=K<=100000


    此题是一道标准bfs题目,注意不要越界,还有此点未搜索过即可。

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cstdlib>
    #include<cmath>
    using namespace std;
    int x,y,a,b;
    int s[100006];
    int q[100006];
    int main(){
    //    freopen("17.in","r",stdin);
    //    freopen("17.out","w",stdout);
        scanf("%d %d",&a,&b);
        if(b==0){ cout<<a; return 0; }
        memset(s,-1,sizeof(s));
        int front=0;
        int rear=0;
        s[a]=0; q[rear++]=a;
        while(s[b]==-1 && front!=rear){
            x=q[front++]; y=x-1;
            if(y>0 && y<=100000 && s[y]==-1){
                s[y]=s[x]+1;
                q[rear++]=y;
            }
            y=x+1;
            if(y>0 && y<=100000 && s[y]==-1){
                s[y]=s[x]+1;
                q[rear++]=y;
            }
            y=x*2;
            if(y>0 && y<=100000 && s[y]==-1){
                s[y]=s[x]+1;
                q[rear++]=y;
            }
        }
        cout<<s[b];
        return 0;
    }
  • 相关阅读:
    php面试题-2
    排序算法-1
    php面试题-1
    ES6基础-4
    ES6基础-3
    mysql优化-1
    ES6基础-2
    vuecli 项目进行gzip压缩 使页面加载速度更快
    vueCli3 项目创建时,git bash 箭头选择无效问题
    gulp4简单用法和问题总结
  • 原文地址:https://www.cnblogs.com/wuhu-JJJ/p/11129370.html
Copyright © 2020-2023  润新知