转自:http://www.cnblogs.com/lv-2012/archive/2012/10/27/2742751.html
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 7220 | Accepted: 2741 |
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 ofp. 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
#include<iostream> #include<string> #include<stack> using namespace std; string str; stack<int> stk; bool v[6]; bool tautology; bool getSult() { int a,b; for(int i=str.length()-1;i>=0;i--) { switch(str[i]) { case 'K': a=stk.top(); stk.pop(); b=stk.top(); stk.pop(); stk.push(a&&b); break; case 'A': a=stk.top(); stk.pop(); b=stk.top(); stk.pop(); stk.push(a||b); break; case 'N': a=stk.top(); stk.pop(); stk.push(!a); break; case 'C': a=stk.top(); stk.pop(); b=stk.top(); stk.pop(); stk.push(!a||b); break; case 'E': a=stk.top(); stk.pop(); b=stk.top(); stk.pop(); stk.push(a==b); break; default: stk.push(v[str[i]-'p']); } } return stk.top(); } int main() { int i,j; while(cin>>str&&str!="0") { while(!stk.empty()) stk.pop(); tautology=true; for(i=0;i<31;i++) { for(j=0;j<5;j++) v[j]=(i>>j)%2; if(!getSult()) { tautology=false; break; } } if(tautology) { cout<<"tautology"<<endl; } else cout<<"not"<<endl; } return 0; }