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 在過程中從隊首刪除不符合當前要求的元素。單調佇列實現起...