#1382. Pku2448 A New Operating System
Pku2448 A New Operating System
Description
最近阳阳接下了一个任务:编写一个操作系统。
编写操作系统可是一个大工程,阳阳花费了很多时间在上面,他本想很快完成的,但是IOI在即,再怎么样也不能耽误了世界赛啊!但是雇主的要求有很严格,要求阳阳一定要在IOI之前完成这个系统的编写,所以他不得不找到你请求帮助,人多力量大嘛,你就帮帮他咯。
你的任务很简单,只要编写一个内存管理系统就可以了。你的程序需要支持以下9个操作:
CreateProcess(PID,Memory,Priority):新建一个过程,编号为PID,其占用的内存为Memory,优先级(称为外部优先级)为Priority;
AddMessage(PID,Priority):在过程PID中新建一个任务,其优先级(称为内部优先级)为Priority;
Run:在当前所有任务中间找出一个优先级最高的运行并输出’Run: Priority’,这里的优先级定义为其内部优先级与外部优先级的积,如果两个任务的优先级一样则优先运行PID较小的任务,如果没有任何任务则输出’Empty’;
ChangePriority(PID,NewValue):将过程PID的外部优先级改变为NewValue;
GetMemory(PID,Memory):将过程PID的内存占用增加Memory;
FreeMemory(PID,Memory):将过程PID的内存占用减少Memory;
RunProcess(PID):将过程PID中找出一个内部优先级最高的运行并输出’Run Process: Priority’,如果该过程中如果没有任何任务则输出’Empty’;
CloseMaxMemory:将当前所有过程中内存占用最高的过程关闭,占用内存一样则选择PID较小的关闭,如果当前没有任何过程则输出’Empty’;
CloseProcess(PID):将过程PID关闭。
PS:
- 任务运行后自动被删除;
- 对于CreateProcess,如果PID已经存在则输出’Error’,对于其他操作,如果PID不存在则输出’Error’,这种情况下该操作将被忽略;
- 当一个过程的内存占用小于等于0时则该过程将被自动关闭;
Format
Input
第一行一个正整数N,表示操作总数,开始内存中过程为空;
然后N行每行按照如上格式描述一个任务;
Output
按照如上描述输出。
Samples
11
CloseMaxMemory
CreateProcess(1,100,1)
CreateProcess(2,200,1)
CreateProcess(3,300,1)
AddMessage(1,9)
AddMessage(2,19)
AddMessage(1,10)
GetMemory(2,999)
CloseMaxMemory
Run
RunProcess(1)
Empty
Run: 10
Run Process: 9
Limitation
0 < N <= 100,000
对于65%的数据范围N <= 1,000;
对于90%的数据范围将只出现CreateProcess、AddMessage、Run、RunProcess操作;
对于90%的数据PID的范围为[1 .. N];