POJ 2431 Expedition(探險)

來源:互聯網
上載者:User

標籤:

POJ 2431 Expedition(探險)

Time Limit: 1000MS   Memory Limit: 65536K

【Description】

【題目描述】

A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather poor drivers, the cows unfortunately managed to run over a rock and puncture the truck‘s fuel tank. The truck now leaks one unit of fuel every unit of distance it travels.

 

To repair the truck, the cows need to drive to the nearest town (no more than 1,000,000 units distant) down a long, winding road. On this road, between the town and the current location of the truck, there are N (1 <= N <= 10,000) fuel stops where the cows can stop to acquire additional fuel (1..100 units at each stop).

 

The jungle is a dangerous place for humans and is especially dangerous for cows. Therefore, the cows want to make the minimum possible number of stops for fuel on the way to the town. Fortunately, the capacity of the fuel tank on their truck is so large that there is effectively no limit to the amount of fuel it can hold. The truck is currently L units away from the town and has P units of fuel (1 <= P <= 1,000,000).

 

Determine the minimum number of stops needed to reach the town, or if the cows cannot reach the town at all.

一群奶牛劫了量卡車去叢林探險。可惜不是老司機,偏要趕車上石去作死,最後折了油箱君。現在每行駛一單位路程就會漏一份油。

 

為了修車,這群奶牛需要經過千難萬阻前往最近的城鎮(不超過1,000,000個單位路程)。一路上有N(1 <= N <= 10,000)個加油站可供加油(每個加油站有1..100份的油)。

 

深山老林,人畜皆害。因此,奶牛們希望在去城鎮的路上儘可能少地去加油站。幸運的是,車上用的可是四次元油箱,木有裝油上限。卡車現在離城鎮有L個單位距離,並且有P份的油(1 <= P <= 1,000,000)。

 

找出到達城鎮最少的加油次數,或者這群牛無法抵達城鎮。

 

【Input】

【輸入】

* Line 1: A single integer, N

 

* Lines 2..N+1: Each line contains two space-separated integers describing a fuel stop: The first integer is the distance from the town to the stop; the second is the amount of fuel available at that stop.

 

* Line N+2: Two space-separated integers, L and P

*第1行:一個整數N

 

*第2..N+1行:每行兩個以空格隔開的整數表示一個加油站:第一個整數表示城鎮到加油站距離;第二個表示加油站的油量。

 

*第N+2行:兩個以空格隔開的整數,L和P

 

【Output】

【輸出】

* Line 1: A single integer giving the minimum number of fuel stops necessary to reach the town. If it is not possible to reach the town, output -1.

*第1行:一個整數表示到達城鎮時最少需要的加油站數量。如果無法達到,輸出-1。

 

【Sample Input - 輸入範例】

【Sample Output - 輸出範例】

4

4 4

5 2

11 5

15 10

25 10

2

 

【Hint】

【提示】

INPUT DETAILS:

 

The truck is 25 units away from the town; the truck has 10 units of fuel. Along the road, there are 4 fuel stops at distances 4, 5, 11, and 15 from the town (so these are initially at distances 21, 20, 14, and 10 from the truck). These fuel stops can supply up to 4, 2, 5, and 10 units of fuel, respectively.

 

OUTPUT DETAILS:

 

Drive 10 units, stop to acquire 10 more units of fuel, drive 4 more units, stop to acquire 5 more units of fuel, then drive to the town.

輸入說明:

 

卡車離城鎮25個單位長度,擁有10個單位汽油。一路上有4個加油站分別離城鎮4,5,11和15(因此他們一開始距卡車21,20,14和10)。這些加油站可分別提供4,2,5和10份的汽油。

 

輸出說明:

 

行駛10個單位長度,獲得10份汽油,再行駛4個單位長度,獲得5份汽油,然後前往城鎮。

 

【題解】

因為油箱是無限容量的,油量==可以前進的路程。

所以我們可以把問題轉化一下:

  有多少油就可以走多遠,已經走過的加油站可以隨時隔空加油。

至於怎麼選擇加油站,每次貪心油量最多的加油站就行了。

【代碼 C++】

 1 #include<cstdio> 2 #include <queue> 3 #include <algorithm> 4 std::priority_queue<int, std::vector<int> > fuel; 5 struct Stop{ 6     int fuel, distant; 7 }data[10005]; 8 bool cmp(Stop A, Stop B){ 9     return A.distant < B.distant;10 }11 int main(){12     int i, j, n, L, nowL, opt;13     scanf("%d", &n);14     for (i = 0; i < n; ++i){15         scanf("%d%d", &L, &nowL);16         data[i].distant = -L; data[i].fuel = nowL;17     }18     scanf("%d%d", &L, &nowL);19     for (i = 0; i < n; ++i) data[i].distant += L;20     std::sort(data, data + n, cmp);21 22     for (i = opt = 0; nowL < L; ++opt){23         while (i < n && data[i].distant <= nowL) fuel.push(data[i++].fuel);24         if (fuel.empty()) break;25         nowL += fuel.top(), fuel.pop();26     }27     if (nowL < L) puts("-1");28     else printf("%d", opt);29     return 0;30 }

 

POJ 2431 Expedition(探險)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.