題目傳送門
【題目大意】
卡車要去往距離起點為$l$的城鎮,出發時有$p$公升汽油,每經過一單位距離消耗一公升汽油,從起點到城鎮的路上有$n$個加油站,油箱可以容納無窮多的油,求最少要在多少個加油站加油才能順利到達城鎮。
【思路分析】
用乙個單調佇列儲存加油站資訊,按照汽油從大到小排序,每經過乙個加油站就把它加入佇列,如果當前油箱裡的汽油不夠到下乙個加油站了,那就取出隊頭,更新各項資訊,相當於在那個加油站加了油,細節見**。
【**實現】
1 #include2 #include3 #include4 #include5 #include6 #include7**戳這裡#define g() getchar()
8#define rg register
9#define go(i,a,b) for(rg int i=a;i<=b;i++)
10#define back(i,a,b) for(rg int i=a;i>=b;i--)
11#define db double
12#define ll long long
13#define il inline
14#define pf printf
15using
namespace
std;
16int
fr()
23while(ch>='
0'&&ch<='
9') w=(w<<1)+(w<<3)+ch-'
0',ch=g();
24return w*q;25}
26const
int n=10002;27
intn,l,p;
28 priority_queueq;
29struct
stopa[n];
32 il bool
cmp(stop x,stop y)
35int
main()//
如果隊列為空則不可能到達
51 ans++;
52 now+=q.top();q.pop();//
加油53
}54 now-=d;q.push(a[i].sum);pos=a[i].dis;55}
56 pf("
%d\n
",ans);
57return0;
58 }
POJ 2431(優先佇列)
題意 從起點到終點距離為n,走1單位路程消耗1單位油,路上會有m個加油站分別出現在si的位置,路過加油站時可以選擇是否加油。問到達加油站最少需要加幾次油,不能到輸出 1.分析 整體上來看,汽車每經過乙個加油站就擁有了在這個加油站加油的能力,可以將加油站加入優先佇列,沒油時優先選取大的。收穫 路過即獲...
復健運動poj2431
題目大意 一頭牛從起點到終點,最開始有p公升油,每走一公里漏一公升油,路途上有許多加油點,油箱容量為無窮大,求能到終點的最小加油次數。挑戰程式設計競賽 建議首先處理輸入資料,使之成為到起點的距離。優先佇列練習 用優先佇列儲存路過的加油點的油。每次取用最大值,這樣會使加油次數儘量減少。每取出一次就an...
POJ2431 探險 解題報告
問題描述 一群奶牛搶了一輛卡車決定前往樹林裡探險。但是由於他們的駕駛技術太糟,油箱在路上弄破了,所以他們每前進乙個單位的路程就會漏掉乙個單位的油。為了修好油箱,奶牛們必須前往最近的城市 不會超過1000000單位路程 在當前位置和城市之間有n個加油站,奶牛可以在加油站加1到100單位的油。對於人來說...