POJ3295

Written by    16:03 July 22, 2014 

POJ3295

Tautology
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 10897 Accepted: 4136

Description

WFF ‘N PROOF is a logic game played with dice. Each die has six faces representing some subset of the possible symbols K, A, N, C, E, p, q, r, s, t. A Well-formed formula (WFF) is any string of these symbols obeying the following rules:

  • p, q, r, s, and t are WFFs
  • if w is a WFF, Nw is a WFF
  • if w and x are WFFs, Kwx, Awx, Cwx, and Ewx are WFFs.

The meaning of a WFF is defined as follows:

  • p, q, r, s, and t are logical variables that may take on the value 0 (false) or 1 (true).
  • K, A, N, C, E mean and, or, not, implies, and equals as defined in the truth table below.

Definitions of K, A, N, C, and E
     w  x   Kwx   Awx    Nw   Cwx   Ewx
  1  1   1   1    0   1   1
  1  0   0   1    0   0   0
  0  1   0   1    1   1   0
  0  0   0   0    1   1   1

A tautology is a WFF that has value 1 (true) regardless of the values of its variables. For example, ApNp is a tautology because it is true regardless of the value of p. On the other hand, ApNqis not, because it has the value 0 for p=0, q=1.

You must determine whether or not a WFF is a tautology.

Input

Input consists of several test cases. Each test case is a single line containing a WFF with no more than 100 symbols. A line containing 0 follows the last case.

Output

For each test case, output a line containing tautology or not as appropriate.

Sample Input

Sample Output

Source

这道题目我一开始读了半天还没读懂,后来请教了一位英文好的同学才弄懂了(还是学文的。。。),其实这道题就是离散数学里面的前缀表达式,输入由p、q、r、s、t、K、A、N、C、E共十个字母组成的逻辑表达式,其中p、q、r、s、t的值为1或者0,即逻辑变量; K、A、N、C、E为逻辑运算符, K-> and: x&&y A-> or: x||y N-> not: !x C-> implies: (!x)||y E-> equals: x==y 然后求在输入格式保证合法的前提下问逻辑表达式是否为永真式。

我的解法是直接暴力p,q,r,s,t不同的取值总共32种情况,然后用数组模拟堆栈。

其实就是从右往左如果逻辑变量就压栈,如果是逻辑运算符就出栈两个逻辑变量然后把运算结果压栈。

但是这个题其实应该用递归做的,我在网上找了一段代码,简直不能更赞。

这里把五个逻辑变量看成五个二进制数,五个二进制数总共32种情况,然后再用位运算符。我的代码跑了16ms,这个在OJ上面显示的是0ms,思路清晰,要好好学习。

Category : acmstudy

Tags :