大模拟
P6928 [ICPC2016 WF] What Really Happened on Mars?
题面太长了就不放了。
题目的最大难点在于如何处理阻塞关系,因为看起来阻塞由当前优先级定义,但当前优先级又由阻塞定义。
考虑阻塞的条件,也就是访问一个已经被锁定的资源或者访问一个被拥有且最高优先级大于这个进程的当前优先级。那么我们从正在执行的基础优先级最高的进程开始考虑,如果它的下一条指令是锁定某个资源,且满足上述的阻塞条件,那么我们就可以找出阻塞当前进程的进程,根据题目要求更新当前优先级,然后将当前进程标记为被阻塞。
剩下的就没什么特别大的难度了,实现难度严格低于今年 CSP-S T3,注意细节。建议对于这种大模拟题分模块写,这样各个模块之间相互独立调试更有条理。
code,非常丑但是应该可读。
此题建议评蓝/紫。