zoukankan      html  css  js  c++  java
  • poj 3278 Catch That Cow

    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.

    Source

    抽象的广度优先搜索。

    队列q定义为全局变量时ac,但是放到bfs函数里面就会wa,可能队列中元素太多导致栈溢出,而全局变量不容易溢出。

    #include <iostream>
    #include <queue>
    #include <cstdio>
    using namespace std;
    
    const int size = 100001;
    bool mark[size];
    int dist[size];
    queue<int> q;
    
    int bfs(int N, int K) {
        q.push(N);
        dist[N] = 0;
        mark[N] = true;
        int i, v, w;
        while (!q.empty()) {
            v = q.front();
            q.pop();
            for (i = 0; i < 3; i++) {
                if (i == 0)
                    w = v - 1;
                else if (i == 1)
                    w = v + 1;
                else
                    w = v * 2;
                if (w < 0 || w >= size)
                    continue;
                if (!mark[w]) {
                    mark[w] = true;
                    q.push(w);
                    dist[w] = dist[v] + 1;
                }
                if (w == K)
                    return dist[w];
            }
        }
    }
    
    int main() {
        int N, K;
        scanf("%d%d", &N, &K);
        if (N >= K)
            printf("%d
    ", N - K);
        else
            printf("%d
    ", bfs(N, K));
        return 0;
    }
  • 相关阅读:
    递归练习题1
    爬虫模块之Beautiful Soup4
    python中的简易表格prettytable
    ubuntu中安装和使用quant-lib
    一个金融软件的基础功能分布
    ONLY_FULL_GROUP_BY 牛皮癣怎么治
    pandas
    pandas行筛选/列筛选(条件筛选/范围筛选)/计算
    conda 的 proxy设置
    openpyxl 安装失败的处理 (缺少 et_xmlfile )
  • 原文地址:https://www.cnblogs.com/lxc1910/p/10466728.html
Copyright © 2011-2022 走看看