題目描述
寫乙個程式來模擬作業系統的程序排程。假設該系統只有乙個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
這個題目,就是我們維護乙個小根堆。注意好過載優先佇列運算子,這是最關鍵的地方。然後我們如果發現優先佇列的頭的結束時間比下乙個要早,那我們就直接pop出來,輸出。否則就減一下,彈出來後重新push進去
**如下:
#include
#include
using namespace std;
struct dqs
tmp;
int n,t,a,b,c,d;
priority_queueq;
bool operator < (dqs a,dqs b)
int main()
else
} tmp.yxj=d;
tmp.num=a;
tmp.tim=c;
q.push(tmp);
t=b;
} while(!q.empty())
return
0;
}
HNOI2003 作業系統 洛谷p2278
寫乙個程式來模擬作業系統的程序排程。假設該系統只有乙個cpu,每乙個程序的到達時間,執行時間和執行優先順序都是已知的。其中執行優先順序用自然數表示,數字越大,則優先順序越高。如果乙個程序到達的時候cpu是空閒的,則它會一直占用cpu直到該程序結束。除非在這個過程中,有乙個比它優先順序高的程序要執行。...
洛谷P2278 作業系統
這個題忘了判斷在新加程序之前能完成多個程序的可能性了,所以wa了半天,直到看到學長的題解 include include include include using namespace std struct in 以優先順序作為第一關鍵字,編號作為第二關鍵字,做乙個大根堆 priority queu...
洛谷 P2278 HNOI2003 作業系統
寫乙個程式來模擬作業系統的程序排程。假設該系統只有乙個cpu,每乙個程序的到達時間,執行時間和執行優先順序都是已知的。其中執行優先順序用自然數表示,數字越大,則優先順序越高。如果乙個程序到達的時候cpu是空閒的,則它會一直占用cpu直到該程序結束。除非在這個過程中,有乙個比它優先順序高的程序要執行。...