洛谷P2278 [HNOI2003] 操作系统】的更多相关文章

题目传送门 分析:题目中提到了优先级,很显然这题要用优先队列+模拟.题目中很多细节需要注意,还是在代码中解释吧,这里我用的是手打的堆. 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…
题目传送门 解题思路: 一道没啥思维含量的模拟题,但是个人感觉代码实现不简单,可能是我太弱了,花了我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…
题面 传送门:https://www.luogu.org/problemnew/show/P2278 Solutiton 挺简单的一道模拟题,拿堆模拟一下题目意思就好 堆中有两个关键字,分别是优先级和到达时间 还要维护一下每个任务剩余时间(还有多久完成) 因为堆不能直接改.得在堆里记录编号然后映射出来 这里总结一下要注意的细节: 1.在下一个任务到达之前,尽可能把CPU内的任务完成了 2.注意读入 3.注意注释文件读写233(我因为这破事爆零一次) 4.没了 好像不需要记录到达时间,编号即为到达…
BZOJ原题链接 洛谷原题链接 该题有两种做法,树形\(DP\)和贪心. 先讲贪心. 先将所有点按深度从大到小排序,然后从大到小依次取出点,若已经被覆盖则跳过,否则就在它的祖父点建立消防站. 考虑如何判断该点是否被覆盖,设数组\(dis[x]\)表示点\(x\)到达离它最近的消防站的距离. 则在扫到一个点时,先用它父亲和祖父的\(dis\)来尝试更新该点的\(dis\),即尝试用父亲或祖父来覆盖该点,若没有被覆盖,则在祖父建立消防站,并更新祖父的父亲和祖父的祖父的\(dis\),这样就能同时将兄…
一看到这道题就知道是树形dp 之前做过类似的题,只不过保护的范围是1 所以简单很多. 这道题保护的范围是2,就复杂了很多. 我就开始列状态,然后发现竟然有5种 然后我就开始列方程. 但是我考虑的时候是用一条链去思考的. 显然应该要用深度为3的完全二叉树去思考. 所以我写到一半发现自己的方程有问题. 然后就干脆放弃了,因为思维量好大. 然后去看题解.发现我完成了正解的三分之一. 后面的方程写出之后还需要很牛逼的简化. 我花了很长时间才理解. 自己还是太菜了.http://www.cnblogs.c…
https://www.luogu.org/problemnew/show/P2278 题目没有说同时到达的优先级最大的应该处理谁. 讲道理就是处理优先级最大的. #include<bits/stdc++.h> using namespace std; typedef long long ll; struct Process { int id; int itime; int dtime; int pri; inline bool operator<(const Process&…
题目 这个题是一个名副其实的考验细节和头脑清醒的一个题. 根据提议我们可以进行分类讨论. 我们用优先队列来模拟CPU,我们可以用在线的算法来写,每次输入一个进程都要判断这个进程是否可以挤掉优先队列里的进程,当可以挤掉时就可以换下一个进程了,我们可以把最大的挤掉,其余就都可以挤掉了,而如果该进程挤不掉,那就按照从优先级大到小的顺序输出结束时间和编号. \(code\) #include <iostream> #include <cstdio> #include <algorit…
题目描述 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则优先级越高. 如果一个进程到达的时候CPU是空闲的,则它会一直占用CPU直到该进程结束.除非在这个过程中,有一个比它优先级高的进程要运行.在这种情况下,这个新的(优先级更高的)进程会占用CPU,而老的只有等待. 如果一个进程到达时,CPU正在处理一个比它优先级高或优先级相同的进程,则这个(新到达的)进程必须等待. 一旦CPU空闲,如…
P2280 [HNOI2003]激光炸弹 题目描述 输入输出格式 输入格式: 输入文件名为input.txt 输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示 xi,yi ,vi . 输出格式: 输出文件名为output.txt 输出文件仅有一个正整数,表示一颗炸弹最多能炸掉地图上总价值为多少的目标(结果不会超过32767). 输入输出样例 输入样例#1: 2 1 0 0 1 1 1 1 输出样例#1: 1 #include<iostream> #include&l…
题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了一个巨大的树状结构.如果基地A到基地B至少要经过d条道路的话,我们称基地A到基地B的距离为d. 由于火星上非常干燥,经常引发火灾,人类决定在火星上修建若干个消防局.消防局只能修建在基地里,每个消防局有能力扑灭与它距离不超过2的基地的火灾. 你的任务是计算至少要修建多少个消防局才能够确保火星上所有的基地在发生火灾时…