旅行問題(單調佇列優化)

2021-10-23 05:26:53 字數 1788 閱讀 8927

john 打算駕駛一輛汽車周遊乙個環形公路。

公路上總共有 n 個車站,每站都有若干公升汽油(有的站可能油量為零),每公升油可以讓汽車行駛一千公尺。

john 必須從某個車站出發,一直按順時針(或逆時針)方向走遍所有的車站,並回到起點。

在一開始的時候,汽車內油量為零,john 每到乙個車站就把該站所有的油都帶上(起點站亦是如此),行駛過程中不能出現沒有油的情況。

任務:判斷以每個車站為起點能否按條件成功周遊一周。

輸入格式

第一行是乙個整數 n,表示環形公路上的車站數;

接下來 n 行,每行兩個整數 pi,di,分別表示表示第 i 號車站的存油量和第 i 號車站到 順時針方向 下一站的距離。

輸出格式

輸出共 n 行,如果從第 i 號車站出發,一直按順時針(或逆時針)方向行駛,能夠成功周遊一圈,則在第 i 行輸出 tak,否則輸出 nie。

資料範圍

3 ≤n

≤106

3≤n≤106

3≤n≤1060≤

pi≤2

×109

0≤pi≤2×109

0≤pi≤2

×109

0

≤2

×109

00≤2×1

09輸入樣例:

53 1

1 25 2

0 15 4

輸出樣例:

taknie

taknie

tak思路:這道題主要思路還是簡單的, 就是乙個滑動視窗的模型,就是細節太不好處理了,(02小姐姐說每當你以為細節不好處理的時候,那都是你太弱,牢記),說的細節就是邊界問題,在心中一定要有確定的思路,每個數字的含義代表這什麼一定要弄明白,每個人的心裡都應該有一種邊界問題的處理方法, 要在心中牢記!

兩個數字相減得到的結果的含義是什麼, 比如, 5 - 2 = 3 代表著5 和3 之間有著2 個數字, 要在心中有乙個模型, 每次遇到問題的時候吧模型在腦海中想象, 劃分成不同的顏色, 每個代表著什麼, 3 代表著從 1 到 3 有 3個數字, 還有模數的世界是從0 開始的。要將從1開始 的數字對映到從0開始只需減1,應該就是這樣了。嗯

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int n =

2e6+10;

ll s[n]

;int d[n]

, o[n]

, q[n]

;bool ans[n]

;int

main()

} d[0]

= d[n]

;for

(int i =

1; i <= n; i ++

) s[i]

= s[i + n]

= o[i]

- d[i -1]

;for

(int i =

2* n; i >=

1; i --

) s[i]

+= s[i +1]

; tt =-1

, hh =0;

for(

int i =

2* n; i >=

1; i --)}

for(

int i =

1; i <= n; i ++

)return0;

}

單調佇列優化DP 旅行問題

john 打算駕駛一輛汽車周遊乙個環形公路。公路上總共有 n 個車站,每站都有若干公升汽油 有的站可能油量為零 每公升油可以讓汽車行駛一千公尺。john 必須從某個車站出發,一直按順時針 或逆時針 方向走遍所有的車站,並回到起點。在一開始的時候,汽車內油量為零,john 每到乙個車站就把該站所有的油...

單調佇列 旅行問題

描述 john 打算駕駛一輛汽車周遊乙個環形公路。公路上總共有 n 車站,每站都有若干公升汽油 有的站可能油量為零 每公升油可以讓汽車行駛一千公尺。john 必須從某個車站出發,一直按順時針 或逆時針 方向走遍所有的車站,並回到起點。在一開始的時候,汽車內油量為零,john 每到乙個車站就把該站所有...

單調佇列優化

單調佇列是一種嚴格單調的佇列,可以單調遞增,也可以單調遞減。隊首位置儲存的是最優解,第二個位置儲存的是次優解。單調佇列可以有兩個操作 1 插入乙個新的元素,該元素從隊尾開始向隊首進行搜尋,找到合適的位置插入之,如果該位置原本有元素,則替換它。2 在過程中從隊首刪除不符合當前要求的元素。單調佇列實現起...