P2278 HNOI2003 作業系統 堆

2021-08-19 21:02:34 字數 805 閱讀 9721

有若干個程序,每個程序有優先順序,執行時間,放入時間。

如果乙個程序到達的時候cpu是空閒的,則它會一直占用cpu直到該程序結束。除非在這個過程中,有乙個比它優先順序高的程序要執行。在這種情況下,這個新的(優先順序更高的)程序會占用cpu,而老的只有等待。

如果乙個程序到達時,cpu正在處理乙個比它優先順序高或優先順序相同的程序,則這個(新到達的)程序必須等待。

一旦cpu空閒,如果此時有程序在等待,則選擇優先順序最高的先執行。如果有多個優先順序最高的程序,則選擇到達時間最早的。

維護乙個堆,然後在放入程式時做處理:

如果可以執行完當前程式就執行,之後就打斷當前執行程式。

所有程式插入完之後,按順序模擬就好了。

#include#includeusing namespace std;

struct exea[15001],k[15001];

int num,n,now,tot,nn,rt,ls,an;

void up1(int x)

}//維護

void down1(int x)

}//維護

int main()

if (num>0 && rt-now>0)//打斷

a[1].longs-=rt-now;

a[++num].ans=an;a[num].number=nn;//放入cpu

a[num].rtime=rt;a[num].longs=ls;

up1(num);

now=rt;

}while (num)//模擬剩下的

}

P2278 HNOI2003 作業系統

寫乙個程式來模擬作業系統的程序排程。假設該系統只有乙個cpu,每乙個程序的到達時間,執行時間和執行優先順序都是已知的。其中執行優先順序用自然數表示,數字越大,則優先順序越高。如果乙個程序到達的時候cpu是空閒的,則它會一直占用cpu直到該程序結束。除非在這個過程中,有乙個比它優先順序高的程序要執行。...

P2278 HNOI2003 作業系統

一道巨大的模擬,因為每次都是從第乙個開始幹並且有順序,那麼就該用優先佇列了 順序問題只要過載一下運算子即可 cpu的任務如果幹了一部分後被踢出去了,又輪到它的時候它會接著乾而不是從頭開始 include include include include using namespace std long...

P2278 HNOI2003 作業系統

寫乙個程式來模擬作業系統的程序排程。假設該系統只有乙個cpu,每乙個程序的到達時間,執行時間和執行優先順序都是已知的。其中執行優先順序用自然數表示,數字越大,則優先順序越高。如果乙個程序到達的時候cpu是空閒的,則它會一直占用cpu直到該程序結束。除非在這個過程中,有乙個比它優先順序高的程序要執行。...