POJ 3295 Tautology (栈模拟)
来源:互联网 发布:淘宝手机详情盗图投诉 编辑:程序博客网 时间:2024/06/06 00:09
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.
- 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, andequals as defined in the truth table below.
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
ApNpApNq0
Sample Output
tautologynot
Source
题目链接:http://poj.org/problem?id=3295
题目大意:按题意计算所给表达式的值,相当于一个带栈功能的位运算器
题目分析:暴力枚举所有p,q,r,s,t的可能值,用栈模拟算出结果,若为0则not否则是tautology
#include <cstdio>#include <stack>#include <cstring>using namespace std;int const MAX = 150;stack <int> st;char s[MAX];void cal(int p, int q, int r, int s1, int t){ int len = strlen(s); for(int i = len - 1; i >= 0; i --) { if(s[i] == 'p') st.push(p); else if(s[i] == 'q') st.push(q); else if(s[i] == 'r') st.push(r); else if(s[i] == 's') st.push(s1); else if(s[i] == 't') st.push(t); else if(s[i] == 'K') { int t1 = st.top(); st.pop(); int t2 = st.top(); st.pop(); st.push(t1 && t2); } else if(s[i] == 'A') { int t1 = st.top(); st.pop(); int t2 = st.top(); st.pop(); st.push(t1 || t2); } else if(s[i] == 'N') { int t1 = st.top(); st.pop(); st.push(!t1); } else if(s[i] == 'C') { int t1 = st.top(); st.pop(); int t2 = st.top(); st.pop(); if(t1 == 1 && t2 == 0) st.push(0); else st.push(1); } else if(s[i] == 'E') { int t1 = st.top(); st.pop(); int t2 = st.top(); st.pop(); if((t1 == 1 && t2 == 1) || (t1 == 0 && t2 == 0)) st.push(1); else st.push(0); } }}bool judge(){ for(int p = 0; p < 2; p++) for(int q = 0; q < 2; q++) for(int r = 0; r < 2; r++) for(int s1 = 0; s1 < 2; s1++) for(int t = 0; t < 2; t++) { cal(p, q, r, s1, t); if(st.top() == 0) return false; } return true;}int main(){ while(scanf("%s", s) != EOF && !(strlen(s) == 1 && s[0] == '0')) { if(judge()) printf("tautology\n"); else printf("not\n"); } }
- POJ 3295 Tautology (栈模拟)
- POJ 3295 Tautology 模拟
- POJ 3295 Tautology(模拟)
- POJ 3295 Tautology 永真式,栈的简单模拟
- poj 3295 Tautology (模拟栈操作+状压)
- POJ 3295-Tautology(模拟-逻辑表达式)
- POJ 2049Tautology(模拟)
- POJ3295 Tautology(模拟栈)
- POJ 3295 Tautology(似乎是模拟?…
- POJ 3295 Tautology (构造法 栈)
- POJ 3295-Tautology(构造法+栈)
- POJ 3295 Tautology(构造)(栈)
- POJ-3295-Tautology
- POJ 3295 Tautology
- POJ 3295 Tautology
- POJ 3295 Tautology
- poj 3295 Tautology
- POJ 3295 Tautology
- POJ 2117 Electricity
- eclipse编译android大工程无响应内存溢出解决方案(64bit 8G)
- C++中变量的作用域与生命周期
- cuda 类模板以及全局内存的使用例子
- Android实战技巧:为从右向左语言定义复杂字串
- POJ 3295 Tautology (栈模拟)
- FZU 2152 文件系统 (小模拟)
- linux进程状态浅析
- 音乐的裁剪
- LINUX命令行基础(下)
- IOS UIScrollerView滚动视图的简单使用
- 最大子序列和问题
- intellij idea小技巧
- 【DP|数学+预处理】POJ-1160 Post Office