描述 john 打算駕駛一輛汽車周遊乙個環形公路。公路上總共有 n樣例輸入車站,每站都有若干公升汽油(有的站可能油量為零),每公升油可以讓汽車行駛一千公尺。john
必須從某個車站出發,一直按順時針(或逆時針)方向走遍所有的車站,並回到起點。在一開始的時候,汽車內油量為零,john
每到乙個車站就把該站所有的油都帶上(起點站亦是如此),行駛過程中不能出現沒有油的情況。
任務:判斷以每個車站為起點能否按條件成功周遊一周。
輸入 第一行是乙個整數 n ,表示環形公路上的車站數;
接下來 n 行,每行兩個整數 pi,dipi,di,分別表示表示第 ii 號車站的存油量和第ii號車站到下一站的距離。
輸出 輸出共 n 行,如果從第 i 號車站出發,一直按順時針(或逆時針)方向行駛,能夠成功周遊一圈,則在第 iii 行輸出 tak,否則輸出
nie。
53 1
1 25 2
0 15 4
樣例輸出
taknie
taknie
tak提示
對於全部資料,3≤n≤1e6,0≤pi≤2×1e9,0分析:
典型的單調佇列題,拆環為鏈,並複製一遍
將點權和邊權相減得到乙個a陣列,並對其求字首和,則乙個位置上乙個位置的字首和若大於這個位置及其後面n個位置中任意乙個字首和的話這個位置就不可行
則問題轉化為快速判斷一列數中的最小值,直接上st表
另外本題還有單調佇列做法:
**(單調佇列):
#include
using
namespace std;
typedef
long
long ll;
const
int n=
2000005
;const
int inf=
0x7ffff
;int n,m;
ll ans[n]
,pos[n]
,f[n]
,sum[n]
,p[n]
,d[n]
;deque <
int> q;
inline
void
check()
}int
main()
check()
;for
(int i=
1;i<=n;
++i)
return0;
}
旅行問題(單調佇列優化)
john 打算駕駛一輛汽車周遊乙個環形公路。公路上總共有 n 個車站,每站都有若干公升汽油 有的站可能油量為零 每公升油可以讓汽車行駛一千公尺。john 必須從某個車站出發,一直按順時針 或逆時針 方向走遍所有的車站,並回到起點。在一開始的時候,汽車內油量為零,john 每到乙個車站就把該站所有的油...
單調佇列優化DP 旅行問題
john 打算駕駛一輛汽車周遊乙個環形公路。公路上總共有 n 個車站,每站都有若干公升汽油 有的站可能油量為零 每公升油可以讓汽車行駛一千公尺。john 必須從某個車站出發,一直按順時針 或逆時針 方向走遍所有的車站,並回到起點。在一開始的時候,汽車內油量為零,john 每到乙個車站就把該站所有的油...
AcWing1088 旅行問題 單調佇列DP
題目傳送門 john 打算駕駛一輛汽車周遊乙個環形公路。公路上總共有 n 個車站,每站都有若干公升汽油 有的站可能油量為零 每公升油可以讓汽車行駛一千公尺。john 必須從某個車站出發,一直按順時針 或逆時針 方向走遍所有的車站,並回到起點。在一開始的時候,汽車內油量為零,john 每到乙個車站就把...