题面

一道模拟题,模拟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]操作系统 解题报告的更多相关文章

  1. 「Luogu P2201」数列编辑器 解题报告

    数列编辑器,在线IDE 本期的主题是洛谷的在线IDE 小学生?!小学生虐我

  2. 「Luogu P3183」[HAOI2016]食物链 解题报告

    身为一个蒟蒻,由于刷不过[NOI2001]食物链 于是出门左转写了道另一道假的食物链 戳这里 这里的食物链个条数其实就是有向图的路径数(应该是这么说吧,我弱) 思路: 拓扑(Topulogy)(一本正 ...

  3. 「THUSCH 2017」大魔法师 解题报告

    「THUSCH 2017」大魔法师 狗体面太长,帖链接了 思路,维护一个\(1\times 4\)的答案向量表示\(A,B,C,len\),最后一个表示线段树上区间长度,然后每次的操作都有一个转移矩阵 ...

  4. 「CTS2019 | CTSC2019」随机立方体 解题报告

    「CTS2019 | CTSC2019」随机立方体 据说这是签到题,但是我计数学的实在有点差,这里认真说一说. 我们先考虑一些事实 如果我们在位置\((x_0,y_0,z_0)\)钦定了一个极大数\( ...

  5. 「BZOJ4510」「Usaco2016 Jan」Radio Contact 解题报告

    无线电联系 Radio Contact 题目描述 Farmer John has lost his favorite cow bell, and Bessie the cow has agreed t ...

  6. 「Luogu P3866」[TJOI2009]战争游戏 解题报告

    题面 好难表述啊~ 在n*m的矩阵上,有一些大兵(为0),一些空地(一个正整数),障碍物(-1),现在摧毁一些空地,使所有大兵不能走出矩阵去(代价为表示空地的整数),求最小代价 思路: 网络流最小割 ...

  7. 「Luogu P2015」二叉苹果树 解题报告

    题面 一个二叉树,边数为n\((2<n\le 100)\),每条边有一个权值,求剪枝后剩下p\((1<p<n)\)条边,使p条边的权值和最大 还看不懂?-- 2 5 input:5 ...

  8. 「Luogu P2508」[HAOI2008]圆上的整点 解题报告

    题面 给定圆的半径,求圆上整点数 这是一道很Nice的数学题!超爱!好吧,由于这道题,我去Study了一下复数(complex number)复杂的数 真棒!!! 有兴趣的戳这里!!!\(\huge ...

  9. 「Luogu P1210」回文检测 解题报告

    题面 这是一道诡异的黄题 居然让你求一串吧啦吧啦的东西中 字母(大小写)最长的回文串的长度,还要输出完整的串 吐血 思路: 保持淡定,我们啥都不会,就会Manacher,那就用Manacher大法! ...

随机推荐

  1. 【阿里云新品发布·周刊】第13期:链路追踪 Tracing Analysis 商业化首发

    点击订阅新品发布会! 新产品.新版本.新技术.新功能.价格调整,评论在下方,下期更新!关注更多内容,了解更多 最新发布 链路追踪 Tracing Analysis 商业化首发 2019年6月12日15 ...

  2. intellij idea 搜索

    . Ctrl+N 按名字搜索类 相当于eclipse的ctrl+shift+R,输入类名可以定位到这个类文件 就像idea在其它的搜索部分的表现一样,搜索类名也能对你所要搜索的内容多个部分进行匹配 甚 ...

  3. 为 Ubuntu 18.04 添加开机自动加载 ntfs分区 功能

    注意:Ubuntu终端命令是区分大小写的 1,准备的:     ntfs-3g -- 提供ntfs读写支持(一般说来是自带的,若没有,可是使用 sudo apt-get isntall ntfs-3g ...

  4. mysql聚合函数和分组

    文章实例的数据表,来自上一篇博客<mysql简单查询>:http://blog.csdn.net/zuiwuyuan/article/details/39349611 一. 聚合函数 聚合 ...

  5. www的iptables实例

    #!/bin/bash export PATH=/sbin:/usr/sbin:/bin:/usr/bin #加载相关模块 modprobe iptable_nat modprobe ip_nat_f ...

  6. [转]【转】大型高性能ASP.NET系统架构设计

    大型高性能ASP.NET系统架构设计 大型动态应用系统平台主要是针对于大流量.高并发网站建立的底层系统架构.大型网站的运行需要一个可靠.安全.可扩展.易维护的应用系统平台做为支撑,以保证网站应用的平稳 ...

  7. CSS3 box-sizing 盒子布局

    在CSS中盒模型被分为两种,第一种是W3C的标准模型,第二种是IE怪异盒模型.不同之处在于后者的宽高定义的是可见元素框的尺寸,而不是元素框的内容区尺寸.目前对于浏览器大多数元素都是基于W3C标准的盒模 ...

  8. dot net double 数组转 float 数组

    本文告诉大家如果遇到 double 数组转 float 数组千万不要使用 Cast ,一般都使用 select 强转. 最近在开发Avalonia ,有大神告诉我,下面的代码可以这样写 dashes ...

  9. SELECT command denied to user 'username'@'ip' for table 'user'错误处理

    错误信息 使用RDS for MySQL,程序执行查询SQL时报错如下: SELECT command denied to user 'username'@'ip' for table 'user' ...

  10. 2018-11-2-win10-uwp-通过-win2d-画出笔迹

    title author date CreateTime categories win10 uwp 通过 win2d 画出笔迹 lindexi 2018-11-2 20:11:0 +0800 2018 ...