当前位置: 首页 > news >正文

P2278 HNOI2003 操作系统

题目
首先根据题目,我们肯定是要将结点按照优先级和先后到达顺序进行排序


struct node{int id;int beg;int ti;int rank;bool operator<(node n1)const{if(rank==n1.rank){return beg>n1.beg;}else{return rank<n1.rank;}}
};

我们可以每次在存放下一个结点之前先对之前的结点进行处理,将队列里第一个结点拿出来,先判断当前时间是否到达队顶结点的开始时间,如果到达了化,我们就对队列里第一个结点进行处理,将他的处理时间减去我们可以处理的时间(处理时间为当前时间到达存放下一个结点开始时间的这段时间段和当前结点处理时间的剩余值,两者的最小值),之后再将当前时间加上处理时间,如果当前结点处理时间不为0了化,再将他处理后的结点重新放入队列中
最后,对队列里的剩余结点再进行处理

#include<iostream>
#include<string>
#include<algorithm>
#include<queue>
using namespace std;struct node{int id;int beg;int ti;int rank;bool operator<(node n1)const{if(rank==n1.rank){return beg>n1.beg;}else{return rank<n1.rank;}}
};
int n;priority_queue<node>q;
int now;int main(void){int id,beg,ti,rank;while(cin>>id){cin>>beg>>ti>>rank;while(now<beg&&q.empty()==false){node p=q.top();q.pop();now=max(now,p.beg);int tmp=min(p.ti,beg-now);p.ti=p.ti-tmp;now+=tmp;if(p.ti==0){cout<<p.id<<" "<<now<<endl;}else{q.push(p);}}q.push({id,beg,ti,rank});}while(q.empty()==false){node p=q.top();q.pop();now=max(now,p.beg);now+=p.ti;cout<<p.id<<" "<<now<<endl;}}   

相关文章:

  • 【Python3教程】Python3基础篇之OS文件目录方法
  • 通过阿里云服务发送邮件
  • 【Python-Day 19】函数的回响:深入理解 `return` 语句与返回值
  • [网页五子棋][匹配模块]服务器开发、用户管理器(创建匹配请求/响应对象、处理连接成功、处理下线)
  • 腾讯混元开源语音数字人模型 HunyuanVideo-Avatar:开启数字人 “能说会唱” 新时代
  • 异步上传石墨文件进度条前端展示记录(采用Redis中String数据结构实现)
  • 探寻黄金奶源带,悠纯乳业打造西北乳业新标杆
  • shell编程之sed命令详解
  • 数据安全进阶:102页数据安全评估方案精讲【附全文阅读】
  • SAP学习笔记 - 开发14 - 前端Fiori开发 HelloWorld
  • Python中的跨域资源共享(CORS)处理
  • 电容层析成像TSVD算法
  • 简述多路复用与多路分解
  • 同一机器下通过HTTP域名访问其他服务器进程返回504问题记录
  • 如何查询服务器的端口号
  • Python教程(七)——错误和异常
  • java操作服务器文件(把解析过的文件迁移到历史文件夹地下)
  • Linux中的权限概念
  • CS144 - LAB0
  • LINUX528 重定向
  • 博彩网站做维护/南京seo网站优化
  • wordpress快站 独立Ip/可以免费推广的平台
  • 口碑好的网站建设公司/大型门户网站建设
  • 医院网站建设的特点/学历提升哪个教育机构好一些
  • 营销网站四大要素/逆冬seo
  • 教做幼儿菜谱菜的网站/大数据培训班需要多少钱