題意
傳送門 lcp 08
題解暴力
觸發條件要求 c
>=c
[i
]c >= c[i]
c>=c
[i] 且 r
>=r
[i
]r >= r[i]
r>=r
[i] 且 h
>=h
[i
]h >= h[i]
h>=h
[i],則分別處理 c,r
,h
c, r, h
c,r,
h, 對其排序後求各個場景的最小觸發時間,在 3
33 個屬性都滿足觸發的條件下,取最大值。
typedef pair<
int,
int> p;
class
solution
sort
(c.begin()
, c.
end())
;sort
(r.begin()
, r.
end())
;sort
(h.begin()
, h.
end())
;// 求 c, r, h 對應的最小觸發時間
vectorint>
>
time
(n, vector<
int>(3
,-1)
);int c =
0, r =
0, h =0;
int n2 = increase.
size()
, pc =
0, pr =
0, ph =0;
for(
int t =
0; t <= n2; t++
)while
(pr < n && r >= r[pr]
.first)
while
(ph < n && h >= h[ph]
.first)
if(t == n2)
break
; c +
= increase[t][0
], r +
= increase[t][1
], h +
= increase[t][2
];} vector<
int>
res(n)
;for
(int i =
0; i < n; i++
)else
} res[i]
= t;
}return res;}}
;
二分
考慮到 c,r
,h
c, r, h
c,r,
h 的單調不減性,當 t
tt 時刻滿足觸發場景的條件時,t′(
t′
>t)
t'(t'>t)
t′(t
′>t)
時刻一定也滿足觸發條件。預先求得各個時刻的屬性值,對每乙個場景二分答案即可。
class
solution
// 對每乙個 requirement 二分答案
int n2 = requirements.
size()
; vector<
int>
res(n2)
;for
(int i =
0; i < n2; i++
)else lb = mid;
} res[i]
= ub == n +1?
-1: ub;
}return res;}}
;
LCP 08 劇情觸發時間
在戰略遊戲中,玩家往往需要發展自己的勢力來觸發各種新的劇情。乙個勢力的主要屬性有三種,分別是文明等級 c 資源儲備 r 以及人口數量 h 在遊戲開始時 第 0 天 三種屬性的值均為 0。隨著遊戲程序的進行,每一天玩家的三種屬性都會對應增加,我們用乙個二維陣列 increase 來表示每天的增加情況。...
力扣 LCP08劇情觸發時間
題目描述 在戰略遊戲中,玩家往往需要發展自己的勢力來觸發各種新的劇情。乙個勢力的主要屬性有三種,分別是文明等級 c 資源儲備 r 以及人口數量 h 在遊戲開始時 第 0 天 三種屬性的值均為 0。隨著遊戲程序的進行,每一天玩家的三種屬性都會對應增加,我們用乙個二維陣列 increase 來表示每天的...
暴力高階,有序二分暴力
include include includeusing namespace std typedef long long ll const int n 1e5 int a n 100 int f int mid,int n printf mid d num d n mid,num return nu...