#P1048. Follow My Logic
Follow My Logic
描述
对于这个问题,你需要确定一个由一个或多个输入、零个或多个双输入与/或门以及一个输出组成的逻辑电路的输出。输入的电路使用标准的 ASCII 字符绘制。电路路径使用水平和垂直线以及连接点来表示。水平线用短横线字符(十进制 ASCII 码 45)表示,垂直线用竖线字符(十进制 ASCII 码 124)表示,连接点用加号字符(十进制 ASCII 码 43)表示。输入用大写字母 A 到 Z 表示,输出用问号表示。与门和或门的表示方式如下面最左边的图所示,并且它们的方向总是如所示的那样。门的输入和输出的位置如下面中间的图所示。最后,门的输入或输出可以被取反,在输入或输出位置用小写的“o”字符(十进制 ASCII 码 111)表示。下面右边的图展示了一个简单但完整的逻辑电路。
:\ :\ -:\ -o:\ A-o:\
: ) : > : )- : )o- : )o-?
:/ :/ -:/ --:/ B--:/
与门 或门 带有输入的门 顶部输入被取反的门 两个逻辑输入
和一个被取反的输出 和输出
输入
输入中的电路遵循以下准则:
- 电路图像的最大尺寸是 100×100 个字符。
- 路径总是沿直线传播,除非被连接点改变方向。在连接点处,路径可以并且将会转 90 度。两个连接点不会在水平或垂直方向上相邻。
- 路径不会“断开”。也就是说,每个路径字符在两侧总是与相同类型的另一个路径字符、一个连接点、一个门输入、一个门输出、一个逻辑输入或逻辑输出相邻。
- 电路路径不会交叉或相交。
- 门输入总是如上面所示从左边水平进入。门输出总是如上面所示水平从右边离开。
- 取反操作只能紧邻门的输入或输出出现,并且如上面所示,在输入的情况下总是在前面(在输出的情况下总是在后面)至少有一个短横线。
输入中逻辑图的结束由第一列中仅包含单个星号的一行来表示。在这之后是几行,指示逻辑图中输入的状态。这些行中的每一行都是由 26 个“0”(零)或“1”字符组成的字符串,第一个位置表示输入 A 的状态,第二个位置表示输入 B 的状态,依此类推。请注意,电路中未实际使用的输入值可以直接忽略。输入状态列表由第一列中仅包含单个星号字符的一行来终止。
在终止输入状态列表的星号之后是另一个电路图,接着是一个输入状态列表,然后又是另一个电路图和输入状态列表,依此类推,直到文件结束。文件中总是至少有一个电路以及该电路的一组输入。
输出
程序需要为每个逻辑电路的每组输入值报告输出值(0 或 1),每行一个值。每个电路的输出列表之间应该用一个空行分隔。
输入数据1
A---:\
: )---?
B---:/
*
00000000000000000000000000
10000000000000000000000000
01000000000000000000000000
11000000000000000000000000
*
A---+
|
+---:\
: >o---:\
+---:/ : )---?
| C--o:/
B---+
*
00000000000000000000000000
11100000000000000000000000
*
输出数据1
0
0
0
1
1
0
来源
2001 年大纽约地区竞赛