【17】UOJ抓牛

[タイトル]説明:
ファーマージョンが通知され、彼の牛の一つはエスケープ!そこで彼は、鳥の牛が再び戻ってくるや否や、一度に開始することを決めました。

彼らは、数直線上に立ちました。Nジョン、代わりにK牛。;およびテレポートは彼が1秒でxから消えることができます、の2倍で、ジョンはxでからの第2のx + LまたはXLごとに歩いて行くように:ジョン、移動歩くとテレポートする2つの方法があります表示されます。しかし、それだけで悲劇的にその状況が、そこに動か立ってどのように悪い発見していなかった、牛を逃れるでしょう。

まあ、ジョンはそれが牛のホールドを取るどのくらい?

[説明入力:
2つだけの整数NとK.

[出力]説明:
最短時間

[]サンプル入力:
517
[]出力サンプル:
4
[時間制限、およびデータの説明の範囲:
時間:1秒容量:128M

O <= N <= 100000

O <= K <= 100000


この質問は、標準的なBFSトピックではなく、クロスボーダーのと同様に、このポイントに気をつけて検索されません。

 

#include <cstdioを> 
する#include <iostreamの> 
する#include <アルゴリズム> 
の#include <CStringの> 
する#include <cstdlib> 
の#include <cmath>
 使用して 名前空間STD。
INT X、Y、B。
int型 S [ 100006 ]。
INT Q [ 100006 ]。
INT メイン(){
 //     freopenは( "17.in"、 "R"、STDIN)。
//     freopenは( "17.out"、 "W"、STDOUT)。
    scanf関数(" %D%dの"、&​​、&B)。
    もし(Bの== 0){COUT <<。リターン 0; } 
    のmemset(S、 - 1はsizeof (S))。
    int型のフロント= 0 ;
    INTの後= 0 
    S [A] = 0 ; Q [++リア] = 一方、(S [B] == - 1 &&フロント=!後){ 
        X = Q [フロント++]。Y = X- 1 もし(Y> 0 && Y <= 100000 && S [Y] == - 1 ){ 
            S [Y] = sで[X] + 1 
            Q [後部 ++] = Y。
        }
        Y = X + 1 もし(Y> 0 && Y <= 100000 && S [Y] == - 1 ){ 
            S [Y] = sで[X] + 1 
            Q [後部 ++] = Y。
        } 
        、Y = X * 2 もし(Y> 0 && Y <= 100000 && S [Y] == - 1 ){ 
            S [Y] = sで[X] + 1 
            Q [後部 ++] = Y。
        } 
    } 
    COUT << S [B]。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/wuhu-JJJ/p/11129370.html