zoukankan      html  css  js  c++  java
  • (广搜)Catch That Cow -- poj -- 3278

    链接:

    http://poj.org/problem?id=3278

    Time Limit: 2000MS   Memory Limit: 65536K
    Total Submissions: 62113   Accepted: 19441

    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 - 1 or + 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 <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <algorithm>
    #include <queue>
    
    using namespace std;
    
    #define N 110000
    
    struct node
    {
        int x, step;
    };
    
    int s, e;
    bool vis[N];
    
    int BFS(int s)
    {
        node p, q;
        p.x = s, p.step = 0;
    
        memset(vis, false, sizeof(vis));
        vis[s] = true;
        queue<node>Q;
        Q.push(p);
    
        while(Q.size())
        {
            p = Q.front(), Q.pop();
    
            if(p.x == e) return p.step;
    
            for(int i=0; i<3; i++)
            {
                if(i==0)
                    q.x = p.x + 1;
                else if(i==1)
                    q.x = p.x - 1;
                else if(i==2)
                    q.x = p.x * 2;
    
                q.step = p.step + 1;
                if(q.x>=0 && q.x<N && !vis[q.x])
                {
                    Q.push(q);
                    vis[q.x] = true;
                }
            }
        }
    
        return -1;
    }
    
    int main()
    {
        while(scanf("%d%d", &s, &e)!=EOF)
        {
            int ans = BFS(s);
    
            printf("%d
    ", ans);
        }
        return  0;
    }
    勿忘初心
  • 相关阅读:
    ajax、json一些整理(2)
    ajax、json一些整理(1)
    C# DllImport的用法
    asp.net 获取当前项目路径
    C# 中关闭当前线程的四种方式 .
    DataGridView自定义RichTextBox列
    C#winform的datagridview设置选中行
    Other Linker flags 添加 -Objc导致包冲突
    nat打洞原理和实现
    成为顶尖自由职业者必备的七个软技能之四:如何成为销售之王(转)
  • 原文地址:https://www.cnblogs.com/YY56/p/4782893.html
Copyright © 2011-2022 走看看