#2406. 并发模拟器

并发模拟器

Description

模拟n 个程序(按输入顺序编号1~n )的并行执行。每个程序都包含不超过25条语句。语句格式共有5种:

1、赋值(var=constant)

2、打印(printvar)

3、锁(lock)

4、解锁(unlock)

5、结束(end)

耗时分别为t1t2t3t4t5t_1 、t_2 、t_3 、t_4 、t_5

将变量用一个小写字母表示,初始时值为0,为所有并行程序共有,且它的值始终保持在[0,100),所以一个程序对某一个变量的赋值会影响另一个程序。在每个时刻只能有一个程序处于运行状态,其他程序处于等待状态。处于运行状态的程序每次最多分配Q 个单位时间,一旦在未执行完程序时超过分配时间,则这个程序会被放入就绪队列,然后从其队首取出一个程序继续执行。而初始的就绪队列按照程序输入顺序。

但是由于lock和unlock命令的出现,这个顺序会被改变。lock的作用是申请对所有变量的独占访问,unlock则是解除对所有变量的独占访问,且它们一定成对出现。当一个程序已经对所有的变量独占访问后,其他程序若试图执行lock,则无论其是否耗尽分配时间,都会被放在一个阻止队列的尾部,且当解锁的时候,会将阻止队列头部的程序放入就绪队列的头部。

Format

Input

第1行为测试用例数TT ,第2行为空行,第3行包含77个数,分别为nnt1t_1t2t_2 t3t_3t4t_4t5t_5QQ ,接下来有nn 个程序。

Output

对于每个测试用例,两个测试用例的输出都将用一个空行隔开,输出包含print语句在模拟过程中生成的输出。执行print语句时,程序应该显示程序ID、冒号、空格和所选变量的值。不同print语句的输出应该在单独的行上。

Samples

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: 3
2: 3
3: 17
3: 9
1: 9
1: 9
2: 8
2: 8
3: 21
3: 21

来源

UVA210