[POJ - 2431]遠征(PQ)

遠征

直接中国

説明

牛の群れは、ジャングル探検の深さにトラックベンチャーをつかみました。比較的低いドライバーとして、残念ながら、彼は岩を実行し、牛はタンクローリーを貫くことができました。今では燃料漏れの単位の単位あたりのトラックを実行しています。 

トラックを修復するために、牛は、最寄りの町(不以上1,000,000以下単位の距離)を長く曲がりくねった道に沿って移動する必要があります。このように、トラックや町の現在位置との間、N(1 <= N <=あり 10,000) 燃料局のは、牛が追加の燃料(ステーションごと1..100単位)を停止することができます。 

人間のジャングルは危険な場所、牛のために特に危険です。そのため、牛が町に向かう途中の可能な燃料停止だけ少なくしたいです。幸いなことに、彼らのトラックの燃料タンク容量が非常に大きく、それが実際に燃料の量無制限を収容することができます。町から本Lトラック単位、P-燃料ユニット(1 <= P <= 1,000,000  )。

最小滞在は、町の所望の数に達したと判断された、または牛が町に到達することはできません。 

入力

* 1行目:単一の整数、N 

*行2..N + 1:各行は、スペースで区切られた2つの整数を含んでいるが、燃料を記述するために使用されて停止する:最初の整数を停止点まで町からの距離であり、  第二一つは、サイトが利用できる燃料の量です。 

*ラインN + 2:スペースで区切られた2つの整数、LおよびP.

出力

* 1行目:滞在する都市や町の最小必要数に達するまでに燃料を与える単一の整数。あなたが町に到達できない場合、出力-1。

サンプル入力

4 
4 4 
5 2 
11 5 
15 10 
25 10

サンプル出力

2
2

ヒント

詳細を入力します。 

町の25個の単位からトラック;  このトラックは10個の燃料の単位を有します。この道に沿って、町4,5,11及び15からの距離は、4つの燃料局(トラック21,20,14及び10の初期距離からの距離)を有しています。これらの停止手段は、それぞれ4、2、5、10、燃料ユニットへの燃料最大であってもよいです。 

出力の詳細: 

ドライバー10個のユニットは、町に運転し、その後、燃料の購入5つのユニットを停止するには、4つのユニットを開くには、燃料の10個の単位を買うために停止しました。
 
トピックリンク
 
私はガソリンスタンドを通過した場合は、油から出てくるまで、私は、油プラス駅、その後、私はいつも行くことができる権利を得るだろう、それまで追加プラスすることができます油のうち、私の目の前で、この時間は、話を歩き続けますこれらの局は、プライオリティキューに入れることができます
 
ACコード
書式#include <iostreamの> 
の#include <cstdioを> 
する#include <fstreamの> 
の#include <アルゴリズム> 
書式#include <cmath> 
の#include <両端キュー> 
の#include <ベクトル> 
の#include <キュー> 
の#include < 文字列 > 
の#include <CStringの> 
#include <地図> 
の#include <スタック> 
の#include < 設定 > 
の#include <sstream提供>
 の#define IOS ios_base :: sync_with_stdio(0)。cin.tie(0)。
長い長いLL
 の#define 0x3f3f3f3f INF
 の#define MEM(X、Y)のmemset(X、Y、はsizeof(X))
 の#define MAXN 5 100000 +。
 使用 名前空間STD;
 構造体ノード
{ 
    INT DIS; // から
    のint値; // 
    BOOLの 演算子 <(constのノードC&)のconst // から降順に係る
    {
         戻り DIS> c.disを; 
    } 
}、
ノードA [MAXN]; 
PRIORITY_QUEUE < INT > Q;
 int型のL、P、N。
INT メイン()
{ 
    CIN >> N。
    以下のためにint型 i = 0 ; iがNを<; I ++ 
        CIN >> [I] .DIS >> [I] .VALUE。
    CIN >> L >> P; 
    ソート( + N)。// 排序
    q.push(P)。
    int型 ANS = 0、I = 0 ;
    しばらく(L> 0 &&!q.empty())
    { 
        ANS ++; // 用了几个加油站 
        L- = q.top()。
        q.pop(); 
        ながら(iはN && L <<= A [i]の.DIS)// L <= A [I] .DIS、すなわち、供給ステーションを介して、エンキューイング
        { 
            q.push([I] .Valueの); 
            私は ++ ; 
        } 
    } 
    IF(L> 0 
        COUT << - 1 << ENDL;
     他の
        COUT << ans- 1。 << ENDL; // 最初のオイル自身
    戻り 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/sky-stars/p/11332071.html