#P16943. [sgu341] Circuits

[sgu341] Circuits

题目描述

给定一个在离散时刻工作的数字逻辑电路。所有信号均为二进制值 0/10/1。电路包含输入信号、导线、结点以及六种逻辑门:NOTANDNANDORNORDFF

逻辑门 输入个数 输出
NOT 1 输入取反
AND 至少 1 所有输入的逻辑与
NAND 所有输入逻辑与的取反
OR 所有输入的逻辑或
NOR 所有输入逻辑或的取反
DFF 1 输入信号延迟一个时刻后的值

在第一个时刻开始之前,所有 DFF 的输出都初始化为 00。之后给出若干个连续时刻的主输入值,你需要依次求出指定输出结点在每个时刻的值。

电路描述格式

输入由两个部分组成。第一部分描述电路:

  • 若一行第一个非空字符为 #,该行为注释,可以忽略;空行也可以忽略。
  • INPUT(junction) 表示 junction 是一个主输入结点。主输入的顺序就是这些语句出现的顺序。
  • OUTPUT(junction) 表示需要输出该结点的值。输出顺序就是这些语句出现的顺序。
  • j1 = NOT(j2)j1 = DFF(j2) 定义一个单输入逻辑门。
  • j1 = AND(j2, j3, ...)NANDORNOR 定义一个有至少一个输入的逻辑门。

结点名只包含大小写英文字母、数字和下划线 _,长度小于 6464

第一部分以一行恰好为 INPUT VALUES 结束。之后每一行给出一个时刻的主输入值:它是一个只包含 01 的字符串,长度等于主输入结点个数,并按 INPUT 语句出现的顺序对应各输入。

DFF(x) 在当前时刻输出的是上一时刻其输入 x 的值;所有 DFF 必须同时更新。

输入保证电路描述正确,并且电路能够正常工作。

输入格式

按题目描述给出电路以及各时刻输入值。结点总数不超过 50005000,输入时刻数不超过 500500,整个输入文件小于 320 KB。

输出格式

对于 INPUT VALUES 后的每一行输入,输出一行二进制字符串。字符串中的各位依次对应所有 OUTPUT(...) 语句指定的结点。

样例

INPUT(a)
INPUT(b)
x = DFF(a)
t = OR(a, b)
y = AND(x, t)
OUTPUT(x)
OUTPUT(y)
INPUT VALUES
10
11
00
00
11
10

时间限制: 0.25 秒
空间限制: 64 MB