【洛谷】【堆+模拟】P2278 操作系统
from HNOI2003
【题目描述:】
写一个程序来模拟操作系统的进程调度。假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的。其中运行优先级用自然数表示,数字越大,则优先级越高。
如果一个进程到达的时候CPU是空闲的,则它会一直占用CPU直到该进程结束。除非在这个过程中,有一个比它优先级高的进程要运行。在这种情况下,这个新的(优先级更高的)进程会占用CPU,而老的只有等待。
如果一个进程到达时,CPU正在处理一个比它优先级高或优先级相同的进程,则这个(新到达的)进程必须等待。
一旦CPU空闲,如果此时有进程在等待,则选择优先级最高的先运行。如果有多个优先级最高的进程,则选择到达时间最早的。
【输入格式:】
输入包含若干行,每一行有四个自然数(均不超过10^8),分别是进程号,到达时间,执行时间和优先级。不同进程有不同的编号,不会有两个相同优先级的进程同时到达。输入数据已经按到达时间从小到大排序。输入数据保证在任何时候,等待队列中的进程不超过15000个。
【输出格式:】
按照进程结束的时间输出每个进程的进程号和结束时间。
输入样例#: 输出样例#:
输入输出样例
【算法分析:】
对于一个新加入的进程a,将它与正在进行的进程b比较
- 如果现在的时间加上完成b所要花费的时间比a到达的时间早,先完成b再处理a并输出b
- 如果a到达的时候b还在运行,且a的优先级大于b的优先级,立刻停止b的运行,并开始运行a
这时b已经运行了一段时间,所以进程b花费的时间会减少
开一个以优先级为第一关键字、到达时间为第二关键字的大根堆(类型为结构体类型:Process)
将每一个被强制退出的进程(例如2.情况下的b)push到这个堆里,并且每一次都取出堆顶元素与新来的进程a比较
重复上面的过程直至没有新来的进程.
这时堆里的元素已经按照规则排好序,再每次取出堆顶元素输出即可
【代码:】
//[HNOI2003]操作系统
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std; const int MAXN = + ; struct Process {
int num, arrive, cost, value;
bool operator < (const Process &o) const {
if(value != o.value) return value < o.value;
return arrive > o.arrive;
}
}a[MAXN]; int time;
priority_queue<Process> q; int main() {
int x = ;
while(scanf("%d%d%d%d", &a[x].num, &a[x].arrive, &a[x].cost, &a[x].value) == ) {
++x;
}
x--;
for(int i = ; i <= x; i++) {
while(!q.empty()) {
Process ext = q.top();
q.pop();
if(time + ext.cost <= a[i].arrive) {
time += ext.cost;
printf("%d %d\n", ext.num, time);
}
else {
ext.cost -= (a[i].arrive - time);
time = a[i].arrive;
q.push(ext);
break;
}
}
q.push(a[i]);
time = a[i].arrive;
}
while(!q.empty()) {
Process ext = q.top();
q.pop();
time += ext.cost;
printf("%d %d\n", ext.num, time);
}
}
【洛谷】【堆+模拟】P2278 操作系统的更多相关文章
- 洛谷mNOIP模拟赛Day1-斐波那契
题目背景 大样例下发链接:http://pan.baidu.com/s/1c0LbQ2 密码:jigg 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家 ...
- 20171028洛谷NOIP模拟
传送门 题目分析: A:对一个初始值全部为0的序列进行一系列的区间修改(加)和询问(某一区间中满足\(min \le a_i * i \% mod \le max\)的元素个数). 第一眼看第一题怎么 ...
- 洛谷mNOIP模拟赛Day2-星空
题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 命运偷走如果只留下结果, 时间偷走初衷只留下了苦衷. 你来过,然后你走后,只留下星空. ...
- 洛谷mNOIP模拟赛Day1-分组
传送门 首先是贪心的思路 从后向前选,能多选就多选, 理由:数字越少肯定越优,同时间隔尽量向前推,字典序尽量小 对于K==1,枚举1~512直接判断 对于K==2,需要用镜像并查集,来刻画" ...
- 洛谷mNOIP模拟赛Day2-将军令
题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 历史/落在/赢家/之手 至少/我们/拥有/传说 谁说/败者/无法/不朽 拳头/只能/让人 ...
- 洛谷mNOIP模拟赛Day2-入阵曲
题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 题目描述 小 F 很喜欢数学,但是到 ...
- 洛谷mNOIP模拟赛Day1-数颜色
传送门 题目大意: 给定一个序列,维护每个数字在[L,R]出现的次数以及交换a[x]和a[x+1]的操作 一开始想的分桶法,感觉复杂度还可以吧,常数有点大,于是死得很惨(65分) #include&l ...
- 【洛谷mNOIP模拟赛Day1】T1 斐波那契
题目传送门:https://www.luogu.org/problemnew/show/P3938 这题出得特别吼啊~~ 通过打表或者大胆猜想斐波那契数列的一些性质,我们不难发现对于一只兔子$x$,其 ...
- 洛谷noip 模拟赛 day1 T1
T7925 剪纸 题目描述 小芳有一张nnn*mmm的长方形纸片.每次小芳将会从这个纸片里面剪去一个最大的正方形纸片,直到全部剪完(剩下一个正方形)为止. 小芳总共能得到多少片正方形纸片? 输入输出格 ...
- 洛谷noip 模拟赛 day1 T3
T7983 大芳的逆行板载 题目背景 大芳有一个不太好的习惯:在车里养青蛙.青蛙在一个n厘米(11n毫米s)的Van♂杆子上跳来跳去.她时常盯着青蛙看,以至于突然逆行不得不开始躲交叉弹.有一天他突发奇 ...
随机推荐
- MySQL6:视图
什么是视图 数据库中的视图是一个虚拟表.视图是从一个或者多个表中导出的表,视图的行为与表非常相似,在视图中用户可以使用SELECT语句查询数据,以及使用INSERT.UPDATE和DELETE修改记录 ...
- Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务
在连接数据库的时候,有时会遇到一个“ORA12514:监听程序当前无法识别连接描述符中请求的服务”的错误,这个错误其实就是数据库动态注册(关于动态注册会在稍后讲解)不生效,导致监听器无法识别客户端连接 ...
- align-items (适用于父类容器上)
align-items (适用于父类容器上) 设置或检索弹性盒子元素在侧轴(纵轴)方向上的对齐方式. 语法 align-items: flex-start | flex-end | center | ...
- BZOJ4566: [Haoi2016]找相同字符(后缀自动机)
题意 题目链接 Sol 直接在SAM上乱搞 枚举前缀,用SAM统计可以匹配的后缀,具体在匹配的时候维护和当前节点能匹配的最大值 然后再把parent树上的点的贡献也统计上,这部分可以爆跳parent树 ...
- 【代码笔记】iOS-自动成表格的效果
一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> #import "LabelOnBackImag ...
- SSRS 报表开发小技巧
说明: 开发工具为: SQL Server Data Tools (英文版) 开发环境为: SQL Server 2012 (英文版) 一. 饼图数据外部显示 首先我们来看3张效果图: 内部 ...
- Python之dict和set
dict Python内置了字典:dict的支持,dict全称dictionary,使用键-值(key-value)存储,具有极快的查找速度 1.例如:查找某位同学对应的成绩,使用“名字”-“成绩”的 ...
- elixir case cond if
case 允许我们对很多模式的值进行比较 直到找到匹配的 -->不要想成 switch case iex(58)> x = 11iex(59)> case 10 do...(59) ...
- How to work with the snap environment
How to work with the snap environment SummaryThe snap environment manages snap agents and snap toler ...
- 实现自定义Session
1. 回话状态接口 /// <summary> /// 会话状态策略接口 /// </summary> public partial interface ISessionStr ...