LCP 08 暴力 二分

2021-10-05 05:15:26 字數 1933 閱讀 2824

題意

傳送門 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...