牛客数据结构优先队列训练题 操作系统

26 篇文章 0 订阅
20 篇文章 0 订阅

牛客数据结构优先队列训练题 操作系统

啊啊,明明一道极其简单的训练题,我想得太复杂了!!!!

不说了直接上代码,就是模拟没什么好说的

#include <bits/stdc++.h>
using namespace std;
int a,b,c,d,lastend=0;
struct pro{
    int id=0,at=0,ti=0,pri=0;
    bool operator < (const pro&x)const{
        if(pri!=x.pri)
            return pri<x.pri; //先按优先级排序,优先级的大根堆
        return at>x.at;//再按时间先后排序,入队时间的小根堆(并不是真正的小根堆哈)
    }
}cpu;
priority_queue <pro> Q;
int main()
{
    while (~scanf("%d %d %d %d",&a,&b,&c,&d)){
        while (!Q.empty()){
            cpu=Q.top();
            Q.pop();
            lastend=max(lastend,cpu.at);//每次找到最后面的时间点开始
            if(lastend+cpu.ti<=b){
                lastend+=cpu.ti;
                printf("%d %d\n",cpu.id,lastend);
            }
            else{
                cpu.ti-=(b-lastend);//根本不需要再判断优先级,每次取出的就是优先级最大的
                Q.push(cpu);
                break;
            }
        }
        pro x;
        x.id=a,x.at=b,x.ti=c,x.pri=d;
        Q.push(x);
        lastend=max(lastend,b);//每次找到最后面的时间点开始
    }
    while (!Q.empty()){//最后把优先队列清空即可
        pro cpu=Q.top();
        Q.pop();
        lastend=max(lastend,cpu.at);//每次找到最后面的时间点开始
        lastend+=cpu.ti;
        printf("%d %d\n",cpu.id,lastend);
    }
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值