[bzoj1216] [HNOI2003] 운영체제 더미 + 시뮬레이션

4346 단어 bzoj
Description
운영체제의 프로세스 스케줄링을 시뮬레이션하기 위해 프로그램을 작성하세요.이 시스템에 CPU가 한 개만 있다고 가정하면, 모든 프로세스의 도착 시간, 실행 시간과 운행 우선 순위는 이미 알고 있다.그 중에서 운행 우선순위는 자연수로 숫자가 클수록 우선순위가 높다는 것을 나타낸다.프로세스가 도착했을 때 CPU가 비어 있으면 프로세스가 끝날 때까지 CPU를 사용합니다.이 과정에서 우선순위가 높은 프로세스가 실행되지 않는 한이런 상황에서, 이 새로운 (우선순위가 높은) 프로세스는 CPU를 차지하지만, 늙은이는 기다릴 뿐이다.프로세스가 도착했을 때, CPU가 우선순위가 높거나 같은 프로세스를 처리하고 있다면, 이 (새로 도착한) 프로세스는 기다려야 합니다.CPU가 유휴 상태이면 프로세스가 대기 중이면 우선 순위가 가장 높은 먼저 실행을 선택합니다.우선 순위가 가장 높은 프로세스가 여러 개 있으면 가장 먼저 도착하는 것을 선택하십시오.
Input
입력 파일에는 프로세스 번호, 도착 시간, 실행 시간, 우선 순위 등 네 개의 자연 수가 포함되어 있습니다.프로세스마다 번호가 다르기 때문에 같은 우선순위의 두 프로세스가 동시에 도착하지 않습니다.입력 데이터는 도착 시간에 따라 작은 것에서 큰 것으로 정렬되었습니다.대기열의 프로세스가 15000개를 넘지 않도록 데이터를 입력하십시오.
Output
프로세스 종료 시간에 따라 각 프로세스의 프로세스 번호와 종료 시간을 출력합니다
Sample Input
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

Sample Output
1 6

3 19

5 30

6 32

8 34

4 35

7 40

2 42

HINT
Source
아날로그 더미
첫눈:woc 이거 무더기잖아, 시뮬레이션하면 되잖아!그리고 오랜만에... 오랜만에... 이 니마를 어떻게 때려!!
변수 T를 추가하면 현재 시간을 대표하고 치면 됩니다.
코드를 첨부합니다(코드 능력이 학대당한 느낌...):
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;

struct haha{
    int id,st,dot,pri;
    haha(int id=0,int st=0,int dot=0,int pri=0) : id(id),st(st),dot(dot),pri(pri){}
};

bool operator <(haha a,haha b)
{
    if(a.pri!=b.pri) return a.pri<b.pri;
    return a.st>b.st;
}

priority_queue<haha> q;
int T=0;
int main()
{
    int id,st,dot,pri;
    while(~scanf("%d%d%d%d",&id,&st,&dot,&pri))
    {
        while(T<st&&q.size())
        {
            haha x=q.top(); q.pop();
            T=max(T,x.st);
            int d=min(st-T,x.dot);
            x.dot-=d; T+=d;
            if(x.dot) q.push(x);
            else printf("%d %d
"
,x.id,T); } q.push(haha(id,st,dot,pri)); } while(q.size()) { haha x=q.top(); q.pop(); printf("%d %d
"
,x.id,T+=x.dot); } return 0; }

좋은 웹페이지 즐겨찾기