我對模擬的理解:
題目傳送門:
不茲磁多執行緒的系統不是好系統》_<
對於每個程序,我們都記錄下關於它的五個引數:程序號,起始時間,持續時間,終結時間以及優先順序。
按照題意,優先順序越大越應優先執行,同優先順序的比起始時間,用堆來維護已經進來排隊的程序,然後按題意模擬即可。
因為學長說想要\(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,每乙個程序的到達時間,執行時間和執行優先順序都是已知的。其中執行優先順序用...