• noi 抓住那头牛


    抓住那头牛

    描述

    农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:

    1、从X移动到X-1或X+1,每次移动花费一分钟
    2、从X移动到2*X,每次移动花费一分钟
     
    假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?
    输入
    两个整数,N和K
    输出
    一个整数,农夫抓到牛所要花费的最小分钟数
    样例输入
    5 17
    样例输出
    4
    解析
      农夫每次走有三种情况,用宽搜解决问题,不过要注意数据范围,超出范围的点不能走;
    #include<cstdio> 
    #include<queue>
    using namespace std;
    int ans[100002]={0};
    bool f[100002]={0};
    int n,k;
    queue<int> q;
    void bfs(int x){
        ans[x]=0;
        f[x]=1;
        q.push(x);
        while(!q.empty()){
            int z=q.front();
            q.pop();
            if(!f[z+1]&&z+1<=100000){
                f[z+1]=1;
                q.push(z+1);
                ans[z+1]=ans[z]+1;
            }
            if(!f[z-1]&&z-1>=0){
                f[z-1]=1;
                q.push(z-1);
                ans[z-1]=ans[z]+1;
            }
            if(!f[z*2]&&z*2<=100000){
                f[z*2]=1;
                q.push(z*2);
                ans[z*2]=ans[z]+1;
            }
            if(ans[k]){
                printf("%d",ans[k]);
                return;
            }
        }
    }
    int main(){
        scanf("%d%d",&n,&k);
        if(n==k){
            printf("0
    ");
            return 0;
        }
        bfs(n);
        return 0;
    }
    View Code
  • 相关阅读:
    爬虫-requests-html
    pillow
    bs4-mysql-豌豆荚
    代理池-豆瓣电影
    Codeforces 1373D
    Codeforces 1365D
    AtCoder "NOMURA Programming Competition 2020" C
    Codeforces 1359D
    Codeforces 1359C
    Codeforces 1358D
  • 原文地址:https://www.cnblogs.com/qingang/p/5762511.html
Copyright © 2020-2023  润新知