Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 9133 | Accepted: 3498 |
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:
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, ApNq is 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
ApNp ApNq 0
Sample Output
tautology not
Source
#include <stdio.h> #include <string.h> #include <string> #include <algorithm> #include <stack> using namespace std; stack <int> a ; void f(char ch,int p,int q,int r,int s,int t) { if(ch == 'p') a.push(p) ; else if(ch == 'q') a.push(q); else if(ch == 'r') a.push(r); else if(ch == 's') a.push(s); else if(ch == 't') a.push(t); } void F(char ch) { int k1 , k2 ; if(ch == 'K') { k1 = a.top() ; a.pop() ; k2 = a.top() ; a.pop() ; if(k1 == 1 && k2 == 1) a.push(1); else a.push(0); } else if(ch == 'A') { k1 = a.top() ; a.pop() ; k2 = a.top() ; a.pop() ; if(k1 == 1 || k2 == 1) a.push(1); else a.push(0); } else if(ch == 'N') { k1 = a.top() ; a.pop(); k1 = 1 - k1 ; a.push(k1); } else if(ch == 'C') { k1 = a.top() ; a.pop() ; k2 = a.top() ; a.pop() ; if(k1 == 1 && k2 == 0) a.push(0); else a.push(1); } else if(ch == 'E') { k1 = a.top() ; a.pop() ; k2 = a.top() ; a.pop() ; if( (k1 == 1 && k2 == 1) || (k1 == 0 && k2 == 0) ) a.push(1); else a.push(0); } } int main() { int p , q , r , s , t , num ; char str[200] ; while(scanf("%s", str) !=EOF) { if(str[0] == '0') break; num = 0 ; for(p = 0 ; p < 2 ; p++) for(q = 0 ; q < 2 ; q++) for(r = 0 ; r < 2 ; r++) for(s = 0 ; s < 2 ; s++) for(t = 0 ; t < 2 ; t++) { int l = strlen(str); int i ; while( !a.empty() ) { a.pop() ; } for(i = l-1 ; i >= 0 ; i--) { if(isupper( str[i] )) { F(str[i]); } else { f(str[i],p,q,r,s,t); } } num += a.top() ; } if(num == 32) printf("tautology\n"); else printf("not\n"); } }