poj3295:Tautology
传送门 题目大意 给定一个由10种字符(p,q,r,s,t,N,K,A,C,E)组成的逻辑表达式,其中pqrst为逻辑变量,NKACE为逻辑运算符,他们的含义分别是 K==and:x && yN==not:!xA==or:x || yC==implies:(!x)||y E==equals:x==y 要求判断这个逻辑表达式是否为重言式,如果是就输出tautology,否则输出not 思路 根据题设,我们不难判断,单目运算符一定在整个字符串的后半部分,双目运算符一定在整个字符串的前半部分。例如ApNp,它应该被判为A(p,N(p)),所以上述结论的正确性是显然的。那么就可以像常规的表达式计算一样,从尾部压入栈,然后弹一个计算一个。 因为只有5个逻辑变量,所以最多只会有2^5=32种情况,依次枚举就好。 代码 我的写法 五重循环枚举每一位,最内层去枚举长度。 ```cpp #include #include #include #include using namespace std; string str; bool input(stack& sta, char ss, int p, int q, int r, int s, int t) …