UVA210 并行程序模拟 Concurrency Simulator

    • 51通过
    • 179提交
  • 题目来源 UVA 210
  • 评测方式 RemoteJudge
  • 标签
  • 难度 普及+/提高
  • 时空限制 3000ms / 0MB

题解

  • 提示:收藏到任务计划后,可在首页查看。
  • 体验新版界面

    最新讨论 显示

    推荐的相关题目 显示

    题意翻译

    你的任务是模拟$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$命令执行输出的值。

    题目描述

    PDF

    输入输出格式

    输入格式:

    输出格式:

    输入输出样例

    输入样例#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
    提示
    标程仅供做题后或实在无思路时参考。
    请自觉、自律地使用该功能并请对自己的学习负责。
    如果发现恶意抄袭标程,将按照I类违反进行处理。