QOJ.ac

QOJ

حد الوقت: 1.0 s حد الذاكرة: 128 MB مجموع النقاط: 100

#16131. 逻辑之门

الإحصائيات

计算机科学与工程系不仅开设与算法相关的课程,还开设与计算机硬件相关的课程。其中一门入门课程解释了集成电路(“芯片”)、二进制逻辑、布尔代数等基本原理。如你所知,逻辑电路的最基本单元被称为(gate)。门是执行一种简单逻辑运算的元件。它可以通过线(line)与其他门相连。

逻辑电路可以绘制成图画,其中门表示为正方形,输入在左侧,输出在右侧。在每个正方形中,有一个符号决定了门的类型:数字 $1$ 表示或门(OR gate,当且仅当没有输入的值为 $1$ 时,其输出为 $0$),&与门(AND gate,当且仅当没有输入为 $0$ 时,输出为 $1$),=异或门(XOR gate,当且仅当有奇数个输入的值为 $1$ 时,输出为 $1$)。

你的任务是扫描这样一幅“图画”并计算所有命名电路输出的值。线路可能会分支并重新合并,但你可以假设每个“值消费者”(门的输入端口或命名的输出)都将连接到恰好一个“值源”(门的输出端口或输入值)。不会存在反馈回路,即不存在通过同一个门两次的环路。

输入格式

输入包含多幅图画。每幅图画由至少 $1$ 行且最多 $200$ 行组成,每行由以下字符构成:

  • 空格" "):图画中的空白空间。空格用于将其他字符缩进到合适的位置,因为字符的准确位置通常很重要。输入行末尾的尾随空格可能会出现,但也可能会被省略。
  • 连字符"-"):水平线。它将左侧和右侧的字符连接在一起,这些字符将始终存在并能够“接受”该连接。
  • 竖线"|"):垂直线,连接直接位于其上方和下方的字符。与水平线类似,这些字符将始终接受该连接。
  • 加号"+"):线路连接或弯折。连接所有四个方向上的字符。所有能够接受连接的字符都被视为已连接(至少会有两个)。然而,可能有些方向包含非空字符但并未连接。例如,如果加号正下方的未知位置有一个连字符,它们不被视为已连接。
  • 小写字母 x"x"):两条线路交叉但不连接。所有四个相邻字符都将接受该连接。上方的字符与下方的字符相连,左侧的字符与右侧的字符相连,但这两对之间没有相互连接。
  • 等号"="):表示输入或输出端口。它总是连接其左侧和右侧的字符,这两个字符中至少有一个是端口。如果左侧有一个端口,它只能是值源。如果右侧有一个端口,它只能是值消费者。
  • 小写字母 o"o"):非门(取反)。该字符的左侧总是有一个门,右侧总是有一个端口。它使该特定门的输出取反。
  • 井号"#"):门,它总是呈矩形,具有两个垂直边和两个水平边。左侧垂直边可以连接到输入端口,右侧边连接到输出端口(可能被取反)。没有两个门会互相接触边缘,这意味着任何在垂直或水平方向上相邻的井号总是属于同一个门。 矩形的大小在两个方向上都至少为 $3$ 个字符,这意味着内部至少有一个字符。所有内部字符都是空的(空格),只有一个例外。该唯一的非空字符表示门的类型(注意,它在门区域内的含义可能与在门区域外不同),它将是数字“一”("1")、和号("&")或等号("=")。
  • 二进制数字"0""1"):电路的输入值。它与其右侧的字符相连,该字符总是等号。
  • 大写字母"A""Z"):电路的命名输出。它接受来自其左侧的连接,左侧字符总是等号。每个字母最多出现一次,这意味着电路输出的数量在 $0$ 到 $26$ 之间(含)。

每幅图画都将以一行仅由星号("*")字符组成的行(至少一个)结束。最后一幅图画后面将有两行这样的星号行。输入中没有任何一行的长度会超过 $200$ 个字符。

输出格式

对于每幅图画,按字母顺序排序输出所有命名输出的值。每个输出行应包含三个字符:输出名称(一个大写字母)、等号和二进制值($0$ 或 $1$)。在每个测试用例之后输出一个空行。

样例

输入样例 1

0=+
|
| #######
+=# #
# & #o=--+
1=------=# # |
# #|
####### +--=### ###
| #=#=#1#o==X
1=-----------x--=# # ###
1=---x--=###
+------------=Y
***********************************
1=A
***
*

输出样例 1

X=0
Y=1

A=1

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.