zoukankan      html  css  js  c++  java
  • 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
     
  • 相关阅读:
    【转】linux root用户ifconfig报command not found
    xp系统word2007升级到2010.若失败,可向以下几个方向考虑
    ORACLE 检查数据库表中是否存在不规范字 段的语句参考.sql
    oracle关于分区相关操作
    表大小查看
    【收藏】表分区
    【收藏】Linux下tomcat内存配置
    oracle分页
    首测!阿里云盘终于来了,扫码获取邀请码
    MYSQL 删除表中重复数据
  • 原文地址:https://www.cnblogs.com/For-Miku/p/13353538.html
Copyright © 2011-2022 走看看