「Luogu P2278」[HNOI2003]操作系统 解题报告
题面
一道模拟题,模拟CPU的处理过程?!省选模拟题
思路:
模拟退火大法+优先队列乱搞
要注意的点
1、空闲时,CPU要处理进程
2、当队列中没有进程时,要先进行判断,然后访问
3、当优先级高的进程替换掉原进程时,原进程已经处理过的时间要减去
4、结束进程时要更新后面进程的时间
既然是模拟题,那就不讲具体了h^ovny:我懒
Code:
#include<bits/stdc++.h>
using namespace std;
struct node{
int i,S,l,p;
node(int a,int b,int c,int d):i(a),S(b),l(c),p(d){ }
node(){ }
bool operator<(const node X) const{//重载
if(p!=X.p)
return p<X.p;
return S>X.S;
}
}Now,cur;//Now表示当前处理的进程
int i,S,l,p;
priority_queue<node>P;
int main()
{
int i;
scanf("%d%d%d%d",&i,&S,&l,&p);//预先读入一组
Now=node(i,S,l,p);
while(~scanf("%d%d%d%d",&i,&S,&l,&p))
{
while(Now.S+Now.l<=S&&!P.empty())//中间空闲时间先处理掉
{
printf("%d %d\n",Now.i,Now.S+Now.l);
cur=P.top();P.pop();
if(cur.S<Now.S+Now.l)//计算影响
cur.l+=Now.S+Now.l-cur.S;
Now=cur;
}
if(Now.S+Now.l<=S)//如果队列空了,Now就没有输出
{
printf("%d %d\n",Now.i,Now.S+Now.l);
Now=node(i,S,l,p);
continue;
}
if(p>Now.p)//更高级的任务
{
Now.l=Now.l+Now.S-S;
P.push(Now);
Now=node(i,S,l,p);
continue;
}
P.push(node(i,S,l,p));
}
printf("%d %d\n",Now.i,Now.S+Now.l);//队列中还有进程,但Now无法被更新
while(!P.empty())//弹出队列中的进程
{
cur=P.top();P.pop();
if(cur.S<Now.S+Now.l)//前面进程对当前的影响
cur.l+=Now.l+Now.S-cur.S;
printf("%d %d\n",cur.i,cur.S+cur.l);
Now=cur;
}
return 0;
}
「Luogu P2278」[HNOI2003]操作系统 解题报告的更多相关文章
- 「Luogu P2201」数列编辑器 解题报告
数列编辑器,在线IDE 本期的主题是洛谷的在线IDE 小学生?!小学生虐我
- 「Luogu P3183」[HAOI2016]食物链 解题报告
身为一个蒟蒻,由于刷不过[NOI2001]食物链 于是出门左转写了道另一道假的食物链 戳这里 这里的食物链个条数其实就是有向图的路径数(应该是这么说吧,我弱) 思路: 拓扑(Topulogy)(一本正 ...
- 「THUSCH 2017」大魔法师 解题报告
「THUSCH 2017」大魔法师 狗体面太长,帖链接了 思路,维护一个\(1\times 4\)的答案向量表示\(A,B,C,len\),最后一个表示线段树上区间长度,然后每次的操作都有一个转移矩阵 ...
- 「CTS2019 | CTSC2019」随机立方体 解题报告
「CTS2019 | CTSC2019」随机立方体 据说这是签到题,但是我计数学的实在有点差,这里认真说一说. 我们先考虑一些事实 如果我们在位置\((x_0,y_0,z_0)\)钦定了一个极大数\( ...
- 「BZOJ4510」「Usaco2016 Jan」Radio Contact 解题报告
无线电联系 Radio Contact 题目描述 Farmer John has lost his favorite cow bell, and Bessie the cow has agreed t ...
- 「Luogu P3866」[TJOI2009]战争游戏 解题报告
题面 好难表述啊~ 在n*m的矩阵上,有一些大兵(为0),一些空地(一个正整数),障碍物(-1),现在摧毁一些空地,使所有大兵不能走出矩阵去(代价为表示空地的整数),求最小代价 思路: 网络流最小割 ...
- 「Luogu P2015」二叉苹果树 解题报告
题面 一个二叉树,边数为n\((2<n\le 100)\),每条边有一个权值,求剪枝后剩下p\((1<p<n)\)条边,使p条边的权值和最大 还看不懂?-- 2 5 input:5 ...
- 「Luogu P2508」[HAOI2008]圆上的整点 解题报告
题面 给定圆的半径,求圆上整点数 这是一道很Nice的数学题!超爱!好吧,由于这道题,我去Study了一下复数(complex number)复杂的数 真棒!!! 有兴趣的戳这里!!!\(\huge ...
- 「Luogu P1210」回文检测 解题报告
题面 这是一道诡异的黄题 居然让你求一串吧啦吧啦的东西中 字母(大小写)最长的回文串的长度,还要输出完整的串 吐血 思路: 保持淡定,我们啥都不会,就会Manacher,那就用Manacher大法! ...
随机推荐
- 2014年最热门的国人开发开源软件TOP100
2014年最热门的国人开发开源软件TOP100 不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多 ...
- saltStack_安装和使用
服务端: yum install -y salt-master 客服端: yum install -y salt-minion 服务端启动: systemctl restartsalt-master ...
- DECLARE
-- 修正用プログラム DECLARE CURSOR c_adv_fee_detail IS SELECT adv_fee.fee_mgmt_num, ...
- 前端开发之BOM和DOM(转载)
BOM BOM:是指浏览器对象模型,它使JavaScript可以和浏览器进行交互. 1,navigator对象:浏览器对象,通过这个对象可以判定用户所使用的浏览器,包含了浏览器相关信息. naviga ...
- codedecision P1113 同颜色询问 题解 线段树动态开点
题目描述:https://www.cnblogs.com/problems/p/11789930.html 题目链接:http://codedecision.com/problem/1113 这道题目 ...
- JavaScript 按位与和逻辑与
逻辑与操作符有两个和好(&&)表示,有两个操作数,如下面的例子所示: var result = true && false; 第一个操作数 第二个操作数 结果 tr ...
- java三大循环结构
用于处理需要重复执行的操作: 根据判断条件的成立与否,决定程序段落的执行次数,而这个程序段落我们称为循环体: while:事先不需要知道循环执行多少次: do while:同上,只是至少要执行一次( ...
- Python--day41--线程锁
1,死锁 死锁代码示例: import time from threading import Lock, Thread noodle_lock = Lock() fork_lock = Lock() ...
- Spring boot+JPA+Druid
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- spring boot The request was rejected because the URL was not normalized
升级spring boot 1.5.10.RELEASE 版本后,突然发现之前能Nginx代理能请求的地址抛如下异常: org.springframework.security.web.firewal ...