• 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

    大数组可以用vector

    大数组可以用vector

    大数组可以用vector

    #include <iostream>
    #include <queue>
    #include <vector>
    using namespace std;
    
    int N, K;
    vector<int> data;
    
    int main(void)
    {
        int bfs(void);
        
        while(scanf("%d%d", &N, &K) != EOF)
        {
            for(int i = 0; i <= 2*K; i++)
                data.push_back(-1);
            
            if(K <= N)
            {
                printf("%d
    ", N-K);
                continue;
            }
            else
            {
                int e = bfs();
                printf("%d
    ", e);
            }
            
            
        }
        
        return 0;
    }
    
    
    int bfs()
    {
        queue<int> que;
        int cas;
        
        data[N] = 0;
        cas = N;
        que.push(cas);
        
        while(que.size())
        {
            int ca = que.front();   que.pop();
            
            if(ca == K)
                break;
            
            for(int i = 0; i < 3; i++)
            {
                if(i == 0)
                    cas = ca + 1;
                if(i == 1)
                    cas = ca - 1;
                if(i==2)
                    cas = ca * 2;
                    
                if(cas >= 0 && cas <= 2*K && data[cas] < 0)
                {
                    data[cas] = data[ca] + 1;
                    que.push(cas);
                }
                
            }
            
            
        }
        
        
        return data[K];
    }
    
  • 相关阅读:
    GridView中获取UserControl Fred
    objectivec字符串类NSString的使用
    IPhone之AVAudioRecorder
    iPhone中用第三方工具(RegexKitLite)实现正则表达
    android实现底部菜单栏
    android 菜单设计
    Objective C内存管理——如何理解autorelease
    在iphone中使用正则表达式 — OgreKit 详解
    iphone开发者证书装多台电脑的方法
    iPhone sdk 4.0 正则表达式
  • 原文地址:https://www.cnblogs.com/limyel/p/7146592.html
Copyright © 2020-2023  润新知