建築搶修
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
4100 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部落基地裡只有乙個修理工人,雖然他能瞬間到達任何乙個建築,但是修復每個建...