SP2054 CERC07L - Gates of Logic

题目描述

计算机科学与工程系不仅开设了算法相关的课程,还有涉及计算机硬件的课程。其中一门基础课程介绍了集成电路(“芯片”)、二进制逻辑、布尔代数等基本原理。逻辑电路的基本单元称为“门”,它们是执行简单逻辑运算的元件,可以通过连接线与其他门组合。 逻辑电路通常可以用图示表示,每个门用方块表示,输入在左侧,输出在右侧。方块中的符号确定了门的类型:数字“1”表示或门(只有当所有输入为0时,输出才为0),符号“&”表示与门(只有当所有输入为1时,输出才为1),符号“=”表示异或门(当输入中有奇数个1时,输出为1)。 您的任务是通过扫描这样一幅“图”,并计算出所有命名的电路输出值。线路可能会分叉和合并,您可以假设每个“值的使用者”(就是门的输入端或命名的输出)都只连接到一个“值的来源”(就是门的输出端或输入值)。不会有反馈回路存在,也就是说,不会有通过同一个门两次的环路。

输入格式

输入中有多幅图示。每幅图示有至少一行,最多200行,由以下字符组成: - 空格 (" "):用于在图中表示空白区域。空格帮助对其他字符进行缩进,因为字符的确切位置通常很重要。行尾可能有空格,也可能没有。 - 横线 ("-"):水平连接线。连接其左右两侧的字符。这些字符总是存在并能“接受”连接。 - 竖线 ("|"):垂直连接线,连接其上方和下方的字符。这些字符总是能够接受连接。 - 加号 ("+"):线路连接点或转角。将其四周的字符连接起来。所有能够接受连接的字符都被认为是连接的(至少有两个)。可能某些边上有非空字符但不被连接,例如,加号下面的连字符不会连接。 - 小写字母 "x":实现两条线交叉但不连接。其四个相邻字符能够接受连接。上下的字符相连,左右的字符相连,但这两对之间不互连。 - 等号 ("="):表示输入或输出端口,总是连接其左右的字符,至少有一边是端口。左侧为值源,右侧为值消费者。 - 小写字母 "o":表示取反。其左侧必定是门,右侧是端口。它使门的输出取反。 - 井号 ("#"):表示门,通常呈现为一个矩形,有两个垂直边和两个水平边。左垂直边可以连接输入端口,右垂直边连接输出端口(可以取反)。相邻的井号总是属于同一门。 - 矩形的大小至少为3x3,内部只有一个非空字符,该字符表示门的类型,可能是“1”、“&”或“=”。 - 二进制数 ("0" 和 "1"):电路的输入值,它们与右边的等号连接。 - 大写字母 ("A" 到 "Z"):表示命名输出。从左侧的等号接受连接。每个字母只出现一次,所以电路输出最多有26个。每幅图以由星号 (“*”) 构成的行结束(至少一个星号)。最后一幅图后有两行这样的星号行。输入中的每行不超过200个字符。

输出格式

对于每幅图,按字母顺序输出所有命名输出的值。每行输出包含三个元素:输出名称(一个大写字母)、等号和一个二进制值(0 或 1)。在每个测试用例后输出一个空行。 **本翻译由 AI 自动生成**