1216: [HNOI2003]操作系统 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 754  Solved: 421[Submit][Status][Discuss] Description 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则优先级越高.如果一个进程到达的时候CPU是空闲的,则它会一直占用CPU直到该进程结束.除非在这个过…
题目传送门 本来是照着二叉堆的题去做的...没想到捡了个模拟...不过模拟我都不会...我好弱啊... 其实核心代码并不长,比辰哥的标程短到不知哪里去...但是思路需要清晰. 读题的时候我明白,当有优先级高的任务来时,要把原先的任务用时减去当前已做的,再把它插进堆. 难点是更新当前的时间,以及让程序循环起来而不陷入死循环. Code #include<cstdio> #include<algorithm> #include<queue> using namespace…
题目描述 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则优先级越高. 如果一个进程到达的时候CPU是空闲的,则它会一直占用CPU直到该进程结束.除非在这个过程中,有一个比它优先级高的进程要运行.在这种情况下,这个新的(优先级更高的)进程会占用CPU,而老的只有等待. 如果一个进程到达时,CPU正在处理一个比它优先级高或优先级相同的进程,则这个(新到达的)进程必须等待. 一旦CPU空闲,如…
1216: [HNOI2003]操作系统 Description 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则优先级越高.如果一个进程到达的时候CPU是空闲的,则它会一直占用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]操作系统 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 751  Solved: 419[Submit][Status][Discuss] Description 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则优先级越高.如果一个进程到达的时候CPU是空闲的,则它会一直占用CPU直到该进程结束.除非在这个过…
题面 传送门:https://www.luogu.org/problemnew/show/P2278 Solutiton 挺简单的一道模拟题,拿堆模拟一下题目意思就好 堆中有两个关键字,分别是优先级和到达时间 还要维护一下每个任务剩余时间(还有多久完成) 因为堆不能直接改.得在堆里记录编号然后映射出来 这里总结一下要注意的细节: 1.在下一个任务到达之前,尽可能把CPU内的任务完成了 2.注意读入 3.注意注释文件读写233(我因为这破事爆零一次) 4.没了 好像不需要记录到达时间,编号即为到达…
有点麻烦.. /*hdu6136[模拟+优先队列] 2017多校8*/ #include <bits/stdc++.h> using namespace std; typedef long long LL; struct frac { LL p, q; frac(LL P, LL Q) { p = P / __gcd(P, Q); q = Q / __gcd(P, Q); } frac() {p = , q = ;} bool operator < (const frac& a)…
点此看题面 大致题意: 有\(n\)个任务,每个任务有4个属性:编号.到达时间.执行时间和优先级.每个单位时间,会执行一个优先级最高(若有多个优先级最高的,就先执行到达时间较早的)的任务,请你按完成的顺序输出每个任务的编号以及相应的完成时间. 模拟大法好 这显然是一道模拟题吧... 我们只要按照题意一步一步模拟即可. 由于每一次操作要求优先级最高,因此可以用一个堆来维护. 在一个新的任务到来之前,我们可以这样分类讨论: 如果已经没有任务了,那就去接下一个任务 如果在新的任务到来之前能够完成当前任…
题:https://www.cometoj.com/problem/1046 #include<bits/stdc++.h> using namespace std; typedef long long ll; struct node{ int id,daoda,xiaohao,val; bool operator<(const node &b)const{ if(val==b.val) return daoda>b.daoda; return val<b.val;…
我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1216 不兹磁多线程的系统不是好系统>_< 对于每个进程,我们都记录下关于它的五个参数:进程号,起始时间,持续时间,终结时间以及优先级. 按照题意,优先级越大越应优先执行,同优先级的比起始时间,用堆来维护已经进来排队的进程,然后按题意模拟即可. 因为学长说想要\(NOI\)金牌,…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5437 题意:公主有k个朋友来参加她的生日party,每个人都会带价值为v[i]的礼物过来,在所有人到齐之前公主会打开大门m次,每次开门就是在第t个人到来之后,然后让p个人进入大厅,如果当前人数不足p人,则让所有人都进去,最后在所有人都来到门口时,再次打开门,让剩下所有的人都进入大厅:当然选择礼物价值大的先进入,如果两个人的礼物价值相等,则先来的先进,现在有q个问题,问第ni个进入大厅的人是谁: 我们…
题目描述 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则优先级越高. 如果一个进程到达的时候CPU是空闲的,则它会一直占用CPU直到该进程结束.除非在这个过程中,有一个比它优先级高的进程要运行.在这种情况下,这个新的(优先级更高的)进程会占用CPU,而老的只有等待. 如果一个进程到达时,CPU正在处理一个比它优先级高或优先级相同的进程,则这个(新到达的)进程必须等待. 一旦CPU空闲,如…
嘟嘟嘟 这道题就是一个模拟. 首先我们建一个优先队列,存所有等待的进程,当然第一关键字是优先级从大到小,第二关键字是到达时间从小到大.然后再建一个指针Tim,代表cpu运行的绝对时间. 然后分一下几种情况: 1.如果等待队列为空,那直接调到当前该执行的进程的到达时间,并把它放进等待队列(可以这么理解,每一个进程运行完之前都要进入等待队列). 2.如果非空,还要分两种情况: (1).当前队首的进程 j 能在当前该执行的进程 i 到达前运行完,那么就把 j 踢出队列,并输出,Tim 加上 j 的运行…
Flo's Restaurant Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1519    Accepted Submission(s): 465 Problem Description Sick and tired of pushing paper in the dreary bleary-eyed world of finan…
题目传送门 分析:题目中提到了优先级,很显然这题要用优先队列+模拟.题目中很多细节需要注意,还是在代码中解释吧,这里我用的是手打的堆. 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…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1206 题意: 内存大小为n(外存无限大),共有m次访问,每一次访问的信息编号为p. 对于每一条信息,不在内存中,就在外存中. 内存和外存的访问速度不同.为了提高整体的访问速度,有这样一种内存管理的算法: (1)如果p在内存中,直接访问,算法结束.否则转步骤(2). (2)如果内存有剩余空间,则将p由外存转移到内存中来,算法结束.否则转步骤(3). (3)选出内存中访问次数最少的一条信息(…
题目链接: GTW likes gt  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 131072/131072 K (Java/Others) 问题描述 从前,有nn只萌萌的GT,他们分成了两组在一起玩游戏.他们会排列成一排,第ii只GT会随机得到一个能力值b_ib​i​​.在第ii秒的时候,第ii只GT可以消灭掉所有排在他前面的和他不是同一组的且能力值小于他的GT. 为了使游戏更加有趣,GT的首领GTW会发功mm次,第ii次发功的…
其实是个模拟题.. /* 每个人都有一个口渴时间,如果口渴时,其前面没有人在排队,那么其就去排队接水,反之一直等到前面没有人排队 问每个人接完水的时间 每个没轮到的人都在位置上等前面的人接完水,然后他再去排队 先把每个人按照口渴时间排序 设新加入队列的人是now,那么口渴时间在 now.s->now.t 之间的所有人都会进入等待状态 在now前面的人会直接去排队,在now后面的人会继续等待 当这条队列都排完后,那些等待状态中的,最靠前的人会去排队 依次类推,用队列维护排队的人,用优先队列维护等待…
题面 一道模拟题,模拟CPU的处理过程?!省选模拟题 思路: 模拟退火大法+优先队列乱搞 要注意的点 1.空闲时,CPU要处理进程 2.当队列中没有进程时,要先进行判断,然后访问 3.当优先级高的进程替换掉原进程时,原进程已经处理过的时间要减去 4.结束进程时要更新后面进程的时间 既然是模拟题,那就不讲具体了h^ovny:我懒 Code: #include<bits/stdc++.h> using namespace std; struct node{ int i,S,l,p; node(in…
看病要排队 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10332    Accepted Submission(s): 4353 Problem Description 看病要排队这个是地球人都知道的常识. 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的.0068所去的医院有三个医生(汗,这么少)同时看病.而看病的人…
题意:有\(n\)个队员站成一排,有两个教练分别选人,每次选当前剩余人中的能力值最大的那个以及他两边相邻的\(k\)个人,问最后每个人所在队伍情况. 题解:优先队列模拟,以及双向链表,先用结构体存入每个人的状态,然后全部push到优先队列中,每次将已经分好队的人弹出,然后找当前能力值最大的人分组,至于两边的\(k\)个人,因为我们会对他们也进行分组,所以之后肯定不会再选他们了,所以可以模拟链表,直接让当前能力值最大的人的左边指向\(i-k-1\)即可,右边也是如此,其实也就是链表删除节点的过程,…
Problem Description Princess Alisha invites her friends to come to her birthday party. Each of her friends will bring a gift of some value v, and all of them will come at a different time. Because the lobby is not large enough, Alisha can only let a…
http://www.lydsy.com/JudgeOnline/problem.php?id=1088 2*N的扫雷棋盘,第二列的值a[i]记录第 i 个格子和它8连通的格子里面雷的数目. 第一列的雷可能有多种方案满足第二列的数的限制,根据第二列的信息确定第一列雷有多少种摆放方案. 设第一列的值为b[i],不难得出以下递推关系 b[0] + b[1] = a[0] b[0] + b[1] + b[2] = a[1] ... b[i] = a[i-1] - a[i-2] + b[i-3]或 b[…
1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec  Memory Limit: 162 MBSubmit: 5452  Solved: 2422[Submit][Status][Discuss] Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全毁坏.现在的情况是:T部落基地里只有一个修理工人…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1528 [题目大意] 地上最多可以放k个玩具,现在给出需求顺序, 问最少需要去架子上拿几次玩具 [题解] 用优先队列维护地上玩具距离下次被需求时间节点大小, 每次出列时间距离最远玩具放回架子,然后从架子上拿下当前的需求 [代码] #include <cstdio> #include <algorithm> #include <queue> using name…
Description 一张n*m的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色. 你有一个a*b的印章,有些格子是凸起(会沾上墨水)的.你需要判断能否用这个印章印出纸上的图案.印的过程中需要满足以下要求: (1)印章不可以旋转. (2)不能把墨水印到纸外面. (3)纸上的同一个格子不可以印多次. Input 第一行一个整数q(1<=q<=10),表示测试点数量. 接下来q个测试点,每个测试点中: 第一行包含4个整数n,m,a,b(1<=n,m,a,b<=1000). 接下…
题目大意 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则优先级越高.如果一个进程到达的时候CPU是空闲的,则它会一直占用CPU直到该进程结束.除非在这个过程中,有一个比它优先级高的进程要运行.在这种情况下,这个新的(优先级更高的)进程会占用CPU,而老的只有等待.如果一个进程到达时,CPU正在处理一个比它优先级高或优先级相同的进程,则这个(新到达的)进程必须等待.一旦CPU空闲,如果此时…
题目大意:给你一个字符串每个位置和相邻两个位置为回文中心的最长回文串长度,让你构造一个合法的字典序最小的字符串 挺有意思的构造题 首先按照$Manacher$的思想还原$p$数组 定义$f_{ij}$表示$i$位置不能放$j$这个字符 我们逆模拟$manacher$的构造过程,如果$i+p_{i}>maxR$,那么多出来这部分都要满足回文性质,然后更新$maxR$ 然后,因为回文不能继续扩展,所以$str[i+p_{i}]!=str[i-p_{i}]$,就在f数组里打上标记 每遍历到一个位置,如…
题意 给一颗树,删除一条边再加一条边,使它仍为一颗树且任意两点间的距离的最大值最小. 题目数据范围描述有问题,n为1或重建不能使任意两点距离最大值变小,可以输出任意答案. 分析 删除一条边后会使它变成两颗树,两棵树的直径的中点相连一定是使距离最小的 红色的边为删除重建的边 在树上dp维护每个子树的最大直径\(h[x]\),和去除这个子树后的树的最大直径\(t[x]\),u为x的父亲,删除u-x这条边并重建后的树的最大直径为 \[\max\{\frac{h[x]+1}{2}+\frac{t[x]+…