• P2278 [HNOI2003]操作系统


    链接:Miku

    ---------------------------------

    一道巨大的模拟,因为每次都是从第一个开始干并且有顺序,那么就该用优先队列了

    顺序问题只要重载一下运算符即可

    --------------------------------------

    CPU的任务如果干了一部分后被踢出去了,又轮到它的时候它会接着干而不是从头开始

    -----------------------------------------

    #include<iostream>
    #include<cstdio> 
    #include<algorithm>
    #include<queue>
    using namespace std;
    long long num,at,rt,l;
    //编号,到达时间,运行时间,级别 
    struct task{
        long long l;
        long long num;
        long long at;
        long long rt;
        long long al;//已经完成部分 
        friend bool operator < (task a,task b){
            if(a.l==b.l){
                return a.at>b.at;
            }
            return a.l<b.l;
        }
    } now,last;
    long long lt,nt;//上一个程序处理到的时候,目前已处理时间长度 
    priority_queue <task>q;
    int main(){
        while(scanf("%d%d%d%d",&now.num,&now.at,&now.rt,&now.l)!=EOF){
            if(q.empty()){
                q.push(now);
                lt=now.at;
                continue;
            }else{
                while(!q.empty()){//可能间距过大,可以处理一堆 
                last=q.top();
                q.pop();
                nt=now.at-lt;
                if(nt+last.al>=last.rt){//可用时间超过所需时间 
                    cout<<last.num<<" "<<lt-last.al+last.rt<<endl;//那肯定干完了 
                    lt=lt-last.al+last.rt;//下一程序开始时间 
                }else{
                    last.al+=nt;//把已完成部分记录 
                    q.push(last);//重新进入队列(毕竟At没改,顺序不变) 
                    break;
                }
                }
            lt=now.at;
            }
            q.push(now);
        }
        while(!q.empty()){//处理剩下的 
            now=q.top();
            q.pop();
            cout<<now.num<<" "<<lt+now.rt-now.al<<endl;
            lt=lt+now.rt-now.al;
        }
        return 0;
    }
    Ac
     
  • 相关阅读:
    C# 调试
    C#添加资源的两种方式
    C# 光标文件的创建
    窗体初始位置
    C# 实现关闭按钮隐藏窗体而不退出
    mac ssd开启trim模式
    iOS打包上传app store各种问题解决总结
    adhoc无法下载应用程序 此时无法安装-解决
    debug1: expecting SSH2_MSG_KEX_ECDH_REPLY解决
    Could not load OpenSSL解决
  • 原文地址:https://www.cnblogs.com/For-Miku/p/13353538.html
Copyright © 2020-2023  润新知