• 杭电 HDU 2717 Catch That Cow


    Catch That Cow

    Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 8999    Accepted Submission(s): 2837


    Problem Description
    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?
     

    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
    Hint
    The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes. 睡前一水~ 好久没做过搜索了 注意剪枝&&&&&&&&
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<vector>
    #include<queue>
    #include<stack>
    #include<iostream>
    using namespace std;
    struct Node
    {
        int x,step;
        Node(){}
        Node(int x,int step):x(x),step(step){}
    };
    
    int n,k;
    bool vis[199999];
    
    int bfs()
    {
        queue<Node>Q;
         Node cur,next;
        Q.push(Node(n,0));
        while(!Q.empty())
        {
            cur=Q.front();
            Q.pop();
            for(int i=0;i<3;i++)
            {
                if(i==0)
                    next.x=cur.x+1;
                if(i==1)
                    next.x=cur.x-1;
                if(i==2)
                    next.x=cur.x*2;
                next.step=cur.step+1;
                if(next.x==k)
                    return next.step;
                if(next.x<0||next.x>100000)
                    continue;
                if(!vis[next.x])
                {
                    vis[next.x]=true;
                    Q.push(next);
                }
            }
        }
    
    }
    
    int main()
    {
        while(cin>>n>>k)
        {
            memset(vis,0,sizeof(vis));
            if(n<k)
                cout<<bfs()<<endl;
            if(n==k)
                cout<<0<<endl;
            if(n>k)
                cout<<n-k<<endl;
        }
        return 0;
    }
    


  • 相关阅读:
    词法分析程序
    关于编译原理
    超神c语言文法
    linux基本命令
    用bat来注册ocx
    当web配置文件 appSettings配置的东西越来越多时,可以拆开了。
    MVC的URL路由规则
    ASP.NET MVC 中如何实现基于角色的权限控制
    查cc攻击
    关于session介绍
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6821014.html
Copyright © 2020-2023  润新知