并行程序模拟 Concurrency Simulator
题意翻译
你的任务是模拟$n$个程序(按输入顺序编号$1$~$n$)的并行执行。每个程序包含不超过25条语句。
格式一共是5种:赋值($var=constant$),打印(print $var$),$lock$,$unlock$,$end$,耗时分别为$t_1,t_2,t_3,t_4,t_5$。
变量用一个小写字母表示,初始时为$0$,为所有并行程序共有,且它的值始终保持在$[0,100]$内,所以一个程序对某一个变量的赋值会影响到另外一个程序。
每个时刻只能是一个程序处于运行状态,其他程序处于等待状态。运行状态之中的的程序每次最多分配$Q$个单位时间,一旦在未执行完程序时超过分配时间,这个程序则会被插入等待队列,然后从其的队首取出一共程序继续执行。而初始的等待队列为按照输入程序排入。
但是由于$lock$和$unlock$命令的出现,这个顺序会被改变。
$lock$的作用是申请对所有变量的独占访问,$unlock$则是解除对所有变量的独占访问,且它们一定成对出现。当一个程序已经对所有的变量独占访问后,其他程序若试图执行$lock$,无论其是否耗尽分配时间,都会被放在一个阻止队列的尾部,且当那个程序解除的时候,则会从阻止队列的头部的程序进入等待队列的头部。
现在给出$n,t_1,t_2,t_3,t_4,t_5,Q$以及$n$个程序,你需要输出所有$print$命令执行输出的值。
题目描述
[problemUrl]: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=4&page=show_problem&problem=146
[PDF](https://uva.onlinejudge.org/external/2/p210.pdf)
![](https://cdn.luogu.com.cn/upload/vjudge_pic/UVA210/47a8ebbcee2e250c00bc6a307fdd5bc936840928.png)
输入输出格式
输入格式
![](https://cdn.luogu.com.cn/upload/vjudge_pic/UVA210/23e8aa9b18423f56e43bc0db38efeeafe25d2e05.png)
输出格式
![](https://cdn.luogu.com.cn/upload/vjudge_pic/UVA210/d18eb294963e1caf3ef55b142c42c327a6d1c43e.png)
输入输出样例
输入样例 #1
3 1 1 1 1 1 1
a = 4
print a
lock
b = 9
print b
unlock
print b
end
a = 3
print a
lock
b = 8
print b
unlock
print b
end
b = 5
a = 17
print a
print b
lock
b = 21
print b
unlock
print b
end
输出样例 #1
1: 3
2: 3
3: 17
3: 9
1: 9
1: 9
2: 8
2: 8
3: 21
3: 21