Follow My Logic
http://acm.pku.edu.cn/JudgeOnline/problem?id=1048
确定由一个或多个输入、0个或多个与或门组成的逻辑电路
电路路径通过水平线(-45)、垂直线(|124)、联接点(+43)
A--Z代表输入,?代表输出
AND门表示:
:\
: )
:/
OR门表示:
:\
: >
:/
输入或输出带o表示反
Solution:
寻找?位置,然后递归地搜索答案,例如上图,
栈S1保存为
? AND INVERT C INVERT OR A B
或
? AND INVERT OR A B INVERT C
求ans利用到另外一个栈S2
B,为输入In(S2,B)
A,为输入In(S2,A)
OR 二元操作 temp = Top(S2) OR Top(S2); In(S2,temp)
INVERT, 一元操作 temp = INVERT(Top(S2))
C,为输入In(S2,C)
INVERT, 一元操作 temp = INVERT(Top(S2))
AND二元操作 temp = Top(S2) AND Top(S2); In(S2,temp)
?print (Top(S2)
Top(S)为读出栈顶S,更换栈顶
尽管上面分析看似有理,但是忽略了很多情况,例如
这体现出一个难点:方向的确定
这个程序发现了个问题,C、GCC貌似不支持按引用传参数