zoukankan      html  css  js  c++  java
  • 杭电 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;
    }
    


  • 相关阅读:
    《将博客搬至CSDN》
    所谓找链表中点
    虚函数
    编辑距离
    数组移位
    DFA
    Single Number III
    XOR异或解惑
    First Bad Version
    while(!in.empty()) 和 while(in.size())
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6821014.html
Copyright © 2011-2022 走看看