BZOJ1216 HNOI2003 作業系統

2022-05-12 15:38:11 字數 823 閱讀 7157

我對模擬的理解:

題目傳送門:

不茲磁多執行緒的系統不是好系統》_<

對於每個程序,我們都記錄下關於它的五個引數:程序號,起始時間,持續時間,終結時間以及優先順序。

按照題意,優先順序越大越應優先執行,同優先順序的比起始時間,用堆來維護已經進來排隊的程序,然後按題意模擬即可。

因為學長說想要\(noi\)金牌,堆肯定是要會手寫的,所以我一直都用手寫堆,而且個人覺得\(c++\)的\(stl\)除了\(vector\)以外都可以手動模擬的……

時間複雜度:\(o(n log n)\)

空間複雜度:\(o(n)\)

**如下:

#include #include using namespace std;

const int maxn=350000;

int n=1;

struct ak a[maxn];

bool cmp_ed(ak a,ak b) //判斷x程序是否比y程序優秀

struct heap //將乙個元素插入堆

void pop()

}//從堆頂彈乙個元素出去

}t;int main()

if(t.tot)a[t.tree[1]].lst-=a[i+1].st-a[i].st-sum;//如果做不完當前優先順序最高的程序,那麼在下乙個程序進來之前能做多少是多少

} sort(a+1,a+n,cmp_ed);//按結束時間排序,輸出答案

for(int i=1;iprintf("%d %d\n",a[i].id,a[i].ed);

return 0;

}

bzoj 1216 HNOI2003 作業系統

一開始想的用heap維護一下,但是發現輸出不好搞,而且維護兩個值的heap好像不怎麼會做,然後學習了一發優先佇列,挺好用的,直接模擬就好了,用優先佇列維護一下優先順序和到達時間就好了。include include include include include define fo i,a,b fo...

BZOJ 1216 HNOI2003 作業系統

time limit 10 sec memory limit 162 mb submit 886 solved 492 submit status discuss 寫乙個程式來模擬作業系統的程序排程。假設該系統只有乙個cpu,每乙個程序的到達時間,執行時間和執行優先順序都是已知的。其中執行優先順序用...

bzoj1216 HNOI2003 作業系統

time limit 10 sec memory limit 162 mb submit 751 solved 419 submit status discuss 寫乙個程式來模擬作業系統的程序排程。假設該系統只有乙個cpu,每乙個程序的到達時間,執行時間和執行優先順序都是已知的。其中執行優先順序用...