// UVa 11108 - Tautology #include <iostream> #include <stack> #include <string> #include <map> using namespace std; map<char, bool> val; string s; int k; bool eval() { k++; if ('p' <= s[k] && s[k] <= 't') return val[s[k]]; char sign = s[k]; if (sign == 'K') { bool a = eval(); bool b = eval(); return a && b; } else if (sign == 'A') { bool a = eval(); bool b = eval(); return a || b; } else if (sign == 'N') return !eval(); else if (sign == 'C') { bool a = eval(); bool b = eval(); return !a || b; } else //if (sign == 'E') return eval() == eval(); } int main() { while ((cin >> s) && (s.length() > 0) && (s[0] != '0')) { bool tautology = true; for (int z = 0; z < 32; z++) { for (int c = 0; c <= 4; c++) val[c + 'p'] = (((z >> c) & 1) == 1); k = -1; if (!eval()) { tautology = false; break; } } if (tautology) cout << "tautology" << endl; else cout << "not" << endl; } return 0; }
Friday, May 15, 2015
UVa 11108 - Tautology
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment