POJ-3295-Tautology
2012-10-26 20:22
447 查看
不得不说这道题目有点麻烦。
p,q,r,s,t,是五个二进制数。
K,A,N,C,E,是五个运算符。
K:&&
A:||
N:!
C:(!w)||x
E:w==x
题意是让求如果对于五个数的所有情况一个式子总是恒为1,那么这个式子就是tautology。输出tautology。
否则输出not。
5个数,最多有2^5种情况。
判断式子是不是恒为1,只需要从后往前判断即可。
p,q,r,s,t,是五个二进制数。
K,A,N,C,E,是五个运算符。
K:&&
A:||
N:!
C:(!w)||x
E:w==x
题意是让求如果对于五个数的所有情况一个式子总是恒为1,那么这个式子就是tautology。输出tautology。
否则输出not。
5个数,最多有2^5种情况。
判断式子是不是恒为1,只需要从后往前判断即可。
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; int stack[1000]; char str[1000]; int put() { int pp,qq,rr,ss,tt,n,top,i; for(pp=0;pp<=1;pp++) { for(qq=0;qq<=1;qq++) { for(rr=0;rr<=1;rr++) { for(ss=0;ss<=1;ss++) { for(tt=0;tt<=1;tt++) { top=0; n=strlen(str); for(i=n-1;i>=0;i--) { if(str[i]=='q')stack[top++]=qq; if(str[i]=='p')stack[top++]=pp; if(str[i]=='r')stack[top++]=rr; if(str[i]=='t')stack[top++]=tt; if(str[i]=='s')stack[top++]=ss; if(str[i]=='K')top--,stack[top-1]=(stack[top-1]&&stack[top]); if(str[i]=='A')top--,stack[top-1]=(stack[top-1]||stack[top]); if(str[i]=='N')stack[top-1]=!stack[top-1]; if(str[i]=='C')top--,stack[top-1]=((!stack[top-1])||stack[top]); if(str[i]=='E')top--,stack[top-1]=((stack[top-1])==stack[top]); } if(top!=1||stack[top-1]!=1) return 0; } } } } } return 1; } int main() { while(gets(str)&&str[0]!='0') { if(put()==1)printf("tautology\n"); else printf("not\n"); } return 0; }
相关文章推荐
- 构造 + 离散数学、重言式 - POJ 3295 Tautology
- POJ 3295, Tautology
- poj 3295 Tautology
- POJ 3295 Tautology
- poj 3295 Tautology
- POJ3295 Tautology (模拟)
- POJ 3295 Tautology(构造法 stack)
- poj 3295 Tautology [ 栈 ]
- POJ3295——Tautology
- poj3295——Tautology(构造法)
- poj 3295 Tautology
- poj 3295 Tautology
- Tautology(POJ--3295
- POJ - 3295 - Tautology (构造)
- Tautology(POJ_3295)
- POJ-3295 Tautology 枚举+DFS
- Tautology(POJ 3295编译原理)
- POJ训练计划3295_Tautology(构造/类栈处理)
- POJ 3295 ——Tautology 枚举 构造 位运算可优化
- poj 3295 Tautology