NKOI 2375 建築搶修

2021-07-15 17:29:00 字數 1367 閱讀 8194

建築搶修

time limit:10000ms  memory limit:65536k

total submit:24 accepted:15 

case time limit:1000ms

description

機關城內只有hy乙個修理工,雖然他能瞬間到達任何乙個建築,但是修復每個建築都需要一定的時間。同時,hy修理完乙個建築才能修理下乙個建築,不能同時修理多個建築。如果某個建築在一段時間之內沒有完全修理完畢,這個建築就報廢了。 

hy忙於四處修理建築,無暇進行計算,所以他希望你可以告訴他他最多可以搶修多少個建築。

input

第一行是乙個整數n, 

接下來n行每行兩個整數t1,t2描述乙個建築:修理這個建築需要t1秒,如果在t2秒之內還沒有修理完成,這個建築就報廢了。

output

輸出乙個整數s,表示最多可以搶修s個建築。

sample input

4

100 200

200 1300

1000 1250

2000 3200

sample output

3

hint

n<150000,t1

source

hzoi

首先我們應該想到,對於每乙個建築,我們應該在他快要到達時間限制的時候再去修復它,這樣一定能夠修復到最多的建築,並且要選的一定是時間盡量少的,因此這是乙個貪心

為了方便討論我們先將建築按照t2排序之後,列舉每乙個建築

維護乙個大根堆,每次有乙個建築無法修復時,就將其和堆頂元素調換位置,否則就將其直接推進堆中

#include#include#include#includeusing namespace std;

const int maxn=150005;

int n;

inline void _read(int &x)

for(x=0;t>='0'&&t<='9';t=getchar())x=x*10+t-'0';

if(!sign)x=-x;

} struct wrs[maxn];

bool cmp(wr a,wr b)

sort(s+1,s+1+n,cmp);

for(i=1;i<=n;i++)

if(time+s[i].t1<=s[i].t2)

else if(q.size()&&q.top()>s[i].t1)

cout<

堆 建築搶修nkoj2375

建築搶修 time limit 10000ms memory limit 65536k case time limit 1000ms description 機關城內只有hy乙個修理工,雖然他能瞬間到達任何乙個建築,但是修復每個建築都需要一定的時間。同時,hy修理完乙個建築才能修理下乙個建築,不能同...

JSOI2007 建築搶修

提交傳送門 這個就是乙個貪心唄,用set維護大到小的數列 然後如果能搶修乙個建築的話就ans 不能的話,看看比不比上一次搶修的優秀,優秀的話就選它,然後更換 description 小剛在玩jsoi提供的乙個稱之為 建築搶修 的電腦遊戲 經過了一場激烈的戰鬥,t部落消滅了所有z部落的入侵者。但是t部...

JSOI2007 建築搶修

小剛在玩jsoi提供的乙個稱之為 建築搶修 的電腦遊戲 經過了一場激烈的戰鬥,t部落消滅了所有z部落的入侵者。但是t部落的基地裡已經有n個建築設施受到了嚴重的損傷,如果不盡快修復的話,這些建築設施將會完全 毀壞。現在的情況是 t部落基地裡只有乙個修理工人,雖然他能瞬間到達任何乙個建築,但是修復每個建...