题解 P2278 【[HNOI2003]操作系统】】的更多相关文章

题面 传送门:https://www.luogu.org/problemnew/show/P2278 Solutiton 挺简单的一道模拟题,拿堆模拟一下题目意思就好 堆中有两个关键字,分别是优先级和到达时间 还要维护一下每个任务剩余时间(还有多久完成) 因为堆不能直接改.得在堆里记录编号然后映射出来 这里总结一下要注意的细节: 1.在下一个任务到达之前,尽可能把CPU内的任务完成了 2.注意读入 3.注意注释文件读写233(我因为这破事爆零一次) 4.没了 好像不需要记录到达时间,编号即为到达…
题目描述 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则优先级越高. 如果一个进程到达的时候CPU是空闲的,则它会一直占用CPU直到该进程结束.除非在这个过程中,有一个比它优先级高的进程要运行.在这种情况下,这个新的(优先级更高的)进程会占用CPU,而老的只有等待. 如果一个进程到达时,CPU正在处理一个比它优先级高或优先级相同的进程,则这个(新到达的)进程必须等待. 一旦CPU空闲,如…
题目传送门 分析:题目中提到了优先级,很显然这题要用优先队列+模拟.题目中很多细节需要注意,还是在代码中解释吧,这里我用的是手打的堆. Code: #include<bits/stdc++.h> using namespace std; ; int heap[N],size,now; struct Pro{ int time,rank; }pro[N]; inline bool check(int x,int y)//比较,维护大根堆 { if(pro[x].rank!=pro[y].rank…
题目传送门 本来是照着二叉堆的题去做的...没想到捡了个模拟...不过模拟我都不会...我好弱啊... 其实核心代码并不长,比辰哥的标程短到不知哪里去...但是思路需要清晰. 读题的时候我明白,当有优先级高的任务来时,要把原先的任务用时减去当前已做的,再把它插进堆. 难点是更新当前的时间,以及让程序循环起来而不陷入死循环. Code #include<cstdio> #include<algorithm> #include<queue> using namespace…
题目传送门 解题思路: 一道没啥思维含量的模拟题,但是个人感觉代码实现不简单,可能是我太弱了,花了我6个小时,3次重写. AC代码: #include<iostream> #include<cstring> #include<queue> #include<cstdio> using namespace std; struct kkk { int id,st,re,pr; bool operator < (const kkk &a) const…
1216: [HNOI2003]操作系统 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 754  Solved: 421[Submit][Status][Discuss] Description 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则优先级越高.如果一个进程到达的时候CPU是空闲的,则它会一直占用CPU直到该进程结束.除非在这个过…
1216: [HNOI2003]操作系统 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 751  Solved: 419[Submit][Status][Discuss] Description 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则优先级越高.如果一个进程到达的时候CPU是空闲的,则它会一直占用CPU直到该进程结束.除非在这个过…
按题意用priority_queue模拟即可 ---------------------------------------------------------------------- #include<bits/stdc++.h> using namespace std; const int maxn = 1009; const int MOD = 10000; struct Node { int x, w, v; bool operator < (const Node &o…
1216: [HNOI2003]操作系统 Description 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则优先级越高.如果一个进程到达的时候CPU是空闲的,则它会一直占用CPU直到该进程结束.除非在这个过程中,有一个比它优先级高的进程要运行.在这种情况下,这个新的(优先级更高的)进程会占用CPU,而老的只有等待.如果一个进程到达时,CPU正在处理一个比它优先级高或优先级相同的进程,…
一道大模拟 题面想必大家都很清楚了,一堆进程在抢占资源,除了先来后到的顺序以外,优先级大的还可以插队,空闲的时候未结束的进程会插进来占用空闲的时间. 那么,我们可以容易地想到,我们寻找这个最大的优先级需要使用堆. 这里就要涉及到一个堆的比较.如果我们选用了STL,那么我们需要处理繁杂的比较关系.要用到运算符的重载- struct Name{ int data1,data2,data3; bool operator < (const Name &y) const{ return this-&g…