zoukankan      html  css  js  c++  java
  • BZOJ 1646: [Usaco2007 Open]Catch That Cow 抓住那只牛( BFS )

    BFS...

    --------------------------------------------------------------------------------------------

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<queue>
     
    #define rep( i , n ) for( int i = 0 ; i < n ; i++ )
    #define clr( x , c ) memset( x , c , sizeof( x ) )
     
    using namespace std;
     
    const int maxn = 200000;
    const int inf = 0x3f3f3f3f;
     
    queue< int > Q;
     
    int d[ maxn ];
    int main() {
    // freopen( "test.in" , "r" , stdin );
    int n , k;
    cin >> n >> k;
    clr( d , inf );
    d[ n ] = 0;
    Q.push( n );
    while( ! Q.empty() ) {
    int x = Q.front();
    Q.pop();
    if( x == k )
       break;
    #define ok( x ) ( 0 <= x && x <= 100000 )
    if( ok( x + 1 ) && d[ x + 1 ] > d[ x ] + 1 ) {
    d[ x + 1 ] = d[ x ] + 1;
       Q.push( x + 1 );
       
    }
       
    if( ok( x - 1 ) && d[ x - 1 ] > d[ x ] + 1 ) {
    d[ x - 1 ] = d[ x ] + 1;
       Q.push( x - 1 );
       
    }
       
    if( ok( x << 1 ) && d[ x << 1 ] > d[ x ] + 1 ) {
    d[ x << 1 ] = d[ x ] + 1;
       Q.push( x << 1 );
       
    }
       
    }
    cout << d[ k ] << " ";
    return 0;
    }

    -------------------------------------------------------------------------------------------- 

    1646: [Usaco2007 Open]Catch That Cow 抓住那只牛

    Time Limit: 5 Sec  Memory Limit: 64 MB
    Submit: 764  Solved: 361
    [Submit][Status][Discuss]

    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?

        农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上幽发,尽快把那只奶牛抓回来.
        他们都站在数轴上.约翰在N(O≤N≤100000)处,奶牛在K(O≤K≤100000)处.约翰有
    两种办法移动,步行和瞬移:步行每秒种可以让约翰从z处走到x+l或x-l处;而瞬移则可让他在1秒内从x处消失,在2x处出现.然而那只逃逸的奶牛,悲剧地没有发现自己的处境多么糟糕,正站在那儿一动不动.
        那么,约翰需要多少时间抓住那只牛呢?

    Input

    * Line 1: Two space-separated integers: N and K

        仅有两个整数N和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
    Farmer John starts at point 5 and the fugitive cow is at point 17.

    Sample Output

    4

    OUTPUT DETAILS:

    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.

    HINT

    Source

  • 相关阅读:
    【LeetCode】Validate Binary Search Tree
    【LeetCode】Search in Rotated Sorted Array II(转)
    【LeetCode】Search in Rotated Sorted Array
    【LeetCode】Set Matrix Zeroes
    【LeetCode】Sqrt(x) (转载)
    【LeetCode】Integer to Roman
    贪心算法
    【LeetCode】Best Time to Buy and Sell Stock III
    【LeetCode】Best Time to Buy and Sell Stock II
    CentOS 6 上安装 pip、setuptools
  • 原文地址:https://www.cnblogs.com/JSZX11556/p/4558264.html
Copyright © 2011-2022 走看看