P2278 HNOI2003 作業系統

2022-05-10 03:22:27 字數 1283 閱讀 3334

寫乙個程式來模擬作業系統的程序排程。假設該系統只有乙個cpu,每乙個程序的到達時間,執行時間和執行優先順序都是已知的。其中執行優先順序用自然數表示,數字越大,則優先順序越高。

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

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

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

輸入格式:

輸入包含若干行,每一行有四個自然數(均不超過10^8),分別是程序號,到達時間,執行時間和優先順序。不同程序有不同的編號,不會有兩個相同優先順序的程序同時到達。輸入資料已經按到達時間從小到大排序。輸入資料保證在任何時候,等待佇列中的程序不超過15000個。

輸出格式:

按照程序結束的時間輸出每個程序的程序號和結束時間。

輸入樣例#1:複製

1 1 5 3 

2 10 5 1

3 12 7 2

4 20 2 3

5 21 9 4

6 22 2 4

7 23 5 2

8 24 2 4

輸出樣例#1:複製

1 6

3 19

5 30

6 32

8 34

4 35

7 40

2 42

直接暴力模擬,沒了(...

由於2需要做到小根堆,所以直接存成相反數

每次新入堆元素前先處理上一入堆時間到本次入堆時間之間的操作,最後統一處理全部入堆後仍未處理的操作

#include#include#includeusing namespace std;

typedef pairpp;

priority_queue> q;

int a[500001][3],u,i,m,n,g,h,t,k;

long long ans;

int main()

else a[k][1]+=n-t,t=n;

}q.push(make_pair(make_pair(h,-n),m));

a[m][2]=g; t=n;

}while(!q.empty())

}

P2278 HNOI2003 作業系統

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

P2278 HNOI2003 作業系統

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

P2278 HNOI2003 作業系統 堆

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