小剛在玩jsoi提供的乙個稱之為「建築搶修」的電腦遊戲:經過了一場激烈的戰鬥,t部落消滅了所有z部落的入侵者。但是t部落的基地裡已經有n個建築設施受到了嚴重的損傷,如果不盡快修復的話,這些建築設施將會完全 毀壞。
現在的情況是:t部落基地裡只有乙個修理工人,雖然他能瞬間到達任何乙個建築,但是修復每個建築都需要一定的時間。同時,修理工人修理完乙個建築才能修理下乙個建築,不能同時修理多個建築。
如果某個建築在一段時間之內沒有完全修理完畢,這個建築就報廢了。你的任務是幫小剛合理的制訂乙個修理順序,以搶修盡可能多的建築。
輸入描述:
第一行是乙個整數n接下來n行每行兩個整數t1,t2描述乙個建築:修理這個建築需要t1秒,如果在t2秒之內還沒有修理完成,這個建築就報廢了。
輸出描述:
輸出乙個整數s,表示最多可以搶修s個建築.
n < 150,000; t1 < t2 < maxlongint
示例1輸入
4100 200
200 1300
1000 1250
2000 3200輸出3
#include
#define ll long long
using
namespace std;
int n;
struct node
}e[150001];
intmain()
ll sum=0;
int ans=0;
priority_queueq;
sort
(e+1
,e+n+1)
;for
(int i=
1;i<=n;i++
)else
if(q.
top(
)>e[i]
.x)}
cout
}
JSOI2007 建築搶修
提交傳送門 這個就是乙個貪心唄,用set維護大到小的數列 然後如果能搶修乙個建築的話就ans 不能的話,看看比不比上一次搶修的優秀,優秀的話就選它,然後更換 description 小剛在玩jsoi提供的乙個稱之為 建築搶修 的電腦遊戲 經過了一場激烈的戰鬥,t部落消滅了所有z部落的入侵者。但是t部...
JSOI2007 建築搶修
開始以為是按照修建時間短的排序,先把修建時間短的修了。但是這樣顯然有問題,因為可能前面的倒塌時間靠後,你先修了,後面塌的就不能修了。所以要按倒塌時間排序開始修。然後如果當前的建築物來得及修,當然是要修的。這時候我們維護乙個已經修過的建築物的大根堆 優先佇列 如果不能修,看看是否從原先修建過的建築物中...
JSOI2007 建築搶修
各種瞎寫 之後也不知道為什麼就過了 剛看到這道題感覺確實是不會的,因為我貪心太差了 qaq 之後就隨便 yy 唄 發現首先我們得排一下序,以 t2 也就是建築的損壞時間為第一關鍵字從小到大排序 這個還是比較好考慮的,我們得優先照顧一下那些在最開始就會損壞的建築 那之後呢,好像我們現在可以做乙個 dp...