POJ3295 Tautology 解题报告
2014-05-24 00:25
281 查看
直接上分析:
首先 弄清各种大写字母的操作的实质
K 明显 是 and &
A 是 or |
N 是 not !
C 由表格注意到 当 w<=x 时 值为1
E 当 w==x 时 值 为1;
弄清了这些就把大写字母当做一个运算符,字符串作为一个前缀表达式来做
http://www.cnblogs.com/keam37/ keam所有 转载请注明出处
首先 弄清各种大写字母的操作的实质
K 明显 是 and &
A 是 or |
N 是 not !
C 由表格注意到 当 w<=x 时 值为1
E 当 w==x 时 值 为1;
弄清了这些就把大写字母当做一个运算符,字符串作为一个前缀表达式来做
#include <iostream> #include <string> #include <stack> #define Det 112 using namespace std; int val[5]; string st; stack<int> inte; int main() { int len, k, m, x, y; while (cin >> st) { if (st[0] == '0') return 0; for (int n = 0; n <= 31; n++) { for (int i = 0, p = n; i <= 4; i++, p >>= 1) val[i] = p & 1; len = st.length(); for (int i = len - 1; i >= 0; i--) { if (st[i] >= Det) inte.push (val[st[i] - Det]); else if (st[i] == 'N') { x = inte.top(); inte.pop(); inte.push (!x); } else { x = inte.top(); inte.pop(); y = inte.top(); inte.pop(); if (st[i] == 'K') x = x & y; if (st[i] == 'A') x = x | y; if (st[i] == 'C') x = (x<=y); if (st[i] == 'E') x = (x ==y); inte.push (x); } } if (inte.top() == 0) { cout << "not" << endl; break; } else if (n == 31) cout << "tautology" << endl; } } return 0; }
http://www.cnblogs.com/keam37/ keam所有 转载请注明出处
相关文章推荐
- POJ3295 tautology 解题报告
- POJ 3295 Tautology解题报告
- 2011.11.25 poj2965 poj1713 poj3295 解题报告【用DFS来枚举】
- poj3295(前缀表达式的运用和递归求解表达式)解题报告
- poj3295解题报告(构造、算术表达式运算)
- HDU 4285 circuits 解题报告(插头DP)
- HDU1338 解题报告
- [leetcode]209. Minimum Size Subarray Sum@Java解题报告
- POJ1032解题报告
- HDOJ-1299-Diophantus of Alexandria 解题报告
- [leetcode] 15. 3Sum 解题报告
- 2016-11-12试题解题报告
- [leetcode]76. Minimum Window Substring@Java解题报告
- HDU-2602___Bone Collector——解题报告 01背包
- codeforces B.Fence 解题报告
- [leetcode] 34. Search for a Range 解题报告
- 2017 Multi-University Training 1 解题报告
- 【LeetCode】503. Next Greater Element II 解题报告(Python)
- LeetCode 解题报告索引
- 【Jason's_ACM_解题报告】Meteor