• poj---3278---Catch That Cow


    题目链接: http://poj.org/problem?id=3278

    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.
    Source
    
    USACO 2007 Open Silver
    
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <cmath>
    #include<vector>
    #include<queue>
    #include<algorithm>
    
    using namespace std;
    typedef long long LL;
    
    const int maxn=500009;
    const int INF=0x3f3f3f3f;
    const int mod=2009;
    
    struct node
    {
        int x, step;
    };
    int n, k;
    int vis[maxn];
    
    int bfs()
    {
        memset(vis, 0, sizeof(vis));
        queue<node>Q;
        node p, q;
        p.x=n;
        p.step=0;
        vis[p.x]=1;
        Q.push(p);
    
        while(Q.size())
        {
            q=Q.front();
            Q.pop();
    
            if(q.x==k)return q.step;
    
            for(int i=0; i<3; i++)
            {
                if(i==0)
                    p.x=q.x+1;
                else if(i==2)
                    p.x=q.x-1;
                else
                    p.x=q.x*2;
    
                if(p.x>=0&&p.x<=100000&&!vis[p.x])
                {
                    vis[p.x]=1;
                    p.step=q.step+1;
                    Q.push(p);
                }
            }
        }
        return -1;
    }
    
    int main()
    {
        while(~scanf("%d %d", &n, &k))
        {
            int ans=bfs();
            printf("%d
    ", ans);
        }
        return 0;
    }
    
  • 相关阅读:
    JVM调优总结(八)-典型配置举例2
    JVM调优总结(七)-典型配置举例1
    ajax---异步请求对象的属性和方法
    ajax----发送异步请求的步骤
    ajax---获取XMLHttpReuquest 对象
    ajax--参数默认值问题
    ajax--参数映射方式实现阴影效果
    ajax-简单参数方法实现阴影效果
    ajax之阴影效果实现(对象函数方法)
    ajax对象方法的使用
  • 原文地址:https://www.cnblogs.com/w-y-1/p/5803300.html
Copyright © 2020-2023  润新知