bzoj1029 JSOI2007 建築搶修

2021-08-15 16:52:28 字數 1261 閱讀 8502

description

小剛在玩jsoi提供的乙個稱之為「建築搶修」的電腦遊戲:經過了一場激烈的戰鬥,t部落消滅了所有z部落的

入侵者。但是t部落的基地裡已經有n個建築設施受到了嚴重的損傷,如果不盡快修復的話,這些建築設施將會完全

毀壞。現在的情況是:t部落基地裡只有乙個修理工人,雖然他能瞬間到達任何乙個建築,但是修復每個建築都需

要一定的時間。同時,修理工人修理完乙個建築才能修理下乙個建築,不能同時修理多個建築。如果某個建築在一

段時間之內沒有完全修理完畢,這個建築就報廢了。你的任務是幫小剛合理的制訂乙個修理順序,以搶修盡可能多

的建築。

input

第一行是乙個整數n接下來n行每行兩個整數t1,t2描述乙個建築:修理這個建築需要t1秒,如果在t2秒之內還

沒有修理完成,這個建築就報廢了。

output

輸出乙個整數s,表示最多可以搶修s個建築.n < 150,000; t1 < t2 < maxlongint

sample input

4 100 200

200 1300

1000 1250

2000 3200

sample output

3 考慮和下午寫的那題相似 我維護乙個大根堆 並且按照我結束時間排序 每次做的時候按照結束時間掃過去 然後記錄乙個我上一次做到的那個時間 如果我這一次修理超過我的結束時間那麼我就看一看我之前修理過的有沒有耗時特別大的 如果比我這次修理時間還大 那就把上次刪除 加入這次 為什麼可以這樣 因為我可以看作把上次刪除了之後把其他的修理時間都往前平移了 因為根據規定我在佇列裡的都是確切可以修理的 那麼往前平移也就沒什麼問題了

我最近經常sb了 調試樣例的**忘記刪除 wa一片qwq 前面那題:bzoj1572

#include

#include

#include

#define n 165000

using

namespace

std;

inline

char gc()

return *s++;

}inline

int read()

while(ch<='9'&&ch>='0') x=x*10+ch-'0',ch=gc();

return x*f;

}struct noded[n];

inline

bool cmp(const node &a,const node &b)

bzoj1029 JSOI2007 建築搶修

傳送門 貪心顯然。1.按照最後時限排序,暴力插入。但是顯然會錯。10 10 10 20 2 21 2 21 2 21 答案是2,但是顯然最優的是4 於是考慮改進。2.在無法修理時我們可以放棄花費時間最長的工作。明顯花費時間最長的工作時間大於當前工作是修改更優。我們可以用乙個大根堆實現。然後就通過了。...

bzoj1029 JSOI2007 建築搶修

time limit 4 sec memory limit 162 mb submit 4807 solved 2157 submit status discuss 小剛在玩jsoi提供的乙個稱之為 建築搶修 的電腦遊戲 經過了一場激烈的戰鬥,t部落消滅了所有z部落的 入侵者。但是t部落的基地裡已經...

BZOJ 1029 JSOI2007 建築搶修

題目鏈結 題意 題解 按照t2公升序排 順序列舉每乙個建築 如果當前建築能夠修理 則修理它 並將它的t1值加入到堆中 然後累加當前所用的時間now 如果加了這個t1之後會大於t2則這個建築沒辦法修理 則在堆裡面去找 看看有沒有比t1大的值 如果有的話,就改修這個建築 而那個建築不修了 這樣雖然不能增...