POJ 2049Tautology(模拟)
来源:互联网 发布:3d建模编程 编辑:程序博客网 时间:2024/06/10 05:19
Tautology
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, and equals 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 ofp. On the other hand,ApNq is not, because it has the value 0 forp=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
题意:有p,q,r,s,t五个变量,分别取1或0;有五个关系表达式’K‘(与关系)、’A‘(或关系)、’N‘(非关系)、’C‘(没有定义,只有0,1时为0)、’E‘(同或关系);输入一行不超过100个字符的字符串,如果五个变量无论什么取值都结果为1输出tautology,否则输出not。
题解:用栈从后往前做运算,当找到一个0时就标记flag=0;结束循环。
#include <iostream>#include <stdio.h>#include <stack>#include <map>#include <string.h>using namespace std;map<char, int>mp;char str[150];int judge(){ stack<int>p; int L = strlen(str); for(int i = L-1; i >= 0; i--) { if(str[i] == 'K'||str[i] == 'A'||str[i] == 'C'||str[i] == 'E') { int num2 = p.top(); p.pop(); int num1 = p.top(); p.pop(); if(str[i] == 'K') { p.push(num1&&num2); } else if(str[i] == 'A') { p.push(num1||num2); } else if(str[i] == 'C') { if(num1 == 1&&num2 == 0) p.push(0); else p.push(1); } else if(str[i] == 'E') { if((num1 == 0&&num2==0)||(num1==1&&num2==1)) { p.push(1); } else p.push(0); } } else if(str[i] == 'N') { int num = p.top(); p.pop(); p.push(!num); } else { p.push(mp[str[i]]); } } int num = p.top(); while(!p.empty()) p.pop(); return num;}int main(){ int p, q, r, s, t; while(~scanf("%s", str) && str[0]!='0') { int flag = 1; for(p = 0; p < 2; p++) { if(flag == 0) break; mp['p'] = p; for(q = 0; q < 2&&flag; q++) { if(flag == 0) break; mp['q'] = q; for(r = 0; r < 2&&flag; r++) { if(flag == 0) break; mp['r'] = r; for(s = 0; s < 2&&flag; s++) { if(flag == 0) break; mp['s'] = s; for(t = 0; t < 2&&flag; t++) { if(flag == 0) break; mp['t'] = t; if(judge() == 0) flag = 0; } } } } } if(flag == 0) printf("not\n"); else printf("tautology\n"); } return 0;}
- POJ 2049Tautology(模拟)
- POJ 3295-Tautology(模拟-逻辑表达式)
- POJ 3295 Tautology 模拟
- POJ 3295 Tautology(模拟)
- POJ 3295 Tautology (栈模拟)
- POJ3295 Tautology (模拟)
- poj 3295 Tautology (模拟栈操作+状压)
- POJ - 3295 - Tautology (构造)
- poj 3295 Tautology(枚举)
- POJ Tautology
- POJ 3295 Tautology(似乎是模拟?…
- POJ 3295 Tautology 永真式,栈的简单模拟
- POJ 3295 Tautology(构造)(栈)
- Tautology(POJ 3295)(暴力枚举)
- ACM——POJ 3295 (Tautology)
- POJ 3295 Tautology(构造法 stack)
- POJ 3295 Tautology (构造法 栈)
- [ACM] POJ 3295 Tautology (构造)
- RichTextBox复制一段带格式的Excel的文本内容,粘贴后一定长度后没有\t(制表符)的处理方式
- JAVA利用第三方平台发送短信验证码
- 知识点四:JQuery--操作class ==addClass(),removeClass(), toggleClass(),css()
- Android 中查看logcat的另一种方式
- HDU2115-I Love This Game
- POJ 2049Tautology(模拟)
- Choreographer 丢帧计算
- java web中 /代表的目录
- request的getParameter() 和getAttribute()方法的区别
- perl 判断不包含某字符串
- 我的2016---悲喜交加的一年
- tmux配置小谈
- 创建github博客
- JVM 内存 (堆(heap)、栈(stack)和方法区(method) )